FreeBSD 9.x — Настройка Master/Slave named (Bind9)

Хорошо когда чтолибо работает автоматически и так как хочется! Меньше рутины — больше времени для веселья!
Есть 2 сервера с FreeBSD, на них установлен Bind9 (во FreeBSD он зовется named) и задача — настроить на них Bind в режиме Master/Slave, для того чтобы любые изменения зон на Master автоматически транслировались на Slave. Согласитесь, негоже одни и те же настройки повторять на разных серверах, когда они могу синкаться автоматически 🙂

Bind Master host — 111.111.111.111
Bind Slave host — 99.99.99.99

Чтобы не повторяться с путями, переходим в директорию bind-а:

root@master:~ # cd /etc/namedb

Не люблю когда все навалено в одну директорию скопом, поэтому для ключей я создал отдельную директорию:

root@master:/etc/named# mkdir keys

Генерация ключа — простая штука, в help-е dnssec-keygen можете найти все типы поддерживаемых ключей, я выбрал HMAC-SHA512

root@master:/etc/namedb# dnssec-keygen -K keys -a HMAC-SHA512 -b 512 -n HOST -r /dev/urandom master.key
Kmaster.key.+163+63477
root@master:/etc/namedb#

тут, -K keys — директория куда сохранится сгенереный ключ
-a HMAC-SHA512 — тип шифрования
-b 512 — размер
-n HOST — тип ключа, в данном случае на хост
-r /dev/urandom — место одкуда берем случайную последовательность символов
master.key — название ключа, может быть каким хотите, это особой роли не играет

Сам сгенеренный файл нам не нужен, нам нужен только ключ, чтобы его найти смотрим файлик .private, интересуют строка Key.
К примеру, у меня так:

root@master:/etc/namedb# cat keys/Kmaster.key.+163+63477.private
Private-key-format: v1.3
Algorithm: 165 (HMAC_SHA512)
Key: P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==
Bits: AAA=
Created: 20141028083403
Publish: 20141028083403
Activate: 20141028083403
root@master:/etc/namedb#

Создаем файлик, куда поместим ключ нашего master сервера:

root@master:/etc/namedb# vim keys/my.keys

формат такой:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};

Подключаем этот файл в конфиг named, для этого открываем главный конфиг named.conf

root@master:/etc/namedb# vim named.conf

и добавляем строчку (куда добавлять — не имеет значения, я добавил непосредственно перед частью конфига с master зонами, чтоб было на виду):

include "/etc/namedb/keys/my.keys";

Теперь создадим простенькую зону для проверки правильной работы сервиса, я использовал вот такую зону для тестов:

root@master:/etc/namedb# cat master/black13-org-ua.db
$TTL 604800 ; 1 hour default TTL
black13.org.ua. IN      SOA     ns1.black13.org.ua.     admin.black13.org.ua.   (
                                2014102801 ; Serial
                                8H ; Refresh
                                1H ; Retry
                                1W ; Expire
                                1D ) ; minimum, seconds
;
; DNS Servers
                IN      NS      ns1.black13.org.ua.
                IN      NS      ns2.black13.org.ua.
; MX Records
;                IN      MX 10   mx.black13.org.ua.
;                IN      MX 20   mail.example.org.
                IN      A       155.12.21.155
; Machine Names
localhost       IN      A       127.0.0.1
ns1             IN      A       111.111.111.111
ns2             IN      A       99.99.99.99
;mx              IN      A       88.88.88.88
;mail            IN      A       192.168.1.5

; Aliases
www             IN      CNAME   black13.org.ua.

root@master:/etc/namedb#

Теперь те зоны которые хотим передавать на slave-сервер (я тренировался на тестовой black13.org.ua) нужно настроить вот так:

zone "black13.org.ua" {
    type master;
    file "/etc/namedb/master/black13-org-ua.db";
    notify yes;
    allow-transfer { 99.99.99.99; key "master.key";};
    allow-update { none; };
};

И чтоб применить изменения — перегружаем named (bind):

root@master:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1835.
Starting named.
root@master:/etc/namedb#

С мастером все!

Настройка slave сервера тоже не сложная!
Сначала тоже самое … переходим в директорию /etc/namedb и создаем директорию keys:

root@slave:~ # cd /etc/namedb
root@slave:/etc/namedb# mkdir keys

Тектовым редактором создаем файл ключа:

root@slave:/etc/namedb# vim keys/master.key

Формат на Slave-сервере чуть другой чем на мастере, ключ такойже:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};
server 111.111.111.111 {
  keys { master.key; };
};

Теперь в главном конфиге named.conf нужно включить конфигурацию ключа:

include "/etc/namedb/keys/master.key";

и в этом же конфиге пример зоны:

zone "black13.org.ua" {
    type slave;
    file "/etc/namedb/slave/black13-org-ua.db";
    masters { 111.111.111.111; };
    allow-notify { 111.111.111.111; };
};

Обратите внимание что на slave нужно размещать файлы зон в директории /etc/namedb/slave, иначе нарветесь на ошибку:

Oct 29 11:21:03 slave named[68349]: dumping master file: /etc/namedb/master/tmp-7f25W0C4p4: open: permission denied

Все! Настройка закончена.
Перегружаем named (bind):

root@slave:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1743.
Starting named.
root@slave:/etc/namedb#

И вот он результат! Если вы все сделали верно, на slave-сервере в директории /etc/namedb/slave появится файлик black13-org-ua.db с вот таким содержимым:

root@slave:/etc/namedb# cat slave/black13-org-ua.db
$ORIGIN .
$TTL 604800     ; 1 week
black13.org.ua          IN SOA  ns1.black13.org.ua. admin.black13.org.ua. (
                                2014102801 ; serial
                                28800      ; refresh (8 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.black13.org.ua.
                        NS      ns2.black13.org.ua.
                        A       155.12.21.155
$ORIGIN black13.org.ua.
localhost               A       127.0.0.1
ns1                     A       111.111.111.111
ns2                     A       99.99.99.99
www                     CNAME   black13.org.ua.
root@slave:/etc/namedb#

А теперь самое веселое … на мастере поменяйте чтолибо в файлике black13-org-ua.db (смените либо добавьте HOST A,CNAME,TXT или что угодно), увеличте на 1 параметр «serial» и перегрузите named. На slave это изменение применится автоматически без каких либо вмешательств со стороны админа 🙂

Хай щастить!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?