听起来有点奇怪,但目前的网络配置是,我有两个本地网络:192.168.7.0/24 和 192.168.144.0/24。它们的网关分别是 192.168.7.1(R1)和 192.168.144.1(R2)。R2 通过 WLAN 连接到 R1 的本地网络,其 IP 地址为 192.168.7.94。R1 不直接连接到 R2 的本地网络(192.168.144.0/24)。
R1 是支持 OpenWRT 的 D-LINK 路由器。R2 是 Linux PC。
R1 上有一条静态路由,任何以 192.168.144.0/24 为目标的传入数据包都会转发到 192.168.7.94。R2 还接受来自任何以 192.168.144.0/24 为目标的接口的传入数据包,并将其转发到其配置为 192.168.144.1 的接口。
到目前为止,192.168.7.0/24 上的主机 192.168.7.74(H3)可以访问 192.168.144.0/24 上的任何主机,因为 192.168.7.1 可以将其数据包转发到 192.168.7.94(R2)。
问题是,我发现 H3 上的路由表没有条目表明任何发往 192.168.144.0/24 的数据包都应该发往 192.168.7.1(或连接到 R1 的接口)。当 H3 只连接到一个网络时,这是没问题的。
但是,如果 H3 使用 LAN 连接到 Internet,则 H3 的路由表中的“默认”条目将成为连接到 Internet 的 LAN 接口,然后所有发往 192.168.144.0/24 的数据包都会转发到 Internet 路由器,而该路由器肯定无法访问 R2 的内联网。那么问题是,一旦 H3 连接到 Internet,它就无法再访问 192.168.144.0/24,即使它仍连接到 R1 的网络(192.168.7.0/24)。
我想知道,R1 是否可以“通知”其所有主机在其路由表中添加一个条目,即将发往 192.168.144.0/24 的数据包发送到 192.168.7.1(或连接到 R1 的接口)。
答案1
我最终找到了一个使用 DHCP 的解决方案。
我在启用 OpenWRT 的路由器 R1 上的 DHCP 服务器上添加了“无类静态路由”选项(121 和 249)。它看起来像:
121,24.192.168.144,192.168.7.94
249,24.192.168.144,192.168.7.94
根据我在网上找到的信息,第二个 (249) 适用于 Microsoft Windows 客户端。请参考此链接来配置这些选项:https://ercpe.de/blog/advanced-dhcp-options-pushing-static-routes-to-clients
在 OpenWRT 中,我可以在我的 LAN 网络配置中添加这些选项(网络 - 接口 - LAN - 编辑 - DHCP 服务器 - 高级设置 - DHCP 选项)。
正确设置这些选项后,主机在收到 DHCP 租约时将能够从路由器 R1 接收静态路由。