Вот тут подвернулась задача поднять 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