我有一个在 Debian 上运行的 DHCP 服务器(版本:isc-dhcpd-4.3.5)并管理多个子网,所有子网都通过同一个物理接口在虚拟接口等上eth1:1
运行。eth1:2
eth1
所有子网都已配置deny unknown-devices;
,并且我正在手动将已知设备添加host XYZ { ... }
为每个子网的条目(参见下面的配置)。
我现在想将特定子网中特定范围的 IP 动态分配给属于特定类别的未知设备(参见subnet 172.16.44.0/24
下面的配置)。
这[...]
表明我省略了本应放在此处的配置部分。这些主要是条目和进一步的子网,它们的配置方式与子网和host
完全相同。172.16.0.0/24
172.16.1.0/24
我想要实现的是一般情况deny unknown-devices;
下,除非它们属于类dynamic
,在这种情况下我想从172.16.44.0/24
子网的池范围中分配一个 IP 地址。
log-facility local7;
default-lease-time 3600;
max-lease-time 86400;
authoritative;
shared-network testnet {
allow unknown-clients;
option subnet-mask 255.255.255.0;
option domain-name "test.net";
subnet 172.16.0.0 netmask 255.255.255.0 {
deny unknown-clients;
range 172.16.0.100 172.16.0.254;
option domain-name-servers 172.16.0.1;
option routers 172.16.0.1;
[...]
}
subnet 172.16.1.0 netmask 255.255.255.0 {
deny unknown-clients;
range 172.16.1.100 172.16.1.254;
option domain-name-servers 172.16.1.1;
option routers 172.16.1.1;
[...]
}
[...]
class "dynamic" {
match if substring(hardware, 1, 3) = 02:02:02;
log(error, substring(hardware, 1, 3));
}
subnet 172.16.44.0 netmask 255.255.255.0 {
option domain-name-servers 172.16.44.1;
option routers 172.16.44.1;
pool {
allow members of "dynamic";
range 172.16.44.10 172.16.44.254;
log(error, "Assigned dynamic IP");
}
}
[...]
}
现在的问题是,每当与 MAC 前缀匹配的设备02:02:02
尝试获取 IP 地址时,我都会log(...)
从类定义中获取,但实际分配不起作用。我也没有log(...)
从pool {...}
定义中看到。
语法似乎是正确的 —— 至少根据dhcpd -t
。
有人发现我在这里做错了什么吗?
答案1
为了使其正常工作,我们必须清除租约缓存/var/lib/dhcp/dhcpd.leases~
并修改类定义,如下所示。
class "cloudVM" {
match if (binary-to-ascii(16, 8, ":", substring(hardware, 0, 4)) = "1:2:2:2");
}
# cloud VMs
subnet 172.16.44.0 netmask 255.255.255.0 {
option domain-name-servers 172.16.44.1;
option routers 172.16.44.1;
pool {
range 172.16.44.10 172.16.44.254;
allow members of "cloudVM";
}
}