Блог ИТ склеротика. Настройка Dynamic DNS на базе Bind9 и nsupdate

Страницы

Расширенный поиск в статьях блога

1 июня 2012 г.

Настройка Dynamic DNS на базе Bind9 и nsupdate

В данном руководстве описано как настроить динамическое обновление зоны DNS с удаленной машины, например с DHCP сервера, или если адрес выдается динамически, как при использовании ADSL. Описано как простое обновление зоны вручную, или по крону, так и обновление зоны DHCP сервером при выдаче ip адреса клиенту. Настройка идентична для всех дистрибутивов и ОС (Linux, FreeBSD, Mac OS и прочих систем где есть Bind9).

Итак, у нас есть две машины, dns сервер, и клиент, который будет обновлять зону в соответствии со своим ip адресом. На обоих машинах должен быть установлен bind9. Настройку можно начать с генерации ключей, по которым будет происходить авторизация клиента на dns
сервере, в примере ниже показано как сгенерировать ключ, в примере я использую имя dnsupdater, вы можете поменять на нужное вам. Генерировать ключи нужно на машине клиенте. Код:
dnssec-keygen -a hmac-md5 -b 128 -n USER dnsupdater
После выполнения команды в текущей директории вы найдете 2 файла с именем Kdnsupdater.+157+31204.key иKdnsupdater.+157+31204.private, последние пять цифр в имени меняются каждый раз при генерации, и у вас они будут другие. Файл с расширением .key является публичным ключем, он используется на сервере dns, файл с расширением .private нужен для авторизации клиента. Перейдем к настройке сервера, в директории с конфигурационными файлами bind9 (обычно это либо /etc/bind, /etc/namedb, /var/named) Я настраивал сервер на линуксе, там это была директория /etc/bind, я буду использовать ее в этом руководстве. Создайте файл dnskeys.conf в директории /etc/bind, затем впишите туда данные о нашем ключе, сгенерированном на машине клиента Код:
# cat Kdnsupdater.+157+31204.key dnsupdater. IN KEY 0 3 157 YmEIxrGd1w1dT6Kyo9CQtQ==
Так выглядит наш ключ, нам нужна только часть после цифры 157, а именно YmEIxrGd1w1dT6Kyo9CQtQ== (она каждый раз новая, у вас будет другая)
В файл /etc/bind/dnskeys.conf впишите следующее (замените имя ключа и secret на ваши) Код:
key dnsupdater {
algorithm hmac-md5;
secret «YmEIxrGd1w1dT6Kyo9CQtQ==«;
};
Затем в файл /etc/bind/named.conf впишите в самый конец файла Код:
include "/etc/bind/dnskeys.conf";
Затем настроим зоны которые будут обновляться удаленно, в моем примере это зона для домена example.com и зона для обратных записей для адресов 192.168.0.0/24, ниже приведены примеры сразу для двух этих зон, обратите внимание на то, что файлы зон для обновления должны быть созданы заранее, в них должны быть прописаны SOA , NS, SERIAL и прочие стандартные настройки зоны. Код:
zone "example.com" { type master; file "master/example.com" allow-update { key dnsupdater; }; }; zone "0.168.192.in-addr.arpa" { type master; file "master/ptr/0.168.192.in-addr.arpa"; allow-update { key dnsupdater; }; };
После этого выполните команду rndc reload для применения настроек.
Небольшое отступление, если у вас установлена операционная система Ubuntu или Debian, или у вас в системе используется apparmor то вам необходимо перенастроить его, так как пользователь от которого работает DNS сервер bind9 не имеет права записи в каталог с файлами конфигурации /etc/bind, а удаленное обновление зон как раз требует возможности записи в этот каталог от пользователя bind. Исправить это можно отредактировав конфигурационный файл apparmor для ограничения bind, найти его можно в директории /etc/apparmor.d/, имя файлаusr.sbin.named. Отредактируйте файл как показано в примере ниже
Код:

Значение по умолчанию:
/etc/bind/** r,
Должно быть:
/etc/bind/** rw,
После этого перезапустите apparmor и bind9.
Теперь сервер готов к удаленному обновлению зон, перейдем к конечной настройке клиента.
Создадим простой скрипт который будет парсить файл с командами для обновления зон, в нем нам понадобится путь до второго ключа, с расширением .private, вы можете положить его в директорию /etc/bind, и не забудьте сменить имя ключа в скрипте на ваше.
Код:

#!/bin/bash
/usr/bin/nsupdate -k /etc/bind/Kdnsupdater.+157+31204.private -v $1
Сохраним данный скрипт с именем zonechange.sh и сделаем его исполняемым командой chmod +x zoneupdate.sh
Затем создадим файл обновления зон, обновлять можно сразу несколько зон, по очереди. В примере мы добавим обратную зону для адреса 192.168.0.1, удалим обратную зону для адреса 192.168.0.15, и добавим поддомен test.example.com. Для обновления существующих записей нужно сначала удалить старую, затем добавить новую.
Код:

server ns.example.com
zone 0.168.192.in-addr.arpa
update delete 15.0.168.192.in-addr.arpa. 10800 IN PTR somedomain.example.com.
update add 1.0.168.192.in-addr.arpa. 10800 IN PTR somedomain123.example.com.
send
zone example.com
update add test.example.com. 10800 IN A 192.168.0.254
send
Как видите, необходимо записи для обратной зоны и поддоменов указывать полностью, и перед сменой зоны отправлять обновление для предыдущей. Так же необходимо указывать TTL для каждой записи. Сохраните файл с именем changes, или любым вам удобным, в директории со скриптом zonechange.sh.
Проверим работоспособность скрипта, выполните нижеприведенную команду для отправки запроса на обновление наших зон на сервер
Код:

./zonechanhe.sh changes
Если все прошло успешно никакого вывода не последует, на сервере в логах можно будет увидеть подробности изменения зон. У меня на сервере записи в файлах внесенные удаленно появляются только после рестарта bind9, но работать начинают сразу после отправки обновления с клиента, так что проверяйте работу обновления не по наличию записи в файлах зон, а по запросу данной записи с сервера посредствомnslookup или dig.
Теперь можно перейти к настройке обновления записей зон при помощи dhcp сервера. Настройки DNS мы менять не будем, они описаны выше, поэтому мы будем пользоваться ими. Ключи так же возьмем из примеров выше. Настройка описана для DHCP сервера isc dhcp3
В глобальные опции DHCP сервера внесите следующие правки (файл конфигурации dhcpd.conf)
Код:

ddns-update-style interim; # Включение обновления dns записей для статично прописанных хостов update-static-leases on;
Затем добавим информацию о зонах которые будем обновлять, и информацию о ключе для авторизации.
Обратите внимание, записи о зонах и ключе вносятся так же как в конфиге bind, но БЕЗ кавычек, в противном случае у вас будет ошибка синтаксиса.
Код:

key dnsupdater { algorithm hmac-md5 secret YmEIxrGd1w1dT6Kyo9CQtQ==; } zone 0.168.192.in-addr.arpa { primary ns.example.com; key dnsupdater; } zone example.com { primary dns; key dnsupdater; }
Далее пример конфига для клиента без фиксированного ip адреса
Код:

host happylaptop { hardware ethernet 00:0a:39:22:da:39; option host-name "happylaptop"; option domain-name "example.com"; ddns-hostname "happylaptop"; ddns-domain-name "example.com"; }
Затем идет пример для группы хостов, или секции group в dhcpd.conf
Код:

group { option domain-name "example.com"; ddns-domainname "example.com"; host happylaptop { hardware ethernet 00:0a:39:22:da:39; option host-name "happylaptop"; ddns-hostname "happylaptop"; } host dellstation { hardware ethernet 00:b1:48:2a:ad:9c; option host-name "dellstation"; ddns-hostname "dellstation"; } }
Далее идет пример клиента со фиксированным ip адресом
Код:

host jukebox { hardware ethernet 01:d0:06:b8:68:34; fixed-address 192.168.0.5; ddns-hostname "jukebox"; ddns-domain-name "example.com"; option host-name "jukebox"; option domain-name "example.com"; }
После сохранения настроек не забудьте перезапусить DHCP сервер.

Ссылки по теме:
HOWTO DHCP server на Linux (практика)
Настройка сети в Linux, диагностика и мониторинг
DNS сервер BIND (теория)
HOWTO DNS сервер BIND (практика)
Команды управления DNS сервером bind (named) - rndc ...
Как принудительно перезагрузить зону DNS на ведомый (slave ...
Немного о Dnsmasq
Настройка Dynamic DNS на базе Bind9 и nsupdate
Сетевые утилиты сомандной строки Windows
Знакомьтесь: проект Namecoin, будущий "убийца" DNS и ...
Установка и настройка DNS-сервера BIND (named) на Linux ...
Свои DDNS (Dynamic DNS) сервер и клиент на базе Debian
Настройка Прокси сервера + dns сервера на Debian
Список свободных (публичных) серверов DNS

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free