我使用 Ubuntu 服务器作为 NAT 路由器。WAN接口是eth1
,LAN接口是eth0
。我在 LAN 端使用 ucarp 虚拟 ip 进行故障转移。我正在编写一个脚本,eth0
如果 WAN 链接或默认网关出现故障,它将关闭 LAN 接口(如果 LAN 接口出现故障,那么 ucarp 可以将 NAT 网关 ip 释放到网络上的另一个路由器)。此外,如果 WAN ip 被 ping 通,则 LAN 接口应该会出现并且应该保持开启,直到可以 ping 通 WAN ip。
重击脚本:
#!/bin/bash
t1=$(ifconfig | grep -o eth0)
t2="eth0"
#RMT_IP = "8.8.8.8"
SLEEP_TIME="10"
ping -c 2 8.8.8.8 > /dev/null
PING_1=$?
if [ $PING_1 = 1 ]; then
if [ "$t1" != "$t2" ]; then
ifconfig eth0 up
echo "Iface brought up"
else
echo "Iface is already up"
fi
else
if [ "$t1" = "$t2" ]; then
ifconfig eth0 down
echo "Iface brought down"
else
echo "iface already down"
fi
fi
sleep $SLEEP_TIME
该脚本对我不起作用。我想要的是,如果可以 ping 通 WAN ip,那么 LAN 接口eth0
应该保持打开状态。如果无法 ping 通 WAN ip,则应关闭接口。该脚本应每 10 秒循环运行一次。如果 WAN ip 长时间无法 ping 通,eth0
则应仅保持关闭状态,如果 WAN ip 在一段时间后 ping 通,eth0
则应启动。我还计划在启动时运行脚本作为新贵的工作。
编辑 1: 我的最终脚本:
#!/bin/bash
timeout=5 # delay between checks
pingip='8.8.8.8' # what to ping
iface="eth0"
LOG_FILE="/var/log/syslog"
isdown=0 # indicate whether the interface is up or down
# start assuming interface is up
while true; do
LOG_TIME=`date +%b' '%d' '%T`
if ping -q -c 2 "$pingip" >> /dev/null ; then # ping is good - bring iface up
if [ "$isdown" -ne 0 ] ; then
ifup $iface && isdown=0
printf "$LOG_TIME $0: Interface brought up: %s\n" "$iface" | tee -a $LOG_FILE
fi
else # ping is bad - bring iface down
beep -f 4000
if [ "$isdown" -ne 1 ] ; then
ifdown $iface && isdown=1
printf "$LOG_TIME $0: Interface brought down: %s\n" "$iface" | tee -a $LOG_FILE
fi
fi
sleep "$timeout"
done