Archiv für Oktober, 2008

OpenVPN zwischen pfsense und wrt54gl

Veröffentlicht in OpenVPN, VPN mit den Tags , , , , , am Oktober 26, 2008 von issue2k

Günstige VPN-Lösung für Jedermann. In meinem Fall geht es darum mehrere Heimarbeitsplätze und Standorte mit der Zentrale zu verbinden. Als Gateway kommt in unserer Firma seit einiger Zeit pfsense (www.pfsense.org) zum Einsatz, eine Router-Distribution basierend auf FreeBSD. Aktuell stable ist die Version 1.2, das Ding ist wirklich brauchbar und dazu noch absolut kostenlos. Es lässt sich sowohl auf Embedded-Hardware als auch auf “normaler” x86-Hardware installieren. Hinsichtlich VPN bietet pfsense verschiedene Möglichkeiten diese aufzubauen. IPSEC, OpenVPN und PPTP. Ich habe bisher die besten Erfahrungen mit OpenVPN gemacht (einfache Konfiguration, sicher und zuverlässig), weshalb ich eine Lösung basierend auf OpenVPN bevorzuge. Ein Nachteil von pfsense in Verbindung mit OpenVPN ist derzeit noch, dass sich der VPN-interne Traffic nicht filtern lässt. Das wird erst ab der 1.3 möglich sein, welche im jahr 2010 fertig werden soll…für mich ist das kein Problem, da ich den VPN-Traffic sowieso nicht filtern möchte…

Soviel zum VPN-Server, kommen wir zu den anzubindenden Standorten. Meine Vorstellung ist die, vor Ort einen kostengünstigen und stromsparenden Router einzusetzen, der die VPN-Verbindung aufbaut und die VPN-Päckchen routet. Aus Sicherheitsgründen kommt für mich die Nutzung des Windows OpenVPN-Client nicht in Frage, wer will schon einen Windows-Client als Gateway missbrauchen… Nach einem kurzen Kostenvergleich (pfsense auf Embedded-Hardware, eine gemoddete Fritz!Box mit OpenVPN oder eben einen WRT54GL mit alternativer Firmware), habe ich den WRT54GL gewählt, der kostet nur 50€ und die Möglichkeiten sind mit einem OpenWRT nahezu unbegrenzt. Teuerste Lösung wäre die Embedded-Hardware für den pfsense gewesen, eine Lösung ohne WLAN(!) wäre hier ab 200€ zu haben gewesen (ALIX-Board mit AMD Geode LX700). Die Fritz!Box würde mit knapp 100€ zu Buche schlagen.

Also habe ich den WRT54GL-DE bestellt und mit die verschiedenen Firmware’s angesehen (OpenWRT, DD-WRT, HyperWRT und Tomato). Da ich eigentlich schon eine Firmware mit Webinterface einsetzen möchte, habe ich zunächst DD-WRT VPN versucht. Allerdings war die Web-Konfiguration des OpenVPN hier nur bedingt brauchbar (es fehlt beispielsweise die Möglichkeit mit static-key zu arbeiten).  Also doch einen OpenWRT? Glücklicherweise bin ich noch über den TomatoMod http://www.linksysinfo.org/forums/showthread.php?t=53233 (Tomato Firmware + OpenVPN) gestolpert. Auch diese Firmware lässt sich bequem per Webinterface auf den WRT54GL flashen. Nachdem ich meinen WRT54GL so vorbereitet hatte, ging es nun an die Konfiguration:

Zentrale: 172.16.0.0, 255.255.0.0
Standort1: 192.168.100.0, 255.255.255.0

Zunächst muss af der pfsense ein neuer Tunnel mit den folgenden Einstellungen eingerichtet werden:

Protocol: UDP
Local Port: 5000
Address Pool: 10.0.9.0/24
Remote Network: 192.168.100.0/24
Crypthography: BF-CBC
Authentication method: shared key
shared key: euren statischen Key hier einfügen
LZO compression: Ja

Anschließend nicht vergessen den Port 5000 auf dem WAN-Interface zu öffnen!

Die Konfiguration des Tomato-Routers gestaltet sich etwas schwieriger, die von mir verwendete Version 1.19 bietet keine Möglichkeit den OpenVPN per Webinterface einzurichten. Meine Versuche die Konfiguration auf der Kommandozeile zu erstellen, scheiterten am Read-Only-Filesystem des Routers. Hier wurden von den Entwicklern andere Möglichkeiten vorgesehen, die mir erst nach kurzer Recherche klar wurden. Es gibt die Möglichkeit im Webinterface Scripte zu definieren. Diese werden zu verschiedenen Zeitpunkten gestartet:

Init
Shutdown
Firewall
WAN Up

Das bedeutet wir müssen unsere OpenVPN-Konfiguration irgendwie in eines oder mehrere dieser Scripte packen. Für mich hat folgendes funktioniert:

Init:

sleep 5
insmod tun.o

Firewall:

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT

WAN Up:

cd /tmp
openvpn --mktun --dev tun0
brctl addif br0 tun0
ifconfig tun0 0.0.0.0 promisc up
ps | grep myvpn | grep ./ | awk '{print "kill "$1}' | sh

echo “#
# 2048 bit OpenVPN static key
#
—–BEGIN OpenVPN Static key V1—–hier dein key
—–END OpenVPN Static key V1—–” > /tmp/static.key

sleep 5
ln -s /usr/sbin/openvpn /tmp/myvpn
./myvpn –dev tun0 –secret /tmp/static.key –port 5000 –cipher BF-CBC –proto udp –keepalive 10 60 –verb 3 –ifconfig 10.0.9.2 10.0.9.1 –route 172.16.0.0 255.255.0.0 –remote vpn.example.com 5000 –comp-lzo –daemon

Anschließend den Router nochmal neu starten und schon rennt der Tunnel. Allen die näheres zur OpenWRT-Firmware und deren Ableger erfahren wollen kann ich folgenden Podcast ans Herz legen: Chaosradio Express 076 – OpenWRT.

Follow

Bekomme jeden neuen Artikel in deinen Posteingang.