FU Berlin VPN

Eine sehr gute Anleitung dazu finden Sie unter

http://www.zedat.fu-berlin.de/VPNC

Wenn jedoch nicht sämtlicher Verkehr über den Tunnel geleitet werden soll bedarf es zusätzlicher Arbeit. In meinen Beispiel sollte nur der Verkehr direkt zu fu-berlin.de über den Tunnel gehen, der Rest ganz normal weiter über den normalen Weg geroutet werden. Dazu ist folgende Datei zu erstellen, das Beispiel ist schon auf die FU Berlin zugeschnitten:

cat /etc/vpnc/vpnc-splitted-routes-script

#!/bin/sh

# this effectively disables changes to /etc/resolv.conf
INTERNAL_IP4_DNS=
# DNS Zedat: 160.45.8.8 160.45.10.12
# This sets up split networking regardless
# of the concentrators specifications.
# You can add as many routes as you want,
# but you must set the counter $CISCO_SPLIT_INC
# accordingly
# 130.133.0.0/16, 160.45.0.0/16, 87.77.0.0/16
CISCO_SPLIT_INC=3

CISCO_SPLIT_INC_0_ADDR=130.133.0.0
CISCO_SPLIT_INC_0_MASK=255.255.0.0
CISCO_SPLIT_INC_0_MASKLEN=16
CISCO_SPLIT_INC_0_PROTOCOL=0
CISCO_SPLIT_INC_0_SPORT=0
CISCO_SPLIT_INC_0_DPORT=0

CISCO_SPLIT_INC_1_ADDR=160.45.0.0
CISCO_SPLIT_INC_1_MASK=255.255.0.0
CISCO_SPLIT_INC_1_MASKLEN=16
CISCO_SPLIT_INC_1_PROTOCOL=0
CISCO_SPLIT_INC_1_SPORT=0
CISCO_SPLIT_INC_1_DPORT=0

CISCO_SPLIT_INC_2_ADDR=87.77.0.0
CISCO_SPLIT_INC_2_MASK=255.255.0.0
CISCO_SPLIT_INC_2_MASKLEN=16
CISCO_SPLIT_INC_2_PROTOCOL=0
CISCO_SPLIT_INC_2_SPORT=0
CISCO_SPLIT_INC_2_DPORT=0

. /etc/vpnc/vpnc-script

Die Konfigurationsdatei muss angepasst werden, damit dieses Skript auch genutzt werden kann. In meinen Beispiel ist das die Datei /etc/vpnc/VPN@ZEDAT-hybrid.vpnc, die entsprechenden Stellen sind fett hervor gehoben. Natürlich müssen statt den xxxx der Benutzername und das Passwort eingesetzt werden. Die Datei muss wegen den verwendeten Passwörtern gut geschützt werden!

chmod 400 /etc/vpnc/VPN@ZEDAT-hybrid.vpnc
chown root:root /etc/vpnc/VPN@ZEDAT-hybrid.vpnc


cat /etc/vpnc/VPN@ZEDAT-hybrid.vpnc

IPSec ID hybrid-default
IPSec gateway vpn.fu-berlin.de
IPSec obfuscated secret 0C22xxxxxxxxxxxxxxxxx....
CA-File /etc/vpnc/rootcert
IKE Authmode hybrid
Cisco UDP Encapsulation Port 14195
Xauth username xxxxxxx
Xauth password xxxxxxx
Interface name tun0
Script /etc/vpnc/vpnc-splitted-routes-script

 

Es gibt ein weiteres Problem, die Verbindung wird nach circa 8 Stunden unterbrochen. Das kann beispielsweise so gelöst werden:

#!/bin/bash
# vom Nutzer anzupassende Variablen
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

## zu benutzende Konfigurationsdatei des vpnc
## Standard: CONFIGFILE="/etc/vpnc/default.conf"
#CONFIGFILE="/etc/vpnc/default.conf"
CONFIGFILE="/etc/vpnc/VPN@ZEDAT-hybrid.vpnc"

## Zeitabstand zwischen den Überprüfungen in Sekunden
## Standard: WATCH_INTERVAL=600
WATCH_INTERVAL=60

# muss sich von innerhalb des Campusnetzes erreichen lassen
# Standard: PING_HOST=fu-berlin.de
#PING_HOST=fu-berlin.de

