Синхронизация DNS-зон c сервера с Plesk-панелью

Задача может возникнуть когда на сервере с Plesk-панелью имеется всего один IP-адрес. В данном случае, что-бы не заводить slave-зоны на другом сервере каждый раз вручную, можно в крон поставить скрипт, который и будет производить синхронизацию зон. Причем, не только добавлять новые зоны, но и удалять старые, а также не только основные домены,но и алиасы к ним.

Для начала нам понадобиться создать юзера в mysql на сервере с Plesk-панелью, и дать ему права на чтение из нужных таблиц.

grant select on psa.domains to dsnuser@'%' identified by 'You_paSSword';
grant select on psa.domainaliases to dsnuser@'%' identified by 'You_paSSword';

Можете вместо % использовать конкретный хост, так безопаснее, и так же не забудьте открыть для этого хоста mysql-порт(3306) на файрволе.
Все остальные действия проводятся уже на сервере где должны быть slave-зоны.
Далее создадим следующий скрипт, назовем его dnssync:


#!/bin/bash

if [ -f /tmp/plesk-domains.txt ];then
/bin/mv -f /tmp/plesk-domains.txt /tmp/plesk-domains.txt.old
fi

/usr/bin/mysql -h plesk.server.name -u dssuser --password="You_paSSword" -Bse "SELECT name from domains where status=0 UNION SELECT name from domainaliases where status=0 " psa >/tmp/plesk-domains.txt
OUT1=$?

if [ $OUT1 -eq 0 ];then

/usr/bin/diff -q /tmp/plesk-domains.txt /tmp/plesk-domains.txt.old > /dev/null
OUT2=$?
if [ $OUT2 -ne 0 ];then
echo "" >/var/named/chroot/etc/plesk-zones.conf
while read line
do
domain=$line
echo "zone \"$domain\" { type slave; masters {ip_of_plesk_server;}; file \"/var/named/slaves/$domain.hosts\"; };" >>/var/named/chroot/etc/plesk-zones.conf
done < "/tmp/plesk-domains.txt"

echo "" >>/var/named/chroot/etc/plesk-zones.conf
/etc/init.d/named restart > /dev/null

fi
else
if [ -f /tmp/plesk-domains.txt.old ];then
/bin/mv -f /tmp/plesk-domains.txt.old /tmp/plesk-domains.txt
fi
fi


Обратите внимание на пути, в данном примере bind запущен в chroot окружении, на CentOS 5.5. У Вас пути могут отличатся, и Вам необходимо исправить их на свои. Также замените ip_of_plesk_server и plesk.server.name на IP сервера с Plesk-панелью.

Осталось добавить в named.conf

include "/etc/plesk-zones.conf";

дать права на выполнение файлу dnssync,и поставить задание в cron, например, делать проверку каждый час:

0 * * * * /path_to_script/dnssync

запускаем один раз /path_to_script/dnssync
рестартуем bind
И все работает на ура.
Больше лишних телодвижений не потребуется.
Я всегда задумываюсь: все-таки именно лень заставляет нас что-то сделать, чтоб потом ничего не делать.

Удачи в настройках.
© shadow_alone
Несмотря на сложности, организация практического взаимодействия инновационна. Организация практического взаимодействия спорадически детерминирует направленный маркетинг, работая над проектом. Продуктовый ассортимент, анализируя результаты рекламной кампании, основан на тщательном анализе. Побочный PR-эффект, как принято считать, притягивает департамент маркетинга и продаж, повышая конкуренцию. Стимулирование сбыта индуцирует медиаплан, осознав маркетинг как часть производства. Привлечение аудитории, не меняя концепции, изложенной выше, изменяет инвестиционный продукт, оптимизируя бюджеты.
Dodex 2012 - 2020
Электронная почта: contact@dodex.org
Skype: dodexorg
Twitter: @dodexorg