WireGuard-Server unter Windows einrichten

WireGuard, das moderne und performante VPN, wird Server-seitig in der Regel unter Linux oder BSD eingesetzt, ein Betrieb ist allerdings auch unter Windows möglich.

Gleich zu Beginn dieses Beitrags sei erwähnt, das es keine offizielle Unterstützung für den Betrieb eines WireGuard-Servers unter Windows gibt! Die GUI ist zudem für den Server-Betrieb eher unbrauchbar, da diese für den Client-Betrieb ausgelegt ist.

Dieser Beitrag basiert auf der Anleitung von Henry Chang:

How to Setup Wireguard VPN Server On Windows

Und der Variante unter cyberpatel.com.

Es wird nur die Nutzung für Roadwarrior beschrieben.

WireGuard herunterladen und installieren

Zu Beginn lädt man entweder den Installer oder die passende MSI beim Anbieter herunter. Direkt nach der Installation startet die GUI, die man gleich wieder beenden sollte.

WireGuard als Server konfigurieren

Damit man WireGuard nutzen kann, ist zunächst für den Server und für jedes Peer (Client) ein Schlüsselpaar sowie zusätzlich ein PSK angelegt werden. Da wie eingangs erwähnt die GUI für dieses Szenario nur bedingt nutzbar ist, wechselt man in die Eingabeaufforderung:

Privaten und öffentlichen Schlüssel generieren:

wg genkey > privatekey.txt
wg pubkey < privatekey.txt > publickey.txt

Die obigen Befehle einmal für den Server und einmal pro Peer/Client ausführen!

Preshared Key (PSK) erzeugen:

wg genpsk > psk.txt

Diesen Befehl einmal pro Peer/Client ausführen!

Wichtig: Die Befehle überschreiben die jeweiligen Dateien! Daher diese nach jedem Ausführen entsprechend vom Namen her anpassen!

Hat man die notwendigen Schlüsselpaare und PSKs erzeugt, kann man die eigentliche Server-Konfiguration anlegen:

[Interface]
PrivateKey = <Privater Schlüssel des WireGuard-Servers>
ListenPort = 51820
Address = <Transfer-Netz, z.B. "192.168.200.1/24">

[Peer]
# Irgendein Name
PublicKey = <Öffentlicher Schlüssel des Peers/Clients>
PresharedKey = <PSK des Peers/Clients>
AllowedIPs = <IP-Adresse aus dem Transfer-Netz für dieses Peer, z.B. "192.168.200.2/32">

Für jedes weitere Peer bzw. jeden weiteren Client muss ein eigener “[Peer]”-Abschnitt angelegt werden!

Die Konfigurationsdatei z.B. unter “C:\WireGuard” als “wg_server.conf” abspeichern.

Hinweis: Nach Möglichkeit nicht unter “C:\Program Files\WireGuard\Data\Configurations” abspeichern, da im Falle das doch mal die GUI gestartet wird, die Konfiguration sonst durch diese verschlüsselt und dann als z.B. “wg_server.conf.dpapi” abgelegt wird.

Der WireGuard-Server-Dienst wird mit folgenden Befehl angelegt und gestartet:

wireguard /installtunnelservice "C:\WireGuard\wg_server.conf"

In der Diensteverwaltung erscheint dieser dann mit

Dienstname: WireGuardTunnel$wg_server
Anzeigename: WireGuard Tunnel: wg_server

Hinweis: Nach jeder Änderung an der Konfiguration muss der Dienst neu gestartet werden.

Routing einrichten

Im Gegensatz zur Einrichtung des Routings eines OpenVPN-Servers unter Windows reicht es nicht aus, einmalig folgende Befehle auszuführen:

netsh interface ipv4 set int "LAN-Verbindung" forwarding=enabled
netsh interface ipv4 set int "wg_server" forwarding=enabled

Der Hintergrund hierzu ist, das die WireGuard-Schnittstelle dynamisch bei der Installation bzw. beim Starten des Dienstes angelegt und bei dessen Beendigung entfernt wird. Um nun nicht jedes Mal händisch das Routing reaktivieren zu müssen, kann man die Konfiguration etwas ändern:

Zunächst muss die Ausführung von Skripten durch den WireGuard-Dienst erlaubt werden:

reg add HKLM\Software\WireGuard /v DangerousScriptExecution /t REG_DWORD /d 1 /f

Nun ist es möglich bei verschiedenen Stati (PreUp, PostUp, PreDown und PostDown) Befehle bzw. Skripte ausführen zu lassen.

Folgende Zeile im “[Interface]”-Abschnitt der “wg_server.conf” einfügen und den Dienst neu starten:

PostUp = netsh interface ipv4 set int "wg_server" forwarding=enabled

Windows-Firewall

In der Windows-Firewall muss der Port 51820/udp freigegeben werden. Alternativ kann man das Programm

"C:\Program Files\WireGuard\wireguard.exe"

freigeben.

Router konfigurieren

Damit aus dem Internet heraus eine WireGuard-Verbindung aufgebaut werden kann, muss im Router der Port 51820/udp zur IP-Adresse des (internen) WireGuard-Servers weitergeleitet werden.

Um wiederum andere Geräte im LAN des WireGuard-Servers erreichen zu können, muss im Router noch eine Route für das Transfer-Netz zum WireGuard-Server als Gateway gesetzt werden. Am Beispiel einer FRITZ!Box sieht das so aus:

Peer/Client konfigurieren

Eine typische WireGuard-Konfigurationsdatei kann so aussehen:

[Interface]
PrivateKey = <Privater Schlüssel des jeweiligen Peers/Clients>
Address = <IP aus dem Transfer-Netz, z.B. "192.168.200.2/24">
# DNS = LAN-IP des Routers, IP eines DNS-Servers oder -Dienstes

[Peer]
PublicKey = <Öffentlicher Schlüssel des WireGuard-Servers>
PresharedKey = <PSK des jeweiligen Peers/Clients>
AllowedIPs = <LAN der pfSense, z.B. "192.168.1.0/24" oder "0.0.0.0/0">
Endpoint = <Öffentliche IP oder FQDN des WireGuard-Servers bzw. Routers>:51820

Möchte man DNS verwenden, entfernt man die Raute, dann werden alle Namensauflösungen an den bzw. dort angegebenen Server weitergeleitet.

Diese Konfiguration kann in der WireGuard-App bzw. -Anwendung unter Windows, Android und Co. importiert werden.

Quellen

WireGuard – Quick Start

ZX2C4 Git Repository – wireguard-windows – Registry Keys for Admins

2 Kommentare

  • Hallo Andy,

    vielen Dank für Deine Anleitung. Das hat alles soweit funktioniert, ABER ich bekommst es leider nicht hin, dass ich von meinem Windows 10 Client bei aktiver Verbindung zum Server meine lokale Internetverbindung nutzen kann.

    Was übersehe ich?

    Gruß
    Benjamin

  • Hallo Benjamin,

    in der Client-Konfig. muss im Abschnitt “Interface” DNS aktiv sein, z.B.

    DNS = 8.8.8.8

    Statt Google und Co. kann man auch die IP seines eigenen Routers oder DNS-Servers eintragen.
    Und im Abschnitt “Peer” (auch auf dem Client) muss jedweder Traffic umgeleitet werden:

    AllowedIPs = 0.0.0.0/0

    “0.0.0.0/0” entspricht einem redirect-gateway.

    Wenn das so funktioniert, ist es gut, wenn nicht, liegt’s mit Sicherheit an einer Firewall.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.