시나리오는 다음과 같습니다: Debian을 실행하고 두 개의 NIC(광대역 연결 및 Wi-Fi 연결)가 있고 둘 다 DHCP가 있으며 미리 알려져 있고 시간이 지남에 따라 변경될 수 있는 네트워크 정보가 없는 Linux 시스템입니다. Wi-Fi 연결을 기본 연결로 사용하고 싶지만 어떤 이유로 Wi-Fi 연결이 실패하면 자동으로 광대역 연결로 대체됩니다. 또한 Wi-Fi 연결이 다시 작동하기 시작하면 자동으로 Wi-Fi 연결로 돌아가고 싶습니다.
어떻게 설정하는지 아시나요? IP 라우팅을 통해 이 작업을 수행하고 싶지만 Wi-Fi 연결 감지는 특정 서버에 대한 핑과 같이 상당히 일반적이어야 합니다(검사가 핑과 유사해야 하는 이유는 Wi-Fi 연결이 여전히 있을 수 있지만 Wi-Fi 자체는 더 이상 인터넷에 연결되어 있지 않습니다.)
답변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