В качестве вторичного использую PowerDNS, мастером использую Bind, хотя подойдет любой другой сервер умеющий DNS NOTIFY при изменении/создании зоны (присматриваюсь к YADIFA, но руки пока не дошли). Именно эту фичу мы и будем использовать чтобы создавать и изменять зоны на вторичном сервере, минус будет только в том при удалении зоны на слейве, ее нужно удалить вручную. В логах удаленные зоны хорошо видны и при необходимости можно навоять скриптик для автоматизации процесса, у меня зоны удаляются довольно редко, поэтому такой необходимости не было.
Наверное если Вы заинтересовались этой статьей, то имеете представление о том, как настроить мастер или при желании самостоятельно найдете материал по настройке. В случаи Bind хочу обратить внимание, что в конфиге обязательная должна быть прописана опция:
notify yes
Итак у нас есть два хоста 10.0.0.1 (ns.server.net) и 10.0.0.2 (ns0.server.net), где ns.server.net основной, а ns0.server.net вторичный.
Опишем их в файле домена server.net:
@ IN NS ns.server.net. @ IN NS ns0.server.net. ns IN A 10.0.0.1 ns0 IN A 10.0.0.2
Приступим к установке и настройки Pdns. На серверах у меня Debian:
apt-get install pdns-backend-sqlite3
Такой вариант автоматом подтянет pdns-server, sqlite3, а так же все что необходимо для запуска PowerDNS сервер с Sqlite v3, который используется хранения днс записей. Sqlite3 выбран так как не требует для себя много внимания, но ничто не мешает Вам выбрать другой вариант.
[skip] creating database pdns.sqlite3: success. verifying database pdns.sqlite3 exists: success. populating database via sql... done. Processing triggers for pdns-server ... [ ok ] Restarting PowerDNS Authoritative Name Server: pdns.
Итак у нас есть установленный PowerDNS сервер с базой Sqlite3 в дистрибутивах отличных от Debian возможно придется вручную настроить базу. К сожалению в пакете ошибка и чтобы сервер увидел базу нужно закомментировать одну строчку.
В файле /etc/powerdns/pdns.d/pdns.simplebind нужно удалить или закомментировать строчку bind-config=/etc/powerdns/bindbackend.conf
Так же в конфиге нужно объявить сервер как вторичный:
/etc/powerdns/pdns.conf
slave=yes
Теперь нам можно прописать Master DNS в Sqlite базу:
cd /var/lib/powerdns sqlite3 pdns.sqlite3 sqlite> INSERT INTO supermasters VALUES('10.0.0.1','ns.server.net','master'); .quit
На этом настройка завершена, но это еще не все, теперь надо загрузить в sqlite базу, есть два способа это сделать.
Самый простой на мой взгляд это обновление Serial на мастере, чтобы он отправил слейву DNS NOTIFY и тем самым оповестил его о наших доменах, заставив его завести и забрать их.
На местере это выглядит так:
master named[12318]: reloading configuration succeeded master named[12318]: reloading zones succeeded master named[12318]: zone server.net/IN: loaded serial 1 master named[12318]: zone server.net/IN: sending notifies (serial 1) master named[12318]: client 10.0.0.2#14310: transfer of 'server.net/IN': AXFR started master named[12318]: client 10.0.0.2#14310: transfer of 'server.net/IN': AXFR ended
На вторичном:
slave pdns[21225]: Received NOTIFY for server.net from 10.0.0.1 for which we are not authoritative slave pdns[21225]: Created new slave zone 'server.net' from supermaster 10.0.0.1, queued axfr slave pdns[21225]: Initiating transfer of 'server.net' from remote '10.0.0.1' slave pdns[21225]: gsqlite3: connection to '/var/lib/powerdns/pdns.sqlite3' successful slave pdns[21225]: 1 slave domain needs checking, 0 queued for AXFR
Альтернативой могу предложить завести домены напрямую в sqlite:
INSERT INTO "domains" VALUES(1,'domain.ru','10.0.0.1',0,'SLAVE',NULL,'master'); INSERT INTO "domains" VALUES(2,'domain.su','10.0.0.1',0,'SLAVE',NULL,'master'); INSERT INTO "domains" VALUES(3,'domain.com','10.0.0.1',0,'SLAVE',NULL,'master');
Где 0 это сериал зоны, на мастере он явно будет больше и поэтому произойдет обновление.
slave pdns[21225]: Received serial number updates for 1 zones, had 0 timeouts slave pdns[21225]: Domain server.net is stale, master serial 3, our serial 0 slave pdns[21225]: Initiating transfer of 'server.net' from remote '10.0.0.1' slave pdns[21225]: AXFR started for 'server.net', transaction started
Надеюсь теперь вопрос автоматического создания доменов на вторичном сервере больше не будет Вас беспокоить.
ссылка на оригинал статьи http://habrahabr.ru/post/201816/
Добавить комментарий