VPN für Arme
Interne Netze sicher zu einem großen virtuellen Netz verbinden
Trockenschwimmer
Nach diesen Vorbereitungen ist der Zeitpunkt für erste Tests gekommen. Versuchen Sie, sich in der root-Rolle vom Client aus per ssh als User vpn auf dem Server einzuloggen. Mögliche Fragen des ssh-Kommandos, ob Sie dem anderen Rechner vertrauen, beantworten Sie mit yes (Listing 2).
Listing 2
Erste Tests
client:~# ssh server.dyndns.org -l vpn The authenticity of host 'server.dyndns.org (217.81.158.48)' can't be established. DSA key fingerprint is 80:f5:44:74:f4:5e:d0:50:32:12:88:f7:f4:31:75:82. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'server.dyndns.org' (DSA) to the list of known hosts. Linux server 2.4.16 #6 Mon Apr 20 11:03:22 EST 2003 i686 unknown No mail. vpn@server:~$ vpn@server:~$ sudo /usr/sbin/pppd noauth ~9}#ÀZ}!}!} }9}"}k} }r} }'}%}zt2-*}'}"}
Klappt das passwortlose Einloggen, rufen Sie auf dem Server den pppd auf. Die aus wirren Zeichen bestehende Antwort in Listing 2 ist ganz normal. Sie beweist, dass der pppd auf dem Server-Rechner startete und nun versucht, den pppd der Gegenstelle anzusprechen. Da es den zur Zeit noch nicht gibt, brechen Sie den Prozess mit [Strg-C] ab, um weitere Einstellungen vorzunehmen.
Niemand mag das VPN jedes Mal von Hand starten. Daher gibt man dem Rechner den Auftrag, es beim Booten oder nach dem Aufbau der Internet-Verbindung automatisch herzustellen. Sind die Rechner über eine ordentliche Standleitung mit dem Internet verbunden, reicht es, das vpn-pppssh-Skript auf dem Client-Rechner nach /etc/init.d/ zu kopieren und es nach der Bootlogik der eingesetzten Distribution in die adäquaten Runlevel-Verzeichnisse zu verlinken. Unter Debian geht das wie in Listing 3.
Listing 3
Das VPN-Skript als Init-Skript für den Systemstart bei Debian einrichten
ln -s /etc/init.d/vpn-pppssh /etc/rc0.d/K10vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc1.d/K10vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc2.d/S99vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc3.d/S99vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc4.d/S99vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc5.d/S99vpn-pppssh ln -s /etc/init.d/vpn-pppssh /etc/rc6.d/K10vpn-pppssh
Für Rechner mit DSL-Zugang, der meist alle 24 Stunden erneut aufgebaut werden muss, empfiehlt sich der Aufruf des VPN-Skripts nach jeder Einwahl des Clients. Hierfür kopiert man vpn-pppssh nach /usr/local/bin/ und legt in /etc/ppp/ip-up.d/ ein weiteres Skript (Listing 4) ab, das der pppd nach jeder Neueinwahl automatisch aufruft und so für den Aufbau des VPN sorgt.
Listing 4
VPN-Start bei der Internet-Einwahl
#!/bin/sh
if [ "$PPP_IPPARAM" = "vpn" ]; then
# Das VPN soll sich nicht selbst starten
exit 0
fi
/usr/local/bin/vpn-pppssh start
Praktische Details
Damit der Client aus Haus 5 nicht wissen muss, welche IP-Adresse der Server bei der letzten Einwahl zugewiesen bekam, nutzt die WG aus Haus 2 einen dynamischen DNS-Service (siehe Seite 66 f. und [5]), der für die vom Internetprovider dynamisch vergebene IP-Adresse einen festen Hostnamen zur Verfügung stellt.
Im Beispiel trägt der als Server dienende Rechner vom lokalen Netz aus gesehen die interne IP-Adresse 192.168.2.1. Den Gateway-Rechner von Haus 5 konfigurierten dessen Bewohner auf die interne IP-Adresse 192.168.5.1. Sie passen außerdem die Werte der Variablen SERVER_HOSTNAME, SERVER_USERNAME, SERVER_IFIPADDR und CLIENT_IFIPADDR im Skript an die eigenen Gegebenheiten an (Listing 5).
Listing 5
Anpassungen an vpn-pppssh
# Der Hostname bzw. die IP-Adresse des Servers SERVER_HOSTNAME=server.dyndns.org # Benutzername auf dem Server, mit dessen Rechten das VPN aufgebaut wird SERVER_USERNAME=vpn # Die IP-Adresse des VPNs auf dem Server: SERVER_IFIPADDR=192.168.2.254 # Die IP-Adresse des VPNs auf dem Client: CLIENT_IFIPADDR=192.168.5.254 # Der Adressbereich des internen Netzes auf Server-Seite: SERVER_NET="192.168.2.0/24" # Der Adressbereich des internen Netzes auf Client-Seite: CLIENT_NET="192.168.5.0/24"
Um die Routing-Tabelle anpassen zu können, muss bekannt sein, welcher IP-Adressen-Bereich auf der einen wie auf der anderen Seite des Tunnels genutzt wird. Dafür sind die Angaben in SERVER_NET und CLIENT_NET nötig.
Damit alle Pakete ins Server-seitige Netz 192.168.2.0 durch den aufgebauten VPN-Tunnel gehen, muss man am Ende der Startsektion des vpn-pppssh-Skripts einen Befehl einfügen, der die Routing-Tabelle des Clients entsprechend erweitert:
route add -net $SERVER_NET gw $SERVER_IFIPADDR
Ein weiterer Befehl öffnet eine ssh-Verbindung zum Server und setzt dort mit Hilfe von sudo die passende Route zum Client:
ssh -o Batchmode=yes $SERVER_HOSTNAME -l $SERVER_USERNAME sudo /sbin/route add -net $CLIENT_NET gw $CLIENT_IFIPADDR
Dank der im Abschnitt "Trockenschwimmer" erklärten Anpassungen startet der Client das VPN-Skript selbsttätig, sobald er die Verbindung zum Internetprovider aufgebaut hat; die zwei zusätzlichen Befehle im Skript passen das Routing an. Nach spätestens einer Minute sollten die Rechner des anderen Netzes erreichbar sein, was sich z. B. mit ping schnell überprüfen lässt. Webserver oder Drucker im anderen Teilnetz sprechen die Bewohner von Haus 5 nun so an, als ob es sich um lokale Geräte handelt. Umgekehrt gilt für die WG aus Haus 2 dasselbe.



