Linux 多网络自动路由设置

本文介绍如何通过设置本机上的路由规则,实现在同时连接多个网络时,根据目标地址所属网段来自动选择走哪一个网络。其中有线网卡连接内网(校园网 / 企业内网),无线网卡连接外网(手机热点),效果为:同时连接两个网络时,访问内网地址(指定网段)会走有线网络,访问其他网络地址会走无线网络;而单独连接其中一个网络时,也能够正常使用。

我所使用的操作系统是 Manjaro Linux,Gnome 桌面,对于其他操作系统和桌面环境未进行测试,请自行寻找是否有相似的设置。

首先设置无线网络,假设网关为 192.168.43.1 ,打开 设置 -> 网络 ,点击有线网络的设置图标,切换到 IPv4 选项卡,在最下方“路由”设置中,关闭“自动”按钮,并填入以下内容。默认设置下,有线网络的优先级要高于无线网络,而我们需要无线网络优先于有线网络,因此通过调整跃点(Metric)的值为 99 来提高其优先级(有线网络的默认跃点值为 100,值越小优先级越高),点击“应用”并重新连接网络。

地址 子网掩码 网关 跃点
0.0.0.0 0.0.0.0 192.168.43.1 99

进行以上设置之后,当我们连接到这个网络时,会自动生成下面这样一条默认路由规则。它表示,在没有其他特定规则和优先级更高的默认规则与目标地址匹配时,则使用这条规则,即通过 wlp69s0 网卡访问 192.168.43.1 网关。

default via 192.168.43.1 dev wlp60s0 proto static metric 99

接着设置有线网络,假设网关为 192.168.2.1,我们需要让 172.16.0.0/12 网段的地址走这个网络。打开 设置 -> WiFi,点击网络旁的设置按钮,同样切换到 IPv4 选项卡,关闭路由设置的“自动”按钮并填入以下内容,点击“应用”并重新连接网络。这里不设置跃点的值,使其保持默认值 100.

地址 子网掩码 网关 跃点
172.16.0.0 255.240.0.0 192.168.2.1
0.0.0.0 0.0.0.0 192.168.2.1

进行以上设置后,当我们再连接这个网络时,会自动生成下面这样两条路由规则。其中,第二条为特定规则,要优先于所有 default 规则。

default via 192.168.2.1 dev enp59s0 proto static metric 100 
172.0.0.0/8 via 192.168.2.1 dev enp59s0 proto static metric 100

同时连接两个网络时,系统中所有的路由规则如下。对于 172 网段的地址,由于第三条特定静态规则的存在,它会通过 enp59s0 这个有线网卡来走 192.168.2.1 网关,也就是走内网,而对于其他没有定义特定规则的地址,有两条默认规则可以选择,但是第一条规则的优先级要高于第二条,所以对于其他的流量,都走无线网络。

$ ip route show
default via 192.168.43.1 dev wlp60s0 proto static metric 99
default via 192.168.2.1 dev enp59s0 proto static metric 100
172.0.0.0/8 via 192.168.2.1 dev enp59s0 proto static metric 100
192.168.2.0/24 dev enp59s0 proto kernel scope link src 192.168.2.102 metric 100
192.168.43.0/24 dev wlp60s0 proto kernel scope link src 192.168.43.42 metric 600

而只连接有线网络时,系统中的路由规则如下。

$ ip route show
default via 192.168.2.1 dev enp59s0 proto static metric 100
172.0.0.0/8 via 192.168.2.1 dev enp59s0 proto static metric 100
192.168.2.0/24 dev enp59s0 proto kernel scope link src 192.168.2.102 metric 100

只连接无线网络时,系统中的路由规则如下。

$ ip route show
default via 192.168.43.1 dev wlp60s0 proto static metric 99
192.168.43.0/24 dev wlp60s0 proto kernel scope link src 192.168.43.42 metric 600

以上的路由规则也可以通过类似下面的命令来手动添加,但是这样添加的路由规则重启后便失效,而且不能随网络连接情况自动调整,因此并不推荐。

$ ip route add 172.0.0.0/8 via 192.168.2.1 dev enp59s0

参考和工具:

linux 同时连接内外网的设置 - CSDN

东北大学 IP 地址聚合程序

作者

ChinaNuke

发布于

2021-06-12

许可协议

评论