В этом руководстве речь пойдёт об установке и настройке DNS-сервера BIND.
Для выполнения инструкций рекомендуется настроить как минимум два облачных сервера для запуска серверов имен (nameservers); наличие нескольких серверов имён позволяет использовать запасные ресурсы в случае возникновения ошибки. Также можно рассмотреть возможность использования двух разных точек присутствия (POP). Предполагается использование первичного (мастер) и вторичного сервера имен (слейв).
Стоит отметить, что при управлении большим количеством доменов это может оказаться не самым эффективным решением, так как вам придётся вручную добавить домены и на мастер, и на слейв. С учетом сказанного, запуск собственных серверов имен – отличный способ обеспечить прямой контроль над хостинговой инфраструктурой и записями DNS.
Как всегда, для начала важно убедиться, что система находится в актуальном состоянии. Проверьте наличие обновлений с помощью yum:
yum update -y
Установка BIND
Чтобы установить пакеты BIND и bind-utils, используйте yum:
yum install bind bind-utils -y
Затем откройте конфигурационный файл BIND и внесите в него некоторые коррективы.
nano -w /etc/named.conf
В файле найдите раздел options, который выглядит так (вместо 2.2.2.2 – IP-адрес второго сервера):
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; 2.2.2.2; };
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 должна быть закомментирована для прослушивания доступных интерфейсов. Директива recursion должна иметь значение off, чтобы предотвратить reflection DDoS-атаки. Директива allow-transfer добавляет в белый список IP-адрес вторичного сервера. кроме того, нужно изменить значение директивы allow-query на any, чтобы предоставить пользователям доступ к зонам.
Затем нужно добавить новую зону для первого домена. Для этого поместите в конце файла named.conf следующий код:
zone "mydomain.com" IN {
type master;
file "mydomain.com.zone";
allow-update { none; };
};
Сохраните изменения в named.conf. После этого можно приступать к созданию файла описания зоны (zone-файла).
Настройка зон BIND
Для начала нужно открыть zone-файл, указав имя, внесённое в предыдущий конфигурационный файл (mydomain.com.zone).
nano -w /var/named/mydomain.com.zone
Внесите в файл нижеприведённый код. Замените условные IP-адреса адресами ваших серверов (1.1.1.1 – IP-адрес первого сервера, 2.2.2.2 – IP-адрес второго сервера, 3.3.3.3 – IP, на который нужно направить домен (например, веб-сервер)). При необходимости внесите в код другие поправки.
$TTL 86400
@ IN SOA ns1.mydomain.com. root.mydomain.com. (
2013042201 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
; Specify our two nameservers
IN NS ns1.mydomain.com.
IN NS ns2.mydomain.com.
; Resolve nameserver hostnames to IP, replace with your two droplet IP addresses.
ns1 IN A 1.1.1.1
ns2 IN A 2.2.2.2
; Define hostname -> IP pairs which you wish to resolve
@ IN A 3.3.3.3
www IN A 3.3
Запустите named. Запуск может занять несколько минут, поскольку при первом запуске named создаёт файл rndc.key.
service named restart
После успешного запуска демона named нужно убедиться, что он включён как сервис:
chkconfig named on
Теперь первичный сервер имён полностью готов. Чтобы убедиться в том, что BIND работает должным образом, запустите следующую команду, указав IP сервера вместо 1.1.1.1:
dig @1.1.1.1 mydomain.com
Если полученный результат содержит разделы answer и authority, значит, настройка выполнена правильно.
Настройка слейв сервера
Итак, мастер сервер готов к работе. Теперь нужно настроить вторичный сервер имён на втором облачном сервере.
Убедитесь, что система находится в актуальном состоянии.
yum update -y
Установите BIND и его утилиты на второй облачный сервер:
yum install bind bind-utils -y
Откройте named.conf и внесите в него такие же коррективы, как и на первом сервере, пропустив директиву allow transfer – эта директива не нужна, поскольку записи буду передаваться только с первичного сервера имен.
nano -w /etc/named.conf
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; };
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";
};
Добавьте зоны, настроенные на предыдущем сервере, заменив значение директивы type на slave. Укажите IP первого сервера вместо 1.1.1.1:
zone "mydomain.com" IN {
type slave;
masters { 1.1.1.1; };
file "mydomain.com.zone";
};
Настроив зону slave, запустите демон named. Опять же, на это может уйти несколько минут, поскольку при первом запуске на сервере демон создаёт файл rndc.key.
service named start
Как и на первом облачном сервере, проверьте, работает ли демон named:
chkconfig named on
Вторичный сервер имён теперь готов к работе. Чтобы убедиться, что он работает должным образом, используйте следующую команду, заменив 2.2.2.2 IP-адресом второго облачного сервера.
dig @2.2.2.2 mydomain.com
После внесения каких-либо изменений в файлы зоны первичного сервера необходимо перезагрузить BIND. Помните, что вам также нужно увеличить директиву serial, чтобы обеспечить синхронную работу первичного и вторичного сервера.
Чтобы перезапустить файлы зоны, используйте следующую команду сначала на мастере, а потом на слейве:
rndc reload
BIND в окружении chroot
Кроме того, рекомендуется установить дополнительный пакет bind-chroot, который передаёт BIND окружение chroot.
В системе CentOS это очень просто. Нужно только отметить, что активные пути BIND будут заменены на chroot-эквиваленты (к примеру, var/named станет /var/named/chroot/var/named). В CentOS 6 не нужно перемещать никаких файлов, поскольку пакет самостоятельно создаст символьные ссылки на не-chroot каталоги.
Чтобы включить эту функцию, используйте:
yum install bind-chroot -y
service named restart