Skip to main content

DDNS. Bind9 + dhcpd, делаем свою жизнь чуточку проще.

Июнь 18, 2010 Автор: Hikaru

В этой статье будет описан процесс настройки связки Bind и dhcpd.
Предполагается, что у вас уже есть функционирующий DNS сервер (если нет, то вот здесь можно почитать, как его настроить), поэтому будет использоваться весьма простой файл конфигурации.

Вот содержимое файла named.conf:
Обратите внимание на название ключа и на имя "пользователя" который использовался для создания ключа.

key "dhcpupdate" {
algorithm       hmac-md5;
secret          "bq83dLTannd8VQDfXa3Z3A==";
};
zone "linux" in {
        type master;
        allow-update { key dhcpupdate; };
        file "/var/named/slaves/ddns.linux.db";
};
zone "1.168.192.in-addr.arpa" in {
        type master;
        allow-update { key dhcpupdate; };
        file "/var/named/slaves/192.168.1.db";
};
  logging {
        channel update_debug {
            file "/var/log/named-update.log";
            severity  debug 3;
            print-category yes;
            print-severity yes;
            print-time     yes;
        };
        channel security_info    {
            file "/var/log/named-auth.log";
            severity  info;
            print-category yes;
            print-severity yes;
            print-time     yes;
        };
      category update { update_debug; };
      category security { security_info; };
};

Как видно - файл конфигурации действительно простой, для генерации ключа следует использовать команду (не стоит использовать "мой" ключ, это не безопасно):

dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdate

В результате выполнения команды будет получено 2 файла, нас интерисует содержимое того, который заканчивается на ".key".
Зоны выглядят так:

dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdate
$TTL 3h
linux. IN SOA rayne.linux. hostmaster.linux. (
        1
        3h
        1h
        1w
        1h )
@ IN NS rayne.linux.

localhost IN A 127.0.0.1
rayne IN A 192.168.1.127

и

/var/named/slaves/192.168.1.db
$TTL 10800      ; 3 hours
1.168.192.in-addr.arpa  IN SOA  rayne.linux. hostmaster.nanami.ru. (
                                7          ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
                        NS      rayne.linux.
127                     PTR     rayne.linux.

Теперь нужно внести изменения в файл конфигурации dhcpd.conf:

authorative;
# Наиболее интересны следующие 6 строк
ddns-update-style interim;
ddns-domainname "linux.";
ddns-rev-domainname "in-addr.arpa.";
ddns-updates on;
allow client-updates;
allow unknown-clients;
key "dhcpupdate" {
        algorithm       hmac-md5;
        secret          "bq83dLTannd8VQDfXa3Z3A==";
};


zone linux. {
        primary 127.0.0.1;
        key "dhcpupdate";
}
zone 1.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key "dhcpupdate";
}

subnet 192.168.1.0 netmask 255.255.255.0 {
        option routers                  192.168.1.1;
        option subnet-mask              255.255.255.0;
        option nis-domain               "linux";
        option domain-name              "linux";
        option domain-name-servers      192.168.1.127;
        option time-offset              -18000; # Eastern Standard Time
        range dynamic-bootp 192.168.1.129 192.168.1.253;
        default-lease-time 21600;
        max-lease-time 43200;
}

Теперь можно перезапустить сервисы и провести проверку с помощью утилиты nsupdate:

> nsupdate
> server dns.home
> key dhcpupdate N8Hk2RUFO84bEVl3uGTD2A==
> zone home
> update add 50.0.168.192.in-addr.arpa 600 IN PTR happynode.home.
> send
> update add happynode.home. 600 IN A 192.168.0.50
> send

В случае успеха - сервер должен корректно функционировать и вносить изменения в соответствующие зоны.
Наиболее часто встречающиеся ошибки:

update failed: NOTZONE

Вы не указали имя хоста, чью зону обслуживает DNS-сервер, следует использовать полностью определённое доменное имя.

update failed: NOTAUTH(BADSIG)

Ключ сервера не совпадает с ключем который вы используете (или "имена" ключей не совпадают).
Вот собственно и всё.