在重新启动之间保留内核 IP 路由 table

Persist kernel IP routing table between reboots

我有以下系统:

Linux <HOSTNAME> 5.4.24-<SPECIFIC_BUILD> #1 SMP PREEMPT [...] aarch64 GNU/Linux

我在网络设备 wlan0 上配置了接入点网络,而 ppp0wvdial 蜂窝连接服务处理。后一个设备未在 /etc/network/interfaces 中配置,因此我无法在那里修改其指标。

这是我的内核IP路由table:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
10.64.64.64     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     0.0.0.0         255.255.255.0   U     40     0        0 wlan0

我希望它像

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     20     0        0 ppp0
10.64.64.64     0.0.0.0         255.255.255.255 UH    20     0        0 ppp0
192.168.0.0     0.0.0.0         255.255.255.0   U     40     0        0 wlan0

ppp0 指标必须是 20。我可以手动编辑它:

sudo route del -net 0.0.0.0 gw 0.0.0.0 netmask 0.0.0.0 dev ppp0
sudo route del -net 10.64.64.64 gw 0.0.0.0 netmask 255.255.255.255 dev ppp0
sudo route add -net 0.0.0.0 netmask 0.0.0.0 metric 20 dev ppp0
sudo route add -net 10.64.64.64 netmask 255.255.255.255 metric 20 dev ppp0

问题是此配置不会持续存在,并且会在重新启动时被删除。

我该如何解决?

防止它们在重启时被删除可能是 phrase/approach 的错误方法。在启动时以全新的空路由 table 开始,并在设备初始化时(重新)创建路由(根据配置)是非常标准的行为。

我对涉及的软件不是很熟悉,但是看起来 wvdialpppdpppd 根据其联机帮助页在建立连接后调用以下 shell 脚本:

> /etc/ppp/ip-up <interface-name> <tty-device> <speed> <local-IP-address>

所以我怀疑您可以将手动路由命令插入其中并完成。 (您可以省略 sudo,因为 pppd 仍然以 root 身份运行脚本。

可能是这样的:

#!/bin/sh

if test "" = 'ppp0' ; then
    route del -net 0.0.0.0     gw 0.0.0.0 netmask 0.0.0.0                      dev ppp0 ;
    route del -net 10.64.64.64 gw 0.0.0.0 netmask 255.255.255.255              dev ppp0 ;
    route add -net 0.0.0.0                netmask 0.0.0.0          metric 20   dev ppp0 ;
    route add -net 10.64.64.64            netmask 255.255.255.255  metric 20   dev ppp0 ;
fi;