即使相关接口出现故障,我怎样才能保留路由表中的条目?

即使相关接口出现故障,我怎样才能保留路由表中的条目?

我将 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

相关内容