### BOH
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# Script zum automatischen Neuaufbauen der VPN-Verbindung bei Abbruch.
# Original von Webseite:
# aachen.uni-dsl.de/wiki/index.php/VPN_Client
#
# unbekannter Author des Originalskriptes, keine Lizenzhinweise gefunden
#
# Angepasst und etwas universeller einsetzbar gemacht von
# Lutz Willek <lutz.willek@belug.de>
# Meine Änderungen gegenüber den Originalskript unterliegen der BSD-Lizenz:
# kurz: mach damit was Du möchtest
#
# Version:
# 0.1, 20080629, Lutz Willek <lutz.willek@belug.de>
#
# Hinweise:
# In der Konfigurationsdatei müssen für dieses Skript folgende
# Parameter angegeben worden sein:
#   Xauth username <DEIN_NUTZERNAME>
#   Xauth password <DEIN_PASSWORT>
#   Interface name tun0
#
# In 99,8% aller Fälle sollte das Gerät "tun0" richtig sein.
# Dieses Skript überimmt aber auch jede andere Einstellung automatisch
#
# (TODO:)
#  * Größe des Logfiles beschränken oder rotieren lassen
#  * diese Datei ins cvs aufnehmen :-)
#
### EOH
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Ab hier normalerweise keine Änderungen durch Benutzer mehr nötig
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


# Konstanten
LOGFILE="/var/log/vpnc-reconnect.log"
PIDFILE=/var/run/${0##*/}.pid
# das tun/tap Gerät herausfinden, damit wir richtig pingen können
TUN_TAP_DEVICE=$(awk '/^Interface name/ {print $3}' ${CONFIGFILE})
# Stadardeinstellungen, Fallback
TUN_TAP_DEVICE=${TUN_TAP_DEVICE:=tun0}
PING_HOST=${PING_HOST:=fu-berlin.de}
WATCH_INTERVAL=${WATCH_INTERVAL:=600}

# Fehlerbehandlung
clean_up_exit() {
  echo "`date` cleanup: disrupt all vpnc-connections" >> $LOGFILE
  vpnc-disconnect
  exit 0
}
clean_up() {
  echo "`date` cleanup: remove $PIDFILE " >> $LOGFILE
  rm $PIDFILE
  clean_up_exit
}

# Funktion, die die Verbindung trennt und anschließend wieder aufbaut
VpncReconnect() {
  echo disconnect, connect
  vpnc-disconnect
  vpnc-connect ${CONFIGFILE}
}

trap clean_up_exit 0
trap clean_up 1 2 15
trap VpncReconnect 10

# Nur ein Lauf gleichzeitig erlaubt
if [ -e $PIDFILE ] ;
then
  echo pidfile $PIDFILE exist, cannot run twice!
  echo first kill all other running ${0##*/}, then remove pidfile
  exit 1
else echo $$ >$PIDFILE
fi


# Funktion als Endlosschleife, die die Verbindung überwacht
DoSomeWork() {
  while(true) ; do
      if (ping -c 2 -r -I ${TUN_TAP_DEVICE} -n ${PING_HOST} &> /dev/null) ;
      then
        echo "`date` --MARK--" >> $LOGFILE
      else
        echo "`date` ${PING_HOST} via ${TUN_TAP_DEVICE} NOT reachable" >> $LOGFILE
        #echo "`date` `VpncReconnect`" >> $LOGFILE
        VpncReconnect &>/dev/null
        echo "`date` vpnc restarted, running at PID: `pidof vpnc-connect`" >> $LOGFILE
      fi
      # Die traps werden so nicht schön behandelt
      #sleep ${WATCH_INTERVAL}
      for i in `seq 0 ${WATCH_INTERVAL} `; do sleep 1;done
  done
}

# Wenn die Konfigurationsdatei lesbar ist, dann checke ob bereits eine Verbindung
# besteht, wenn ja dann lass diese auch bestehen. Ansonsten starte
# eine neue Verbindung.
# In jedem Fall: überwache die Verbindung und starte diese ggf. neu
if [ -e ${CONFIGFILE} ] ;
  then
    echo "`date` ${0} startup" >> $LOGFILE
    # FIXME: hässlicher grep
    if ( ps -ef | grep -v grep | grep vpnc > /dev/null ) ;
      then
        echo "`date` vpnc allways running with pid `pidof vpnc-connect`" >> $LOGFILE
      else
        echo "`date` vpnc not running, startup" >>  $LOGFILE
        VpncReconnect &>/dev/null
        echo "`date` vpnc restarted, running at pid: `pidof vpnc-connect`" >> $LOGFILE
    fi
    DoSomeWork
  else
    echo -n `date` >> $LOGFILE
    echo " ERROR: vpnc configfile not found/readable: ${CONFIGFILE}" >> $LOGFILE
    echo " ERROR: vpnc configfile not found/readable: ${CONFIGFILE}"
    [ `id -u` != 0 ] && echo " Hint: You must be root"
    exit 1
fi

clean_up
#EOF

Bei Fragen oder Verbesserungsvorschlägen schreiben Sie an lutz.willek(at)belug.de