我将 Linux 机器设置为我的互联网路由器。我的接口eth0
连接到局域网,eth1
接口连接到 pppoa 调制解调器,并使用 dhcp 配置到我的公共 IP。由于 ARP 问题,我必须使用调制解调器本身(其 IP 为 172.16.0.1)作为下一跳连接到互联网。为此,我使用以下 2 行:
route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1
这通常在接口配置了 dhcp 后运行,并且一切正常。当调制解调器断开连接、重新连接并由我的 ISP 分配新的 ip 地址时,问题就出现了。当 dhcpc 守护进程eth1
为新 ip 重新配置接口时,我的路由表会丢失访问互联网所需的条目,这意味着我需要route
重新输入这 2 个命令。有没有办法强制 linux 保留路由,或者在什么时候自动添加它们dhcpcd
?
在谷歌上搜索“持久路线”会给出跨靴子保持路线的方法,但这不是我需要的。
答案1
选项1
您通常可以在 DHCP 服务器中设置默认网关,这样每当它分配 IP 时,它也会为客户端提供默认网关。请查阅 DHCP 服务器的配置以了解如何执行此操作。
选项 2
在客户端上实现此目的的另一种方法是创建一个 dhcpcd 钩子/usr/lib/dhcpcd/dhcpcd-hooks
(slackware 上的目录可能不同,但我对此表示高度怀疑)。创建一个名为的新文件,40-route
其内容如下:
route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1
或者这也应该可行:
ip route add 172.16.0.0/24 via 172.16.0.1
这应该在 dhcpcd 获取新 IP 后执行此命令。您必须更改192.168.0.0/24
为您的网络正在使用的 IP。
答案2
为了后代,这就是对我有用的东西。
# /lib/dhcpcd/dhcpcd-hooks/40-route
if [ "$reason" = "BOUND" ] && [ "$interface" = "eth1" ]; then
route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1
fi