Vor kurzem habe ich einen Blogpost geschrieben, wie ein OpenVPN Server auf einem DD-WRT Router betrieben werden kann. Klick. Da ich in letzter Zeit häufig Probleme mit DD-WRT auf meinem TP-Link WDR4300 Router hatte, habe ich mich entschieden, wieder auf OpenWRT zu wechseln. Die folgende Anleitung funktioniert genauso auf der aktuellen „LEDE“ Version. OpenWRT bzw. LEDE sind im Vergleich zu DD-WRT etwas komplizierter zu konfigurieren, da hier einiges direkt über die Kommandozeile gemacht werden muss. Dafür hat es den Vorteil, dass es sehr modular aufgebaut ist. In der Basisversion ist nur das Nötigste inklusive Webinterface mit dabei. Komponenten wie DynDNS oder OpenVPN müssen einzeln nachinstalliert werden.
Für den OpenVPN Server gibt es auch eine offizielle GUI, um die Konfiguration über das Webinterface LUCI zu erledigen. In diesem Blogpost wird jedoch alles über das CLI eingerichtet, da es deutlich einfacher ist. Ich werde in diesem Beitrag nur zeigen, wie ein OpenVPN Server eingerichtet wird. Wie Zertifikate oder Clientprofile erzeugt werden, ist in anderen Beiträgen auf diesem Blog beschrieben Klick. Als erstes muss eine SSH Verbindung aufgebaut werden, um den Router konfigurieren zu können. In der Standardversionen von OpenWRT bzw. LEDE ist der SSH Zugang aus dem LAN bereits aktiv. Für Windows kann mit dem Tool „Putty“ eine Verbindung aufgebaut werden. Unter Linux wird folgender Befehl aus einem Terminal ausgeführt.
ssh root@192.168.1.1
Hat alles funktioniert sollte es ungefähr wie auf dem Screenshot aussehen.
Da bis jetzt noch kein OpenVPN Paket vorhanden ist, muss dieses manuell nachinstalliert werden.
opkg update; opkg install openvpn-openssl
Sobald OpenVPN erfolgreich installiert wurde, geht es ans Eingemachte.
Folgende Konfigurationen müssen durchgeführt werden, um einen funktionsfähigen OpenVPN Server zu betreiben.
1. Netzwerk Schnittstelle für VPN anlegen
2. Firewall konfigurieren
3. OpenVPN Server konfigurieren
Alle Konfigurationen werden in Textdateien unter „/etc/config/“ gespeichert.
1. Netzwerk Schnittstelle für VPN anlegen:
Konfigurationsdatei mit Editor öffnen.
vi /etc/config/network
Folgender Block muss in die Datei eingefügt werden.
config interface 'vpn0' option ifname 'tun0' option proto 'none' option auto '1'
Damit die Änderungen sofort übernommen werden, muss die Konfiguration neu eingelesen werden.
/etc/init.d/network reload
2. Firewall konfigurieren:
Konfigurationsdatei mit Editor öffnen.
vi /etc/config/firewall
Folgende Blöcke werden hinzugefügt.
config rule option name 'Allow-OpenVPN-Inbound' option target 'ACCEPT' option src '*' option proto 'udp' option dest_port '1194'
config zone option name 'vpn' option input 'ACCEPT' option forward 'REJECT' option output 'ACCEPT' option network 'vpn0'
config forwarding option src 'vpn' option dest 'wan'
config forwarding option src 'vpn' option dest 'lan'
Sollte der VPN Tunnel nur benötigt werden, um auf Ressourcen innerhalb des eigenen Netzwerks zuzugreifen, kann die erste „config forwarding“ Sektion ignoriert werden. Diese erlaubt es, Anfragen aus dem VPN Tunnel an das Internet weiterzuleiten. Nach den erfolgten Anpassungen muss die Konfigurationsdatei neu eingelesen werden, um die Änderungen zu übernehmen.
/etc/init.d/firewall reload
3. OpenVPN Server konfigurieren:
Konfigurationsdatei mit Editor öffnen.
vi /etc/config/openvpn
Folgender Block wird hinzugefügt. Bei einigen Einträgen ist ggf. eine Anpassung erforderlich. Diese werden nachfolgend erklärt.
config openvpn 'myvpn' option enabled '1' option dev 'tun' option proto 'udp' option log '/tmp/openvpn.log' option verb '3' option ca '/etc/openvpn/ca.crt' option cert '/etc/openvpn/server.crt' option key '/etc/openvpn/server.key' option dh '/etc/openvpn/dh4096.pem' option server '10.20.30.0 255.255.255.0' option cipher 'AES-256-CBC' option auth 'SHA512' option tls_auth '/etc/openvpn/tlsauth.key 0' option tls_cipher 'TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA' option port '1194' option keepalive '10 120' option tls_server '1' option tls_version_min '1.2' list push 'redirect-gateway def1' list push 'route 192.168.1.0 255.255.255.0' list push 'dhcp-option DNS 208.67.220.220' list push 'dhcp-option DNS 208.67.222.222' list push 'block-outside-dns'
Damit die Optionen „ca“, „cert“, „key“, „tls_auth“ und „dh“ funktionieren, müssen die jeweiligen Zertifikate nach „/etc/openvpn/“ kopiert werden. Dazu eignet sich SCP bzw. unter Windows WinSCP. Das angegebene Netzsegment bei „option server“ kann an die eigenen Gegebenheiten angepasst werden. Das wird später die VPN IP Range werden. Diese sollte möglichst „exotisch“ gewählt werden, damit es keine Überschneidungen mit z.B. Hotel WLANs gibt. Die Option „redirect-gateway def1“ sorgt dafür, dass der komplette Traffic durch den VPN Tunnel geht. Ist dies nicht gewünscht, kann die Option entfernt werden. Die IP Bereiche der beiden letzen Optionen „route“ und „dhcp-option“ müssen ggf. auch an die eigenen Gegebenheiten angepasst werden. Die Option „block-outside-dns“ wird benötigt, damit es unter Windows zu keinen DNS Leaks kommt, da hier alle verfügbaren DNS Server angesprochen werden.
Die Berechtigungen der kopierten Zertifikate müssen zu guter Letzt noch richtig gesetzt werden.
chmod 400 /etc/openvpn/ca.crt chmod 400 /etc/openvpn/server.crt chmod 400 /etc/openvpn/server.key chmod 400 /etc/openvpn/tlsauth.key chmod 400 /etc/openvpn/dh4096.pem
Sobald alles fertig konfiguriert ist, können die Änderungen übernommen werden.
/etc/init.d/openvpn reload
Ab sofort ist der VPN Server fertig eingerichtet. Vorausgesetzt die Zertifikate passen alle und die Clientkonfiguration stimmt, steht einer Kommunikation durch den Tunnel nichts mehr im Wege.