我遇到了多宿主设备的问题,该设备必须满足一些特定要求。我尽量以中立的方式描述这个问题,而不是预先详细介绍可能的解决方案。虽然我有一些想法,但它们都无法解决下面描述的所有情况。
该设备运行内核为 5.1.x 的定制嵌入式 Linux,并且最多可同时拥有三个网络连接。
- eth0(有线以太网)
- mlan0(WiFi)
- mobile1(LTE 调制解调器)
DHCP 服务器或移动提供商将为每个活动连接提供一个默认网关。
问题 1:互联网连接
- 如果 eth0 可以访问互联网,则它必须优先于 mlan0 和 mobile1 访问互联网。
- 如果 mlan0 可以访问互联网,则它必须优先于 mobile1。
- 如果 eth0 和 mlan0 都无法访问互联网,则使用 mobile1。
- 如果一个互联网连接失败,则必须使用下一个互联网连接。
- 如果一个互联网连接恢复,并且比当前活动连接更优先,则必须使用重新建立的连接。
配置路由以使其像这样工作的最佳方法是什么?
问题 2:特定接口上的 DNS 和连接
- 在某些情况下,可以通过 LTE 连接访问专用网络,但无法访问互联网。因此必须通过以太网或 WiFi 连接互联网。
- 我们必须检查 LTE 连接的 DNS 服务器,如果它不认识主机,我们必须继续使用另一个接口的 DNS 服务器。
- 在这种情况下,我们必须使用 LTE 连接来处理任何可以访问的事情,但由于主机名和 IP 地址重叠,我们在尝试之前无法知道请求是针对公共互联网还是通过移动宽带的专用网络。
我很确定,我并不是唯一一个遇到这种“尝试这个网络,如果失败,就使用另一个”的情况的人,但经过几个小时的研究,我仍然无法找到解决问题的方法。
有人有解决方案或好的建议来解决这两个问题吗?
答案1
您必须定期检查所有路由,并根据您能想到的任何逻辑安装适当的默认路由。自己动手。编写脚本并通过 cron 运行它,或者编写守护进程,这取决于您。或者找到一个现成的。Linux 不会为您做这件事。
Linux 无法根据可达性自动选择路由。它不会监视默认网关或系统中任何其他网关的可达性。它能为您实现的最大自动化是,如果 NIC 已关闭,它将拆除“已连接”路由,并且如果有其他路由依赖于它(例如默认路由或其他路由),它们也将被删除。但由于“链接已启动”和“可以访问互联网”不是一回事,因此有可能 eth 已启动(运营商存在),但链接另一侧的设备本身无法访问互联网。(想象一个以太网网络,如 [设备]-[交换机]-[路由器]-...;物理层在交换机上结束,因此即使路由器发生故障,设备也不会看到它。)在这种情况下,Linux 会很乐意看到链接并保留不工作的路由,因此您不应该依赖这种行为。
看这里还。
答案2
这就是路由协议的用途。安装其中一个ospf
版本,然后frr
定制每个设备的优先级。如果主设备发生故障,ospf
将路由表回退到下一个设备。
如果您有多个网络都挂在其上,那么您将需要配置 asbr(自治系统边界路由器)或 abr(自治边界路由器)。
如果您的其他设备不支持 ospf,那么您应该能够恢复到rip
或rip2
。
如果这种情况不可能发生,那么互联网就无法正常运转。