Настройка собственных DNS серверов BIND

В интернете много различных статей о том, как настроить 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 серверами.

Итог:

  1. Необходимость в создании новых доменных зон на нескольких серверах отпадает
  2. Редактирование зон не требует дополнительно вносить изменения на других серверах вручную
  3. При использовании лицензионного ПО (например ISPmanager) для редактирования DNS нет нужны платить за slave сервера.
  4. Экономия времени и денег.

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

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