如何设置 Linux 上网络接口的优先级

如何设置 Linux 上网络接口的优先级

我正在开发一个自定义的 Linux 操作系统(使用 Yocto 构建),我有两个互联网来源,一个是 GSM,另一个是 Wi-Fi。GSM 通过 PPP 连接(ppp0 接口)处理,对于 Wi-Fi,我使用wpa_supplicantwlan0 接口。我可以在 wlan0 接口上在 AP 和客户端模式之间切换。每当我切换到客户端模式,并且已经连接到 pppd 时,我的设备仍然默认使用 GSM,这意味着它仍然使用 SIM 卡而不是 Wi-Fi 的数据传输。要使用 Wi-Fi 作为网络源,我必须停止 pppd 并执行dhclient -v -1 wlan0

我想建立具有某种优先级的连接。当我连接到 Wi-Fi 网络并且有互联网接入时,使用 Wi-Fi 作为网络源,否则使用 GSM。现在看起来它的工作方式相反。

我尝试将度量值(等于 0)设置为networkd或作为route参数,但有趣的是,我默认将 ppp0 度量设置为 0,但我用来设置它的命令是route add default dev $PPP_IFACE metric 1

这是我的路线输出:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 ppp0
default         *               0.0.0.0         U     1      0        0 ppp0
10.8.8.0        *               255.255.255.0   U     0      0        0 proxy
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 wlan0
192.168.77.0    *               255.255.255.0   U     0      0        0 br0

有人可以向我解释如何设置它以达到我的目标设置吗?

答案1

我认为如果不使用就无法对路线进行优先排序ip route,但您可以使用多个路由表和一些iptables

Route tables: Linux-2.x can pack routes into several routing tables identified by a number
in the range from 1 to 2^32-1 or by name from the file /etc/iproute2/rt_tables By default
all normal routes are inserted into the main table (ID 254) and the kernel only uses this
table when calculating routes. Values (0, 253, 254, and 255) are reserved for built-in use. 

您可以创建多个路由表,每个路由表都有自己的默认网关,然后使用iptables其中一个路由表来路由数据包。我曾使用过此方案以及一个脚本,该脚本通过我的主接口定期 ping 主机。如果失败,它将切换路由表,如果稍后收到回复,它将改回默认配置。简单而有效。

相关内容