forum.opennet.ru - "DDNS+DHCP и динамическая раздача IP по подсетям" (1)

:

Здравствуйте! Есть проблемка относительно связки DDNS+DHCP. Для устранения дальнейших возможных вопросов опишу "что по чем". Заодно для тех, кто задался этим вопросом, будет небольшая почва для размышления и, надеюсь, помощь. Поэтому постараюсь более подробно. Не обессудьте, что так много написано.
Имеется виртуальная (в принципе, это роли не играет) экспериментальная сеть, построенная на машине под управлением Windows XP, SP1. Виртуальная сеть создана на основе MS Virtual PC 5.3.582.27 (это с SP1). Физическая машина абсолютно локальна, поэтому для связи виртуальных машин с физической реализована внешняя петля: два сетевых интерфейса (i82550 и RTL8100) закольцованы между собой "перевертышем" (A-B), чтобы на на них наблюдалась активность.
Виртуально существуют следующие машины: Windows 95 OSR2.1 rus, Windows 98 SE rus, Windows 2000 SP4 rus и FreeBSD 5.2.1. Таким образом, строится основа для экспериметов с исследованием поведения и сосуществованием в сети ОС разных поколений. Сетевые интерфесы для ВМ распределены так: Windows 95 и 98 по одному, Windows 2000 и FreeBSD – по два, причем для Windows 2000 один обычно отключен на уровне ОС и включается редко. Какие при этом задействованы для ВМ физические интерфейсы основной платформы значения не имеет, но для избежания возможной "путаницы", для Windows 95 и 98 в качестве физических интерфейсов назначены разные.
Решено создать сеть с ДВУМЯ разными подсетями, чтобы в дальнейшем проводить эксперименты с фильтрами и т.д.: 192.168.1.0/24 и 192.168.2.0/24.
На FreeBSD подняты Samba, DNS, DHCP, proftpd и firewall (пока с правилами по умолчанию). Для удобства машины по адресам разделены так: FreeBSD - 192.168.1.1 и 192.168.2.1, Windows 95 - 192.168.2.95, Windows 98 - 192.168.1.98, Windows 2000 - 192.168.1.200 (практически всегда отключен на уровне ОС) и 192.168.2.200. Для физической системы Windows XP отдаются 192.168.1.10 и 192.168.2.10. Распределением адресов занимается DHCP.
В данный момент занимаюсь опробыванием связки DDNS+DHCP. Сразу выношу сюда файлы конфигурации:

--------------- начало dhcpd.conf -------------------

ddns-update-style interim;
option domain-name "home.net";
default-lease-time 7200;
max-lease-time 14400;

log-facility local7;

key "rndc-key" {
algorithm hmac-md5;
secret "W/ZKpp3UyoYeSm6foNexyg==";
}

zone home.net. {
primary 127.0.0.1;
key "rndc-key";
}

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

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

subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
option netbios-name-servers 192.168.1.1;
option netbios-node-type 8;

pool {
deny unknown-clients;
range 192.168.1.2 192.168.1.210;
}
pool {
allow unknown-clients;
range 192.168.1.211 192.168.1.250;
}
#host win98 { hardware ethernet 00:03:ff e:2f:e9; }
}

subnet 192.168.2.0 netmask 255.255.255.0 {
deny unknown-clients;
range 192.168.2.2 192.168.2.240;
option routers 192.168.2.1;
option domain-name-servers 192.168.2.1;
option netbios-name-servers 192.168.2.1;
option netbios-node-type 8;
#host win95 { hardware ethernet 00:03:ff:ba b:4f; }
}

host max { hardware ethernet 00:20:ed:28:1f:03; fixed-address 192.168.1.10; }
host max2 { hardware ethernet 00:02:b3:b2:4e:46; fixed-address 192.168.2.10; }

#host win2000 { hardware ethernet 00:03:ff:66:ac:65; fixed-address 192.168.1.200; }
host win2000 { hardware ethernet 00:03:ff:62:1b:10; fixed-address 192.168.2.200; }

#host win98 { hardware ethernet 00:03:ff e:2f:e9; fixed-address 192.168.1.98; }
#host win98 { hardware ethernet 00:03:ff e:2f:e9; fixed-address 192.168.2.98; }

#host win95 { hardware ethernet 00:03:ff:ba b:4f; fixed-address 192.168.1.95; }
#host win95 { hardware ethernet 00:03:ff:ba b:4f; fixed-address 192.168.2.95; }

--------------- конец dhcpd.conf -------------------

--------------- начало named.conf -------------------

