ISC DHCPD:与硬件地址匹配的类的所有成员的动态 IP 范围

ISC DHCPD:与硬件地址匹配的类的所有成员的动态 IP 范围

我有一个在 Debian 上运行的 DHCP 服务器(版本:isc-dhcpd-4.3.5)并管理多个子网,所有子网都通过同一个物理接口在虚拟接口等上eth1:1运行。eth1:2eth1

所有子网都已配置deny unknown-devices;,并且我正在手动将已知设备添加host XYZ { ... }为每个子网的条目(参见下面的配置)。

我现在想将特定子网中特定范围的 IP 动态分配给属于特定类别的未知设备(参见subnet 172.16.44.0/24下面的配置)。

[...]表明我省略了本应放在此处的配置部分。这些主要是条目和进一步的子网,它们的配置方式与子网和host完全相同。172.16.0.0/24172.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";
                }

        }

相关内容