Настраиваем 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

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.