#!/bin/bash #Copyright 1999-2002 William Stearns #Released under the GPL. #MODULE="ipip" ; TDEV="tunl0" MODULE="ip_gre" ; TDEV="gre0" OUTIF="ppp0" TSERVER="Z.Z.Z.Z" CLIENTREALIP="Z.Z.Z.Y" DefaultRouteDevs="`/sbin/route -n | grep '^0\.0\.0\.0[ \t]' | awk '{print $8}' | sort | uniq`" DefaultRouteGws="`/sbin/route -n | grep '^0\.0\.0\.0[ \t]' | awk '{print $2}' | sort | uniq`" #if [ `echo "$DefaultRouteDevs" | wc -l` -ne 1 ]; then # echo Too many or few default route interfaces, exiting. # exit 1 #fi #if [ `echo "$DefaultRouteGws" | wc -l` -ne 1 ]; then # echo Too many or few default route ips, exiting. # exit 1 #fi #DESTS="${DESTS} Onetargetmachine Anothertargetmachine" DESTS="${DESTS} 0.0.0.0/0.0.0.0" case "$1" in start|START) ssh $TSERVER CLIENTDIALIP=`ifconfig $OUTIF | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'` /root/bin/server_tunnel start echo 1 >/proc/sys/net/ipv4/ip_forward insmod $MODULE >/dev/null 2>/dev/null ifconfig $TDEV $CLIENTREALIP pointopoint $TSERVER netmask 255.255.255.255 up route del -host $TSERVER $TDEV route add -host $TSERVER $TDEV for AHOST in $DESTS ; do case "$AHOST" in */*) Network=${AHOST%%/*} Netmask=${AHOST##*/} route add -net $Network netmask $Netmask gw $TSERVER $TDEV if [ "$AHOST" = "0.0.0.0/0.0.0.0" ]; then route del default $OUTIF fi ;; *) route add -host $AHOST gw $TSERVER $TDEV ;; esac done route del -host $TSERVER $TDEV route del -host $TSERVER $TDEV >/dev/null 2>/dev/null route add -host $TSERVER $OUTIF ;; stop|STOP) route del -host $TSERVER $OUTIF for AHOST in $DESTS ; do case "$AHOST" in */*) Network=${AHOST%%/*} Netmask=${AHOST##*/} #echo "Routing to network $Network, netmask $Netmask" route del -net $Network netmask $Netmask gw $TSERVER $TDEV if [ "$AHOST" = "0.0.0.0/0.0.0.0" ]; then route add default $OUTIF fi ;; *) route del -host $AHOST gw $TSERVER $TDEV ;; esac done ifconfig $TDEV down #route add default $OUTIF #Done above rmmod ip_gre ssh $TSERVER /root/bin/server_tunnel stop ;; *) echo Use \"$0 start\" or \"$0 stop\". ;; esac