[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

как должен работать ddns + dhcpd + bind?



Добрый день!

Пытаюсь заменить старый сервер новым, но не получается заставить работать динамическое обновление DNS.

Проблема по сути в том, что я не понимаю как эта связка должна работать, что с чем связано и на что влияет.

При этом я уверен, что нужно вникнуть в суть происходящего до мельчайших подробностей.

Поэтому я опишу все так, как понимаю. А вас прошу показать где я не прав. Спасибо.

По сути я перехожу от одной логической сети к другой.

Т.е. был старый сервер bind+dhcpd:

Раздавал настройки из под сети 192.168.0.0/24 и домен поиска .lab

Я пытаюсь настроить новый сервер bind+dhcpd:
Который будет раздавать настройки из под сети 192.168.128.0/24 и домен поиска example.lab

В итоге я хочу получить конфигурацию, при которой будет ВСЕГДА (тут меня начинает распирать) будет обновляться прямая и обратная DNS зона

Не знаю кем(клиентом) или чем(сервером dhcpd). Т.е по сути я хочу, чтобы конфигурация сети задавалась конфигом dhcpd.conf.hosts

На всех хостах в локальной сети /etc/hostname пустой - так было еще при старом сервере и при старом админе. Имена хостов машины получали по dhcp.

Опять же на что влияет заданное/ не заданное имя на хосте при получении настроек в моей ситуации ?

Конфиг нового сервер dhcpd идентичен старому, за исключением тех параметров сети, которые поменялись.

Вот конфиг нового сервера:

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

ddns-update-style    interim;
ddns-updates         on;
update-static-leases on;

#ne pomoglo
#ignore client-updates;

#ostavim - no voobche mogno ubrat po idee
#deny client-updates;

# pomoglo no vse ravno ne to chtoi nado
#update-conflict-detection false;

default-lease-time 1800;
max-lease-time 7200;
include "/etc/bind/rndc.key";

shared-network eth0
{

        subnet 192.168.128.0 netmask 255.255.255.0
        {

        option routers 192.168.128.3;
        option domain-name "example.lab";
        option domain-name-servers 192.168.128.3, 8.8.8.8;
        option ntp-servers 192.168.128.1;
        default-lease-time 1700;
        max-lease-time 7200;

        option host-name = config-option server.ddns-hostname;
        ddns-hostname = pick-first-value( option fqdn.hostname,
                                          option host-name,
                                          concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address)));

        ddns-domainname      "example.lab.";

                zone example.lab. {
                    primary 127.0.0.1;
                    key rndc-key;
                }

                zone 128.168.192.in-addr.arpa. {
                    primary 127.0.0.1;
                    key rndc-key;
                }

        pool { range 192.168.128.100 192.168.128.200; }

        }
        include "/etc/dhcp/dhcpd.conf.hosts";
}

Вот часть dhcpd.conf.hosts - все хосты содержат только mac и ip. Имя я решил получать также как и на старом сервере из декларации хоста. Дабы не плодить одну и ту же информацию.

group
{
...
    host pandora {
    hardware ethernet 00:21:91:ef:8b:35;
    fixed-address 192.168.128.73;
    }

    host pluto {
    hardware ethernet 00:25:22:89:80:df;
    fixed-address 192.168.128.61;
    }
...
}

В данной части кон фига я изменил только под сеть. Имена хостов, маки, ip остались такими же как и на старом сервере.

Вот конфиг ключа для обновления зоны:

#cat /etc/bind/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "fhgjCIhgyU3TEghjn9Njgu==";

#ls -l /etc/bind/rndc.key
-rw-r--r-- 1 root dhcpd 90 Jul 13 17:14 /etc/bind/rndc.key

Да по сути с ключом проблем нет dhcpd обновляет зону но не для всех хостов.

Про конфигурацию bind на новом сервере:

