Hetz Ben Hamo wrote:
Hi,
I have a situation which is well known to people - your machine is connected (PPTP) to the net, but sometimes there's disconnection between your home and ISP, but the PPP0 interface stays up, which means you'll need to kill it and redial..
I have a small script which deals with the situation where the PPP0 interface is down, then it tries to connect until it connects, but my script doesn't handle the situation above..
So, I was thinking - has anyone written such a script? (for PPTP connection, not PPPOE) and willing to share it please?
Thanks, Hetz
Hi,
I have such scripts, which I managed to write during the time (and based on other scripts which I found on the internet. - sorry, but i don't remember who should get the credit for them)
attached files are: /etc/init.d/adsl /etc/ppp/ip-up /etc/ppp/ip-down
you will also need a script: /etc/ppp/firewall.sh which will do all the firewall stuff (and nat if necessary) all it needs to get as a parameter is the interface (usually ppp0)
Noam
#! /bin/sh # # adsl Start/Stop ADSL link. # # chkconfig: 2345 15 85 # description: ADSL connection start/stop script. # processname: pptp # config: /etc/adsl.conf # pidfile: /var/run/adsl.pid
# ADSL connection parameters
/etc/adsl.conf
RETVAL=0
start () {
echo -n "Starting ADSL connection: "
# Remove our special sign file and leftover socket sometimes left behind by
pptp call manager
rm -f /tmp/adsl.is.stopping /var/run/pptp/"${ADSL_IP}"
# Bring up the pptp & ppp
if /usr/local/sbin/pptp "${ADSL_IP}" user "$USER_NAME" remotename "${ADSL_IP}
RELAY_PPP1" defaultroute noauth 2>/dev/null; then
RETVAL=$?
echo "ADSL went up successfully..."
touch /var/lock/subsys/adsl
else
RETVAL=$?
echo "ADSL didn't go up successfully..."
fi
# waitforconnect waits 2 minutes, and then tries to re-connect. It gets killed
by ip-connect when the
# link is properly brought up. This is a race condition here, in case ip-up is
called BEFORE we get here,
# but in reality I don't think it can happen that fast.
$0 waitforconnect >/dev/null &
echo
}
stop () {
# this is a special sign for ip-down.local NOT to redial when the line is
dropped.
touch /tmp/adsl.is.stopping
echo -n "Stopping ADSL connection: "
killall -q -INT pppd
killall -q -INT pptp
sleep 5
killall -q -INT pppd
killall -q -INT pptp
rm /var/run/pptp/${ADSL_IP}
rm /var/run/ppp*
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/adsl
}
case "$1" in
start)
start
;;
stop)
stop
# we kill ourselves here, but kill 'adsl waitforconnect' too!
killall -q adsl
;;
restart)
stop
start
RETVAL=$?
;;
waitforconnect)
# Save our pid so /etc/ppp/ip-up.local will be able to kill us
echo $$ >/var/run/adsl-waitforconnect
# We are going to re-try to reconnect every 2 minutes
sleep 120
stop
start
RETVAL=$?
;;
*)
echo "Usage: adsl {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
#!/bin/sh
# Set up PATH
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
if [ -f /tmp/adsl.is.stopping ]; then
logger -p local1.info -t adsl "Orderly disconnect"
else
ERRMSG="Unexpected disconnect, trying to re-connect"
logger -p local1.error -t adsl "$ERRMSG"
echo "$ERRMSG" | mail root -s "ADSL log"
/etc/init.d/adsl restart
fi
#!/bin/bash
# This script is executed when the link is available for sending and
# receiving IP packets (that is, IPCP has come up).
# It is executed with these parameters:
# interface-name tty-device speed local-IP-address remote-IP-address ipparam
# Put the arguments from the command-line into vars.
IFNAME=${1}
TTYDEV=${2}
SPEED=${3}
LOCALIP=${4}
REMOTEIP=${5}
IPPARAM=${6}
# Make sure we have a good path.
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
# The reconnect waiting proccess file name.
WAITPROC="/var/run/adsl-waitforconnect"
logger -p local1.notice -t adsl "link established, local ip is: $LOCALIP"
ddclient -daemon=0 -syslog -use=if -if=${1} > /dev/null 2>&1
echo $LOCALIP | mail [EMAIL PROTECTED] -s "new ip"
# Kill the waiting process
kill -9 `cat $WAITPROC`
rm $WAITPROC
# Execute the firewall
if ! /etc/ppp/firewall.sh $IFNAME; then
# Something wrong happened. Log it.
logger -p local1.crit -t adsl "Cannot configure firewall"
echo "Cannot configure firewall" | mail root -s "ADSL critical log"
fi
signature.asc
Description: OpenPGP digital signature
