![Linux dhcpd 服务器具有多个范围,可根据请求源分配 IP](https://linux22.com/image/626128/Linux%20dhcpd%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E8%8C%83%E5%9B%B4%EF%BC%8C%E5%8F%AF%E6%A0%B9%E6%8D%AE%E8%AF%B7%E6%B1%82%E6%BA%90%E5%88%86%E9%85%8D%20IP.png)
我已经在同一接口 (eth0) 上配置了具有多个作用域的 Linux dhcpd 服务器。需要这些 IP 地址的设备 (DHCP 客户端) 位于两个不同的远程网络上。网络团队已完成所有配置,包括中间的 DHCP 中继,因此请求以以下格式到达我的 DHCP 服务器:
DHCPDISCOVER from macaddress via 10.238.16.10 (remote_network_1)
DHCPDISCOVER from macaddress via 10.238.25.20 (remote_network_2)
(我认为上面提到的 IP 属于将 DHCP 请求转发到我的服务器的远程路由器。)
现在,DHCP 服务器正在成功地将第一个配置的范围 (10.238.16.x) 中的 IP 分配给从 remote_network_1 和 remote_network_2 发出请求的客户端。
我该如何配置它,以便当请求来自 10.238.16.10 时,它会分配一个 10.238.16.X IP,而当请求来自 10.238.25.20 时,它会分配一个 10.238.25.X IP。
我知道还有其他方法可以解决这个问题 - 比如配置 dhcpd 来监听两个不同的接口等等,但这对我来说不起作用。
我尝试了“选项广播地址”,但没有作用。
我的dhcpd.conf:
ddns-update-style none;
default-lease-time 6000;
max-lease-time 72000;
authoritative;
log-facility local7;
subnet 10.238.24.0 netmask 255.255.255.248 {
}
shared-network DA {
subnet 10.238.16.0 netmask 255.255.255.0{
range 10.238.16.52 10.238.16.254;
option routers 10.238.24.9;
option broadcast-address 10.238.16.255;
}
subnet 10.238.25.0 netmask 255.255.255.0{
range 10.238.25.52 10.238.25.254;
option routers 10.238.24.9;
option broadcast-address 10.238.25.255;
}
}
来自系统日志:
Feb 3 13:32:18 linux-server dhcpd: DHCPDISCOVER from b8:5e:7b:1e:c2:89 via 10.238.25.20
Feb 3 13:32:19 linux-server dhcpd: DHCPOFFER on 10.238.16.53 to b8:5e:7b:1e:c2:89 (android-ba98679bfc07f0cb) via 10.238.25.20
Feb 3 13:32:19 linux-server dhcpd: DHCPREQUEST for 10.238.16.53 (10.238.24.20) from b8:5e:7b:1e:c2:89 (android-ba98679bfc07f0cb) via 10.238.25.20
Feb 3 13:32:19 linux-server dhcpd: DHCPACK on 10.238.16.53 to b8:5e:7b:1e:c2:89 (android-ba98679bfc07f0cb) via 10.238.25.20
Feb 3 13:35:40 linux-server dhcpd: DHCPDISCOVER from 40:f3:08:89:3f:13 via 10.238.16.10
Feb 3 13:35:41 linux-server dhcpd: DHCPOFFER on 10.238.16.54 to 40:f3:08:89:3f:13 (android-47aa390064e91817) via 10.238.16.10
Feb 3 13:35:41 linux-server dhcpd: DHCPREQUEST for 10.238.16.54 (10.238.24.20) from 40:f3:08:89:3f:13 (android-47aa390064e91817) via 10.238.16.10
Feb 3 13:35:41 linux-server dhcpd: DHCPACK on 10.238.16.54 to 40:f3:08:89:3f:13 (android-47aa390064e91817) via 10.238.16.10
答案1
删除了shared-network
部分。这不是共享网络。您只需要两个范围。来自man dhcpd.conf
:
shared-network 语句用于通知 DHCP 服务器某些 IP 子网实际上共享同一物理网络。共享网络中的任何子网都应在 shared-network 语句中声明。在启动这些子网上的客户端时将使用 shared-network 语句中指定的参数,除非子网或主机级别提供的参数覆盖它们。如果共享网络中的任何子网有可用于动态分配的地址,则这些地址将被收集到该共享网络的公共池中,并根据需要分配给客户端。无法区分客户端应在共享网络的哪个子网上启动。
您还应该修复option routers
每个子网中的行。此行应列出每个网络的默认网关。
答案2
最后我们发现最好的方法是配置 DHCPD 以根据设备 mac 地址分配静态 IP。
我们控制连接到这些网络的设备,而且这些设备的数量有限,所以这个解决方案对我们来说很有效。这需要一些额外的工作,但也增加了一些安全性。