Wie man an meinem vorigen Post sehen kann, beschäftige ich mich gerade mit VPNs. Ziel war es natürlich, das wir von zuhause auf die lokalen Daten zugreifen können. Nach anfänglichen Startschwierigkeiten mit einem Netgear Router und dessen IpSec Implementation, habe ich mich entschieden, wieder zu OpenVPN zu wechseln. Damit habe ich in der Vergangenheit gute Erfahrung gemacht und es ist im Gegensatz zu IpSec wirklcih einfach einzurichten.
Da wir auf unserem Firmenserver mit OpenVZ virtualisiert haben, sollte der OpenVPN Server ebenfalls als VPS darin laufen, und natürlich sollte man per VPN alle anderen Rechner (reale und virtualisierte) im Netz zugreifen können.
Die Erstellung von eine OpenVZ VPS und Zertifikaten erspare ich uns hier mal, dafür gibt es genug HowTos im Netz. Für das Erstellen von Zertifikaten empfehle ich easy-rsa. Sowohl Hostsystem als auch VPS laufen unter Ubuntu.
Vorbereitung: auf dem Router
Der Router muss den OpenVPN Port (in unserem Fall 1194) an die entsprechende VPS weiterleiten. Ich denke, das kann man heute bei allen Routern über die Verwaltungsoberfläche einstellen.
Schritt 1: auf dem Hostsystem muss noch ein weiteres IPTables Modul geladen werden.
# cat /etc/vz/vz.conf |grep IPTABLES
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length iptable_nat"
Schritt 2: auf dem VPS
# apt-get install openvpn
# echo 1 > /proc/sys/net/ipv4/ip_forward # falls noch nicht gesetzt
# mkdir -p /etc/openvpn/ssl # hier dann die Zertifikate kopieren, die unten benötigt werden
# vi /etc/openvpn/roadwarrior-server.conf
server 192.168.200.0 255.255.255.0 # Das VPN Netzwerk, kann ein freies privetes Netz sein
port 1194 # Auf Port 1194 horchen
proto tcp # Protokoll UDP, für TCP: proto tcp-server
dev tun # evtl. auch tap versuchen
tls-server
dh /etc/openvpn/ssl/dh2048.pem
ca /etc/openvpn/ssl/ca.crt
cert /etc/openvpn/ssl/server.crt
key /etc/openvpn/ssl/server.key
verb 3 # Zum Debugging erhöhen
mute 50 # Zum Debugging auskommentieren
push "route 192.168.0.0 255.255.255.0" # Die Route unseres internen Netzes
comp-lzo
user nobody
group nogroup
keepalive 10 60
ping-timer-rem
persist-key
persist-tun
Wenn man die anderen Rechner im Netz sehen möchte, müssen noch folgende IPTables Regeln gesetzt werden:
/sbin/iptables -A FORWARD -j ACCEPT -p all -s 0/0 -i tun0
/sbin/iptables -A FORWARD -j ACCEPT -p all -s 0/0 -o tun0
/sbin/iptables -t nat --flush
/sbin/iptables -t nat -A POSTROUTING -s ! 192.168.0.101 -o venet0 -j SNAT --to-source 192.168.0.101
Abschliessend kann man den OpenVPN Server starten.
/etc/init.d/openvpn start
Schritt 3: auf dem Clients
Hier muss ebenfalls OpenVPN installiert werden und die Konfigurationsdatei muss folgende Einträge beinhalten.
# mkdir -p /etc/openvpn/ssl # hier dann die Zertifikate kopieren, die unten benötigt werden
# vi /etc/openvpn/roadwarrior-client.conf
remote unsere.statische.ip.adresse
port 1194
proto tcp-client
dev tun
tls-client
pull
ca ssl/ca.crt # Hier muss dasselbe CA Zertifikat wie auf dem Server kopiert sein
cert ssl/client1-client.crt
key ssl/client1-client.key
nobind
comp-lzo
keepalive 5 15
/etc/init.d/openvpn start
Wenn alles OK ist, wird ein Device tun0 erstellt, und die entsprechenden Routen automatisch gesetzt. Ein
ping 192.168.0.101
sollte uns antworten. Andere Rechner im Netz sind dann entsprechend über 192.168.0.x zu erreichen. Bei Problemen empfehle ich die sehr gute FAQ von OpenVPN
http://openvpn.net/faq.html.