Heimrouter-Kochbuch/ Einsatzbeispiele/ Wireguard VPN

Beschreibung Bearbeiten

 
Externes Gerät erhält über VPN Zugang zum internen Netz

Manchmal möchte man von außen auf interne Dienste zugreifen, wie die Haussteuerung, die nur über interne Dienste verfügbar sind. Hierzu wurden verschiedene VPN-Lösungen entwickelt. Das neueste Protokoll ist Wireguard, das gerade für Privatanwender vergleichsweise einfach zu bedienen ist.

In diesem Szenarium wird auf dem OpenWRT-Router ein Wireguard-Dienst eingerichtet, so dass externe Rechner auf interne Netze zugreifen können[1].

Zweck Bearbeiten

Im betrieblichen Umfeld sind VPN-Lösungen mittlerweile Standard, um externe Geräte Zugang zum Betriebsnetz zu gewähren. Hiermit wird die Möglichkeit für Heimarbeit deutlich vereinfacht.

Auch im privaten Umfeld bringt dies einige Vorteile, wenn aus dem Urlaub die Hausautomation kontrolliert werden soll, ohne dass diese Anlage mit einer Cloud verbunden ist.

Benötigte Pakete Bearbeiten

OpenWRT bietet bereits vorgefertigte Pakete an. Um direkt alle Abhängkeiten mit zu installieren, empfiehlt sich das Paket luci-i18n-wireguard-de und wireguard.

Vorbereitung Bearbeiten

Als Warnung wird in der OpenWRT-Kurzanleitung für Wireguard dringend empfohlen, dass der VPN-Server eine funktionierende Zeitsynchronisierung haben sollte. Dies gilt auch für alle Teilnehmer am Wireguard-Netz.

Einrichtung Bearbeiten

Zur Nutzung muss ein neues Interface eingerichtet werden. Dieses Interface wird in der Firewall-Zone für die DMZ platziert.

Interface Bearbeiten

Über die Weboberfläche wird unter Network/Interfaces mittels Aktion Add new interface ein neues Interface angelegt. Diesem Interface wird als Namen wg_dmz gegeben und als Protocol wird Wireguard VPN ausgewählt. Nachdem das Protokoll ausgewählt wurde, verschwindet das ursprünglich vorhanden Feld zur Auswahl eines physikalischen Gerätes (Device). Mit Create Interface wird dieses angelegt und die eigentliche Konfiguration wird geöffnet.

Das Feld Private key ist rot umrahmt und es wird eine Eingabe erwartet. Hier kann entweder der private Schlüssel hineinkopiert werden. Oder (empfohlen) mit der Aktion Generate Key, die direkt unterhalb dieses Eingabefeldes ist, wird direkt auf dem Router ein privater Schlüssel erzeugt.

Damit der VPN-Server von außen erreichbar ist, muss der Dienst auf einem UDP-Port auf Pakete lauschen. Dieser Port wird im Feld Listen Port eingetragen. Bei Wireguard wird in vielen Anleitungen der Port 51820 verwendet, aber es kann auch ein anderer Port verwendet werden. Der Dienst lauscht dann auf allen verfügbaren Netzwerkschnittstellen auf diesem Port.

Im nächsten Feld können diesem Interface mehrere IP-Adressen zugeordnet werden. Dies ist nicht zwingend erforderlich, erleichtert aber die spätere Verwaltung. Diese IP-Adresse wird ausschließlich innerhalb des Tunnels verwendet und sollte aus keinem IP-Raum stammen, welcher in anderen Netzen verwendet wird. Als Beispiel wird 192.168.45.2 verwendet.

Unter dem Reiter Firewall Settings wird dieses neu eingerichtete Interface der Firewall-Zone DMZ zugeordnet.

Damit ist die initiale Einrichtung des Wireguard-Interface beendet.

Firewall-Freigabe Bearbeiten

Damit der Wireguard-Dienst aus dem Internet erreichbar ist, muss in der Firewall der Port geöffnet werden. Unter Network/Firewall wird der Reiter Traffic Rules geöffnet. Über die Aktion Add werden folgende Regeln eingefügt:

WAN-Zugriff Bearbeiten

Es wird ein Port für den Zugriff von aussen geöffnet. In der Maske wird als Bezeichner wg_in gewählt. Da Wireguard mittels UDP-Paketen arbeitet, wird ausschließlich UDP als Protokoll ausgewählt. Die Regel trifft auf die Firewall-Zone WAN zu, ohne dass dies auf IP-Adressen festgelegt wird, damit der Wireguard-Dienst von jedem Gerät aus dem Internet erreichbar ist.

Als Ziel (Destination zone) wird der Router (Device (input)) gewählt. Damit sind Pakete erfasst, welche aus dem Internet kommen und für den Router bestimmt sind. Als Zielport wird der oben definierte Port eingetragen, auf dem der Wireguard-Dienst lauscht (51820). Die Aktion wird auf accept eingestellt.

