При использовании в локальной сети организации кеширующего сервера DNS крайне желательно поднять еще (хотя-бы) один, вторичный сервер DNS, на случай выхода первичного сервера из строя. С возможностью автоматического обновления вторичного сервера при изменении Serial Number на первичном сервере.
Пусть адрес вторичного DNS у нас будет 19.168.1.101. Для начала на первичном мастере надо разрешить оповещение вторичного сервера об изменении зоны и саму передачу зоны. Добавим опции also-notify и allow-transfer к определениям прямой и обратной зон в /etc/bind/named.conf.local:
zone "name.loc" { type master; file "/etc/bind/db.example.com"; allow-transfer { 192.168.1.101; }; also-notify { 192.168.1.101; }; };
и перезагрузим bind9 на первичном сервере:
sudo service bind9 restart
На вторичном сервере DNS (в примере — 192.168.101) устанавливаем пакет bind9 с теми-же настройками и так же, как делали на первичном. Затем отредактируем /etc/bind/named.conf.local и добавим следующие определения к зонам:
zone "name.loc" { type slave; file "db.example.com"; masters { 192.168.1.10; }; };
и перезагрузим bind9 на вторичном сервере:
sudo service bind9 restart
Но это еще не все. По умолчанию apparmor защищает от записи директорию /etc/bind и при первом-же обновлении зоны мы получим ошибку типа:
kernel: [16402.979213] type=1400 audit(145675943.803:125): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/named" name named[6448]: dumping master file: /etc/bind/slave/tmp-cGFTY6AdV9: open: permission denied
Это
Это Apparmor защищает каталог /etc/bind/
от записи. Чтобы сам BIND9 мог писать в каталог надо в файле /etc/apparmor.d/usr.sbin.named
немного изменить одну строку:
Находим:
#/etc/bind should be read-only for bind /etc/bind/** r, ...
и правим:
#/etc/bind should be read-only for bind /etc/bind/** rw, ...
При любом изменении зоны на первичном DNS, все изменения автоматически внесутся на вторичный. Нужно только не забывать после каждого изменения увеличивать на первичном сервере DNS Serial Number.