Die FH Schmalkalden bietet für alle Mitglieder einen VPN-Zugang an. Obwohl der Gateway für Split Tunneling konfiguriert ist, funktioniert dies bei Nutzung von vpnc nicht. Außerdem wird die /etc/resolv.conf überschrieben, was dazu führt, dass alle DNS-Anfragen an den Server der FH Schmalkalden gehen.

Split-Tunneling meint, dass nur die Datenpakete die für IPs innerhalb des VPN bestimmt sind, über den Gateway laufen, alle anderen weiterhin direkt über Ihren Provider.

Notwendige Software

Beide Pakete sollten in der genutzen Distribution über den Package-Manager verfügbar sein.

Konfiguration des vpnc

Tragen Sie folgendes in die /etc/vpnc.conf oder /etc/vpnc/default.conf ein:

1
2
3
4
5
IPSec gateway 194.94.31.250
IPSec ID FHS
IPSec secret <sharedsecret>
Xauth username <yourfhsid>
Xauth password <yourpassword>

Ersetzen Sie yourfhsid und yourpassword durch Ihre FHS-ID und durch Ihr Passwort. Das sharedsecret finden Sie hier bei Ihrer VPN-Klasse.

Sie können das VPN nun mit vpnc starten und mit vpnc-disconnect beenden.

Sollte es nicht funktionieren, ist vermutlich entweder fhsid/passwort falsch oder der Universal TUN/TAP device driver support ist weder in den Kernel compiliert noch als Modul geladen.

Split-Tunneling selfmade

Nachdem Split-Tunneling nicht auf Anhieb funktioniert, konfigurieren wir das einfach selbst und das ist ganz einfach. Wir müssen nur die Routingtabelle nach dem Starten des vpnc anpassen.

Um die Standard-Route ohne VPN herauszufinden geben Sie einfach route ein. Die Zeile die mit default beginnt zeigt den Namen bzw. die IP-Adresse des Default-Gateways. In meinem Fall ist das 192.168.178.1.

Starten Sie nun vpnc und Sie sehen nach Eingabe von route eine Standard-Route die über das tun0 Interface läuft.

Um die Route anzupassen, setzen Sie zuerst die Standard-Route zurück mit:

route add default gw 192.168.178.1

Ersetzen Sie dabei 192.168.178.1 durch Ihre vorher herausgefundene Route.

Anschließend können Sie für die IP-Adressen die der Fakultät Informatik zugeordnet sind durch folgende Eingabe die Route durch das VPN setzen:

route add -net 212.201.64.0 netmask 255.255.254.0 dev tun0

Nach Beenden der VPN-Verbindung mit vpnc-disconnect setzen Sie die Route für alle wieder mit:

route add default gw 192.168.178.1

Selbstverständlich machen wir das in Zukunft mit einem Shell-Script.

DNS splitten

Beim Aufbau der VPN-Verbindung wird die /etc/resolv.conf überschrieben. Um Anfragen die FH-Schmalkalden betreffend an den DNS-Server der FH zu senden und alle anderen an den des ISP konfigurieren wir dnsmasq und überschreiben anschließend selbst die /etc/resolv.conf wieder.

Nachdem der DNS-Server der FH Schmalkalden natürlich auch ohne VPN erreichbar ist, können wir dnsmasq so konfigurieren, dass es immer läuft und nicht vor dem Starten des VPNs gestartet werden muss.

Nachdem Sie dnsmasq installiert haben, muss es einfach folgendermaßen gestartet werden:

dnsmasq -S /.fh-schmalkalden.de/194.94.30.50

Tragen Sie anschließend in die /etc/resolv.conf vor Ihrem bisherigen DNS-Server (bei mir 192.168.178.1) localhost ein. Das heisst meine /etc/resolv.conf sieht nun so aus:

nameserver 127.0.0.1
nameserver 192.168.178.1

Nach dem Starten von vpnc wird dies allerdings überschrieben und muss wieder eingefügt werden. Aber das machen wir jetzt alles mit einem …

Script

Mit diesem Script geht Auf- und Abbau inklusive aller Anpassungen automatisch. Dnsmasq habe ich unabhängig davon immer laufen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

echo "Connecting to the VPN"
vpnc

echo "Modifying the routing table"
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 192.168.178.1" >> /etc/resolv.conf
route add default gw 192.168.178.1
route add -net 212.201.64.0 netmask 255.255.254.0 dev tun0

echo "Press any key to disconnect ..."
read $disconnect

echo "Disconnecting from the VPN"
vpnc-disconnect

echo "Reconfiguring the default routing table"
route add default gw 192.168.178.1

echo "VPN should now be disconnected"

Nachdem ich Gentoo nutze, habe ich mir die Ausgaben noch etwas schöner gemacht bzw. aus dem Howto [1] geklaut :–)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

source /lib64/rc/sh/functions.sh

ebegin "Connecting to the VPN"
vpnc
eend

ebegin "Modifying the routing table"
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 192.168.178.1" >> /etc/resolv.conf
route add default gw 192.168.178.1
route add -net 212.201.64.0 netmask 255.255.254.0 dev tun0
eend

einfo "Press any key to disconnect ..."

read $disconnect

ebegin "Disconnecting from the VPN"
vpnc-disconnect
eend
ebegin "Reconfiguring the default routing table"
route add default gw 192.168.178.1
eend

einfo "VPN should now be disconnected"

Referenzen:

  1. Gentoo vpnc HOWTO

Über Kommentare, Fragen und Distributionsspezifische Anmerkungen würde ich mich freuen.