场景如下:Linux 机器,运行 Debian,有两个 NIC(宽带连接和 Wifi 连接),两者都具有 DHCP,并且没有预先已知的网络信息,并且可能会随着时间的推移而变化。我们希望使用 wifi 连接作为默认连接,但如果 wifi 连接由于某种原因失败,则自动回退到宽带连接。此外,一旦 wifi 连接再次开始工作,我们希望自动返回到 wifi 连接。
知道如何设置吗?我想通过 ip 路由来做到这一点,但是 wifi 连接的探测应该相当普遍,就像对特定服务器的 ping 一样(检查应该类似于 ping 的原因是 wifi 连接可能仍然存在,但 wifi 本身不再连接到互联网)。
答案1
我通过以下后台脚本解决了这个问题:
#!/bin/sh
PRIMARY=wlan0
SECONDARY=eth1
SLEEP=60
PING=8.8.8.8
CONDITION="100% packet loss"
while :
do
echo Init
ifmetric $PRIMARY 100
ifmetric $SECONDARY 200
if [ "`ip route | grep default | grep $PRIMARY`" = "" ];
then
ip route add default via `ip route show | grep $PRIMARY | grep "scope link" | sed 's/\(.*\)0\/.*/\1/'`1 dev $PRIMARY
fi
if [ "`ip route | grep default | grep $SECONDARY`" = "" ];
then
ip route add default via `ip route show | grep $SECONDARY | grep "scope link" | sed 's/\(.*\)0\/.*/\1/'`1 dev $SECONDARY
fi
ifmetric $PRIMARY 100
ifmetric $SECONDARY 200
echo Primary
while [ "`ping -I $PRIMARY -c 10 -w 20 $PING | grep \"$CONDITION\"`" = "" ];
do
sleep $SLEEP
done
echo Secondary
ifmetric $SECONDARY 50
while [ -n "`ping -I $PRIMARY -c 10 -w 20 $PING | grep \"$CONDITION\"`" ];
do
ifdown $PRIMARY
sleep $SLEEP
ifup $PRIMARY
sleep $SLEEP
done
done