Синхронизация DNS-зон c сервера с Plesk-панелью
Задача может возникнуть когда на сервере с Plesk-панелью имеется всего один IP-адрес. В данном случае, что-бы не заводить slave-зоны на другом сервере каждый раз вручную, можно в крон поставить скрипт, который и будет производить синхронизацию зон. Причем, не только добавлять новые зоны, но и удалять старые, а также не только основные домены,но и алиасы к ним.
Для начала нам понадобиться создать юзера в mysql на сервере с Plesk-панелью, и дать ему права на чтение из нужных таблиц.
grant select on psa.domains to dnsuser@'%' identified by 'You_paSSword';
grant select on psa.domainaliases to dnsuser@'%' identified by 'You_paSSword';
Можете вместо % использовать конкретный хост, так безопаснее, и так же не забудьте открыть для этого хоста mysql-порт(3306) на файрволе.
Все остальные действия проводятся уже на сервере где должны быть slave-зоны.
Далее создадим следующий скрипт, назовем его dnssync:
#!/bin/bash dbuser="dnsuser" dbpass="You_paSSword" tmpfn="/tmp/plesk-domains.txt" zonefn="/var/named/chroot/etc/plesk-zones.conf" hostip="10.11.12.13" # IP машины с Plesk-ом if [ -f $tmpfn ];then /bin/mv -f $tmpfn $tmpfn.old fi /usr/bin/mysql -h $hostip -u $dbuser --password="$dbpass" -Bse \ "SELECT name from domains where status=0 UNION SELECT name from domainaliases where status=0 " \ psa >$tmpfn OUT1=$? if [ $OUT1 -eq 0 ];then /usr/bin/diff -q $tmpfn $tmpfn.old > /dev/null OUT2=$? if [ $OUT2 -ne 0 ];then echo "" >$zonefn while read line do domain=$line echo "zone \"$domain\" { type slave; masters {$hostip;}; file \ \"/var/named/slaves/$domain.hosts\"; };" >>$zonefn done < "$tmpfn" echo "" >>$zonefn /etc/init.d/named restart > /dev/null fi else if [ -f $tmpfn.old ];then /bin/mv -f $tmpfn.old $tmpfn fi fi
Обратите внимание на пути, в данном примере bind запущен в chroot окружении, на CentOS 5.5. У Вас пути могут отличатся, и Вам необходимо исправить их на свои.
Осталось добавить в named.conf
include "/etc/plesk-zones.conf";
дать права на выполнение файлу dnssync,и поставить задание в cron, например, делать проверку каждый час:
0 * * * * /path_to_script/dnssync
запускаем один раз /path_to_script/dnssync
рестартуем bind
И все работает на ура.
Больше лишних телодвижений не потребуется.
Я всегда задумываюсь: все-таки именно лень заставляет нас что-то сделать, чтоб потом ничего не делать.
Удачи в настройках.
© shadow_alone