两个子网上有一个 DHCP 服务器

两个子网上有一个 DHCP 服务器

如何设置 dhcpd.conf 以便连接到 NIC 1 的所有客户端都具有 192.168.2.x IP,并且连接到 NIC 2 的所有客户端都获得 192.168.3.x IP,并且所有客户端的网络掩码均为 255.255.248.0。

我当前的 dhcpd.conf 配置文件:

option subnet-mask 255.255.248.0;

subnet 192.168.0.0 netmask 255.255.248.0 {
    option routers 192.168.2.10;
    option broadcast-address 192.168.2.255;
    option subnet-mask 255.255.248.0;
    option domain-name-servers 192.168.2.10;
    range 192.168.2.30 192.168.2.250;
}

subnet 192.168.0.0 netmask 255.255.248.0 {
    option routers 192.168.3.10;
    option broadcast-address 192.168.3.255;
    option subnet-mask 255.255.248.0;
    option domain-name-servers 192.168.3.10;
    range 192.168.3.30 192.168.3.250;
}

host host1 {
    hardware ethernet xxxxxxxxxxxxxx;
    fixed-address 192.168.2.10;
}

host host2 {
    hardware ethernet xxxxxxxxxxxxxx;
    fixed-address 192.168.3.10;
}

答案1

您的 dhcpd.conf 文件设置正确,但子网定义不正确。您不能在编号方案中使用 21 位网络掩码 (255.255.248.0)。如果您改用 24 位掩码 (255.255.255.0),它应该可以正常工作。

使用 21 位掩码:

Address:    192.168.2.0           11000000.10101000.00000 010.00000000
Address:    192.168.3.0           11000000.10101000.00000 011.00000000
Netmask:    255.255.248.0 (/21)   11111111.11111111.11111 000.00000000
                                                          ^^^

这里,“.2”和“.3”位于网络掩码之外,因此不包含在子网定义中。

使用 24 位掩码:

Address:    192.168.2.0           11000000.10101000.00000010.00000000
Address:    192.168.3.0           11000000.10101000.00000011.00000000
Netmask:    255.255.255.0 (/24)   11111111.11111111.11111111.00000000
                                                         ^^^

现在“.2”和“.3”位于网络掩码内,因此是子网定义的一部分。

答案2

有几种方法可以实现这一点。最简单但不一定是最好的方法是运行两个不同的 dhcpd 进程,每个进程都有自己的配置文件,并且每个进程都设置为监听特定的接口:

dhcpd -cf /etc/dhcpd-network1 eth0
dhcpd -cf /etc/dhcpd-network2 eth1

不过,这确实很麻烦。正确的做法是在您的网络上安装 dhcp 中继。大多数情况下,这通过“ip helper”命令在路由器上实现。在此设置中,路由器会拦截 dhcp 请求并将其转发到“ip helper”命令中指定的服务器上。由于 dhcp 服务器知道路由器转发请求的子网,因此它能够从适当的池中发出租约。

不过,如果这对您来说不是一个选择,恐怕您只能选择第一个选项。

编辑:

有可能您能够仅使用一个 dhcpd 守护进程和多个池。理论上,dhcpd 应该知道每个接口上的 IP 地址,并相应地发放租约。不幸的是,我目前没有简单的方法来测试这一点,所以它可能根本不正确。

相关内容