如何设置 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 地址,并相应地发放租约。不幸的是,我目前没有简单的方法来测试这一点,所以它可能根本不正确。