Рассмотрим ситуацию, когда в локальной сети есть один роутер, один сервер на Debian, который должен отвечать на запросы по определенному доменному имени как внутри сети, так и извне, и выполнять роль name-сервера, а также некоторое количество «клиентских» устройств (компьютеры под управлением Windows, планшеты, смартфоны).

Пусть:

IP адрес роутера 192.168.1.1
IP адрес сервера 192.168.1.10
Имя домена localdomain.net

Для решения данной задачи настроим сервер таким образом, чтобы при обращении по доменному имени внутри сети он отвечал по локальному адресу.

Для начала установим необходимые пакеты.

sudo apt-get -y install bind9 dnsutils

Теперь отредактируем файл /etc/bind/named.conf.options

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

Приведём его к следующему виду:

    acl mynetwork {192.168.1.0/24; 127.0.0.1; };
    options {
        directory "/var/cache/bind";
        auth-nxdomain no;
        forwarders {192.168.1.1; 8.8.8.8; };
        listen-on-v6 { none; };
        allow-query { mynetwork; };
    };

Опция acl ограничивает адреса, которые могут запрашивать зоны с нашего сервера. В данном примере это разрешено подсети 192.168.1.0/24.

allow-query { mynetwork; }; — список тех, кто имеет право запрашивать информацию. Можно ограничить с помошью acl либо установить allow-query { any; };

forwarders {192.168.1.1; 8.8.8.8; }; — это DNS провайдера, или любые другие, у которых можно получить информацию о доменахб неизвестных Вашему серверу.

Настройка зон

Отредактируем файл /etc/bind/named.conf.local:

sudo nano /etc/bind/named.conf.local

Добавляем в него файлы наших зон (зону прямого просмотра и зону обратного просмотра):

zone "localdomain.net" {
    type master;
    file "/etc/bind/db.localdomain.net";
};
 
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/1.168.192.in-addr.arpa.zone";
};

Зона прямого просмотра

Создадим файл для зоны прямого просмотра.

sudo nano /etc/bind/db.localdomain.net

Со следующим содержимым:

$TTL 30
$ORIGIN localdomain.net.
 
@ IN SOA localdomain.net. admin.localdomain.net. (
    2015020301 ; Serial
            1d ; Refresh
            1h ; Retry
            1w ; Expire
            2h ; Negative Cache TTL
    )
 
@   IN   NS   localdomain.net.
@   IN   NS   ns.provider.org.
@   IN   A    192.168.1.10

Здесь:

$ORIGIN — оригинальное имя зоны
localdomain.net. — Наш DNS-сервер (точка в конце обязательна ).
admin.localdomain.net. — email администратора сервера, где вместо символа @ используется точка.
Serial — серийный номер зоны в формате ГГГГММДД и номер текущего изменения за этот день. (Важно, при каждом изменении, нужно редактировать этот номер увеличивая его в большую сторону) Пример: 2015020301 .
Refresh — период времени с которым вторичный сервер днс обращается к основному.
Retry — период с которым вторичный сервер будет повторять попытки при неудачном обновлении.
Expire — максимальное время использования данных на вторичном сервере, после которого делается обязательное обновление.
Negative Cache TTL — время актуальности данных в кэше запросов.

Далее идут записи имён хостов с ip-адресами или псевдонимами.
ns.provider.org. — вместо этой записи можете указать NS вашего регистратора либо Free DNS сервиса.

В конце этого файла нужно обязательно оставить пустую строку!

Зона обратного просмотра

Создадим файл для зоны обратного просмотра.

sudo nano /etc/bind/1.168.192.in-addr.arpa.zone

И запишем туда следующее:

1.168.192.in-addr.arpa. 10800 IN SOA localdomain.net. admin.localdomain.net. (
          2015020301 ; Serial
                  1d ; Refresh
                  1h ; Retry
                  1w ; Expire
                  2h ; Negative Cache TTL
          )
 
     NS    localdomain.net.
