Решил изучить BIND и заодно DHCP.
Прочитал BIND 9 Administrator Reference Manual.
В результате возникли некоторые вопросы, решить который так и не смог.
Я настроил динамическое обновление зон dns dhcp сервером с использованием ключей TSIG.
В обычном режиме (когда все клиенты работают с одним файлом зоны) все работает как и ожидал.
Решил попробовать возможность View.
Настроил как, описано в документации - при обновлении вручную (в помощью nsupdate) все работает корректно. Однако если обновление выполняет DHCP сервер, то запись производиться не в ту View. Вот пример тестовой сети, построенной с помощью vmware server2. Она содержит две подсети 192.168.1.0/24 и 10.2.0.0/24, DNS сервер как и DHCP, имеет интерфейсы в обоих подсетях, клиенты имеют один интерфейс. На машине, где DHCP так же находиться slave dns.
192.168.1.0/24 Vmware lan "Host Only"
┌───────────────┬─────────────┬────────────.......
192.168.1.50 │ 192.168.1.51│ запрос │ 192.168.1.131
┌───┴──┐ ┌───┴──┐ dhcp ┌──┴───┐
│ eth0 │ │ eth0 │ <────── │ eth0 │
├──────┤ ├──────┤ │ клиент1 │
│ dns │ │ dhcp, │ └──────┘
│master │ │ dns │
│ │ ddns │ slave │ ┌──────┐
├──────┤ обнов. ├──────┤ │ клиент2 │
│ eth1 │<───────│ eth1 │ │ eth0 │
└───┬──┘ └───┬──┘ └───┬──┘
10.2.0.1 │ 10.2.0.2 │ │ 10.2.0.5
│ │ │
└───────────────┴──────────────┴───────────.......
10.2.0.0/24 Vmware lan "VMnet2"
Если клиент получает ip адрес (192.168.1.131) от dhcp в подсети eth0 (192.168.1.0/24), то DHCP почему-то отсылает BIND-у обновление через сеть eth1 (10.2.0.0/24) и тот записывает её в файл зоны, который видят только клиенты с адресами 10.2.0.0/24. В результате в файле зоны, где указаны адреса 10.2.0.0/24 появляется запись о клиенте с адресом 192.168.1.131. Но по этому ip другие клиенты из eth1 не смогут до него достучаться.
Если клиент получает ip адрес через сеть eth1 (10.2.0.0/24) или если обновление записей dns проводить с клиентов (nsupdate) ,то все записи попадают в правильные view.
Версии bind 9.5.0P2-20.1, dhcp-server 3.1.1-7.12 из Sles11.
Вот кусок логов BIND-а при обновлении от dhcp.
*********************************************************************
если клиент получает ip у dhcp через eth0 (192.168.1.0/24), то bind пишет
...
>21-Aug-2009 14:47:45.017 update-security: client 10.2.0.2#32997: view lan10: signer "dynupdate" approved
>21-Aug-2009 14:47:45.017 update: client 10.2.0.2#32997: view lan10: updating zone 'ma.ru/IN': adding an RR at 'test.ma.ru' A
>21-Aug-2009 14:47:45.017 update: client 10.2.0.2#32997: view lan10: updating zone 'ma.ru/IN': adding an RR at 'test.ma.ru' TXT
>21-Aug-2009 14:47:45.025 update-security: client 192.168.1.51#45773: view lan192: signer "dynupdate" approved
>21-Aug-2009 14:47:45.025 update: client 192.168.1.51#45773: view lan192: updating zone '1.168.192.in-addr.arpa/IN': deleting rrset at '131.1.168.192.in-addr.arpa' PTR
>21-Aug-2009 14:47:45.025 update: client 192.168.1.51#45773: view lan192: updating zone '1.168.192.in-addr.arpa/IN': adding an RR at '131.1.168.192.in-addr.arpa' PTR
......
в этом случае запрос с клиента1 dig @192.168.1.50 test.ma.ru ничего не выдаст, а запрос с клиента2 dig @10.2.0.1 test.ma.ru, скажет, что test.ma.ru. 300 IN A 192.168.1.131.
*********************************************************************
*********************************************************************
если клиент получает ip у dhcp через eth1 (10.2.0.0/24) , тогда все проводиться нормально.
...
>21-Aug-2009 14:51:13.017 update-security: client 10.2.0.2#44029: view lan10: signer "dynupdate" approved
>21-Aug-2009 14:51:13.017 update: client 10.2.0.2#44029: view lan10: updating zone 'ma.ru/IN': adding an RR at 'test.ma.ru' A
>21-Aug-2009 14:51:13.017 update: client 10.2.0.2#44029: view lan10: updating zone 'ma.ru/IN': adding an RR at 'test.ma.ru' TXT
>21-Aug-2009 14:51:13.030 update-security: client 10.2.0.2#38415: view lan10: signer "dynupdate" approved
>21-Aug-2009 14:51:13.030 update: client 10.2.0.2#38415: view lan10: updating zone '0.2.10.in-addr.arpa/IN': deleting rrset at '131.0.2.10.in-addr.arpa' PTR
>21-Aug-2009 14:51:13.030 update: client 10.2.0.2#38415: view lan10: updating zone '0.2.10.in-addr.arpa/IN': adding an RR at '131.0.2.10.in-addr.arpa' PTR
*********************************************************************
*********************************************************************
логи при обновлении вручную с клиента через eth0
> nas:~ # nsupdate -k Kdynupdate.+157+24058.private
> server 192.168.1.50
> update add test8.ma.ru. 72000 IN A 192.168.1.68
> send
>
..............
>21-Aug-2009 13:26:50.556 update-security: client 192.168.1.131#52070: view lan192: signer "dynupdate" approved
>21-Aug-2009 13:26:50.556 update: client 192.168.1.131#52070: view lan192: updating zone 'ma.ru/IN': adding an RR at 'test8.ma.ru' A
>21-Aug-2009 13:26:50.556 general: journal file master/ma.ru-192.jnl does not exist, creating it
>21-Aug-2009 13:26:50.571 notify: zone ma.ru/IN/lan192: sending notifies (serial 2009082102)
>21-Aug-2009 13:26:50.575 xfer-out: client 192.168.1.51#51565: view lan192: transfer of 'ma.ru/IN': IXFR started: TSIG nodes
>21-Aug-2009 13:26:50.576 xfer-out: client 192.168.1.51#51565: view lan192: transfer of 'ma.ru/IN': IXFR ended
..............
>nas:~ # dig @192.168.1.50 test8.ma.ru
>............
>;; ANSWER SECTION:
>test8.ma.ru. 72000 IN A 192.168.1.68
все выполняет успешно
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
логи при обновлении вручную с клиента через eth1
>nas:~ # nsupdate -k Kdynupdate.+157+24058.private
> server 10.2.0.1
> update add test1.ma.ru. 72000 IN A 10.2.0.68
> send
>
..............
>21-Aug-2009 13:31:27.908 update-security: client 10.2.0.5#43086: view lan10: signer "dynupdate" approved
>21-Aug-2009 13:31:27.908 update: client 10.2.0.5#43086: view lan10: updating zone 'ma.ru/IN': adding an RR at 'test1.ma.ru' A
>21-Aug-2009 13:31:27.908 general: journal file master/ma.ru-10.jnl does not exist, creating it
>21-Aug-2009 13:31:27.911 notify: zone ma.ru/IN/lan10: sending notifies (serial 2009082102)
>21-Aug-2009 13:31:27.916 xfer-out: client 10.2.0.2#37267: view lan10: transfer of 'ma.ru/IN': IXFR started: TSIG nodes
>21-Aug-2009 13:31:27.916 xfer-out: client 10.2.0.2#37267: view lan10: transfer of 'ma.ru/IN': IXFR ended
..............
> nas:~ # dig @10.2.0.1 test1.ma.ru
>.............
>;; ANSWER SECTION:
>test1.ma.ru. 72000 IN A 10.2.0.68
все выполняет успешно
*********************************************************************
Ниже привожу все файлы конфигурации как есть.
*********************************************************************
/etc/named.conf
ключ nodes используется для связи во slave dns
ключ dynupdate - для взаимодействия с dhcp
sortlist - экспериментировал с сортировкой ответов
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key nodes {
algorithm hmac-sha1;
secret "Qh2N+vvIkVhpnPFKFkqzGDKDVdw=";
};
key dynupdate {
algorithm hmac-md5;
secret "B/yrsRyTIqIUCeM3B3IqpVuzaqejL0mY5RmwavfOB+fYTO1oP1Kb7Kf7Jg124CS26aj1qeTtblCjilCsPfWEcw==";
};
server 192.168.1.51 { keys { nodes; } ;};
server 10.2.0.2 { keys { nodes;} ;};
options {
directory "/var/lib/named";
key-directory "/etc/named.d";
version "dns-server";
hostname "dns-server";
notify yes;
dump-file "/var/log/named_dump.db";
statistics-file "/var/log/named.stats";
dnssec-enable yes;
allow-transfer { key nodes ;};
sortlist {
{ 192.168.1/24; // IF on class C 192.168.1
{ 192.168.1/24; // THEN use .1, or .2 or .3
{ 192.168.2/24; 192.168.3/24; }; }; };
{ 10.2.0/24;
{ 10.2.0/24; }; };
{ { 192.168.4/24; 192.168.5/24; }; // if .4 or .5, prefer that net
};
};
};
logging {
channel log_file {
file "/var/lib/named/var/log/named_log"
versions 3 size 100M;
print-time yes;
print-category yes;
};
channel update_log {
file "/var/lib/named/var/log/update_log"
versions 3 size 100M;
print-time yes;
print-category yes;
};
channel client_quer {
file "/var/lib/named/var/log/client_req_log"
versions 3 size 100M;
print-time yes;
print-category yes;
};
channel notify_log {
file "/var/lib/named/var/log/notify_log"
versions 3 size 100M;
print-time yes;
print-category yes;
};
category update { update_log; };
category update-security { update_log; };
category queries { client_quer; };
category xfer-in { notify_log; };
category xfer-out { notify_log; };
category notify { notify_log; };
category default { log_file; };
};
view "local" {
match-clients { 127.0.0/8 ;};
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
};
view "lan192" {
match-clients { 192.168.1.0/24; };
zone "ma.ru" in {
file "master/ma.ru-192";
type master;
allow-update { key dynupdate ;};
};
zone "1.168.192.in-addr.arpa" in {
file "master/1.168.192.in-addr.arpa";
type master;
allow-update { key dynupdate ;};
};
};
view "lan10" {
match-clients { 10.2.0.0/24; };
zone "ma.ru" in {
file "master/ma.ru-10";
type master;
allow-update { key dynupdate ;};
};
zone "0.2.10.in-addr.arpa" in {
file "master/0.2.10.in-addr.arpa";
type master;
allow-update { key dynupdate ;};
};
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
файлы зон
master/ma.ru-192
$ORIGIN .
$TTL 172800 ; 2 days
ma.ru IN SOA ha-node1.ma.ru. root.ha-node1.ma.ru. (
2009082101 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ha-node1.ma.ru.
NS ha-node2.ma.ru.
$ORIGIN ma.ru.
ha-node1 A 192.168.1.50
A 192.168.2.50
ha-node2 A 192.168.1.51
A 192.168.2.51
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
master/ma.ru-10
$ORIGIN .
$TTL 172800 ; 2 days
ma.ru IN SOA ha-node1.ma.ru. root.ha-node1.ma.ru. (
2009082101 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ha-node1.ma.ru.
NS ha-node2.ma.ru.
$ORIGIN ma.ru.
ha-node1 A 10.2.0.1
ha-node2 A 10.2.0.2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.168.192.in-addr.arpa
$ORIGIN .
$TTL 172800 ; 2 days
1.168.192.in-addr.arpa IN SOA ha-node1.ma.ru. root.ha-node1.ma.ru. (
2009082101 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ha-node1.ma.ru.
NS ha-node2.ma.ru.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 172800 ; 2 days
50 PTR ha-node1.ma.ru.
51 PTR ha-node2.ma.ru.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0.2.10.in-addr.arpa
$ORIGIN .
$TTL 172800 ; 2 days
0.2.10.in-addr.arpa IN SOA ha-node1.ma.ru. root.ha-node1.ma.ru. (
2009082101 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ha-node1.ma.ru.
NS ha-node2.ma.ru.
$ORIGIN 0.2.10.in-addr.arpa.
1 PTR ha-node1.ma.ru.
2 PTR ha-node2.ma.ru.
*********************************************************************
Файл /etc/dhcpd.conf
option domain-name "ma.ru";
default-lease-time 600;
max-lease-time 7200;
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
key dynupdate {
algorithm hmac-md5;
secret "B/yrsRyTIqIUCeM3B3IqpVuzaqejL0mY5RmwavfOB+fYTO1oP1Kb7Kf7Jg124CS26aj1qeTtblCjilCsPfWEcw==";
};
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.131 192.168.1.254;
option domain-name-servers 192.168.1.50, 192.168.1.51;
option routers 192.168.1.1;
zone 1.168.192.in-addr.arpa. { primary 192.168.1.50; key dynupdate; }
zone ma.ru. { primary 192.168.1.50; key dynupdate; }
}
subnet 10.2.0.0 netmask 255.255.255.0 {
range 10.2.0.131 10.2.0.254;
option domain-name-servers 10.2.0.1, 10.2.0.2;
zone 0.2.10.in-addr.arpa. { primary 10.2.0.1; key dynupdate; }
zone ma.ru. { primary 10.2.0.1; key dynupdate; }
}
*********************************************************************
Если в файле dhcpd.conf в subnet 10.2.0.0 убрать упоминание о zone ma.ru., то дин. обновления записей dns при запросах из сети 192.168.1.0/24 проводятся нормально.
Пробовал указывать другое имя зоны в dhcpd.conf в subnet 10.2.0.0 (соответственно так же и в dns для view lan10) - не помогает.
Видимо dhcpd не корректно обрабатывает dyndns, если в его конфиге два раза указаны zone.
И еще вопрос: bind не даёт зарегистрировать запись, если имя машины содержит кириллические символы. Можно это как-то побороть?