我有来自两个不同 ISP 的两个互联网连接。eth0 上使用 ADSL,wlan0 上使用 4G。如果一个 ISP 出现故障,是否有办法让另一个 ISP 自动接管,而无需物理路由器,而由主机操作系统 (Ubuntu 18.04) 接管?
答案1
我从未亲自尝试过从主机操作系统执行此操作。但经过反复考虑后,我决定在互联网上搜索一下,看看能否找到您要查找的内容。
我在 gist.github.com 上找到了由用户“Apsu”创建的网关故障转移示例脚本。您可以下载 bash 脚本这里。
您必须根据您的具体设置进行修改,添加您的接口名称、网关地址,然后就可以开始了。
主机操作系统的脚本:
#!/bin/bash
# Set defaults if not provided by environment
CHECK_DELAY=${CHECK_DELAY:-5}
CHECK_IP=${CHECK_IP:-8.8.8.8}
PRIMARY_IF=${PRIMARY_IF:-eth0}
PRIMARY_GW=${PRIMARY_GW:-1.2.3.4}
BACKUP_IF=${BACKUP_IF:-eth1}
BACKUP_GW=${BACKUP_GW:-2.3.4.5}
# Compare arg with current default gateway interface for route to healthcheck IP
gateway_if() {
[[ "$1" = "$(ip r g "$CHECK_IP" | sed -rn 's/^.*dev ([^ ]*).*$/\1/p')" ]]
}
# Cycle healthcheck continuously with specified delay
while sleep "$CHECK_DELAY"
do
# If healthcheck succeeds from primary interface
if ping -I "$PRIMARY_IF" -c1 "$CHECK_IP" &>/dev/null
then
# Are we using the backup?
if gateway_if "$BACKUP_IF"
then # Switch to primary
ip r d default via "$BACKUP_GW" dev "$BACKUP_IF"
ip r a default via "$PRIMARY_GW" dev "$PRIMARY_IF"
fi
else
# Are we using the primary?
if gateway_if "$PRIMARY_IF"
then # Switch to backup
ip r d default via "$PRIMARY_GW" dev "$PRIMARY_IF"
ip r a default via "$BACKUP_GW" dev "$BACKUP_IF"
fi
fi
done
对于网络硬件:
与仅从主机操作系统进行故障转移相比,使用路由器实现此功能具有相当大的优势。立即想到的是同时使用两个连接带宽。(充分利用两个 ISP 连接)
您可以将 PFsense / OpenSense 用作双 WAN 路由器。(大多数旧 PC 硬件都可以使用。)我相信 DD-WRT 支持的路由器经过一些调整后也能够实现 WAN 故障转移。或者您可以选择开箱即用的解决方案,例如 Sophos 或 Netgear prosafe,我相信还有其他解决方案,但大多数开箱即用的解决方案都比家庭用户愿意支付的价格要高。双 WAN 路由器设置允许您增加互联网带宽。您可以根据特定需求平衡流量负载。您可以获得互联网连接冗余和故障转移。
问候,