Вот тут подвернулась задача поднять master-slave DNS сервера. Устанавливать буду старый добрый BIND. Почему? На самом деле с существующаей связкой, собранной в бородатом году из исходников существует проблемы и я решил, что проще перенести существующий (не маленький, кстати, конфиг на вновь поднятый сервер)
Итак, есть два сервера:
ns1.jnotes.ru 192.168.192.1 — master
ns2.jnotes.ru 192.168.192.78 — slave
На обоих установлена и обновлена CentOS 6.
Master DNS
Устанавливаю bind:
# yum install bind bind-utils
Привожу конфиг /etc/named.conf
к следующему виду:
options { // на каких интерфейсах служать запросы listen-on port 53 { 127.0.0.1; 192.168.192.1; }; // на каких интерфейсах слушать ipv6 запросы // listen-on-v6 port 53 { ::1; }; // рабочая директория directory "/var/named"; // где результат rndc dumpdb dump-file "/var/named/data/cache_dump.db"; // где результат rndc stats statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; // откуда разрешены запросы к серверу allow-query { localhost; 192.168.0.0/16; }; // кому разрешен трансфер зон allow-transfer { 192.168.192.78; }; // разрешать ли рекурсивные запросы. Лучше отключать, но в моем они случае нужны. recursion yes; 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"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; // пример зоны zone "extor.local" IN { // тип зоны type master; // где лежит файл описания зоны file "master/extor.local.db"; // кому разрешено обновлять зону. У меня зона не обновляется динамически. allow-update { none; }; // кому разрешено запрашивать зону (дополнительно ограничить глобальный allow-query) allow-query { any; }; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
В /var/named
создаю директорию master. Мне так удобно.
# mkdir /var/named/master && chown named:named /var/named/master
Теперь там создаю файл зоны:
vi /var/named/master/extor.lc.db
Пример:
$TTL 7200 ; (2 hours) @ IN SOA ns1.jnotes.ru. root.jnotes.ru. ( 2014082102 ; serial 7200 ; refresh (2 hours) 1800 ; retry (30 mins) 1209600 ; expire (2 weeks) 3600 ; minimum (1 hour) ) @ IN NS ns1.jnotes.ru. @ IN NS ns2.jnotes.ru. @ IN A 192.168.192.90 ns1 IN A 192.168.192.1 ns2 IN A 192.168.192.78 www IN A 192.168.192.10 test IN A 192.168.192.11
Запускаю сервер:
# chkconfig named on && service named start
Slave DNS
На secondary DNS конфигурационный файл идентичный, за исключением описания зон.
zone "extor.local" IN { type slave; masters { 192.168.192.1; }; file "slaves/extor.local.db"; allow-query { any; }; };
Теперь запускаю slave DNS и проверяю, что зоны удачно передались. (ls /var/named/slaves
).
Если зоны не передались надо смотреть лог, а также проверить firewall
Firewall
В правилах firewall надо разрешить входящие udp запросы на 53 порт и исходящие tcp запросы с 53 порта в сторону серверов, участвующих в трансфере:
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT -A INPUT -s 192.168.192.1/32 -p tcp -m tcp --sport 53 -j ACCEPT
и
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT -A INPUT -s 192.168.192.78/32 -p tcp -m tcp --sport 53 -j ACCEPT