Настраиваем ddns-сервер на GNU/Linux Debian 6

Введение

Здравствуйте, господа.
Занимаюсь самообразованием по администрированию Linux и недавно заинтересовался установкой и настройкой ddns-сервера (Dynamic DNS) под данной платформой, используя связку Bind + dhcpd. Чтение форумов, man и документации с сайтов дали вполне положительный результат и мне хотелось бы поделиться опытом с людьми. Надеюсь статья будет полезной.
Изначально мы имеем чистую ОС GNU/Linux Debian 6.0.1, без графического окружения. После установки было произведено обновление и установлен минимальный набор программного обеспечения, такого как mc и sudo. Так же я заранее привел имя хоста к виду hostname.domainname. И так как я использую виртуальную машину VirtualBox и работаю не в «боевых» условиях, все действия производятся из-под root аккаунта. Всё необходимое программное обеспечение устанавливается из репозиториев с помощью пакетного менеджера apt-get.
Суммарная информация:
ОС — GNU/Linux Debian 6.0.1;
Имя сервера — ddnsagc01.agency.com;
Параметры сети — static 192.168.1.2/24;

Установка isc-dhcp-server

Итак, начнем мы с установки сервера dhcp.
# apt-get install dhcp3-server
После установки, останавливаем демон сервера командой:
# /etc/init.d/isc-dhcp-server stop
И идем править основной конфигурационный файл, который находится по адресу /etc/dhcp/dhcpd.conf. Для редактирования я буду использовать идущий в составе дистрибутива редактор nano:
# nano /etc/dhcp/dhcpd.conf
# При начальной настройке я отключаю опцию динамического обновления и подключу её позже.
ddns-update-style none;
# Базовая конфигурация для моего домена agency.com.
subnet 192.168.1.0 netmask 255.255.255.0 {
default-lease-time 21600; # Время на которое выдается адрес, сек.
max-lease-time 28800; # Принудительно забрать адрес через, сек.
option domain-name «agency.com»; # Имя домена.
option domain-name-servers 192.168.1.2; # Адрес dns сервера.
option subnet-mask 255.255.255.0; # Маска подсети.
option routers 192.168.1.1; # Шлюз.
range 192.168.1.1 192.168.1.100; # Диапазон выдаваемых адресов.
}
# Фиксированные адреса выдаваемые для машин по MAC-адресу.
Host adagc01 { # Контроллер домена.
hardware ethernet 08:00:27:19:c8:48;
fixed-address 192.168.1.3;
}
Host ddnsagc01 { # ddns сервер.
hardware ethernet 08:00:27:05:99:1a;
fixed-address 192.168.1.2;
}
Host squid01 { # Шлюз.
hardware ethernet 08:00:27:4f:78:1b;
fixed-address 192.168.1.1;
}

Следующий конфигурационный файл который нам предстоит поправить находится в директории /etc/default/ и называется isc-dhcp-server. Там нам нужно изменить всего одну строчку, указывающую DHCP серверу на каком интерфейсе ему работать:
INTERFACES = «eth0» # Сюда подставляем имя своего интерфейса.
После внесения всех изменений стартуем демон командой:
# /etc/init.d/isc-dhcp-server start
Проверяем работу, пытаясь получить адрес машиной из нашей сети и если всё в порядке сервер выдаст адрес из указанного диапазона и остальные указанные нами настройки.

Установка DNS-сервера Bind

Вместе с Bind полезно будет поставить еще и утилиты для работы с сетью (такие как nslookup и dig, входящие в пакет dnsutils):
# apt-get install bind9 bind9utils dnsutils
После установки останавливаем сервер:
# /etc/init.d/bind9 stop
Конфиги Bind хранит в /etc/bind. Там же лежат файлы корневых зон и зон прописанных по умолчанию — db.0, db.127, db.root и т.д. rndc.key — файл ключ сгенерированный при установке, он нам понадобится для обновления наших файлов-зон с помощью dhcp-сервера. Новый ключ генерируется с помощью утилиты rndc-confgen. Разработчики предлагают вам не вносить изменения в основной конфигурационный файл сервера named.conf, а подключать к нему свои конфигурационные файлы с помощью директивы include. Так, если открыть named.conf после установки там будет всего лишь пояснение, что это за файл и три строчки определяющих подключаемые конфиги:
# less /etc/bind/named.conf | grep include
include «/etc/bind/named.conf.options»;
include «/etc/bind/named.conf.local»;
include «/etc/bind/named.default-zones»;

Сперва я внес информацию из rndc.key в основной конфигурационный файл, добавив его опять же с помощью include:
# nano /etc/bind/named.conf
include «/etc/bind/rndc.key»;

