Настройка DNS сервера bind9 и создание локальной зоны .lan

Когда сервер обслуживает локальную сеть офиса/предприятия, то сотрудникам в первую очередь нужен интернет и во вторую очередь удобство использования локальных ресурсов. Согласитесь, не очень удобно набирать в своем браузере http://192.168.1.1 для того, чтобы зайти на сервер, намного удобнее будет, если пользователь будет набирать http://server.lan или что-то подобное. При этом, он не привязан к ip адресу сервера и локальные ресурсы можно переносить с одного сервера на другой, не объясняя сотрудникам, что какой-то внутренний сайт был перенесен и им теперь нужно вводить в браузер другой ip адрес сервера. Да и пинговать сервер от клиентов куда удобнее как ping server.lan.

Итак имеем:
Сервер с адресом 192.168.1.1
Необходимо:
1. Поднять DNS, чтоб пользователи могли пользоваться нашим DNS сервером и не были привязана к DNS провайдера
2. Создать домен первого уровня *.lan, где хосты будут иметь адреса mysite.lan, mysite2.lan и т.д.

Для начала, устанавливаем сам сервер DNS

sudo apt-get install bind9

Затем, скопируем файл настроек по умолчанию для создания его резервной копии и отредактируем рабочий файл

sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.original
sudo nano /etc/bind/named.conf.options

Внесем необходимые изменения (синим выделены основные изменения)

