В интернете много различных статей о том, как настроить bind9 или любой другой DNS сервер, но не так уж много статей о том, как автоматизировать обмен изменениями между несколькими DNS серверами. В этой статье я и хотел бы разобрать данный вопрос.
Основная цель: добиться автоматизации распространения обновленных данных на несколько DNS серверов: добавление, редактирование, удаление доменных зон.
Про то, как устанавливать bind, думаю, говорить не стоит. Перейдем непосредственно к автоматизации обмена между главным (master) и вторичным (slave) сервером. Все телодвижения будут выполняться на платформе Debian 6 с Bind9 и Rsync на борту.
Настройка bind на главном сервере.
1. Создаем директорию для размещения файлов доменов:
mkdir /etc/bind/zones
2. Создаем конфигурационный файл для всех зон в только что созданной директории
touch named.conf.zones
3. Подключаем конфигурационный файл в основной
Открываем на редактирование конфиг named.conf
nano named.conf
Вставляем в конец:
include "/etc/bind/zones/named.conf.zones";
Настройка доменных зон на главном сервере
Для заполнения named.conf.zones впоследствии используем шаблон для каждой из зон
zone "example.org" {
type master;
file "/etc/bind/zones/example.org.zone";
};
В соответствии с этим шаблоном файл зоны будет располагаться в директории “/etc/bind/zones/” и называться example.org.zone
Структуру файла зоны для bind можно найти в интернете или же в самом дистрибутиве.
Настройка вторичного сервера имен DNS.
Делаем точно такие же настройки как и на master сервере.
Синхронизация master и slave серверов в автоматическом режиме.
Создадим SH скрипт, назовем его, к примеру, get-dns
touch /opt/get-dns.sh
Содержимое скрипта:
#!/bin/bash
# Адрес master-сервера с указанием юзера, под которым будет производиться синхронизация.
MAINDNSSRV="dnsuser@master.example.com"
# Директории для синхронизации
SRCSYNCDIR="/etc/bind/zones"
DESTSYNCDIR="/etc/bind"
# Ключи для запуска rsync
RSYNCKEYS="-v -a -r"
# Путь до файла, при помощи которого будет блокироваться повторный запуск скрипта если он еще работает:
RSYNCWORKFILE="/opt/get-dns.work"
###
# Скрипт
###
read RSYNCWORK < $RSYNCWORKFILE
if [ $RSYNCWORK = 0 ]
then
echo "1" > $RSYNCWORKFILE
rsync $RSYNCKEYS $MAINDNSSRV:$SRCSYNCDIR $DESTSYNCDIR;
/etc/init.d/bind9 reload
echo "0" > $RSYNCWORKFILE
fi
При помощи данного скрипта на slave сервер будут загружаться файлы новых зон, а так же конфигурационный файл.
Данную схему можно применять не только в связке master<>slave, но и в среде с несколькими slave серверами.
Итог:
- Необходимость в создании новых доменных зон на нескольких серверах отпадает
- Редактирование зон не требует дополнительно вносить изменения на других серверах вручную
- При использовании лицензионного ПО (например ISPmanager) для редактирования DNS нет нужны платить за slave сервера.
- Экономия времени и денег.