У меня вопрос о правильной настройке isc-dhcp. Я хочу сдавать в аренду IP-адреса пользователям в зависимости от порта коммутатора. Для этого я использую коммутаторы серии DLink DES-3200. Все работает хорошо, но недавно я решил сдать в аренду определенную подсеть всем неизвестным пользователям, т.е. явно не указанную в файле dhcpd.conf. Вот пример конфигурации: # dhcpd.conf
default-lease-time 30;
max-lease-time 60;
authoritative;
log-facility local7;
option domain-name-servers 8.8.8.8;
include "/usr/local/etc/dhcpd/dhcpd.classes";
shared-network "clients"
{
subnet 10.5.20.0 netmask 255.255.255.0 {}
include "/usr/local/etc/dhcpd/dhcpd.networks";
}
dhcpd.classes
class "10.5.20.4_2" { match if ( substring(option agent.remote-id,2,15)="10.5.20.4" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "2" ); }
class "10.5.20.4_1" { match if ( substring(option agent.remote-id,2,15)="10.5.20.4" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "1" ); }
class "10.5.20.2_1" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "1" ); }
class "10.5.20.2_3" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "3" ); }
class "10.5.20.2_2" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "2" ); }
class "10.5.20.2_4" { match if ( substring(option agent.remote-id,2,15)="10.5.20.2" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "4" ); }
dhcpd.networks
subnet 172.30.20.0 netmask 255.255.255.0
{
option subnet-mask 255.255.255.0;
option routers 172.30.20.1;
pool {range 172.30.20.3; allow members of "10.5.20.4_2"; }
pool {range 172.30.20.2; allow members of "10.5.20.4_1"; }
}
subnet 172.30.160.0 netmask 255.255.255.0
{
option subnet-mask 255.255.255.0;
option routers 172.30.160.1;
pool {range 172.30.160.3; allow members of "10.5.20.2_1"; }
pool {range 172.30.160.4; allow members of "10.5.20.2_3"; }
pool {range 172.30.160.10; allow members of "10.5.20.2_2"; }
pool {range 172.30.160.12; allow members of "10.5.20.2_4"; }
}
Итак, если добавить, добавьте, скажем:
subnet 172.20.111.0 netmask 255.255.255.0 {
option routers 172.20.111.1;
max-lease-time 60;
min-lease-time 30;
range 172.20.111.10 172.20.111.20 ;
}
в конце файла dhcpd.networks (который я включаю в раздел «клиенты разделяемой сети», см. выше) все мои клиенты начинают получать IP-адреса из диапазона 172.20.111.0, независимо от того, есть ли у них класс, указанный для их порта.
Есть ли способ заставить сервер dhcpd сначала просмотреть объявления классов, а затем подсеть?
Прочитав man dhcpd.conf и поигравшись, мне удалось достичь своей цели, внося следующие изменения в мой файл dhcpd.networks:
subnet 172.20.111.0 netmask 255.255.255.0 {
pool {
option routers 172.20.111.1;
max-lease-time 60;
min-lease-time 30;
range 172.20.111.10 172.20.111.20 ;
deny members of "10.5.20.4_1";
deny members of "10.5.20.4_2";
deny members of "10.5.20.2_1";
# .... etc
}
}
Теперь он работает так, как я хочу, хотя я не уверен, что он хорошо масштабируется.
Вы пишете, что добавили новую подсеть в конец файла dhcpd.conf. Вам нужно добавить его в shared-network
, иначе dhcpd не будет рассматривать эти сети как альтернативу.
Просто дополнение к этой старой, но все еще действующей теме. Это упрощает раздел подсети, но добавляет одну строку на фиксированный IP-адрес.
class "FastIP"{
match pick-first-value (option agent.circuit-id);
}
класс как раньше:
class "IP-10.1.2.3" {
match if option agent.circuit-id = "YourOp82Value";
}
Добавьте это для каждого значения Op82, чтобы исключить клиента с фиксированным IP из пула свободных: подкласс «FixedIP» «YourOp82Value»;
В подсети:
deny members of "FixedIP";
pool {
allow members of "IP-10.1.2.3" ;
range 10.1.2.3 10.1.2.3;
}
Таким образом, вам не придется забивать раздел подсети множеством запретных строк. Подойдет один.