Mit Save wird diese Regel übernommen.

Weiterleitung aktivieren Bearbeiten

In einer Firewallzone können mehrere Schnittstellen zusammengefasst werden. In der Zonendefinition bedeutet die Vorgabe für forward, ob Pakete zwischen diesen Schnittstellen weitergeleitet werden dürfen. In der Firewallzone DMZ ist neben dem physikalischen Port eth0.3 jetzt die Wireguard-Schnittstelle wg_dmz enthalten. Ist in der Zonendefinition für forward das Ziel drop oder reject eingestellt, werden Pakete zwischen diesen Schnittstellen nicht weitergeleitet.

Entweder in der Zonendefinition wird forward auf accept umgestellt oder es wird eine eigene Regel angelegt. Über die Aktion Add wird eine neue Regel eingefügt. Für die Eingangs- und Ausgangszone (source zone bzw. destination zone) wird DMZ ausgewählt.

Solange in der DMZ nur zwei Schnittstellen enthalten sind, haben beide Methoden die gleiche Wirkung. Die zweite Methode erscheint dagegen etwas umständlicher, da zunächst die Weiterleitung global unterbunden wird, danach aber (ebenfalls global) wieder erlaubt wird. Soll dagegen eine zusätzliche VPN-Verbindung in das Smart-Home Netzwerk lan_media etabliert werden, kann in der Verkehrsregel die Weiterleitung des VPN-Verkehrs auf die LAN-Schnittstelle begrenzt werden; über die VPN-Verbindung sind somit von außen die per drahtloser Schnittstelle angebunden Geräte nicht verfügbar.

Abschluss der Verkehrsregeln Bearbeiten

Nachdem beide Regeln erstellt wurden, erscheint im Kopfbereich der Hinweis auf noch nicht aktivierten Änderungen. Über die Aktion Save & Apply werden diese Regeln übernommen und eingerichtet.

Gegenstelle einrichten Bearbeiten

Bei Wireguard muss jede Gegenstelle (Peer) explizit eingerichtet werde. Für kleine Netzwerke ist der damit verbunden Aufwand noch überschaubar. Speziell für Heimanwendungen wird die Anzahl der Geräte, die über das Internet Zugriff auf die internen Dienste haben sollen, eher gering sein.

Für die Gegenstelle wird der öffentliche Schlüssel benötigt. Dieser ist über Status/Wireguard verfügbar. Es kann ein QR-Code angezeigt werden, mit dem die Konfiguration bei Smartphones einfach übernommen werden kann. Ansonsten kann der öffentliche Schlüssel auch über unsichere Kanäle ausgetauscht werden.

Der öffentliche Schlüssel der Gegenstelle wird in der Schnittstellendefinition eingefügt. Unter Network/Interface wird die Schnittstelle wg_dmz editiert. Ganz rechts ist der Reiter Peers, der ausgewählt wird. Es wird eine neue Gegenstelle über die Aktion Add peer angelegt. Es empfiehlt sich, der Gegenstelle eine Beschreibung zu geben, um diese später identifizieren zu können. Unter public key wird der öffentlicht Schlüssel der Gegenstelle eingefügt. Unter Allowed IPs wird zumindest die IP-Nummer eingetragen, welche die Gegenstelle für dessen Wireguard-Schnittstelle verwendet.

Bei mobilen Geräten wird keine feste IP-Adresse vorhanden sein, so dass hier keine weiteren Einträge vorzunehmen sind.

Mit OK werden die Änderungen gespeichtert. Es erscheint wieder im Kopfbereich der Hinweis über noch nicht gespeicherte Änderungen. Diese werden mit der Aktion Save & Apply übernommen. Schließlich muss noch die Schnittstelle neu gestartet werden, um die erfolgten Änderungen zu übernehmen.

Kontrolle der Einstellungen Bearbeiten

Ob die VPN-Einstellungen funktionieren, kann an folgenden Stellen kontrolliert werden, um auch Probleme eingrenzen zu können:

Network/Interface
Zu jeder Schnittstelle wird der aktuelle Zustand dargestellt, unter anderem, wie viele Daten über diese Schnittstelle transportiert wurden. Bleibt diese Anzeige auf Null, dann wurde die Verbindung zu den Gegenstellen nicht etabliert.
Status/Wireguard
Zu jeder Gegenstelle wird aufgelistet, wie viele Daten übertragen wurden und wann der letzte Handshake ausgetauscht wurden.
Network/Diagnostic
Mit Ping kann geprüft werden, ob durch den Tunnel die Gegenstelle erreichbar ist.

Referenzen Bearbeiten

  1. https://openwrt.org/docs/guide-user/services/vpn/wireguard/start