Установка BIND9 DNS на CentOS

За все время работы не сталкивался с установкой DNS на сервер, а тут пришлось устанавливать Slave DNS на новом сервере клиента. Думаю, что порядок действий будет полезен, как админам так и web-разработчикам.

Установка Master DNS


Заходим на сервер (для примера Master DNS будет ставиться на сервер с IP 10.10.10.10, Slave DNS — IP 20.20.20.20)
В начале проверим что система имеет все последние обновления.

yum update -y

Если не указать "-y" ключ, то придется отвечать на все вопросы установщика, а с ним все ответы ставятся автоматически по умолчанию.

Установить bind и bind-utils.

yum install bind bind-utils -y

На примере моего домена «sibway.pro», для своего поменяйте все вхождения в примерах. Будем считать что master имеет IP 10.10.10.10, slave 20.20.20.20. Master и slave насколько я понимаю деление условное, так как и тот и другой сервер будет выполнять одни и те же функции, различие только в том что slave берет все данные с мастера.

Теперь отредактируем конфигурационный файл любым текстовым редактором, я использую vi так как он есть всегда в любой системе.

vi /etc/named.conf

При установке bind, файл конфигурации ставится автоматически и нам надо только его отредактировать.

options {
	#listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory	"/var/named";
        dump-file	"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query { any; };
        allow-transfer     { localhost; 20.20.20.20; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

#listen-on port 53 { 127.0.0.1; };

Комментируем строку, чтобы сервер мог слушать эфир со всех адресов и портов (наверное можно указать просто IP 10.10.10.10, но руки не дошли поэкспериментировать. Извне все равно все закрывает firewall).

allow-query { any; };

Позволяем запрашивать сервер с любого адреса.

allow-transfer     { localhost; 20.20.20.20; };

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

  zone "sibway.pro" IN {
                type master;
                file "sibway.pro.zone";
                allow-update { none; };
        };

Конфигурирование доменных зон


В файле конфигурации мы указали файл sibway.pro.zone как файл конфигурации доменой зоны sibway.pro.
Проще всего взять какой-либо существующий и отредактировать до нужной конфигурации. Файлы можно разместить в поддиректории.

vi /var/named/sibway.pro.zone

Вот простой пример того что необходимо прописать в доменной зоне.

$TTL 86400
@   IN  SOA     ns1.sibway.pro. root.sibway.pro. (
        2014120801  ;Serial ВАЖНО !!! серийный номер должен меняться в большую строну при каждом изменении, иначе slave сервера не обновят данные
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
; Указываем два name сервера
		IN	NS		ns1.sibway.pro.
		IN	NS		ns2.sibway.pro.
; Определяем IP адреса name серверов
ns1		IN	A		10.10.10.10
ns2		IN	A		20.20.20.20

; Define hostname -> IP нашего сервера для этого домена
@		IN	A		213.133.100.77
www		IN	A		213.133.100.77

Делаем рестар name сервера

service named restart

Определяем чтобы name сервер стартовал при загрузки системы.

chkconfig named on

Теперь проверим как работает наш name сервер.

dig @10.10.10.10 sibway.pro

В ответе должен быть указан правильный IP запрошенного домена. Теперь сконфигурируем slave сервер.

Конфигурация slave name сервера


Конфигурирование slave name сервера проходит так же как и master за исключением двух моментов:

  1. При редактировании файла конфигурации named.conf надо указать какие доменные зоны slave
  2. Не надо добавлять доменные зоны, так как они обновятся с master сервера автоматически

В конфигурационном файле необходимо указать type slave и указать IP мастер сервера.

zone "sibway.pro" IN {
	type slave;
	masters { 10.10.10.10; };
	file "sibway.pro.zone";
};

Не забываем стартовать сервер и включить его в автоматический старт при запуске системы.

service named start
chkconfig named on

Теперь у нас есть два сконфигуренных name сервера.
Осталось открыть порт в firewall
Отредактируем файл /etc/sysconfig/iptables:

# vi /etc/sysconfig/iptables

Добавим следующие правила для 53 порта.

-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

Обновляем iptable

# /etc/init.d/iptables restart

Не забудьте обновить этот файл на обоих серверах.
Теперь у нас есть два работающих name сервера.
Share post

Similar posts

Comments 21

    +3
    Да особо-то ничего нового. Показали бы еще, как настраиваются различные вьюхи, географические ACL, системы распределенных серверов, ipv6. А так еще одна заметка для себя о том, какие строки надо вбить в конфиг очередного сервиса.
      0
      Нет ничего нового, все есть man.
      +2
      Раз уж статья для новичков, то имело бы смысл расписать поля Refresh, TTL. Также был бы интересен краткий курс по записям в NS: зачем для почты нужны txt записи, к примеру и т.д.
      Можно пойти еще дальше: ведение зоны не через файлы, а через СУБД, что позволяет редактировать NS-ресурсы значительно эффективнее.
      В современных реалиях не помешало бы еще описание защиты от DNS-Amplf и т.д.

        0
        events.yandex.ru/lib/talks/2326/ кидайте в новичков этой ссылкой.
          0
          Целью статьи не было описать все конфигурационные файлы которые применяются, а именно запуск named сервиса. Будет время опишу все ключики к конфигурационному файлу, если такой статьи здесь еще нет.
            0
            Ну а цель моего комментария состояла не в просьбе описать все директивы конфигурационного файла.
          +1
          2014-й год на дворе, декабрь месяц. Пора привыкать к

          systemctl enable named.service
          systemctl start  named.service
          

          вместо
          chkconfig named on
          service named start
          
          • UFO just landed and posted this here
              0
              Через init.d не очень можно, ибо в последнем центосе для сервисов типа bind в пакете уже нет init-скриптов.
              Так что оно по-любому будет через systemd. А вот старые команды (chkconfig и service) работать будут, но исключительно как обертка для вызова systemctl
              0
              первое правило программиста «работает? ничего не трогай!»
              в чем разница этих команд? если результат и там и там будет одинаковый?
              0
              Для авторитарного сервера я бы всё же выбрал NSD, а только для только рекурсивного сервера для внутренней сети — Unbound. Bind же представляется оптимальным выбором, если есть необходимость поднимать гибридный сервер — авторитарный + рекурсивный. Но это сугубо личное мнение.

              По статье: стоит добавить RRL в конфигурацию. Но для этого будет недостаточно поставить Bind из репозитория, ибо в base он обновлялся очень давно. Я собирал RPM версии 9.10.1, полёт нормальный. Боты очень любят долбить DNS паразитными запросами, RRL поможет хоть немного сгладить эти пики.
              • UFO just landed and posted this here
                  0
                  1. исключить 192.168.0.0/8 — это сильная заявка.
                  2. Почему исключен только 172.16.0.0/16 тоже не совсем ясно
                  3. А кто такой 180.0.0.0/4? Он вообще должен быть тогда уж 176.0.0.0/4, но за что его банить все равно не ясно.
                  4. А почему это одного UDP хватает? Вообще по умолчанию slave забирает зону с мастера по TCP, eсли мне склероз не изменяет.
                  • UFO just landed and posted this here
                  0
                  Спасибо за комментарий, учтем и исправимся.
                  Два момента:
                  1. chroot насколько я понимаю очень важно, но вот что такое и с чем его едят мне пока непонятно.
                  2. собственно описывал то что менял в стандартном файле, по другим ключам вы скорее всего правы, так как опыта у меня в этом деле совсем никакого. Будем читать и разбирать что за ключи и с чем их едят. Опишу как разберусь.
                  • UFO just landed and posted this here
                    0
                    Господи, сколько возни то.
                    PS, я уже лет 5+ bind в продакшене не вижу, хотя с телекомами, хостерами активно работаю. PowerDNS, NSD, да, активно пользуются. PowerDNS' ом я очень доволен, особенно в варианте пачки NS серверов с сотнями тысяч зон.
                      0
                      PowerDNS посмотрел, да отличная штука. Но использовать его при поддержке пары доменов клиента смысла особого нет, по крайней мере я не вижу выгоды. С NSD вообще на первый взгляд «те же яйца вид сбоку» как и bind, последний по универсальности выигрывает. Установка не сильно отличается от того что описано мной. Как всегда, истина где то в деталях, и в том что где будет использовано.
                        0
                        Ну если пару доменов, тогда вообще зачем его городить?
                        Провайдерские DNS всяко стабильнее будут.
                        Хотя вариантов масса, да.
                      0
                      интересно кто кого сплагиатил

                      английская версия
                        0
                        о прикольно, в английской версии есть yum install bind-chroot -y типа надо делать
                        и rndc reload смысл которого мне не понятен сейчас

                      Only users with full accounts can post comments. Log in, please.