Ich habe das Skript zum automatischen Aufbau einer VPN Verbindung zum VPN der Universität Karlsruhe mittels vpnc etwas überarbeitet. Das Skript arbeitet nun auch wunderbar mit dem WLAN zusammen. Sollte eine Verbindung zum WLAN mit der ESSID “VPN/WEB“ aufgebaut werden, so startet nun vpnc. Zusätzlich habe ich noch eine Debug Funktion eingebaut, falls es mal doch nicht klappen sollte….
[UPDATE: Dieser Artikel ist veraltet! Sollten Sie über eine Internetsuche auf diesen Artikel gestoßen sein, so schauen Sie sich bitte besser den Artikel VPN der Uni-Karlsruhe mit vpnc (überarbeitet)… an. Dieser enthält die selben Informationen, ist jedoch auf einem aktuellen Stand! [/UPDATE]
#!/bin/bash
## 02uni-ka-vpnc 1.1 by Christoph Langner
## 2008 by Christoph Langner, published under the GPL v3
##
## Changelog
## 1.1: Ermöglicht nun auch den automatischen Aufbau des VPN über WLAN
## Sollte man eine andere ESSID als "VPN/WEB" nutzen, so passt man dazu
## die Variable $ESSID_VPN an.
## 1.0: Erstes Release. VPN Zugang nur via Kabel.
## INITIALISIERUNG
#Diese Werte werden vom NetworkManager an das Skript übergeben
INTERFACE=$1
ACTION=$2
## DEBUGGING
# Falls DBG_MODE=1 werden verschiedene Angaben nach $LOG ausgegeben
DBG_MODE=0
LOG=/tmp/dispatcher.log
## ESSID des Universitäts Netzwerkes
# In diesem Fall das VPN WLAN der Universität Karlsruhe
ESSID_VPN="VPN/WEB"
## NETWORKING
#IP des Rechners herausfinden
IP=$(ifconfig $INTERFACE | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://')
IP_START=$(echo $IP | awk -F. '{print $1}')
#ESSID des verbundenen Netzwerks bestimmen
ESSID=$(iwconfig $INTERFACE | grep ESSID | awk {'print $4'} | sed -e 's/ESSID://g' | sed -e 's/"//g')
## DEBUG Funktionen
log() {
if [ $DBG_MODE=1 ]; then
echo IP: $IP >> $LOG
echo IP_START: $IP_START >> $LOG
echo ESSID: $ESSID >> $LOG
fi
}
log_action() {
if [ $DBG_MODE=1 ]; then
echo ========= >> $LOG
echo $(date) >> $LOG
echo ACTION: $ACTION, Device: $INTERFACE >> $LOG
fi
}
#Funktionen durchführen, je nach Aktion eine andere
case "$2" in
up)
#vpnc starten, falls im Uni Netzwerk
log_action
log
if [ $IP_START=129 ]; then
vpnc
elif [ $ESSID=$ESSID_VPN ]; then
sleep 15
vpnc
fi
;;
down)
#vpnc stoppen
log_action
if [ "$(pidof vpnc)" ]; then
vpnc-disconnect
fi
;;
pre-up)
#einen vorher laufenden vpnc stoppen
log_action
if [ "$(pidof vpnc)" ]; then
vpnc-disconnect
killall vpnc
fi
;;
post-down)
#vpnc wirklich stoppen, falls abgestürzt
log_action
if [ "$(pidof vpnc)" ]; then
vpnc-disconnect
killall -9 vpnc
fi
;;
*)
echo $"Usage: $0 {up|down|pre-up|post-down}"
exit 1
esac
Das Skript habe ich auch zum Download hochgeladen. Via…
$ sudo wget -P /etc/NetworkManager/dispatcher.d/ http://www.linuxundich.de/static/2uni-ka-vpnc $ sudo chmod +x /etc/NetworkManager/dispatcher.d/02uni-ka-vpnc
…kann man es herunterladen und ausführbar machen. Spätestens bei einem Neustart wird nun das Dispatcher Skript ausgeführt. Achtung: vpnc muss neu compiliert werden. Das bei Ubuntu aus den Paketquellen installierte vpnc kann sich nicht zu Cisco VPN Router mit hybrider Verschlüsselung verbinden. Daher bitte diesen Artikel VPN der Universität Karlsruhe über vpnc beachten.
Kann man das Script so optimieren, dass die NetworkManager-eigene VPN-Routine aufgerufen wird? So kann man eher nachvollziehen, ob die Verbindung getrennt wurde und nach meiner Erfahrung ist die Verbindung auch stabiler.
Hallo bas89, mit ein bisschen dbus-Magie ließe sich das vermutlich machen. Ich bin aktuell aber selten an der Uni, so dass ich jetzt meist die Verbindung sowieso über den NetworkManager aufbaue.
Ich habe eine Ewigkeit versucht, den NetworkManager mit dbus zu erreichen, aber nicht hinbekommen 🙁
http://forum.ubuntuusers.de/topic/networkmanager-dbus/