在 Ubuntu 21.10 上,我有一个通过 USB 连接的蜂窝调制解调器,我需要将其作为所有网络流量使用的主要接口。但是,我还需要 wifi 接口(在我的例子中为wlo1
)来继续工作,并作为备份,以防 ppp0 接口出现故障。
ping google.com -I ppp0
-> 通过 ppp 工作
ping google.com -I wlo1
-> 通过 wifi 工作
ping google.com
-> 通过 ppp 工作(这是困难的部分)
我可以使用 pppd 和相应的脚本使蜂窝调制解调器正常上网,并获得有效的 IP 地址。这是我似乎正在努力解决的路线。
我尝试过的
点对点
我首先尝试使用 PPP 脚本中的选项,例如defaultroute
和 等选项replacedefaultroute
。defaultroute
根本不改变路由表并添加默认路由。也许这是因为,据我了解,路由表只能有一个默认路由。没有把握。当尝试使用该replacedefaultroute
选项时,pppd 确实会在主路由表中添加一个默认条目,但是,这最终会破坏两个接口,并且我没有任何互联网连接。它不会删除现有的 wifi 默认路由,因此主路由表中存在两条默认路由。
手动添加路线
然后我尝试手动将路由添加到主路由表。当我运行时sudo ip route add {ipAddress} dev ppp0 src {ipAddress}
,两个接口都可以工作,但 wifi 仍然是主要接口。尝试添加度量值低于 wifi 度量值的路由也无法使 ppp 接口成为主要接口(即ping google.com
仍然通过 wifi 出去)。我可以添加第二个默认值,但它必须有一个指标更高比 wifi 更重要,否则会导致两个连接停止工作。
第二个路由表
遵循其他堆栈交换帖子和像这样的文章,我探索了拥有两个路由表并在第二个路由表中添加一个路由和一个默认路由的选项。虽然这不会中断任一连接,但即使使用低于 wifi 指标的指标,ppp 接口仍然不是主要接口。另外,如果我断开与 wifi 的连接,那么 ppp 接口也会停止工作,并且第二个路由表被清除(这是 NetworkManager 这样做的吗?)
问题
我想要完成的事情可能吗?如果是这样,我做错了什么?我是否与 NetworkManager 发生冲突?
任何帮助都是大大地赞赏!
答案1
需要注意的一件事是您的 DNS 服务器 ( /etc/resolv.conf
)。我遇到了问题,我想优先考虑 wlan0 接口,但文件中两个最高的条目resolv.conf
是 4G 网络提供的 DNS 服务器。您可以通过取消提供程序文件中的“usepeerdns”来拒绝这些 DNS 服务器。通常,就我而言,ping 最终会起作用,但每次 ping 大约需要 10 秒,因为设备首先尝试访问第一个 DNS 服务器。
另一件有助于确定是否有 DNS 问题的方法是直接 ping IP 地址(例如 8.8.8.8,这是由 Google 运营的 DNS 服务器)。
我还尝试在路由表中一致地获取 ppp0 和 wlan0 的两条默认路由(具有不同的指标),但未能实现这一点。