我有两个通过两个不同的网络接口(以太网和 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 地址作为流量源,但它们都将使用相同的路由表来决定如何到达目的地。
实际上这并不完全正确,因为您可以拥有不同的命名空间和路由表,但这是这个答案之外的复杂性