key "rndc-key" {
algorithm hmac-md5;
secret "W/ZKpp3UyoYeSm6foNexyg==";
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

acl local_net { 192.168.1.0/24; 192.168.2.0/24; 127.0.0.1; };

options {
directory "/etc/namedb";
pid-file "/var/run/named/named.pid";
listen-on { 192.168.1.1; 192.168.2.1; 127.0.0.1; };
allow-query { local_net; };
dump-file "named_dump.db";
statistics-file "named.stats";
};

zone "." {
type hint;
file "named.root";
};

zone "0.0.127. in-addr.arpa" {
type master;
file "localhost.rev";
};

zone "home.net" {
type master;
file "home.net.db";
allow-update { key "rndc-key"; };
};

zone "1.168.192.in-addr.arpa" {
type master;
file "192.168.1.db";
allow-update { key "rndc-key"; };
};

zone "2.168.192.in-addr.arpa" {
type master;
file "192.168.2.db";
allow-update { key "rndc-key"; };
};

--------------- конец named.conf -------------------

--------------- начало hosts -------------------

127.0.0.1 localhost localhost.home.net
192.168.1.1 carcass carcass.home.net
192.168.2.1 carcass carcass.home.net

--------------- конец hosts -------------------

--------------- начало hosts.conf -------------------

hosts
bind

--------------- конец hosts.conf -------------------

--------------- начало localhost.rev -------------------

$TTL 3600

@ IN SOA carcass.home.net. root.carcass.home.net. (
20050115 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS carcass.home.net.
1 IN PTR localhost.home.net.

--------------- конец localhost.rev -------------------

--------------- начало resolv.conf -------------------

domain home.net
nameserver 127.0.0.1
nameserver 192.168.1.1
nameserver 192.168.2.1

--------------- конец resolv.conf -------------------

Теперь привожу файлы базы данных прямой и обратной зоны. Как можете видеть, перед вами «рыба». Понятно, что после первого же динамического назначения BIND немного содержание этих файлов

--------------- начало home.net.db -------------------

$TTL 3600
home.net. IN SOA carcass.home.net. root.carcass.home.net. (
20050113 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS carcass.home.net.

localhost IN A 127.0.0.1

carcass IN A 192.168.1.1
max IN A 192.168.1.10
;win95 IN A 192.168.1.95
;win98 IN A 192.168.1.98
;win2000 IN A 192.168.1.200

carcass IN A 192.168.2.1
max IN A 192.168.2.10
;win95 IN A 192.168.2.95
;win98 IN A 192.168.2.98
win2000 IN A 192.168.2.200

--------------- конец home.net.db -------------------

--------------- начало 192.168.1.db -------------------

$TTL 3600

@ IN SOA carcass.home.net. root.carcass.home.net. (
20050113 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS carcass.home.net.

1 IN PTR carcass.home.net.
10 IN PTR max.home.net.
;95 IN PTR win95.home.net.
;98 IN PTR win98.home.net.
;200 IN PTR win2000.home.net.

--------------- конец 192.168.1.db -------------------

--------------- начало 192.168.2.db -------------------

$TTL 3600

@ IN SOA carcass.home.net. root.carcass.home.net. (
20050113 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS carcass.home.net.

1 IN PTR carcass.home.net.
10 IN PTR max.home.net.
;95 IN PTR win95.home.net.
;98 IN PTR win98.home.net.
200 IN PTR win2000.home.net.

--------------- конец 192.168.2.db -------------------

Все функционирует замечательно: динамически раздаются адреса, делаются записи в журналах (создаются и модифицируются файлы *.jnl) - все прекрасно, механизм DDNS+DHCP работает четко. Также обратите внимание, что на основе подсети 192.168.1.0/24 созданы два пула: для авторизированных хостов и гостей с описанием дианазона адресов для каждого. Этот момент тоже работает четко - стоит только убрать описание любого хоста из файла dhcp.conf, как он тутже переместится в пул для "несанкционников" с обновлением данных в файле журнала конкретной подсети и dhcpd.leases.

Все было здорово пока я не дошел до момента динамического распределения по подсетям. Обратите внимание на декларирование хостов win95 и win98 в файлах конфигурации - они везде закрыты для объявления, т.е. определение IP-адреса и записи в зонах делаются автоматически. И вот тут проблема. На этапе экспериментов с динамикой я не обращал внимания на то, в какую подсеть идет определение хоста. Но теперь для меня стало важно динамически ЧЕТКО задавать в какой подсети для хоста определяется адрес – т.е. указал только МАС, а дальше хост должен поместится в необходимую подсеть - не куда DHCP заблагорассудится, а именно куда МНЕ надо, БЕЗ указания IP-адреса.
Уже что только не делал: и создавал группы, и объявлял хосты в описаниях зон (на примере предлагающегося dhcpd.conf, кстати, как раз этот вариант отображен, только пока закомментирован) - "не выходит каменный цветок".
Причем, что еще интересно, вот в такой, как сейчас, конфигурации раздача адресов происходит как-бы "зеркально": для хоста win95, который объявлен в подсети 192.168.2.0/24, определение адреса идет, как это ни странно, в 192.168.1.0/24 с правильной (раз уж попал в эту подсеть) отдачей первого адреса "правого" края диапазона "санкционников" - 192.168.1.210. Если вообще убрать описание win95 из dhcpd.conf, то он совершенно правомочно попадает в "несанкцонный" пул с присвоением адреса 192.168.1.250 (до этого файлы dhcpd.leases и dhcpd.leases~ специально "чистились"). А хост win98 из "положенной" ему 192.168.1.0/24 подсети попадает в 192.168.2.0/24 с совершенно правильным (раз уж попал в эту подсеть) присвоением адреса 192.168.2.240.

Но, черт побери, заказывалась совершенно другая "музыка"!

Вот и вопрос: КТО ЗНАЕТ КАК ПРАВИЛЬНО И ТОЧНО организовывать группы хостов для динамической раздачи адресов В ЖЕЛАЕМОЙ подсети? Ткните носом, пожалуйста!