WireGuard Windows-Einrichtung
Diese Anleitung erklärt, wie ein WireGuard-VPN-Tunnel zwischen zwei Windows-Rechnern eingerichtet wird: ein WireGuard-Server auf einem entfernten Windows-Host, zum Beispiel einem Windows-VPS, und ein WireGuard-Client auf Ihrem lokalen Windows-Computer. Sobald der Tunnel aktiv ist, tauschen die beiden Rechner Daten über eine verschlüsselte private Verbindung aus, und Sie können optional den gesamten Datenverkehr des Clients über den Server leiten.
Um die Schlüsselerzeugung einfach zu halten, erstellt diese Anleitung sowohl die Server- als auch die Client-Konfiguration in einer WireGuard-Anwendung und stellt anschließend jede Konfigurationsdatei auf dem Rechner bereit, zu dem sie gehört. Die Serverkonfiguration läuft auf dem Server und die Client-Konfiguration auf dem Client. Server und Client sind immer getrennte Rechner. Auf dieselbe Weise lässt sich eine beliebige Anzahl weiterer Clients hinzufügen.
Installieren Sie vor dem Start die neueste Version von WireGuard von der offiziellen Installationsseite (https://www.wireguard.com/install/) sowohl auf dem Server als auch auf dem Client, und stellen Sie sicher, dass Sie auf jedem Rechner über Administratorrechte verfügen.
Der Aufbau in dieser Anleitung sieht so aus:
Server (public IP, listening on UDP 51820) Tunnel address 10.0.0.1/24 | | encrypted WireGuard tunnel | Client Tunnel address 10.0.0.2/32
Erstellen der Serverkonfiguration
Führen Sie C:\Program Files\WireGuard\wireguard.exe aus, klicken Sie auf Tunnel hinzufügen und wählen Sie Leeren Tunnel hinzufügen. WireGuard erzeugt automatisch ein Schlüsselpaar. Der oben im Fenster angezeigte öffentliche Schlüssel ist der öffentliche Schlüssel des Servers. Sie benötigen ihn später bei der Konfiguration des Clients.

Geben Sie dem Tunnel einen Namen und füllen Sie den Interface-Abschnitt mit dem privaten Schlüssel des Servers, dem Port, auf dem WireGuard lauschen soll, und der internen Adresse aus, die der Server innerhalb des Tunnels verwendet.
[Interface] PrivateKey = # private key of the WireGuard server ListenPort = # port that WireGuard will listen on Address = # internal IP address of the WireGuard server, for example 10.0.0.1/24

Verwenden Sie ein privates Subnetz für das Tunnelnetzwerk und halten Sie den Server und alle Clients im selben Bereich. Eine gängige Wahl ist 10.0.0.1/24 für den Server und 10.0.0.2/32, 10.0.0.3/32 und so weiter für jeden Client. Der Server verwendet ein /24-Präfix, sodass er den gesamten Tunnelbereich als über die WireGuard-Schnittstelle erreichbar behandelt. Jeder Client verwendet /32, da ein Client eine einzelne Adresse und kein Subnetz darstellt. Ein auf /24 gesetzter Client würde annehmen, dass der gesamte Bereich auf seiner eigenen Schnittstelle liegt, und den Datenverkehr für andere Tunneladressen nicht durch den Tunnel senden.
Im Tunnel-Editor, unterhalb des Konfigurationsfelds, können Sie optional Block untunneled traffic (kill-switch) aktivieren, was jeglichen Datenverkehr blockiert, der außerhalb des Tunnels laufen würde, und einen Pre-shared key festlegen, der eine zusätzliche Sicherheitsebene hinzufügt. Beide Optionen sind optional. Im Abschnitt „AllowedIPs verstehen" erfahren Sie, wann der Kill-Switch nützlich ist und was er blockiert.

Erstellen der Client-Konfiguration
Klicken Sie ein zweites Mal auf Tunnel hinzufügen und wählen Sie Leeren Tunnel hinzufügen, diesmal für den Client. Der für diesen Tunnel angezeigte öffentliche Schlüssel ist der öffentliche Schlüssel des Clients, den der Server benötigt, um den Client zu akzeptieren.
Füllen Sie die Client-Konfiguration aus:
[Interface] PrivateKey = # private key of the WireGuard client Address = # internal IP address of the WireGuard client, for example 10.0.0.2/32 DNS = 1.1.1.1, 1.0.0.1 [Peer] PublicKey = # public key of the WireGuard server AllowedIPs = # 0.0.0.0/0 for a full tunnel, or 10.0.0.0/24 for a split tunnel Endpoint = # public IP address and port of the WireGuard server PersistentKeepalive = 25
Der Endpoint muss die echte öffentliche IP-Adresse des Servers zusammen mit dem im ListenPort des Servers festgelegten Port sein, nicht die interne Tunneladresse. Hilfe bei der Wahl des AllowedIPs-Werts finden Sie im Abschnitt „AllowedIPs verstehen" weiter unten.
Die Zeilen DNS und PersistentKeepalive sind optional. DNS legt die DNS-Server fest, die verwendet werden, während der Tunnel aktiv ist, was Probleme bei der Namensauflösung nach dem Verbinden verhindert. Sie können öffentliche Resolver wie 1.1.1.1, 1.0.0.1 oder 8.8.8.8, 8.8.4.4 oder den DNS-Server des VPN-Netzwerks selbst verwenden. PersistentKeepalive = 25 sendet alle 25 Sekunden ein kleines Paket und hilft, die Verbindung offen zu halten, wenn sich der Client hinter NAT befindet.
Kopieren Sie die Schlüssel und den Endpoint sehr sorgfältig. Ein falsch eingegebener Schlüssel oder ein falscher Endpoint ist der häufigste Grund dafür, dass ein Tunnel keine Verbindung herstellt.

Hinzufügen des Clients zum Server
Öffnen Sie die Serverkonfiguration erneut und fügen Sie einen [Peer]-Abschnitt für den Client hinzu, wobei Sie den öffentlichen Schlüssel des Clients aus dem vorherigen Schritt verwenden.
[Peer] PublicKey = # public key of the WireGuard client AllowedIPs = # internal IP address of the client
In der Serverkonfiguration hat AllowedIPs zwei Aufgaben. Es teilt dem Server mit, welche Tunneladresse zu diesem Client gehört, und dient als Routingliste: Jedes Paket, das an diese Bereiche adressiert ist, wird verschlüsselt und an diesen Peer gesendet. Für einen einzelnen Client ist dies seine Tunneladresse, zum Beispiel 10.0.0.2/32. Wenn der Client zusätzlich ein lokales Netzwerk über den Tunnel erreichbar machen soll, fügen Sie dieses Subnetz hier ebenfalls hinzu, zum Beispiel 10.0.0.2/32, 192.168.1.0/24. Wiederholen Sie diesen Schritt für jeden weiteren Client.

Konfigurieren der Windows-Firewall auf dem Server
Der Server muss eingehenden WireGuard-Datenverkehr auf seinem UDP-Port akzeptieren. Öffnen Sie Windows Defender Firewall mit erweiterter Sicherheit, wählen Sie Eingehende Regeln und klicken Sie auf Neue Regel. Wählen Sie Port und klicken Sie auf Weiter. Wählen Sie UDP, geben Sie den WireGuard-Port ein, zum Beispiel 51820, und klicken Sie auf Weiter. Wenn Sie mehr als einen Port verwenden, listen Sie die Ports durch Kommas getrennt auf, zum Beispiel 51820, 51821. Wählen Sie Verbindung zulassen und klicken Sie auf Weiter. Wählen Sie die Profile aus, für die die Regel gilt. Wenn der Server in einem Rechenzentrum gehostet wird, reicht in der Regel das Profil „Öffentlich" aus, andernfalls lassen Sie die Profile „Domäne", „Privat" und „Öffentlich" ausgewählt. Klicken Sie auf Weiter, geben Sie der Regel einen aussagekräftigen Namen wie „WireGuard UDP 51820" und klicken Sie auf Fertig stellen.
Diese eingehende Regel wird nur auf dem Server benötigt, da der Server die Seite ist, die eingehende Verbindungen empfängt. Stellen Sie auf einem VPS außerdem sicher, dass Ihr Hosting-Anbieter eingehenden UDP-Datenverkehr auf diesem Port auf Netzwerkebene zulässt, nicht nur in der Windows-Firewall.
Exportieren und Bereitstellen der Konfigurationen
Wenn beide Konfigurationen fertig sind, klicken Sie auf Alle Tunnel in ZIP exportieren, wählen Sie einen Speicherort und speichern Sie.

Öffnen Sie das Archiv, um die Konfigurationsdateien für alle Tunnel zu finden. Legen Sie die Serverkonfiguration auf dem Server ab und geben Sie jedem Client seine eigene Konfigurationsdatei. Wenn der Rechner viele Tunnel enthält, können Sie auch einen einzelnen Tunnel über sein Kontextmenü exportieren. Der Export in eine ZIP-Datei ist praktisch, wenn beide Tunnel auf demselben Rechner erstellt wurden, wie in dieser Anleitung. Wenn Sie jede Konfiguration direkt auf ihrem eigenen Host erstellen, ist ein Export nicht erforderlich, und Sie können die Konfigurationsdatei von Hand kopieren.
Wählen Sie auf dem Server die Serverkonfiguration aus und klicken Sie auf Aktivieren.

Klicken Sie auf dem Client auf Tunnel hinzufügen, wählen Sie die Client-Konfigurationsdatei aus und öffnen Sie sie.

Klicken Sie dann auf Aktivieren.

Der erste Client ist nun konfiguriert. Fügen Sie weitere Clients auf dieselbe Weise hinzu: Erstellen Sie für jeden Client einen neuen leeren Tunnel und fügen Sie der Serverkonfiguration einen passenden [Peer]-Abschnitt mit dem öffentlichen Schlüssel und der Tunneladresse dieses Clients hinzu, wie im Abschnitt „Hinzufügen des Clients zum Server" beschrieben.
Warning: Wenn Sie WireGuard auf einem entfernten Server über eine RDP-Sitzung konfigurieren, lesen Sie den Abschnitt „AllowedIPs verstehen", bevor Sie einen Tunnel aktivieren, der den gesamten Datenverkehr leitet. Eine Konfiguration mit AllowedIPs = 0.0.0.0/0 kann den eigenen Datenverkehr des Servers in den Tunnel umleiten und Ihre RDP-Verbindung trennen.
Überprüfen der Verbindung
Nachdem Sie den Tunnel aktiviert haben, zeigt Windows den WireGuard-Adapter im Netzwerk- und Freigabecenter möglicherweise als „Kein Netzwerkzugriff" oder „Kein Internetzugriff" an. Dies ist erwartetes Verhalten, da Windows VPN-Tunneladapter nicht als Standard-Internetverbindungen behandelt, und es beeinträchtigt den Tunnel nicht. Windows entscheidet diesen Status über seine Konnektivitätsprüfung, die bestimmte Microsoft-URLs abfragt, sodass die Warnung auch erscheinen kann, wenn diese Abfragen blockiert oder von Ihrem DNS nicht aufgelöst werden, selbst wenn der Tunnel funktioniert.
Um zu bestätigen, dass der Tunnel funktioniert, überprüfen Sie seinen Status im WireGuard-Client. Ein aktiver Tunnel zeigt den Status „Aktiv" zusammen mit Datenübertragungszählern an. Wenn die Zähler steigen, leitet der Tunnel Datenverkehr weiter.
Auf dem Server können Sie außerdem bestätigen, dass WireGuard auf seinem UDP-Port lauscht, während der Tunnel aktiv ist:
netstat -ano | findstr 51820
In PowerShell lautet die Entsprechung:
Get-NetUDPEndpoint -LocalPort 51820
Ersetzen Sie 51820 durch Ihren WireGuard-Port. Wenn nichts zurückgegeben wird, ist der Tunnel nicht aktiv oder der Port weicht von dem in der Serverkonfiguration festgelegten ab.
Öffnen Sie als Nächstes die Eingabeaufforderung und pingen Sie die interne Tunneladresse des Servers an:
ping 10.0.0.1
Ersetzen Sie 10.0.0.1 durch die tatsächliche interne IP, die Sie für den Server festgelegt haben. Antworten bestätigen, dass der Tunnel funktioniert.
Wenn der Client AllowedIPs = 0.0.0.0/0 verwendet, können Sie außerdem bestätigen, dass der Datenverkehr durch den Tunnel geleitet wird:
tracert 8.8.8.8
Der erste Hop sollte die interne IP-Adresse des WireGuard-Servers sein.
Überprüfen des WireGuard-Handshakes
Der Handshake ist der nützlichste Indikator bei der Diagnose einer WireGuard-Verbindung. Öffnen Sie in der WireGuard-Anwendung den Tunnel und beobachten Sie das Feld Letzter Handshake. Bei einem funktionierenden Tunnel erscheint der Handshake innerhalb von Sekunden nach der Aktivierung und wird dann regelmäßig aktualisiert, während Daten übertragen werden. Wenn der Tunnel im Leerlauf ist, kann zwischen den Handshakes einige Zeit vergehen, eine kurze Pause ist also normal. Wenn das Feld leer bleibt, können die Peers einander nicht erreichen, was in der Regel auf einen falschen Endpoint, einen geschlossenen UDP-Port oder nicht übereinstimmende Schlüssel hindeutet.
Sie können den Handshake auch über die Befehlszeile mit dem wg-Tool prüfen, das mit WireGuard geliefert wird:
wg show
Die Ausgabe listet jeden Peer zusammen mit seinem letzten Handshake-Zeitpunkt und seinen Übertragungszählern auf.
AllowedIPs verstehen
Der AllowedIPs-Wert in der Client-Konfiguration entscheidet, welcher Datenverkehr durch den Tunnel gesendet wird. Kurz gesagt: Auf dem Client legt AllowedIPs fest, welche Pakete in den Tunnel gesendet werden, während es auf dem Server festlegt, welche Pakete von einem bestimmten Client akzeptiert werden und wohin sie geroutet werden.
AllowedIPs = 0.0.0.0/0 leitet den gesamten Datenverkehr durch den Tunnel, einschließlich des normalen Surfens im Internet. Verwenden Sie diesen Wert, wenn Sie vollständigen Datenverkehrsschutz wünschen. Damit dieser Datenverkehr das Internet erreicht, muss der Server ihn übersetzen. Siehe „Konfigurieren von NAT auf dem Server für vollständiges Tunneling" weiter unten.
AllowedIPs = 10.0.0.0/24 leitet nur den internen Netzwerkverkehr durch den Tunnel, während der normale Internetverkehr weiterhin die übliche Verbindung nutzt. Verwenden Sie diesen Wert, wenn Sie nur bestimmte Ressourcen im entfernten Netzwerk erreichen müssen.
Sie können mehrere Subnetze durch Kommas getrennt auflisten, zum Beispiel AllowedIPs = 10.0.0.0/24, 192.168.1.0/24.
Tip: Die Option Block untunneled traffic (kill-switch) im Tunnel-Editor entfaltet ihre volle Wirkung mit AllowedIPs = 0.0.0.0/0. Sie blockiert alles, was außerhalb des Tunnels laufen würde, was auch das lokale Netzwerk blockiert. Wenn Sie Zugriff auf Drucker oder andere LAN-Geräte benötigen, lassen Sie den Kill-Switch deaktiviert.
Warning: Wenn Sie AllowedIPs = 0.0.0.0/0 festlegen, wird jede Verbindung durch den Tunnel gesendet. Wenn Sie dies auf einem entfernten Server anwenden, den Sie über RDP verwalten, kann die RDP-Sitzung in dem Moment getrennt werden, in dem der Tunnel aktiv wird, da der Datenverkehr des Servers umgeleitet wird. Leiten Sie auf einem über RDP erreichten Server nur die benötigten Subnetze und testen Sie mit einem eng gefassten AllowedIPs-Wert, bevor Sie auf 0.0.0.0/0 umschalten.
Konfigurieren von NAT auf dem Server für vollständiges Tunneling
Wenn Clients AllowedIPs = 0.0.0.0/0 verwenden und Sie möchten, dass ihr Datenverkehr tatsächlich über den Server das Internet erreicht, muss der Server die internen WireGuard-Adressen in seine eigene externe Adresse übersetzen. Unter Windows geschieht dies mit dem Befehl New-NetNat, nicht mit den unter Linux verwendeten PostUp- und PostDown-Skripten.
Öffnen Sie PowerShell als Administrator auf dem Server und führen Sie Folgendes aus, wobei Sie das dem Server zugewiesene Tunnel-Subnetz verwenden:
New-NetNat -Name WireGuardNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/24
Ersetzen Sie 10.0.0.0/24 durch Ihr Tunnel-Subnetz und stellen Sie sicher, dass das Präfix jede von Ihnen zugewiesene Client-Adresse abdeckt. Ein Client außerhalb dieses Bereichs, zum Beispiel 10.0.1.2, würde von dieser Regel nicht erfasst. Sie können die aktiven Regeln jederzeit überprüfen:
Get-NetNat
Um die NAT-Regel später zu entfernen, führen Sie Folgendes aus:
Remove-NetNat -Name WireGuardNAT
Wenn Clients sich verbinden und der Handshake erfolgreich ist, ihr Internetverkehr aber dennoch nicht über den Server läuft, aktivieren Sie die IP-Weiterleitung auf den am Routing beteiligten Schnittstellen und testen Sie erneut. Die genaue Form hängt von der Windows-Version ab, zum Beispiel:
Set-NetIPInterface -InterfaceAlias "Ethernet" -Forwarding Enabled
Wenden Sie dies auf die externe Schnittstelle, die den Internetverkehr trägt, und auf die WireGuard-Schnittstelle an, wobei Sie deren tatsächliche Namen aus Get-NetIPInterface verwenden.
Info: New-NetNat erfordert Windows 10, Windows 11 oder Windows Server 2016 und höher und benötigt auf einigen Systemen die Aktivierung der Hyper-V-Funktion, selbst wenn Sie Hyper-V ansonsten nicht verwenden. Auf einigen VPS-Tarifen kann Hyper-V nicht aktiviert werden, was diese Methode blockiert. Ob New-NetNat allein ausreicht oder zusätzlich die IP-Weiterleitung aktiviert werden muss, kann von der Windows-Version abhängen, prüfen Sie dies also auf Ihrem Server, wenn das vollständige Tunneling nicht funktioniert.
Fehlerbehebung
Der Tunnel ist aktiv, aber es besteht keine Verbindung zum Server. Überprüfen Sie, ob der WireGuard-UDP-Port, zum Beispiel 51820, in der Firewall auf dem Server geöffnet ist. Bestätigen Sie, dass die öffentlichen Schlüssel korrekt zwischen Server- und Client-Konfiguration kopiert wurden. Stellen Sie sicher, dass der Endpoint in der Client-Konfiguration auf die echte öffentliche IP-Adresse des Servers verweist, nicht auf die interne Tunneladresse.
DNS funktioniert nach dem Verbinden nicht. Fügen Sie dem Interface-Abschnitt des Clients einen DNS-Server hinzu:
[Interface] PrivateKey = ... Address = ... DNS = 1.1.1.1, 1.0.0.1
Die Paketzähler steigen nicht an. Der Tunnel überträgt keine Daten. Überprüfen Sie, ob AllowedIPs auf beiden Seiten korrekt festgelegt ist, ob die internen WireGuard-Adressen nicht mit dem vorhandenen lokalen Netzwerk in Konflikt stehen und ob der ListenPort nicht bereits von einer anderen Anwendung verwendet wird.
Sie benötigen mehr Details, um ein Problem zu diagnostizieren. Öffnen Sie den Tunnel in der WireGuard-Anwendung und sehen Sie sich die Registerkarte „Log" an, die Handshakes, Fehler und Verbindungsereignisse aufzeichnet, sobald sie auftreten. Von dort aus können Sie das Protokoll exportieren, wenn Sie es weitergeben müssen.
Automatischer Start von WireGuard nach einem Server-Neustart
Damit der Tunnel über Neustarts hinweg läuft, installieren Sie ihn als Windows-Dienst. Wenn ein Tunnel als Dienst installiert ist, startet er nach einem Neustart automatisch. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator und führen Sie Folgendes aus, wobei Sie den Pfad zu Ihrer Serverkonfigurationsdatei verwenden:
wireguard /installtunnelservice "C:\Program Files\WireGuard\wg_server.conf"
Nach der Installation erscheint der Tunnel in der Windows-Dienstliste als WireGuard Manager, mit dem Status „Wird ausgeführt" und dem Starttyp „Automatisch", was bestätigt, dass er nach einem Neustart von selbst startet.

Führen Sie diesen Befehl nur einmal aus, nicht bei jedem Start. Das Aktivieren des Tunnels über die WireGuard-Anwendung installiert normalerweise denselben Dienst, sodass es in vielen Fällen ausreicht, ihn einmal zu aktivieren. Um den Dienst später zu entfernen, verwenden Sie den Tunnelnamen, der dem Namen der Konfigurationsdatei ohne die Erweiterung .conf entspricht:
wireguard /uninstalltunnelservice wg_server
Um den Dienst neu zu starten, zum Beispiel nach dem Bearbeiten der Konfiguration, führen Sie den Deinstallationsbefehl gefolgt vom Installationsbefehl erneut aus.
Info: Da der Tunnel als Dienst läuft, ist keine separate Aufgabe im Aufgabenplaner erforderlich.
Starten Sie den Server neu und bestätigen Sie, dass der Tunnel von selbst startet.