Автоматический вторичный DNS давно уже не проблема

от автора

Посмотрев недавно статью, был сильно удивлен, что кто-то еще задается вопросом автоматического прописывания ДНС доменов на вторичном сервере. Хочу поделится своим вариантом «Automate slave DNS support», которым пользуюсь уже много лет. Возможно он подойдет не всем, но он довольно прост.

В качестве вторичного использую 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *