Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    HOWTO: Automatic PPPOE connection reset in case of packet loss

    Scheduled Pinned Locked Moved General pfSense Questions
    1 Posts 1 Posters 522 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      s0nic
      last edited by

      I've modified the script from @BennTech (https://forum.pfsense.org/index.php?topic=51714.msg276614#msg276614) to do the following:

      • Automatic PPPOE connection reset in case of packet loss

      • Own interface down and up sound (only played between 08am-10pm)

      • Separate e-mail notification for a successfully restored connection

      • Using the Systemlog

      It helps when the connection seems to be up and running but no data packets are going through.

      
      #!/bin/sh
      
      #=====================================================================
      # pingtest.sh, v1.0.2
      # Created 2009 by Bennett Lee 
      # Modified by s0nic
      # 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. (currently deactivated)
      #
      # History
      # 1.0.2   Added interface status sound, mail notification, systemlog and PPPOE reset. Disabled reboot.
      # 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="google.com 8.8.8.8"
      
      # Interface to reset, usually your WAN
      BOUNCE=WAN
      
      # Log file
      LOGFILE=/root/pingtest.log
      
      ZEIT=$(date +%k%M)
      #=====================================================================
      COUNT=1
      
      while [ $COUNT -le 2 ]
      do
      
      	for DEST in $ALLDEST
      	do
                      echo "PINGTEST: Pinging $DEST" | logger
      		ping -c1 $DEST >/dev/null 2>/dev/null
      
      		if [ $? -eq 0 ]
      		then
      			echo "PINGTEST: Ping $DEST OK." | logger
      			exit 0
      		fi
      	done
      
      	if [ $COUNT -le 1 ]
      	then
      		echo "PINGTEST: All pings failed. Resetting interface $BOUNCE." | logger  
      
      		# Interface RESET
      		/usr/local/sbin/pfSctl -c 'interface reload wan' >/dev/null 2>&1
      
      		# Interface DOWN
      		#/sbin/ifconfig $BOUNCE down | logger
      
      		# Notification
      		if [ "$ZEIT" -ge 800 ] && [ "$ZEIT" -le 2200 ]
      		then
      			/usr/local/bin/beep -p 1000 25
      			/usr/local/bin/beep -p 900 25 
      			/usr/local/bin/beep -p 800 25 
      			/usr/local/bin/beep -p 700 25 
      			/usr/local/bin/beep -p 600 25 
      			/usr/local/bin/beep -p 500 25 
      			/usr/local/bin/beep -p 400 25 
      			/usr/local/bin/beep -p 300 25 
      			/usr/local/bin/beep -p 200 50  
      		fi
      
      		# Give interface time to reset before bringing back up
      		#sleep 10
      
      		# Interface UP
      		#/sbin/ifconfig $BOUNCE up | logger
      
      		# Give WAN time to establish connection
      		sleep 15
      
      		# Notifications
      		for DEST in $ALLDEST
      		do
      			ping -c1 $DEST >/dev/null 2>/dev/null
      		done
      			if [ $? -eq 0 ]
      			then
      			MOMENT=`date +%d.%m.%Y@%H:%M:%Sh`
      			printf "PINGTEST: Interface $BOUNCE has been successfully resetted.\n\nReconnect: $MOMENT" | /usr/local/bin/php -q -c"/usr/local/etc/php.ini" /usr/local/bin/mail.php -s"pfSense.name - Reconnect"
      			echo "PINGTEST: Interface $BOUNCE has been successfully resetted." | logger 
      				if [ "$ZEIT" -ge 800 ] && [ "$ZEIT" -le 2200 ]
      				then
      		    			/usr/local/bin/beep -p 200 25
      					/usr/local/bin/beep -p 300 25 
      					/usr/local/bin/beep -p 400 25 
      					/usr/local/bin/beep -p 500 25 
      					/usr/local/bin/beep -p 600 25 
      					/usr/local/bin/beep -p 700 25 
      					/usr/local/bin/beep -p 800 25 
      					/usr/local/bin/beep -p 900 25 
      					/usr/local/bin/beep -p 1000 50
      				fi
      
      			fi
      
      	else
      		echo "PINGTEST: All pings failed twice." | logger
      		#echo "PINGTEST: All pings failed twice. Rebooting..." | logger
      		#/sbin/shutdown -r now | logger
      		exit 1
      	fi
      
      COUNT=`expr $COUNT + 1`
      done
      
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.