我有两台计算机通过以太网直接连接,其中一台用作 dhcp 服务器,另一台用作客户端
我的配置:
interface eth0
lease_file /var/lib/udhcpd/udhcpd.leases
remaining no
start 192.168.1.2
end 192.168.1.16
option dns 9.9.9.9
option dns 192.168.1.1
option subnet 255.255.255.255
option router 192.168.1.1
option domain local
option lease 864000
我混合和匹配了选项,甚至尝试不使用这些选项,但结果大多相同:我仍然必须在两台机器上手动添加路线。
我预期的行为是 udhcpd 在 PC_0 上运行,udhcpc 在 PC_1 上运行,PC_1 通过 dhcp 从 PC_0 获取地址和路由,我可以从另一个 ping 一个,反之亦然。但事实并非如此,因为ip route add remote_ip/subnet_mask via local_ip dev eth0
每当我连接它们时我仍然需要这样做。我还必须在运行 udhcpd 的 PC_0 上手动分配 IP 地址。我该如何解决?
答案1
您指定:
option subnet 255.255.255.255
这意味着当客户端创建地址时,它将具有 /255.255.255.255 网络掩码,即 CIDR 表示法中的 /32 。例如,租用 192.168.1.10/32 的 LAN 中有多少台主机?有只有一个。对于一台主机,无需添加路由即可到达此类 LAN:这就是 Linux 内核不会添加自动 LAN 路由的原因(通常使用命令ip route
as来查看proto kernel scope link
)。
通过发布更宽的网络掩码来解决此问题,该网络掩码将允许包含从 192.168.1.1(路由器具有最低地址)到 192.168.1.16(范围结束:最高地址)的所有范围。 /28 将位于 192.168.1.0 和 192.168.1.15 之间:不够。因此 /27 <=> 255.255.255.224 就足够了,或者您也可以选择通常的 /24 (255.255.255.0)。任何更广泛的内容都有与其他内容冲突的风险,考虑到 DHCP 服务器也可能充当互联网的路由器(例如:到达 9.9.9.9 处的 DNS 服务器),即使此处未公开此信息,因此也有一个对方。这样就解决了DHCP客户端的配置问题。
至于服务器端,应该配置一个匹配的网络掩码:因此使用 192.168.1.1 加上上面选择的相同网络掩码,介于 192.168.1.1/27 和 192.168.1.1/24 之间。同样的情况也会发生:内核将自动proto kernel
为配置了此类地址的 LAN 添加一条类型的路由。