апреля 15 2010 01:56 пп

Настройка 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 сервер.

Ссылки по теме:

http://www.semicomplete.com/blog/articles/dynamic-dns-with-dhcp

http://ubuntuforums.org/showthread.php?t=713469





2 комментария »


2 комментария to “Настройка Dynamic DNS на базе Bind9 и nsupdate”

  1. Kaylo BLOG » Архив сайта » Настройка Dynamic DNS на базе Bind9 и nsupdate on 11 мая 2010 at 15:39 #

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

  2. Настройка Dynamic DNS на базе Bind9 и nsupdate | acidnation.ru on 15 Ноя 2010 at 10:56 #

    […] Взято с Запись опубликована в рубрике Linux, Советы с метками Bind9, ddns, Dynamic DNS, nsupdate. Добавьте в закладки постоянную ссылку. ← Настройка времени резервного копирования Time Machine в Mac OS X […]

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »



Server load average: 0.03, 0.01, 0.00
Server uptime: 355 days, 11:43
Your IP is: 54.162.76.55.