取代默认路由

取代默认路由

我有两个网络接口eth1wlan0。我希望所有出站流量在eth1之前通过wlan0,但如果eth1没有启动,那么wlan0应该处理流量。

两个接口均通过 dhclient 分配 IP。

我已尝试supersede routers过,但没有达到预期的效果(如果先启动,并设置为默认网关,然后启动,它不会覆盖网关)。interface "wlan0"dhclient.confwlan0eth1

有一个更好的方法吗?

答案1

您要查找的关键字是“metric”。它基本上指定了特定路由的“首选”程度。本文末尾的注释解释了如何在基于 Debian 的系统上进行设置:

https://singpolyma.net/2012/08/how-to-force-the-default-route-to-always-use-a-specific-interface-on-ubuntu/

文章中有一些关于如何定制 dhclient 的信息,但评论中有一个更简单的替代方法:

另一种方法是编辑 /etc/networking/interfaces,在您不想强制传输流量的 NIC 部分下添加行“metric 150”(不带引号)。

这将为另一个 NIC 提供较低的指标,从而赋予其优先级。

答案2

没有内置方法可以做到这一点,但使用一些 shell 脚本很容易做到。由于这两个接口都是由 dhclient 启动的,因此它们有一个钩子,允许您按照手册执行脚本:

在 dhclient 使用新的 IP 地址、子网掩码和路由启动接口后,在 REBOOT/BOUND 状态下,它会立即检查是否存在可执行的 /etc/dhcp/dhclient-up-hooks 脚本,如果找到则执行该脚本。此脚本可以处理环境中默认情况下不处理的 DHCP 选项。每个接口的 /etc/dhcp/dhclient-${IF}-up-hooks 脚本将覆盖通用脚本,并在启动接口 $IF 时执行。

因此,对于您的情况,如果已存在默认路由,则您希望删除来自 WAN 接口的默认路由。因此,您可以使用一些 shell 脚本创建文件 /etc/dhcp/dhclient-wlan0-up-hooks,如下所示:

RESULT=$(netstat -rn | grep ^0.0.0.0 | grep eth0\$ | wc -l)

if [[ $RESULT == "1" ]]; then
   printf "eth0 already has a default route\n"
   printf "removing wlan0 default route since eth0 default route found\n"
   ...enter ip route del command to delete this route ...
else
   printf "do nothing since eth0 default route NOT found"
fi

相关内容