zone "example.lab" {
        type master;
        file "/etc/bind/db.example.lab";
        update-policy {
          // The only allowed dynamic updates are A records
          grant rndc-key subdomain example.lab. A TXT;
          // Grant from localhost
          grant local-ddns zonesub any;
        };
//      allow-update { key rndc-key; };
};

zone "128.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.128.168.192";
        update-policy {
          // The only allowed dynamic updates are PTR records
          grant rndc-key subdomain 128.168.192.in-addr.arpa. PTR TXT;
          // Grant from localhost
          grant local-ddns zonesub any;
        };
};

Вот часть db.example.lab

$ORIGIN .
$TTL 259200     ; 3 days
example.lab             IN SOA  ns.example.lab. hostmaster.lab. (
                                2012051629 ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.example.lab.
$ORIGIN example.lab.
$TTL 392714535  ; 649 weeks 2 days 7 hours 22 minutes 15 seconds

...
$TTL 850        ; 14 minutes 10 seconds
pandora               A       192.168.128.73
                        TXT     "0093b73be5f639bf593d33dcac185332d9"
...
localhost.localdomain   A       192.168.128.79
                        TXT     "0061a0d6e46d0ab852a1b1951bea325ab3"
...
pluto                   A       192.168.128.61
...

У пары записей я вручную удалил TXT запись, с надеждой что зона обновиться. Но увы это ни к чему не привело.
Вот выдержка из man:

When the DHCP server issues a client a new lease, it creates a text string that is an MD5 hash over
       the  DHCP client's identification (see draft-ietf-dnsext-dhcid-rr-??.txt for details).   The update
       adds an A record with the name the server chose and a TXT record containing the  hashed  identifier
       string (hashid).   If this update succeeds, the server is done.

Почему не работает обновление ?
Откуда берется этот localhost.localdomain если в документации сказано, что если вы зададите параметр ddns-hostname и ddns-domainname  то они будут браться из этих параметров при обновлении зон.

The DHCP server determines the client's hostname by first looking for a ddns-hostname configuration
       option,  and  using  that  if  it is present.  If no such option is present, the server looks for a
       valid hostname in the FQDN option sent by the client.  If one is found, it is used;  otherwise,  if
       the  client  sent a host-name option, that is used.  Otherwise, if there is a host declaration that
       applies to the client, the name from that declaration will be used.  If none of these applies,  the
       server will not have a hostname for the client, and will not be able to do a DNS update.

Т.е. он не должен обращать внимание на то, что шлет ему клиент. Но откуда тогда беруться localhost.localdomain если в конфиге dhcpd.conf.hosts таких узлов нет ?



>The update adds an A record with the name the server
Вопрос сервер сам выбирает имя - откуда?  от того, что клиент передал или на основе параметра ddns-hostname, который формируется динамически ?
Зачем нужна TXT запись вообще и на что её наличие может повлиять?


Что это означает ?:
       If the update fails because the A record already exists, then the DHCP server attempts to add the A
       record with the prerequisite that there must be a TXT record in the same name as the new A  record,
       and  that TXT record's contents must be equal to hashid.   If this update succeeds, then the client
       has its A record and PTR record.   If it fails, then the name the  client  has  been  assigned  (or
       requested)  is  in  use,  and can't be used by the client.   At this point the DHCP server gives up
       trying to do a DNS update for the client until the client chooses a new name.
?

Когда я читаю man dhcpd.conf я прехожу в ужас. Там везде говорится про стандарты, которые находятся в рассмотрении, про то, что схема interim не описана в стандарте. Что они вносят какие свои изменения. К чему это они? В двух словах можете сказать ?

Может быть на просторах Интернет где нибудь на русском языке объясняется суть обновления DNS по этой не стандартизированной схеме interim ? Вообще может есть статья о том, как оно работает где все разжевано ? Просто я если честно не понимаю что за чем идет и куда должно прийти.

Я надеялся, что перенесу конфиги и все будет работать, но оказалось, что простым переносом конфигов не обойтись. Почему ?

 
Вот кусок syslog, при не удачных и не совсем удачных обновлениях:

Jul 14 16:59:42 pdc dhcpd: Added new forward map from ganymede.example.lab. to 192.168.128.65
Jul 14 16:59:42 pdc named[4696]: client 127.0.0.1#49695: updating zone '128.168.192.in-addr.arpa/IN': deleting rrset at '65.128.168.192.in-addr.arpa' PTR
Jul 14 16:59:42 pdc named[4696]: client 127.0.0.1#49695: updating zone '128.168.192.in-addr.arpa/IN': adding an RR at '65.128.168.192.in-addr.arpa' PTR
Jul 14 16:59:42 pdc dhcpd: added reverse map from 65.128.168.192.in-addr.arpa. to ganymede.example.lab.
Jul 14 16:59:42 pdc dhcpd: DHCPREQUEST for 192.168.128.65 from 00:19:66:b2:c4:fa via eth0
Jul 14 16:59:42 pdc dhcpd: DHCPACK on 192.168.128.65 to 00:19:66:b2:c4:fa via eth0

вверху видно, что все работает как надо, это после того, как я установил имя хоста на машине в файле /etc/hostname
но это не всегда помогает например для другого хоста это не помогает. хост pandora ниже по логу (FAILED: Has an address record but no DHCID, not mine.)

Jul 14 17:00:36 pdc named[4696]: client 127.0.0.1#45190: updating zone 'example.lab/IN': update unsuccessful: pluto.example.lab: 'name not in use' prerequisite not satisfied (YXDOMAIN)
вот опять же запись для pluto вроде как обновляется, но все равно не без ошибки YXDOMAIN - почему ?

Jul 14 17:00:36 pdc named[4696]: client 127.0.0.1#55827: updating zone 'example.lab/IN': deleting rrset at 'pluto.example.lab' A
Jul 14 17:00:36 pdc named[4696]: client 127.0.0.1#55827: updating zone 'example.lab/IN': adding an RR at 'pluto.example.lab' A
Jul 14 17:00:36 pdc dhcpd: Added new forward map from pluto.example.lab. to 192.168.128.61
Jul 14 17:00:36 pdc named[4696]: client 127.0.0.1#44612: updating zone '128.168.192.in-addr.arpa/IN': deleting rrset at '61.128.168.192.in-addr.arpa' PTR
Jul 14 17:00:36 pdc named[4696]: client 127.0.0.1#44612: updating zone '128.168.192.in-addr.arpa/IN': adding an RR at '61.128.168.192.in-addr.arpa' PTR
Jul 14 17:00:36 pdc dhcpd: added reverse map from 61.128.168.192.in-addr.arpa. to pluto.example.lab.
Jul 14 17:00:36 pdc dhcpd: DHCPREQUEST for 192.168.128.61 from 00:25:22:89:80:df via eth0
Jul 14 17:00:36 pdc dhcpd: DHCPACK on 192.168.128.61 to 00:25:22:89:80:df via eth0
Jul 14 17:02:01 pdc named[4696]: client 127.0.0.1#59156: updating zone 'example.lab/IN': update unsuccessful: callisto.example.lab: 'name not in use' prerequisite not satisfied (YXDOMAIN)
Jul 14 17:02:01 pdc named[4696]: client 127.0.0.1#58952: updating zone 'example.lab/IN': deleting rrset at 'callisto.example.lab' A
Jul 14 17:02:01 pdc named[4696]: client 127.0.0.1#58952: updating zone 'example.lab/IN': adding an RR at 'callisto.example.lab' A
Jul 14 17:02:01 pdc dhcpd: Added new forward map from callisto.example.lab. to 192.168.128.71
Jul 14 17:02:01 pdc named[4696]: client 127.0.0.1#52899: updating zone '128.168.192.in-addr.arpa/IN': deleting rrset at '71.128.168.192.in-addr.arpa' PTR
Jul 14 17:02:01 pdc named[4696]: client 127.0.0.1#52899: updating zone '128.168.192.in-addr.arpa/IN': adding an RR at '71.128.168.192.in-addr.arpa' PTR
Jul 14 17:02:01 pdc dhcpd: added reverse map from 71.128.168.192.in-addr.arpa. to callisto.example.lab.

callisto я тоже установил хостнейм локально и вроде как зона начала обновлятся, но опять же ошибка YXDOMAIN

Jul 14 17:02:01 pdc dhcpd: DHCPREQUEST for 192.168.128.71 from 00:25:22:7e:fc:8a via eth0
Jul 14 17:02:01 pdc dhcpd: DHCPACK on 192.168.128.71 to 00:25:22:7e:fc:8a via eth0
Jul 14 17:03:36 pdc named[4696]: client 127.0.0.1#60797: updating zone 'example.lab/IN': update unsuccessful: pandora.example.lab: 'name not in use' prerequisite not satisfied (YXDOMAIN)
Jul 14 17:03:36 pdc named[4696]: client 127.0.0.1#38307: updating zone 'example.lab/IN': update unsuccessful: pandora.example.lab/TXT: 'RRset exists (value dependent)' prerequisite not satisfied (NXRRSET)
Jul 14 17:03:36 pdc dhcpd: Forward map from pandora.example.lab. to 192.168.128.73 FAILED: Has an address record but no DHCID, not mine.
Jul 14 17:03:36 pdc dhcpd: DHCPREQUEST for 192.168.128.73 from 00:21:91:ef:8b:35 via eth0
Jul 14 17:03:36 pdc dhcpd: DHCPACK on 192.168.128.73 to 00:21:91:ef:8b:35 via eth0
Jul 14 17:03:56 pdc named[4696]: client 127.0.0.1#35256: updating zone 'example.lab/IN': update unsuccessful: localhost.localdomain.example.lab: 'name not in use' prerequisite not satisfied (YXDOMAIN)
Jul 14 17:03:56 pdc named[4696]: client 127.0.0.1#36070: updating zone 'example.lab/IN': update unsuccessful: localhost.localdomain.example.lab/TXT: 'RRset exists (value dependent)' prerequisite not satisfied (NXRRSET)

Но вот чуть выше самая интересная запись этот загадочный localhost.localdomain.example.lab откуда named его берет ?

Jul 14 17:03:56 pdc dhcpd: Forward map from localhost.localdomain.example.lab. to 192.168.128.69 FAILED: Has an address record but no DHCID, not mine.
Jul 14 17:03:56 pdc dhcpd: DHCPREQUEST for 192.168.128.69 from 6c:f0:49:b6:75:81 via eth0
Jul 14 17:03:56 pdc dhcpd: DHCPACK on 192.168.128.69 to 6c:f0:49:b6:75:81 via eth0

Bind создает файлы jnl - зачем ?
Какой у dhcpd должен быть доступ к ним ?
Можно ли удалять jnl файлы и на что они влияют в моем случае?

DHCPD хранит выданные аренды

/var/lib/dhcp# ls -l
total 12
...
-rw-r--r-- 1 dhcpd dhcpd 2484 Jul 14 17:05 dhcpd.leases
-rw-r--r-- 1 dhcpd dhcpd 2484 Jul 14 17:05 dhcpd.leases~

на что выданные аренды будут влиять ?

нужно ли их чистить если не работает dns update?

Вообщем я окончательно запустался.
Помогите прояснить ситуацию.

Спасибо.

-- 
С Уважением,
специалист по техническому и программному обеспечению,
системный администратор

Скубриев Владимир
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Россия, Ростовская область, г. Таганрог

тел. моб: +7 (918) 504 38 20
skype: v.skubriev
icq: 214-800-502
www: skubriev.ru 

Reply to: