在重新启动之间保留内核 IP 路由 table
Persist kernel IP routing table between reboots
我有以下系统:
Linux <HOSTNAME> 5.4.24-<SPECIFIC_BUILD> #1 SMP PREEMPT [...] aarch64 GNU/Linux
我在网络设备 wlan0
上配置了接入点网络,而 ppp0
由 wvdial
蜂窝连接服务处理。后一个设备未在 /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 开始,并在设备初始化时(重新)创建路由(根据配置)是非常标准的行为。
我对涉及的软件不是很熟悉,但是看起来 wvdial 是 pppd 和 pppd 根据其联机帮助页在建立连接后调用以下 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;
我有以下系统:
Linux <HOSTNAME> 5.4.24-<SPECIFIC_BUILD> #1 SMP PREEMPT [...] aarch64 GNU/Linux
我在网络设备 wlan0
上配置了接入点网络,而 ppp0
由 wvdial
蜂窝连接服务处理。后一个设备未在 /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 开始,并在设备初始化时(重新)创建路由(根据配置)是非常标准的行为。
我对涉及的软件不是很熟悉,但是看起来 wvdial 是 pppd 和 pppd 根据其联机帮助页在建立连接后调用以下 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;