Linux 使用错误的默认网关

Linux 使用错误的默认网关

我有两个通过两个不同的网络接口(以太网和 WiFi)连接的互联网连接。配置的IP地址分别为192.168.1.10和192.168.2.5。当我使用 ip route get 8.8.8.8系统时,使用具有最低指标的默认网关(以太网路由)。但是当我这样做时,ip route get from 192.168.2.5 8.8.8.8系统仍然尝试使用以太网网关而不是 wifi 网关:

8.8.8.8 from 192.168.2.5 via 192.168.1.1 dev eno1 uid 1000

为什么会发生这种情况?

我的路由表:

default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.10 metric 100
default via 192.168.2.1 dev wlan0 proto dhcp src 192.168.2.5 metric 600
<subnet routes>

答案1

我认为你想要做的是设置“基于源的路由”。通常,路由是基于目的地的。

为此,我们需要利用高级ip功能,通过创建第二路由表并告诉系统何时使用该表。

所以首先在末尾添加一行,/etc/iproute2/rt_tables内容如下

100 wifiroute

现在您可以通过以下命令使用此表

ip rule add from 192.168.2.5 table wifiroute

最后添加到该表的默认路由

ip route add default via 192.168.2.1 dev wlan0 table wifiroute

当然,这两个ip命令将在重新启动时丢失,因此您应该确保它们成为启动顺序的一部分。

您现在应该能够测试这一点,例如traceroute

traceroute www.google.com
traceroute www.google.com -s 192.168.2.5

第二个应该通过 wlan0 发出,因为我们正在设置源地址。

ip route show table wifiroute您可以使用;查看路由表。您可以使用以下命令查看所有表中的所有路线ip route show table all

答案2

根据定义,您只能拥有一条有效的默认路由。这是路由表中没有特定条目的所有流量默认采用的路由(因此得名)。

路线是根据其目的地来定义的。您可以指定任何主机的 IP 地址作为流量源,但它们都将使用相同的路由表来决定如何到达目的地。


实际上这并不完全正确,因为您可以拥有不同的命名空间和路由表,但这是这个答案之外的复杂性

相关内容