Wie kann ich eigentlich von außerhalb meines eigenen Netzwerks sicher auf interne Ressourcen zugreifen, ohne jeden dafür benötigten Port direkt über das Internet erreichbar zu machen? Will ich so etwas überhaupt? Den Zugriff wahrscheinlich schon. Direkt über das Internet vielleicht eher nicht. Um beide Ziele zu erreichen, wird ein VPN Tunnel benötigt, durch den die komplette Kommunikation abgeschottet von der Außenwelt läuft. Dazu wird im eigenen Netzwerk ein VPN Server aufgebaut. Die meiner Meinung nach beste Lösung hierfür ist OpenVPN. Je nach Netzwerk, kann der OpenVPN Server auch direkt auf dem heimischen Router laufen Klick.
Da nicht jeder OpenWRT oder ähnliches einsetzt, zeigt dieser Artikel, wie ein OpenVPN Server auf einem günstigen Raspberry Pi installiert werden kann. Somit ist es sehr einfach, für wenig Geld einen eigenen OpenVPN Server zu betreiben. Für den erfolgreichen Einsatz gibt es zwei Voraussetzungen, die hier nicht weiter beschrieben werden. Dazu gibt es bereits sehr viele gute Anleitungen im Netz.
1. Es muss ein Port Forwarding (UDP 1194) auf den Raspberry Pi eingerichtet werden.
2. Damit der Zugriff auch über das heimische DSL funktioniert, wird ein DynDNS Eintrag benötigt.
Der Zugriff auf den Raspberry Pi funktioniert über SSH. Dazu muss eine Session aufgebaut werden. Windows User nehmen hierfür das Tool Putty.
ssh pi@raspberrypi
Als Erstes wird das installierte Debian / Raspbian auf einen aktuellen Stand gebracht.
sudo apt-get update && sudo apt-get upgrade
Damit das Port Forwarding auch an der richtigen Stelle ankommt, wird eine statische IP Adresse vergeben. In diesem Beispiel ist es die ‚192.168.1.199‘.
sudo nano /etc/network/interfaces
Sollte die Zeile ‚iface eth0 inet manual‘ vorhanden sein, muss diese auskommentiert werden.
#iface eth0 inet manual
Die Konfiguration für die statische IP Adresse sieht wie folgt aus. Natürlich muss hier die Konfiguration an die eigenen Gegebenheiten angepasst werden.
# IPv4 address iface eth0 inet static address 192.168.1.199 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
Nach den Änderungen muss der Netzwerkdienst einmal durchgestartet werden.
sudo systemctl restart networking.service
Jetzt sollte die neue Konfiguration bereits angewendet werden. Dies kann einfach mit ‚ifconfig‘ überprüft werden.
ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.1.199 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7579 errors:0 dropped:0 overruns:0 frame:0 TX packets:3415 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:9015323 (8.5 MiB) TX bytes:387584 (378.5 KiB)
Nun kann die OpenVPN Software direkt aus den Paketquellen installiert werden.
sudo apt-get install openvpn
Für die Authentifizierung am OpenVPN Server werden Zertifikate verwendet. Diese werden sowohl für den Server als auch für die Clients benötigt. Diese Schritte habe ich bereits in älteren Artikeln, die nach wie vor gültig sind, beschrieben.
OpenVPN Zertifikate unter Windows erzeugen: Klick
OpenVPN Zertifikate unter Linux erzeugen: Klick
Folgende Zertifikate gehören in das Verzeichnis „/etc/openvpn/easy-rsa/keys/“.
ca.crt server.crt server.key tlsauth.key dh4096.pem
Aus Sicherheitsgründen werden die Berechtigungen für die Zertifikate neu gesetzt.
sudo chown -R root:root /etc/openvpn/easy-rsa/keys/
sudo find /etc/openvpn/easy-rsa/keys/ -type f -exec chmod 400 {} \;
Jetzt kann die Konfigurationsdatei für den Server erzeugt werden. Diese liegt unter „/etc/openvpn/server.conf“
sudo nano /etc/openvpn/server.conf
dev tun proto udp port 1194 status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 persist-tun persist-key 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/dh4096.pem tls-auth /etc/openvpn/easy-rsa/keys/tlsauth.key 0 cipher AES-256-CBC auth SHA512 keepalive 10 120 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 server 10.199.10.0 255.255.255.0 tls-server tls-version-min 1.2 auth-nocache duplicate-cn push "redirect-gateway def1" push "dhcp-option DNS 208.67.220.220" push "dhcp-option DNS 208.67.222.222" push "block-outside-dns"
Wer sich für die einzelnen Konfigurationen der server.conf interessiert, kann dies hier nachlesen: Klick. Um die Konfiguration abzusichern, wird hierfür auch die Berechtigung neu gesetzt.
sudo chmod 600 /etc/openvpn/server.conf
Der OpenVPN Server kann jetzt auch gestartet werden.
sudo systemctl enable openvpn.service
sudo systemctl start openvpn.service
Ab jetzt sollte unter „ifconfig“ auch ein „tun0“ Device auftauchen.
Im nächsten Schritt geht es darum, dass Routing zu konfigurieren. Dazu soll der Zugriff auf interne Netzwerk Ressourcen und Internetzugang ermöglicht werden. Hierfür muss zunächst das IPv4 Forwarding aktiviert werden. Dazu muss in der Datei „/etc/sysctl.conf“ die Zeile „net.ipv4.ip_forward=1“ aktiviert werden.
sudo nano /etc/sysctl.conf
Damit die Änderung übernommen wird, muss die Konfiguration gespeichert werden.
sudo sysctl -p
Jetzt müssen noch Änderungen an der Firewall vorgenommen werden. Damit die Regeln auch bei einem Neustart des Raspis funktionieren, wird ein Paket nachinstalliert.
sudo apt-get install iptables-persistent
Die Regeln werden in ein kleines Shell Skript gespeichert, um es bei Anpassungen etc. schnell wieder ausführen zu können.
sudo nano /usr/local/bin/iptables.sh
#!/bin/bash iptables -t filter -F iptables -t nat -F iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s '10.199.10.0/24' -j MASQUERADE iptables-save > /etc/iptables/rules.v4
Das Skript wird zuerst ausführbar markiert und dann direkt gestartet.
sudo chmod +x /usr/local/bin/iptables.sh && sudo sh /usr/local/bin/iptables.sh
Die geschriebenen Regeln können bei Bedarf nachträglich überprüft werden.
sudo nano /etc/iptables/rules.v4
Ab jetzt ist der OpenVPN Server einsatzbereit und kann direkt genutzt werden. Über den VPN Tunnel ist jetzt sowohl der Zugriff auf Ressourcen möglich, als auch der Internetzugang, welcher komplett durch den Tunnel geroutet wird. Beispiele für eine dazu passende OpenVPN Client Konfiguration und Optimierungen finden sich hier:
OpenVPN Client Konfiguration für Windows / Linux: Klick
OpenVPN Client unter iOS: Klick
OpenVPN Durchsatz optimieren: Klick
Email Benachrichtigung bei OpenVPN Verbindung: Klick