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