我们使用多个提供商,其中一个通过 ubuntu 14.04 上的 pppd 守护进程使用 pppoe 创建连接。
早期没有多个提供商 pppd 自行管理默认路由(建立连接时创建,pppoe 关闭时删除)。但现在我使用以下选项禁用了它peers/rt
nodefaultroute
noreplacedefaultroute
因为我需要针对多个提供商的运行方案制定更复杂的 IP 规则。
我研究了 pppd 脚本 ip-up、ip-down、ip-up.d、ip-down.d,但没有找到删除默认路由的方法。
因此我假设它在他们的代码中实现了这一点。
我可以post-down
在提供程序配置/etc/network/interfaces
文件中添加指令,如下所示:
ip route add default dev ppp60 table default
作为一个技巧。
我计划在单独的初始化脚本中管理默认路由。
有没有解决方法可以防止 pppd 管理(删除)默认路由?
更新1:
default dev ppp60 scope link
当连接重新启动或断开时,我想禁止 pppd 删除默认路由。
我使用接口(pppd 由 ifup 和 ifdown 命令管理)和标准 debian/ubuntu 网络子系统配置工具,如下所示:
auto rt
iface rt inet ppp
provider rt
pre-up /sbin/ifconfig ethtop up
post-up until ip a | grep -q ppp60; do sleep 1 > /dev/null; done
post-up ip route add default via "$( ip -4 a show dev "ppp60" | grep -E '\<peer\>' | sed -r 's/.*peer ([^ /]*).*/\1/' )" table isc-rt
post-up ip rule add pref 30001 fwmark "0x$( gethostip -x "$(ip -4 a show dev "ppp60" | grep -E '\<inet\>' | sed -r 's/.*inet ([^ /]*).*/\1/')" )" lookup isc-rt
post-up ip rule add pref 30002 from "$( ip -4 a show dev "ppp60" | grep -E '\<inet\>' | sed -r 's/.*inet ([^ /]*).*/\1/' )" lookup isc-rt
post-up ip rule add pref 30003 to "$( ip -4 a show dev "ppp60" | grep -E '\<peer\>' | sed -r 's/.*peer ([^ ]*).*/\1/' )" lookup isc-rt
post-up /etc/init.d/fw restart
post-down ip route flush table isc-rt
post-down ip rule del pref 30001
post-down ip rule del pref 30002
post-down ip rule del pref 30003
post-down /etc/init.d/fw restart
这是我的主要路线:
root@gate:/etc/ppp# ip route list
default dev ppp60 scope link
10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1
10.8.0.0/24 via 192.168.128.13 dev br-eth0
83.Y.Y.196 dev ppp60 proto kernel scope link src 93.Y.Y.67
95.X.X.0/24 dev ethmiddle proto kernel scope link src 95.X.X.40
192.168.128.0/24 dev br-eth0 proto kernel scope link src 192.168.128.1
我还有每个提供商及其默认网关的表格
这是我的 pppd 选项:
root@gate:/etc/ppp# awk '!/^ *#/ && NF' /etc/ppp/options
asyncmap 0
noauth
crtscts
lock
hide-password
modem
lcp-echo-interval 30
lcp-echo-failure 4
noipx
这是我当前的提供商对等配置:
user "gsdf6sg84"
noipdefault
defaultroute
unit 60
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
noauth
persist
mtu 1492
maxfail 0
plugin rp-pppoe.so ethtop
debug
答案1
当相应的接口被删除时,内核(不是 pppd)会自动删除所有相关路由。