#Создадим сеть, которой будет разрешено посылать запросы через наш DNS сервер
acl "mynetwork" {
                            192.168.1.0/24;
                            127.0.0.1;}
                            ;
 options { #рабочая директория directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder.  #можно указать ip адреса DNS провайдера #forward first; #forwarders { # 1.1.1.1; # 2.2.2.2; #}; #можно явно указать на каком интерфейсе обслуживать DNS запросы listen-on port 53 { 127.0.0.0; 192.168.1.1; }; auth-nxdomain no; # conform to RFC1035 #отключаем использование ipv6 за ненадобностью listen-on-v6 { none; };  #разрешаем отправлять запросы только с сети mynetwork allow-query {"mynetwork";}; #разрешаем отправлять рекурсивные запросы с сети mynetwork я отключаю #recursion yes; #allow-recursion { mynetwork; }; #можно задать максимальное число соединений с сервером #tcp-clients 32; #можно указать название версии DNS сервера, чтоб ввести в заблуждение #любого, кто попытается узнать на каком пакете основан наш DNS сервер #version "DNS serer v.1.0"; };

С настройками сервера закончили. DNS сервер можно уже смело запускать т.к. он полностью рабочий, но если хочется создать локальную зону, то для этого отредактируем следующий файл, предварительно сохранив его копию (синим выделены изменения)

sudo cp /etc/bind/named.conf.default-zones /etc/bind/named.conf.default-zones.original sudo nano /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "lan" { type master; file "/etc/bind/db.lan"; }; zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.lan.rev"; };

После создаем файлы db.lan и db.lan.rev, которые мы указали для создания нашей зоны

sudo touch /etc/bind/db.lan sudo touch /etc/bind/db.lan.rev

Отредактируем файл db.lan

sudo nano /etc/bind/db.lan
; ; BIND data file for broadcast zone ; $TTL 604800 @ IN SOA lan. root.lan. (                  1 ; Serial                   604800 ; Refresh                   86400 ; Retry                   2419200 ; Expire                   604800 ) ; Negative Cache TTL ; @ IN NS ns.lan. ns A 127.0.0.1 server A 192.168.1.1

Теперь отредактируем файл db.lan.rev

sudo nano /etc/bind/db.lan.rev
; ; BIND reverse data file for broadcast zone ; $TTL 604800 @ IN SOA lan. root.lan. ( 1 ; Serial  604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 1 PTR server.lan.

Последний штрих

sudo nano /etc/resolv.conf
search lan nameserver 127.0.0.1 #если не указывали в поле forward в файле #/etc/bind/named.conf.options #DNS адреса своего провайдера, то тогда необходимо указать его #здесь nameserver 1.1.1.1  

Теперь можно перезапустить службу DNS

sudo service bind9 restart

Проверяем

host server

Видим

server.lan has address 192.168.1.1

И последняя проверка

host 192.168.1.1

Видим

1.1.168.192.in-addr.arpa domain name pointer server.lan.1.1.168.192.in-addr.arpa.

Если вы увидели эти же сообщения, то все прошло успешно.

Если у вас уже установлен сервер DHCP, то тогда в его файле настроек /etc/dhcp3/dhcpd.conf необходимо добавить следующую строку

option domain-name-servers 192.168.1.1;

Если нет, то пропишем у каждого клиента наш DNS сервер 192.168.1.1.

Я, все-таки, порекомендовал бы вам поставить DHCP сервер, чтоб не делать изменения по всем вашим пользователям.

И не забываем включить форвардинг между сетевыми картам в файле /etc/sysctl.conf. А именно net.ipv4.ip_forward=1

Теперь мы можем создавать виртуальные хосты для наших серверов, но об этом позднее…

Запись опубликована в рубрике DHCP, DNS, VirtualHost, Сервер. Добавьте в закладки постоянную ссылку.

34 комментария: Настройка DNS сервера bind9 и создание локальной зоны .lan

  1. valeriy говорит:

    Большое спасибо. По моему мнению, самое лучшее описание настройки DNS-сервера.

    • Wladi говорит:

      спасибо, приятно слышать!

      • Hale говорит:

        Смеетесь? Вообще нечитабельно.
        Понятно только гуру, кто уже десяток серверов настроил.

        Для начала не видно текста конфигов, и тем более «выделено синим». Все листинги свернуты в одну строчку.
        Перед заливкой в интернеты неплохо бы научиться править линуксовую строку, чтобы и другие люди могли читать.

        • Hale говорит:

          З.Ы.
          Может кто-то объяснит что значит
          @ IN NS ns.lan. ns A 127.0.0.1 server A 192.168.1.1

          Уж не забили ли @ IN A дописать…

          По моему Webmin таким конфигом подавится и умрет. Неужели нельзя было в общепринятом виде написать и без отвлечений «не в ту степь»:
          net.ipv4.ip_forward=1
          ВОТ ЭТО НАФИГА в статье про DNS?

          • Hale говорит:

            ОЁЁЁЁЁ.
            А вот это нахрена?
            «ns A 127.0.0.1»
            Чтобы Windows клиент при обращении к ns.lan лез на СВОЙ localhost?

            Ну хоть какие-то комментарии к этому месиву бы можно было написать?

  2. Roman говорит:

    Доброе время суток , не подскажите в чем может быть проблема
    host server1
    ;; connection timed out; no servers could be reached

  3. wizard говорит:

    1. Для начала нужно убедится что bind9 действительно завёлся…. проверить можно командой
    ps xauf|grep named

    2. Если запущен, и работает….то попробовать спросить у сервака знает ли он про яндекс..
    nslookup ya.ru 127.0.0.1

    3.Если ответил что то типа …

    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Non-authoritative answer:
    Name: ya.ru
    Address: 87.250.251.3
    Name: ya.ru
    Address: 93.158.134.3
    Name: ya.ru
    Address: 213.180.204.3
    Name: ya.ru
    Address: 77.88.21.3
    Name: ya.ru
    Address: 87.250.250.3

    то смотрим файл /etc/resolv.conf на предмет того какой ДНС сервер мы используем, можно прописать nameserver 127.0.0.1

  4. Roman говорит:

    ps xauf|grep named
    root 1536 0.0 0.1 3324 724 pts/0 D+ 11:08 0:00 \_ grep named
    bind 1526 1.0 1.4 41008 7588 ? Ssl 11:08 0:00 /usr/sbin/named -u bind
    nslookup ya.ru 127.0.0.1
    ;; connection timed out; no servers could be reached
    cat /etc/resolv.conf
    search lan
    nameserver 127.0.0.1

  5. wizard говорит:


    #можно явно указать на каком интерфейсе обслуживать DNS запросы
    listen-on port 53 {
    127.0.0.0;
    192.168.1.1;
    };

    192.168.1.1; — заменить на свой ИП… воообще давайте конфиги, бум смотреть )

  6. Roman говорит:

    cat /etc/bind/named.conf.options
    acl «mynetwork» {192.168.30.0/24; 127.0.0.1;};

    options {
    #рабочая директория
    directory «/var/cache/bind»;
    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk. See http://www.kb.cert.org/vuls/id/800113
    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0’s placeholder.

    #можно указать ip адреса DNS провайдера
    #forward first;
    forwarders {
    192.168.30.1;
    };

    #можно явно указать на каком интерфейсе обслуживать DNS запросы
    listen-on port 53 {
    127.0.0.0;
    192.168.30.31;
    };

    auth-nxdomain no; # conform to RFC1035

    #отключаем использование ipv6 за ненадобностью
    listen-on-v6 { none; };

    #разрешаем отправлять запросы только с сети mynetwork
    allow-query {«mynetwork»;};

    #разрешаем отправлять рекурсивные запросы с сети mynetwork я отключаю
    #recursion yes;
    #allow-recursion { mynetwork; };

    #можно задать максимальное число соединений с сервером
    tcp-clients 32;

    #version «DNS serer v.1.0»;
    };

  7. wizard говорит:

    а что в /var/log/syslog при запуске/перезапуске ?
    192.168.30.1 — ДНС провайдера?



    listen-on port 53 {
    127.0.0.0;
    192.168.30.31;
    };

    — это попробуйте закоментировать..

  8. wizard говорит:


    iptables нечего не запрещали?

  9. Roman говорит:

    Спасибо вам большое !!! закоментил все заработало. Спасибо еще раз за доступно написаную статью и за помощь .

  10. Roman говорит:

    У меня еще вопрос( Все клиенты сервака в нет и локальные имена видят, а сервак нет.
    ping: unknown host ya.ru
    ping: unknown host ya.ru

  11. wizard говорит:

    Что в /etc/resolv.conf ?

  12. Waingnila говорит:

    Большое спасибо. Было интересно прочитать

  13. Zhmak говорит:

    Большое спасибо! Завелось с пол пинка!

  14. Андрей говорит:

    А у меня завелось только после удаления
    acl «mynetwork» {192.168.30.0/24; 127.0.0.1;};
    и
    allow-query {«mynetwork»;};
    В логах была ошибка
    /etc/bind/named.conf.options:12: unknown option ‘acl’

    Кто-нибудь знает, почему?

  15. wizard говорит:

    Bind собран без поддержки ACLов… откуда ставили? с репозитария или самосборный?

  16. Sergey говорит:

    Здравствуйте!
    Все сделал по вашей инструкции.
    После всех манипуляций и рестарта сервиса в логе ошибок нет — все удачно запущено. Но при попытке :

    root@ubunru:/home/administrator# host ubuntu
    Host ubuntu not found: 3(NXDOMAIN)

    • Sergey говорит:

      Кстати, версия UBUNTU SERVER 10-04.2 со всеми обновлениями.
      eth0 смотрит в интернет
      eth1 смотрит в локалку

  17. wizard говорит:

    :) т.к. мыслечет на расстоянии в отпуске. показывайте свой конфиг… а
    host ubuntu.lan тоже самое?

  18. Олег говорит:

    Здраствуйте! Провел все настройки по выше изложенному тексту, запустился bind но при попытке:
    root@ubunru:/home/administrator# host server
    Host server not found: 3(NXDOMAIN)

    Конфиг:
    acl «mynetwork» {192.168.2.0/24; 127.0.0.1;};

    options {
    directory «/var/cache/bind»;
    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk. See http://www.kb.cert.org/vuls/id/800113
    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0’s placeholder.

    forwarders {
    192.168.1.1;
    };

    listen-on port 53 {
    127.0.0.0;
    192.168.2.1;
    };

    auth-nxdomain no; # conform to RFC1035
    listen-on-v6 { none; };

    allow-query {«mynetwork»;};
    };

    sudo nano /etc/bind/named.conf.default-zones

    zone «lan» {
    type master;
    file «/etc/bind/db.lan»;
    };

    zone «2.168.192.in-addr.arpa» {
    type master;
    file «/etc/bind/db.lan.rev»;
    };

    sudo nano /etc/bind/db.lan ;
    ; BIND data file for broadcast zone
    ;
    $TTL 604800
    @ IN SOA lan. root.lan. (
    1 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    ;
    @ IN NS ns.lan.
    ns A 127.0.0.1
    server A 192.168.2.1

    sudo nano /etc/bind/db.lan.rev ;
    ; BIND reverse data file for broadcast zone
    ;
    $TTL 604800
    @ IN SOA lan. root.lan. (
    1 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    ;
    @ IN NS localhost.
    1 PTR server.lan

    И еще лог ругается zone на «2.168.192.in-addr.arpa»

  19. Олег говорит:

    nslookup ya.ru 127.0.0.1

    3.Если ответил что то типа …

    Server: 192.168.1.1
    Address: 192.168.1.1#53

    Non-authoritative answer:
    Name: ya.ru
    Address: 87.250.251.3
    Name: ya.ru
    Address: 93.158.134.3
    Name: ya.ru
    Address: 213.180.204.3
    Name: ya.ru
    Address: 77.88.21.3
    Name: ya.ru
    Address: 87.250.250.3

    файл /etc/resolv.conf :
    nameserver 192.168.1.1

  20. optik говорит:

    root@debian:~# host server
    server.lan has address 192.168.1.100
    так работает, а так
    root@debian:~# host 192.168.1.100
    Host 100.1.168.192.in-addr.arpa. not found: 3(NXDOMAIN)
    не очень. Что может быть?

    root@debian:~# nslookup ya.ru 127.0.0.1
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Non-authoritative answer:
    Name: ya.ru
    Address: 213.180.204.3

  21. Олег говорит:

    Проблема:
    /etc/bind/db.lan.rev:10: near eol: unexpected end of input
    06-Aug-2011 22:58:15.747 general: info: received control channel command ‘stop -p’
    06-Aug-2011 22:58:15.748 general: info: shutting down: flushing changes
    06-Aug-2011 22:58:15.748 general: notice: stopping command channel on 127.0.0.1#953
    06-Aug-2011 22:58:15.748 general: notice: stopping command channel on ::1#953
    06-Aug-2011 22:58:15.748 network: info: no longer listening on 192.168.2.1#53
    06-Aug-2011 22:58:15.755 general: notice: exiting
    06-Aug-2011 22:58:16.927 general: info: zone 0.in-addr.arpa/IN: loaded serial 1
    06-Aug-2011 22:58:16.927 general: info: zone 127.in-addr.arpa/IN: loaded serial 1
    06-Aug-2011 22:58:16.928 general: error: dns_rdata_fromtext: /etc/bind/db.lan.rev:10: near eol: unexpected end of input
    06-Aug-2011 22:58:16.928 general: error: zone 2.168.192.in-addr.arpa/IN: loading from master file /etc/bind/db.lan.rev failed: unexpected end of input
    06-Aug-2011 22:58:16.928 general: info: zone 255.in-addr.arpa/IN: loaded serial 1
    06-Aug-2011 22:58:16.929 general: info: zone lan/IN: loaded serial 1
    06-Aug-2011 22:58:16.929 general: info: zone localhost/IN: loaded serial 2
    06-Aug-2011 22:58:16.930 general: notice: running
    06-Aug-2011 22:58:16.937 notify: info: zone lan/IN: sending notifies (serial 1)

    выше писал свои конфиги

  22. wizard говорит:

    В файле /etc/bind/db.lan.rev что то меняли? Он точно такой как выкладывали выше…?

  23. Napych говорит:

    В PTR-зонах нужно указывать имена хостов с точкой. Например:
    1 PTR server.lan.

    Тогда IP будет резолвиться в server.lan., а не в server.lan.1.1.168.192.in-addr.arpa.

  24. sotariz говорит:

    Здравствуйте!
    сделал все по вашей статье и при перезапуске bind9 в syslog вываливаются ошибки:
    ubuntu-server named[3079]: dns_rdata_fromtext: /etc/bind/db.lan.rev:10: near '@': extra input text
    ubuntu-server named[3079]: zone 10.in-addr.arpa/IN: loading from master file /etc/bind/db.lan.rev failed: extra input text
    ubuntu-server named[3079]: zone 10.in-addr.arpa/IN: not loaded due to errors.
    ubuntu-server named[3079]: zone 127.in-addr.arpa/IN: loaded serial 1
    ubuntu-server named[3079]: zone 255.in-addr.arpa/IN: loaded serial 1
    ubuntu-server named[3079]: dns_rdata_fromtext: /etc/bind/db.lan:10: near '@': extra input text
    ubuntu-server named[3079]: zone lan/IN: loading from master file /etc/bind/db.lan failed: extra input text
    ubuntu-server named[3079]: zone lan/IN: not loaded due to errors.

    • Wladi говорит:

      Если все сделали как в статье, то могу предположить, что не правильно отформатировали текст в db.lan.
      bind при загрузке зон очень трепетно относится к форматированию, поэтому вам стоит проверить это в первую очередь. т.к. пробел и табуляция для него разные вещи.

  25. lacostewin говорит:

    Всем привет!

    Есть проблемы с настройкой Bind9.
    Есть 2 DNS сервера в локальной сети (один на Ubuntu, др. на Win2008), со своими зонами. Оба DNS знают только о своих зонах. Есть так же компы у которых прописаны свои DNS.

    Задача:
    Заставить Bind опрашивать DNS на Win2008 при отсутствии записи у себя.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *