FAQ: VPNs mit WireGuard

FAQ: VPNs mit WireGuard

Praxis & Tipps | FAQ

Das mit viel Vorschusslorbeeren bedachte VPN-Protokoll WireGuard kam schon in verschiedenen c’t-Artikeln vor. Die FAQ vertieft einzelne Aspekte, die bisher offen oder unbehandelt blieben.

Warum muss ich für die Clients einen DNS-Server konfigurieren?

Wenn ein WireGuard-Client einen beliebigen DNS-Server befragt, kann es sein, dass diese Zugriffe nicht durch den Tunnel gehen, also unverschlüsselt bleiben. Jemand, der den Netzwerkverkehr mitschneidet, etwa in einem offenen WLAN, könnte die dabei anfallenden Daten nutzen.

Ich möchte nicht ständig auf der Kommandozeile rumsuchen, um zu sehen, ob ein Nutzer gerade online ist oder nicht. Gibt es dafür GUIs?

Bei uns hat sich als pragmatische Lösung darkstat bewährt. Es ist unter anderem als Paket in Debian zu haben und zeigt auf Wunsch eine auf die WireGuard-Clients beschränkte Tabelle an. Hier die passende Konfigurationsdatei dafür – leider muss man sich zwischen IPv4- und IPv6-Ansicht entscheiden. Beides geht nicht.

Admins, die lieber per Browser auf den Zustand ihrer VPN-Zugänge starren, können darkstat nutzen, müssen sich aber zwischen IPv4 oder IPv6 entscheiden.

Kann ich auch meinen privaten DNS-Server verwenden, speziell Pi-Hole?

Sie können – siehe die erste Antwort. WireGuard und Pi-Hole harmonieren prima miteinander. Wenn Sie keine Performance-Wunder erwarten, klappt das gemeinsam auf einem Raspi. Wie man Pi-Hole auch IPv6-tauglich einrichtet, haben wir im c't-Beitrag Schadcode und Werbung mit Raspberry Pi und Pi-hole filtern gezeigt.

Mein WireGuard-Server fühlt sich langsam, woran liegt es? Was kann ich erwarten?

Auch wenn WireGuard als schlank und schnell gilt (es zeigte sich bei Experimenten viermal so schnell wie herkömmliche VPN-Protokolle), kann es natürlich keine Wunder vollbringen. Wir konnten mit iperf3 auf einem Raspberry Pi Zero W beobachten, dass der Durchsatz von rund 30 MBit/s ohne WireGuard auf rund 13 MBit/s bei aktiver VPN-Verbindung sinkt. Auch auf x86-Hardware fällt die Datenrate signifikant gegenüber einer ungeschützten Verbindung: in einer Proxmox-VM auf einem älteren HP MicroServer Gen8 mit Last von rund 800 MBit/s auf 220 MBit/s.

Lässt sich ein WireGuard-Server ohne viel Fummelei mit Docker an den Start bringen?

Grundsätzlich stehen dafür zwei Wege zur Verfügung: Entweder muss der Docker-Host selbst mit WireGuard-Kernel-Modulen ausgestattet sein – was keine Bastelei spart – oder Sie verwenden Docker-Images, die auf die reine User-Mode-Implementierung zurückgreifen, WireGuard-Go. Die gibt es zum Beispiel als masipcat/wireguard-go auf dem Docker Hub. Der Haken solcher Lösungen ist, dass sie sich nur mit guter Netzwerk- und tiefgehender Docker-Erfahrung auch in Betrieb nehmen lassen. Schon für IPv4 muss man allerhand Fummelei auf sich nehmen. IPv6 potenziert den Aufwand.

Gibt es ein schönes GUI für die Verwaltung eines WireGuard-Servers?

Wir haben bisher keines gefunden. Für das Einrichten von Clients haben wir uns mit einem einfachen Shell-Skript beholfen. Es ergänzt die nötigen Einträge in der wg0.conf-Datei, erstellt für jeden Client einen eigene Konfigurationsdatei und verewigt die Clients namentlich in der /etc/hosts-Datei, sodass man sie in „darkstat“ gleich am Namen erkennt. Das Skript ist nur eine schnelle Lösung, der vieles fehlt, etwa Löschfunktionen. Ähnliche Skripte finden Sie vielerorts im Netz.

Mein Smartphone verliert die Verbindung zu meinem WireGuard-Server hinter dem heimischen Router, wenn die DSL-Verbindung neu aufgebaut wird. Dann muss ich immer von Hand die WireGuard-Verbindung trennen und wieder aufbauen. Was kann ich tun?

Letztlich wenig. Es gibt zwar eine Einstellung PersistentKeepAlive = 15, mit der man WireGuard dazu bringen kann, in regelmäßigem Zeitabstand (im Beispiel 15 Sekunden) Pakete über die Verbindung zu schicken. Doch leider erzwingt das keine neue Namensanfrage, die bei geänderter IP-Adresse des WireGuard-Servers nötig wäre. Auf Mobilgeräten, bei denen man kein Hilfskonstrukt für solche Fälle bauen kann, etwa mit einem Skript, das die IP-Adresse des Servers auf Änderungen prüft, muss man vorerst damit leben.

Kann mein Router nicht gleich als WireGuard-Server dienen, so wie es für andere VPN-Techniken oft angeboten wird?

Könnte er. Leider findet sich in kommerziellen Routern noch sehr selten eine WireGuard-Implementierung. Das OpenWRT-Projekt stellt allerdings alternative Firmware für viele Router mit entsprechender Unterstützung zum Download bereit. Wie man unter OpenWRT mit WireGuard umgeht, hat c’t im Beitrag Mit OpenWrt alten Routern neue Aufgaben geben gezeigt.

Wie kann ich testen, ob mein WireGuard-Server IPv6-Pakete transportiert?

Besuchen Sie bei bestehender WireGuard-Verbindung Webseiten, die anzeigen, wie Ihr Browser mit dem Netz verbunden ist. Auf heise online finden Sie einen solchen Dienst, der verrät aber nur, ob der Zugriff mit einer IPv4- oder IPv6-Adresse erfolgt. Wenn Sie mehr wissen wollen, liefert ipv6-test.com sehr detaillierte Informationen.

Ich habe einen WireGuard-Server hinter meinem Router installiert. Wie kann ich WireGuard-Clients vom Rest meines Heimnetzes isolieren, sodass sie nicht mehr das NAS oder die Drucker erreichen?

Wenn der Server letztlich mit allen Geräten wie NAS & Co. in einem IP-Netzwerk steht, genügen iptables-Regeln. Die lassen den WireGuard-Server alle Pakete verwerfen, die an andere Geräte als das lokale Gateway des Netzes gerichtet sind. Für das interne IPv4-Netz 192.168.25.0/24 mit dem Gateway 192.168.25.1 könnte ein solcher Regelsatz lauten:

iptables -I FORWARD -i wg0 --destination 192.168.25.0/24 -j REJECT
iptables -I FORWARD -i wg0 --destination 192.168.25.1 -j ACCEPT

Die erste Regel unterbindet allen Traffic aus dem WireGuard- in das lokale Netz, die zweite schafft eine Ausnahme für das Gateway. Durch den Aufruf mit „-I“ wird die zuletzt eingefügte Regel als erste in der Kette abgearbeitet.

Wie kann ich auf Rechner im lokalen Netz zugreifen, etwa ein NAS, während ich über dieses Netz mit einem WireGuard-Server verbunden bin?

Wenn lokale Netze, etwa die eigene Hausautomation, bei bestehender WireGuard-Verbindung nicht erreichbar sind, hilft auf Android „Exclude private IPs“.

Steht der WireGuard-Server außerhalb des lokalen Netzes, hilft bei Android-Clients die Option „Exclude private IPs“ in den Verbindungseigenschaften der WireGuard-App. Sie trägt in der Option „AllowedIPs“ alle gängigen privaten Netze als zulässig ein und erreicht dadurch, dass Pakete an diese Adressen nicht durch den Tunnel zum WireGuard-Server fließen, sondern am Tunnel vorbei ins lokale Netz.

Andere WireGuard-Clients kennen „Exclude private IPs“ nicht, aber ein Eintrag in „AllowedIPs“ funktioniert genauso gut. Wenn die lokalen Rechner, die Sie erreichen wollen, im gleichen IP-Netzwerk stehen wie der WireGuard-Server, sollte der Zugriff ohne weitere Handgriffe funktionieren und ein Eintrag nicht nötig sein. Nur bei mehreren lokalen Netzen, die erreichbar sein sollen, wird man Extra-Regeln bemühen müssen. (ps)

Kommentare