两个具有 DHCP 的 NIC,使用一个作为后备

两个具有 DHCP 的 NIC,使用一个作为后备

场景如下: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

相关内容