In diesem Tutorial zeige ich, wie man OpenVPN korrekt mit einem VPN-Server, Debian-XFCE-Client und Android-Client einrichtet. Ich verwende hier verschiedene Quellen, die ich auf meine Bedürfnisse angepasst habe, um ein von Anfang bis Ende funktionierendes Tutorial anzubieten. Es sollte daher ohne Zusatzlektüre und viel suchen möglich sein, auf Anhieb ein funktionierendes OpenVPN-Netzwerk aufzubauen.
Quellen
Ich habe mein Wissen aus folgenden Quellen bezogen, da aufgrund diverser Probleme mit der Firewall und dem Aufbau des Tunnels ein Tutorial nicht für meine Bedürfnisse ausgereicht hat.
http://www.karesyk.de/vpn-server-einrichten/
http://forum.openvpn.eu/viewtopic.php?f=1&t=5058
http://allanmcrae.com/2013/09/routing-traffic-with-openvpn/
http://wiki.ubuntuusers.de/OpenVPN
http://nicolasjolet.blogspot.com.au/2011/01/as-i-m-completly-unaware-of-openssl-use.html
http://openvpn.net/index.php/open-source/documentation/howto.html
http://www.debian.org/doc/manuals/debian-reference/ch05.de.html
VPN-Server einrichten
# Root werden su # OpenVPN und OpenSSL installieren apt-get install openvpn openssl # wechseln in Open-VPN-Verzeichnis und kopieren der Standardkonfiguration cd /etc/openvpn cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa # Datei easy-rsa/vars editieren nano easy-rsa/vars
In der Datei wird die Variable export EASY_RSA editiert:
export EASY_RSA="/etc/openvpn/easy-rsa"
Jetzt beginnt die Basiskonfiguration zur Vorbereitungs der Schlüsselgenerierung.
# Verzeichnis wechseln cd /etc/openvpn/easy-rsa # Konfiguration source vars ./clean-all ./pkitool --initca # symbolischen (weichen) Link erzeugen ln -s openssl-1.0.0.cnf openssl.cnf
Jetzt werden die Zertifikate und Schlüssel generiert. Beim Kürzel für das Land tragen wir DE für Deutschland ein. Die anderen Angaben sind optional. Sofern der gleiche Common Name (CN) mehrmals bei verschiedenen Clients vergeben wird erscheint die folgende Fehlermeldung:
failed to update database TXT_DB error number 2
Die Lösung ist, dass der CN nur einmal vergeben werden darf.
# Root CA erzeugen ./etc/openvpn/easy-rsa/build-ca OpenVPN # Server Certificate erzeugen ./etc/openvpn/easy-rsa/build-key-server server # erstes Client Certificate erzeugen (bei weiteren einfach durchzählen) ./etc/openvpn/easy-rsa/build-key client1 # Diffie Hellman parameters berechnen ./etc/openvpn/easy-rsa/build-dh # Konfigurationsdatei für OpenVPN anlegen cd /etc/openvpn touch openvpn.conf nano openvpn.conf
Die Datei hat folgenden Inhalt:
dev tun proto udp port 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dh1024.pem user nobody group nogroup server 10.8.0.0 255.255.255.0 persist-key persist-tun status /var/log/openvpn-status.log verb 3 client-to-client push "redirect-gateway def1" #set the dns servers push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" log-append /var/log/openvpn comp-lzo
Nun wird die Internetweiterleitung eingerichtet, um nachher über VPN auch Internetzugriff zu erhalten. Sofern euer Debian Server nicht über Kabel angeschlossen ist, sondern über WLAN, dann müsst ihr eth0 mit dem Namen eures Netzwerkadapters (z.B. wlan0) ersetzen:
sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Danach stellt ihr eure Firewall ein. Hierzu empfehle ich folgenden Artikel über iptables als Linux Firewall. Die Firewall wird auch mit dem dort beschriebenen Mechanismus persistent gemacht. Folgender Eintrag konfiguriert die Firewall für OpenVPN korrekt:
#openvpn iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT ## Allow TUN interface connections to OpenVPN server iptables -A INPUT -i tun+ -j ACCEPT ## Allow TUN interface connections to be forwarded through other interfaces iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT ## NAT the VPN client traffic to the internet iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE
Nun wird die Datei sysctl.conf editiert.
nano /etc/sysctl.conf # Raute entfernen vor folgenden Einträgen bzw. diese hinzufügen net.ipv4.ip_forward=1 net.inet.ip.fastforwarding = 1
Nun noch die Zugangsdatei für Client1 (für weitere Clients Zeile „cert client1.crt und key client1.key“ auf korrekte Datei abändern) anlegen, welche für den Start des VPN auf dem Client bzw. Server benötigt wird, und die unsere öffentliche IP oder unsere DynDNS-Adresse beinhaltet. Dabei müssen wir DEBIAN-IP durch unsere öffentliche IP und Debian-DYN-DNS durch unsere DynDNS-Adresse ersetzen. Ich hatte nicht beide Informationen, daher konnte ich den VPN auf dem Server nicht ordnungsgemäß starten und erhielt die Problematik unter http://forum.openvpn.eu/viewtopic.php?f=1&t=5058.
>cd /etc/openvpn/easy-rsa/keys nano debianserver.ovpn # folgenden Inhalt einfügen und Debian-DYN-DNS und DEBIAN-IP ersetzen dev tun client proto udp remote Debian-DYN-DNS 1194 remote DEBIAN-IP 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 3
Nun wird ein Paket für Client1 erstellt, welches sämtliche benötigten Zertifikate und Schlüssel zum Verbindungsaufbau beinhaltet und kopieren dies in unser Home-Verzeichnis und geben dem lokalen Benutzer (bei mir stefan) die nötigen Zugriffsrechte auf die Datei und starten den openvnc neu.
tar czf openvpn-client1-keys.tgz ca.crt client1.crt client1.csr client1.key raspberrypi.ovpn # verschieben in Home-Verzeichnis mv openvpn-client1-keys.tgz /home/pi # Besitzrechte chown stefan:stefan /home/pi/openvpn-client1-keys.tgz</pre> # openvpn neustarten /etc/init.d/openvpn restart
Wichtig ist noch eine Portweiterleitung bzgl. Port 1194 – Protokoll UDP auf euren Server in eurem Router einzurichten. Wie das geht steht in der Bedienungsanleitung eures Routers.