Der Cisco-Client
- Die Cisco-Clientsoftware setzt ein Kernelmodul voraus, dass lange Zeit nicht den Kernel 2.6 unterstützte und zusätzlichen Aufwand nach einem Kernelupdate erfordert
- Sie ist sehr unflexibel, unterbindet die Speicherung des Passwortes und verhindert damit eine Automatisierung der Anmeldung
- Der Client schottet alle Netzwerkverbindungen außer dem VPN-Tunnel ab, damit der lokale Rechner nicht als Gateway in das gesicherte Netz genutzt werden kann; Damit verhindert er jedoch auch die Nutzung von Netzwerkdruckern
Aufgrund dieser Dinge lässt sich der offizielle Cisco-VPNClient - wie er auch durch das HRZ empfohlen wird - nicht sehr gut in Debian GNU/Linux (bzw. Linux generell) integrieren.
Die Alternative
Das freie Softwarepaket vpnc bietet sich als Client für Cisco-VPN-Netze an. Zahlreiche Vorteile machen es wesentlich flexibler als den starren Cisco-Client; so kann der Server keine Einstellungen erzwingen (wie die Sperrung andere Netze oder die Nicht-Speicherung des Passworts), und anstelle eines eigenen proprietären Kernelmoduls greift vpnc auf das generische TUN/TAP-Interface des Kernels zurück. Neben Linux/x86 ist der Client auch auf PPC-Systemen sowie verschiedenen BSD-Varianten lauffähig, die Homepage der Software liefert dazu weitere Informationen.
Installation
Unter Debian ist vpnc schnell installiert: Es existiert bereits als Paket in Debian Sarge und wird so einfach mittels apt-get auf das System gebracht. Benutzer von Debian Woody (stable) können auf die Backports zurückgreifen; folgende Zeilen in der Datei /etc/apt/sources.list machen das Paket verfügbar:
# vpnc von backports.org deb http://www.backports.org/debian stable vpnc deb-src http://www.backports.org/debian stable vpnc
Der Befehl apt-get install vpnc installiert das Paket in beiden Fällen automatisch.
Die meisten größeren Distributionen haben ein vpnc-Paket im Repertoire; Unter Gentoo wird es mit "emerge vpnc", und SuSE mit Hilfe von YaST instaliert.
Konfiguration
Nun muss eine Konfigurationsdatei angelegt werden; Dazu kann man die .pcf-Datei des HRZ als Informationsquelle heranziehen. Die Konfiguration kann man z.B. in /etc/vpnc/ecampus.conf ablegen:
IPSec gateway 172.17.2.1 IPSec ID ecampus IPSec secret ecampus Xauth username XXXXXXXX Xauth password YYYYYYYY
Anstatt XXXXXXXX und YYYYYYYY werden natürlich HRZ-Kennung und das dazugehörige Passwort benötigt.
Ein Wort zum Gruppenpasswort: Der Cisco-Client speichert das Passwort nur in einer verschleierten Form ab, so dass ein direktes Auslesen dieses Wertes nicht möglich ist. Mit Hilfe dieser Seite ist es möglich, das Passwort zu entschlüsseln.
Verbinden
Vpnc setzt auf die TUN/TAP-Interface des Kernels auf; daher ist es nötig, das Modul "tun" zu laden. Automatisch geschieht dies, wenn der Modulname in die Datei /etc/modules in einer neue Zeile eingetragen wird.
Das Skript /usr/sbin/vpnc-connect erleichtert die Verbindung zum VPN: Es legt automatisch Netzrouten an und stellt sicher, dass alle notwendigen Device-Dateien existieren. Um sich in das VPN einzubuchen, reicht der einfache Aufruf mit der Konfigurationsdatei als Argument:
vpnc-connect /etc/vpnc/ecampus.conf
Daraufhin wird die gesicherte Verbindung über das neue Netzwerkdevice "tun0" initialisiert:
nano:~# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:134.91.XX.YY P-t-P:134.91.XX.YY Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1412 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Der Befehl vpnc-disconnect trennt die Verbindung wieder.
Debian-Komfort
Das VPN lässt sich zusätzliche Netzwerkverbindung in der Konfigurationsdatei /etc/network/interfaces definieren:
iface tun0 inet manual
up vpnc-connect /etc/vpnc/ecampus.conf
down vpnc-disconnect
Danach stellen die Kommandos ifup tun0 und ifdown tun0 den Zugang in das Uni-Netz her bzw. trennen diesen. Für noch mehr Komfort sorgt sorgt die Kopplung des VPNs mit dem WLAN-Interface:
iface wlan0 inet dhcp
wireless yes
wireless_mode managed
wireless_enc off
wireless_essid ecampus
up ifup tun0 &
down ifdown tun0 &
Diese Konfiguration startet automatisch das VPN, sobald der Laptop im WLAN angemeldet ist; wird die Verbindung vom WLAN getrennt, so wird auch das VPN abgekoppelt. Wichtig hierbei sind die & hinter den ifup/ifdown-Kommandos: Werden sie ausgelassen, so blockieren sich die beiden simultan ausgeführten ifup/ifdown-Prozesse.
Mehr Informationen über /etc/network/interfaces, sowie die automatische Auswahl verschiedener Konfigurationsprofile finden sich hier.
Kontrolle mit MRTG
Wer sein Traffic-Kontingent im Auge behalten möchte, kann das Programm MRTG benutzen, um die angefallenen Datenmengen darzustellen. Dazu benötigt man lediglich ein Perl-Skript, das die Informationen vom HRZ-Server abfragt, und einen Eintrag in der Datei mrtg.conf:
Title[uni-wlan]: Volumen Uni-WLAN (eCampus) PageTop[uni-wlan]: <H1>Volumen Uni-WLAN (eCampus)</H1> Target[uni-wlan]: `/usr/local/sbin/ecampustraffic.pl; uptime; uname -n` MaxBytes[uni-wlan]: 2000 YLegend[uni-wlan]: MB ShortLegend[uni-wlan]: MB Options[uni-wlan]: gauge,nopercent,nolegend
In das Perl-Skript werden dabei HRZ-Kennung als auch Passwort eingetragen.
iPAQ
Auch ein mit Familiar Linux ausgestatteter PDA der iPAQ-Reihe kann am VPN teilnehmen, sofern er über entsprechende WLAN-Hardware verfügt - neuere Modelle wie der H5450 haben diese bereits integriert. Die Familiar-Distribution hat vpnc bereits in ihrem Paketystem integriert, so dass er ganz einfach zu installieren ist:
ipkg install vpnc
Ist der Client installiert, so kann die gleiche Konfiurationsdatei, wie sie auch für das Notebook genutzt wird (siehe oben), in das (noch zu erzeugende) Verzeichnis /etc/vpnc/ kopiert werden. Da jedoch das ifupdown-System der Busybox-Suite nicht mit "manual"-Einträgen umgehen kann, und auch vpnc-connect dem Paket nicht beiliegt, wird ein Skript benötigt:
#!/bin/sh # # ecampus.sh # # Cisco VPN for iPAQ devices # Stefan Tomanek (stefan@pico.ruhr.de) CONF=ecampus WLAN=wlan0 PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin: case "$1" in start) echo $$ > /var/run/ecampus logger "starting vpnc" insmod tun while ( ! ifconfig $WLAN | grep -q addr:172 ); do logger "ECAMPUS dhcp not ready yet, sleeping 1 second" sleep 1 done vpnc --debug 1 /etc/vpnc/$CONF.conf || exit 1 ip route del default ip route add default dev tun0 ;; stop) logger "stopping vpnc" kill $(cat /var/run/ecampus) killall vpnc ;; esac exit 0
Da oftmals der DHCP-Server nicht schnell genug reagiert, wartet das Skript, bis das Netzwerk-Gerät wlan0 eine interne Universitätsadresse erhalten hat.
Aufgerufen als /sbin/ecampus.sh start initialisiert es das VPN anhand der Konfigurationsdatei /etc/vpnc/ecampus.conf; Um diesen Vorgang zu automatisieren, wird die /etc/network/interfaces folgendermaßen angepasst:
iface wlan0 inet dhcp
wireless_essid ecampusd
wireless_enc off
wireless_mode managed
up /sbin/ecampus.sh start
down /sbin/ecampus.sh stop
up echo "nameserver 134.91.4.150" > /etc/resolv.conf
Im Idealfall startet der Befehl ifup wlan0 nun sowohl das WLAN als auch das VPN. Leider scheint die interne WLAN-Karte des H5450 etwas träge zu sein, so dass oft der iPAQ die Antwort des DHCP-Servers nicht abwarten kann: Eine Lösung samt dazugehörigen Skripts findet sich hier und hier.
Wer Mappings einsetzt, um zwischen verschiedenen WLAN-Profilen zu wechseln, den verweise ich zusätzlich auf einige Bugfixes für ifupdown.
Ein letzter Hinweis: Es ist nicht möglich, sich mit den gleichen HRZ-Daten mehrmals am VPN anzumelden, also simultan via Notebook und PDA.
eCampus mit GNU/Linux