10   PTR   localdomain.net.

В этом файле должны быть только записи типа PTR. В конце этого файла так же должна быть пустая строка. Число 10 — это последний октет в IP адресе нашего сервера.

Например, можно добавить, допустим, в первый файл такую строку:

router IN A 192.168.1.1

А во второй такую:

1 PTR router.localdomain.net.

Тогда по адресу router.localdomain.net в браузере будет открываться web-интерфейс роутера (эквивалентно 192.168.1.1), но только внутри локальной сети.

Проверка

Проверим файлы зон на наличие ошибок командой:

sudo named-checkconf -z

Если ошибок нет, обновим информацию о зонах:

sudo rndc reload

Теперь необходимо отредактировать resolv.conf:

sudo nano /etc/resolv.conf

Приводим его в следующий вид:

domain localdomain.net 
search localdomain.net 
nameserver 192.168.1.10 
nameserver 192.168.1.1

Проверку можно сделать двумя командами:

nslookup localdomain.net
nslookup 192.168.1.10

Которые должны выдать cледующий результат:

Имя: localdomain.net 
Address: 192.168.1.10

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

    • Если DHCP у вас раздает роутер, не забудьте установить выдаваемые по умолчанию DNS сервера 192.168.1.10 и 192.168.1.1
    • Проверьте корректность работы, введя в консоли Windows-машины
tracert localdomain.net
    • Если маршрут пошел сразу на адрес 192.168.1.10, значит все работает корректно. Если нет, пропробуйте очистить кэш DNS и посторить еще раз:
ipconfig /flushdns
  • Не забудьте пробросить необходимые порты на роутере.

Спасибо antizlo.blogspot.com и rtfm.co.ua

