#!/bin/sh . /etc/rc.subr name="vpnall" load_rc_config $name start_cmd="vpnall_start" stop_cmd="vpnall_stop" status_cmd="vpnall_status" extra_commands="status" interrupt() { echo "Interrupted..." exit 1 } vpnall_start() { OLDROUTE=`route -n get -net default | grep gateway: | awk '{print $2}'` PID=`pgrep -f "ppp -auto vpn"` if [ $? -eq 0 ]; then echo "PPP already running?" ps -p $PID exit 1 fi echo "Old route: $OLDROUTE" echo "$OLDROUTE" > /var/run/vpn.oldroute route delete -net default route add 129.21.61.7 $OLDROUTE ppp -auto vpn ping -c 1 192.168.10.1 > /dev/null 2>&1 while [ $? -ne 0 ]; do trap interrupt int echo "Waiting on ppp to come up..." ping -c 1 192.168.10.1 > /dev/null 2>&1 done route add -net default 192.168.10.1 } vpnall_stop() { PID=`pgrep -f "ppp -auto vpn"` if [ $? -eq 0 ]; then if [ -z "$PID" ]; then echo "vpnall not running"; fi echo "Killing pid $PID" ps -p $PID | grep "$PID" kill -TERM $PID fi if [ -f /var/run/vpn.oldroute ]; then route delete -net default route add -net default `cat /var/run/vpn.oldroute` rm /var/run/vpn.oldroute fi } vpnall_status() { PID=`pgrep -f "ppp -auto vpn"` ping -c 1 -t 1 192.168.10.1 > /dev/null 2>&1 ALIVE=$? if [ "$ALIVE" -eq 0 ]; then echo "vpn is: up (192.168.10.1 is alive)" ROUTE=`route get -net default | grep gateway: | awk '{print $2}'` echo "Default route is: $ROUTE" if [ "$ROUTE" = "192.168.10.1" ]; then echo "* All traffic will be going through the vpn" else echo "* Note: We are not tunneling all traffic through the vpn" fi else if [ ! -z "$PID" ]; then echo "vpn is: down (can't ping 192.168.10.1)" else echo "vpn is: not running (ppp is not running)" fi fi } run_rc_command "$1"