HOWTO: Ping hosts and reset/reboot on failure - Multi WAN (Load Balancing)
reshab912 last edited by
using @BennTech's Earlier post
i found that it doesnot work for Multi-Wan Load Balancing scenarios.
Below is my updated process which would help to accomplish the same.
Go to Diagnostics > Edit file
Cut & paste the code below, editing the user variables to match your settings.
Save the file as /usr/local/bin/pingtest_em0.sh (or path/name of your choosing)
Go to Diagnostics > Command
Execute the command "chmod +x /usr/local/bin/pingtest_em0.sh" (makes the file executable)
Go to System > Packages and install the Cron package
Go to Services > Cron
Install a new cron with settings "*/5 * * * * root /usr/local/bin/pingtest_em0.sh" (runs test every 5 minutes)
#!/bin/sh #===================================================================== # pingtest.sh, v1.0.1 # Created 2009 by Bennett Lee # Released to public domain # # (1) Attempts to ping several hosts to test connectivity. After # first successful ping, script exits. # (2) If all pings fail, resets interface and retries all pings. # (3) If all pings fail again after reset, then reboots pfSense. # # History # 1.0.1 Added delay to ensure interface resets (thx ktims). # 1.0.0 Initial release. #===================================================================== #===================================================================== # USER SETTINGS # # Set multiple ping targets separated by space. Include numeric IPs # (e.g., remote office, ISP gateway, etc.) for DNS issues which # reboot will not correct. # ALLDEST should be your WAN router's gateway, else it will sucessfully ping sites like google, yahoo using other WAN connection ALLDEST="192.168.0.254" # Interface to reset, usually your WAN - modify for each em BOUNCE=em0 # Log file - modify for each em LOGFILE=/root/pingtest_em0.log #===================================================================== COUNT=1 while [ $COUNT -le 2 ] do for DEST in $ALLDEST do #echo `date +%Y%m%d.%H%M%S` "Pinging $DEST" >> $LOGFILE ping -c1 $DEST >/dev/null 2>/dev/null if [ $? -eq 0 ] then #echo `date +%Y%m%d.%H%M%S` "Ping $DEST OK." >> $LOGFILE exit 0 fi done if [ $COUNT -le 1 ] then echo `date +%Y%m%d.%H%M%S` "All pings failed. Resetting interface $BOUNCE." >> $LOGFILE /sbin/ifconfig $BOUNCE down # Give interface time to reset before bringing back up sleep 10 /sbin/ifconfig $BOUNCE up # Give WAN time to establish connection sleep 60 else echo `date +%Y%m%d.%H%M%S` "All pings failed twice. Rebooting..." >> $LOGFILE /sbin/shutdown -r now >> $LOGFILE exit 1 fi COUNT=`expr $COUNT + 1` done
And similarly do the same for other WAN as well.
The current process however just support pinging to your routers gateway, as ping to sites like google, yahoo are completed using other WAN in case of 1 wan is down. This script could be further improved if someone could find a way to ping google, yahoo using the mentioned specified em only and not by other wan.