Хорошо когда чтолибо работает автоматически и так как хочется! Меньше рутины — больше времени для веселья!
Есть 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 это изменение применится автоматически без каких либо вмешательств со стороны админа 🙂
Хай щастить!