12 комментарий для “Простая настройка DNS сервера BIND9 на Debian”
  1. Добрый день! Сделал все по вашей статье. Но не заработало. У меня Windows машина с двумя виртуальными debian системами на virtualbox. На одной виртуальной системе я сделал web-сервер со страницей с несуществующим доменом. На второй необходимо запустить DNS сервер, который должен разрешать адреса с этим несуществующим доменом внутри локальной сети. DHCP раздает роутер, на нем DNS прописал. По вашей инструкции не получилось выполнить команду tracert nsu(домен именно такой) на windows, хотя почистил кэш. Остальное все правильно настроил, вроде. Команда tracert выполнилась на системе, на которой поднят dns сервер. Вот ответ:
    Server: 192.168.1.183
    Adress: 192.168.1.183#53

    Name: nsu
    Adress: 192.168.1.183

    Возможно нужно пробросить порты правильно, но не знаю как правильно это нужно сделать ведь мне не нужно чтобы этот сервер не был доступен из внешней сети. Подскажите, пожалуйста, что может быть не так.

  2. Огромнейшее спасибо за инструкцию, в которой все расписано для «чайника», а не для спеца, который сто раз это делал. Все пошагово выполнил и без проблем сервак поднялся и заработал. Еще раз спасибо

  3. Добрый день, подскажите пжл как мне настроить работу в связке двух днс. Один установлен на WinSRV2012 на нем же домен, а второй — bind на debian 7 с синхронизацией друг с другом. ДНС на WS2012 — первичный, на debian — вторичный.

    1. Всё зависит от того, что именно вы хотите получить в результате.
      В интернете есть несколько примеров:
      Using Linux BIND DNS Servers for Active Directory Domains
      Integrating Windows 2000 DNS into an existing BIND or Windows NT 4.0-based DNS namespace
      Linux BIND as DNS to Active Directory Domain Controller
      Configuring Berkeley Internet Name Domain (BIND) to Support Active Directory

      1. В итоге я хочу получить DNS сервер на Bind, который будет синхронизировать свои данные с DNS на WS2012, т.е. любые изменения, которые я внесу на сервере DNS WS2012 автоматом обновлялись на сервере c Bind. Такое реально сделать не покупаю дополнительное оборудование?

        1. Если BIND выступает в роли Slave, и DNS на Windows уже настроен, вам может помочь эта статья (хоть и не Debian, на принцип похож): Installation Of BIND As A Secondary (Slave) DNS Server On CentOS. Или эта (та часть, в которой говорится про NS2) How to Setup Master Slave DNS Server on CentOS 6 and RHEL.

          В итоге вам нужно:
          1. Добавить информацию о втором сервере на master сервере (HOW TO: Configure a Secondary Name Server in Windows Server 2003, часть 1 «Identify the Secondary Name Server»)
          2. Настроить BIND сервер как Slave для синхронизации с master.
          3. Обновить настройки DHCP, чтобы клиентские машины получали в качестве ВТЫ оба сервера.
          4. Протестировать работоспособность.

  4. Спасибо! Слава Богу все работает!
    Очень важное предложение в статье «Число 10 — это последний октет в IP адресе нашего сервера.»
    У меня, например, адрес сервера заканчивался на 100 и соответственно последний октет 100. А ни в одной статье (по крайней мере те, которіе я нагуглил) об єтом ни слова — поєтому их примері и не работают.
    Автору Респект!

  5. Да, забыл, IP router 192.168.1.1
    IP server DNS 192.168.10.201
    IP MySQL server 192.168.10.202
    IP Web server 192.168.1.203
    IP mail server 192.168.10.204

    IP адреса 192.168.10.х раздает DHCP virtualbox — создана виртуальная сеть (vboxnet0)

  6. Здравствуйте. Попробовал сделать по этому туториалу. Но нет — не пошло. При обращении к localdomain.net, открывается поисковик с сообщением о поиске этой строки в инете.

    У меня так:
    Железо: ноут DELL проапгрейденный под сервер увеличением памяти и установкой второго винта для райда.
    Параметры: ОЗУ 16Gb, ЦПУ-i5, HDD-1Tb х 2 (gibrid 8Gb-SSD, cash-64)
    Основная система — Убунту 14.04. ЛТС;
    Виртуальные через virtualbox 5.0 : 1-Debian7.2->DNS server; 2-Debian7.2->MySQL server; 3-Debian7.2->WEB server; 4-Debian7.2->MAIL server.
    Имеется 4 домена: domain1.net, domain-022.ru, domain-020.su. localdomain.net. Из них localdomain.net — должен быть локальный, и видеться только внутри локалки.
    По данному мануалу настраивал только локальный домен. И не пошло.
    Ах да, стоит роутер. что нужно прописать в роутере?

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

    В случае, если не хотите оказать информационную помощь, отсылать к манам-жманам и иным фанам не имеет смысла — я тоже умный в другой сфере и могу тоже послать изучать чего-нить там…. ))), Хотя я еще никого не послал изучать ТОЭ (теоретические основы электротехники), чего очень часто любят делать гуру разного уровня подготовки линя.

    1. Уважаемый гость, здесь на вопросы никто не ругается, а стараются по возможности и в меру сил помочь, так что пассаж про ТОЭ был, скажем, лишним. Мне, правда, не до конца понятна архитектура вашей сети. Я так понимаю, физически на одной машине вы держите разных сервера, а DHCP у вас раздает роутер.

      Перво-наперво проверьте, получают ли ваши клиентские машины в качества хотя бы одного из DNS серверов IP 192.168.10.201. Ведь если такого DNS у них не прописано, они не узнают, что localdomain.net есть в этой сети.
      Мой сервер находится по адресу 192.168.1.8, поэтому настройки DHCP на роутере выглядят вот так:

      Также, стоит проверить на той машине, которая не хочет открывать localdomain, результаты команды nslookup, а именно где оно вообще пытается искать. Попробуйте для начала, и, если не получится, пишите, попробую посоветовать что-то еще.

  7. Спасибо за туториал , нашел у вас ошибку :
    в строке
    one «localdomain.net» {
    пропущена буква «z»

    а так все завелось и работает!!! спасибо!

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

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