Теперь нам необходимо прописать собственные прямую и обратные зоны. Разработчики предлагают использовать для этого файл named.conf.local, что мы и сделаем:
# nano /etc/bind/named.conf.local
zone «agency.com» { # Название прямой зоны.
type master;
file «db-agency.com»; # Имя файла зоны.
allow-update { key rndc-key; }; # Разрешаем обновление зоны с ключом.
};

zone «1.168.192.in-addr.arpa» { # Название обратной зоны.
type master;
file «db-1.168.192»; # Имя файла зоны.
allow-update { key rndc-key; }; # Разрешаем обновление зоны с ключом.
};

Далее нам необходимо создать указанные файлы. По умолчанию Bind предполагает их хранение в /var/cache/bind:
# touch /var/cache/bind/db-agency.com
# touch /var/cache/bind/db-1.168.192

Нам необходимо прописать некоторые параметры в только что созданные зоны.
Файл прямой зоны:

# nano /var/cache/bind/db-agency.com
$TTL 10800
agency.com. IN SOA ddnsagc01.agency.com. admin.agency.com. (
11 ; Порядковый номер.
10800 ; Обновление.
3600 ; Повторная попытка.
604800 ; Устаревание.
3600 ) ; Отрицательное TTL в 1 час.
;
; Укажем серверы имен.
;
agency.com. IN NS ddnsagc01.agency.com.
;
; Так же пропишем А запись для указанного сервера имен.
ddnsagc01 A 192.168.1.2

Файл обратной зоны:

$TTL 10800
1.168.192.in-addr.arpa. IN SOA ddnsagc01.agency.com. admin.agency.com. (
11 ; Порядковый номер
10800 ; Обновление
3600 ; Повторная попытка
604800 ; Устаревание
3600 ) ; Отрицательное TTL в 1 час
;
; Укажем серверы имен.
;
1.168.192.in-addr.arpa. IN NS ddnsagc01.agency.com.
;
; Так же пропишем PTR запись для указанного сервера имен.
2.1.168.192.in-addr.arpa. IN PTR ddnsagc01.agency.com.

Установим владельцем только что созданных файлов пользователя bind:
# chown bind:bind /var/cache/bind/db-agency.com
# chown bind:bind /var/cache/bind/db-1.168.192


Настройка динамического обновления зон

Bind настроен и теперь нам необходимо настроить dhcp сервер на обновление файлов зон bind. Для этого открываем для редактирования и меняем параметр ddns-update-style с none на interim в /etc/dhcp/dhcpd.conf:
ddns-update-style interim;
Прописываем rndc-key (который можно подключить и через include, но я предпочел прописать вручную):
key rndc-key {
algorithm hmac-md5;
secret «XXXXXXXXXXX»;
}

И наконец указываем какие зоны должен обновлять сервер:
zone agency.com {
primary 127.0.0.1; # Адрес DNS сервера.
key rndc-key;
}
zone 1.168.192.in-addr.arpa {
primary 127.0.0.1; # Адрес DNS сервера.
key rndc-key;
}

Перезапускаем демоны Bind и isc-dhcp-server и проверяем работу установленной связки:
# /etc/init.d/bind9 restart
# /etc/init.d/isc-dhcp-server restart

После перезапуска демонов и в том случае, если всё прописано верно — в каталоге /var/cache/bind появятся .jnl файлы (журналы) наших зон, указывающие на то, что зоны корректно обновляются. В моём случае Bind так же чуть изменил файлы зон, подкорректировав их таким образом, чтобы стали использоваться сокращения в виде символа «@» для подмены имени домена, заменил значения указанные в часах и неделях на секунды (как в приведенных мною конфигах) и некоторые другие.
Bind и isc-dhcp-server записывают информацию о своей работе в syslog, так что если что-то не заработало, идем в /var/log/syslog и ищем в чем загвоздка. Следует обращать внимание на знаки препинания при описании доменных зон. Так моя ошибка заключалась в том, что я пропустил точку при указании домена и никак не мог добиться обновления обратной зоны.
Спасибо за внимание, надеюсь статья окажется полезной.
При написании статьи использовалась книга "DNS и BIND" Крикета Ли и Пола Альбитца, man страницы и многочисленные форумы в сети Интернет.

P.S.


Всё описанное выше я оформил в виде pdf-файла, в котором т.ж. присутствует раздел по использованию настроенной связки для работы с сервером Active Directory. Этот раздел является практически копией статьи Алексеюя Кеда aka Lissyara (http://www.lissyara.su) и я не включаю его в данную публикацию. Но тем не менее, я выкладываю ссылку на данный PDF-документ, который немного отличается по форматированию и имеет небольшие дополнения.
Скачать PDF
Tags:
Debian, ddns, bind, dhcp

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.