使用“iproute”通过更改默认路由来更改网络接口

使用“iproute”通过更改默认路由来更改网络接口

我的电脑(Ubuntu 16.04)通过以太网电缆连接到家庭网络。我想搬到另一个房间并使用 Wifi。我希望尽可能无缝地切换(例如,避免 VPN 断开连接)。我可以连接到 Wifi 和以太网,但如果此时我断开以太网应用程序,则会收到连接错误。

所以我想我需要一种方法来强制流量在断开电线之前使用 Wifi 接口。当两个接口都处于活动状态时,ip route显示:

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev wlp4s0  proto static  metric 600 
192.168.0.0/24 dev enp0s31f6  proto kernel  scope link  src 192.168.0.43  metric 100 
192.168.0.0/24 dev wlp4s0  proto kernel  scope link  src 192.168.0.7  metric 600 

如果我使用:

ip route del default via 192.168.0.254 dev enp0s31f6 

交通变得缓慢。

所以我想我必须更微妙一点,让两个接口都保持活动一段时间,但让 Wifi 接口成为首选。我相信这是通过在 Wifi 接口上采用比以太网接口更小的指标来实现的。但是,如果我这样做:

ip route change default via 192.168.0.254 dev enp0s31f6 proto static metric 600

我得到:

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev enp0s31f6  proto static  metric 600 

因此,该命令似乎替换了具有给定指标的任何接口。如果我尝试使用 100 或 600 之外的任何其他指标值,我会得到:

RTNETLINK answers: No such file or directory

当然,如果我使用 Wifi 并重新连接到以太网,流量会无缝切换到它......

那么,我的哪些假设是错误的?有解决办法吗?

答案1

豪克提到的解决方案是一种方法。这种方法的缺点是您必须保持(有线)以太网接口处于插入状态,直到所有连接“耗尽”为止。

另一种更平滑但也更复杂的方法(例如,我现在不知道您是否可以使用 NetworkManager 来实现这一点,您的路由指标建议您正在使用),将使用绑定将接口绑定在一起。这样,当拔掉有线以太网连接时,连接将自动故障转移到使用 WiFi。

我已经在我的回答中给出了如何配置 WiFi 和有线连接绑定的更详细解释使用 WiFi 端口作为冗余链路

答案2

您应该放出以太网接口的血。您可以借助iptables高级路由来做到这一点。和

iptables -m conntrack --ctstate NEW

您可以在 OUTPUT 链中找到新的连接并用 标记它们--set-mark

您可以使用它ip rule通过 WiFi 路由带有此标记的数据包。

一段时间后,您的所有或至少大部分流量将使用 WiFi,而不会遇到任何中断。

如果您控制路由器,那么您甚至可以使用 SNAT 保存永久连接。

相关内容