Greifen Sie von überall auf Ihr Heimnetzwerk zu, wenn Wireguard VPN auf einem Windows-Server läuft

Veröffentlicht am 08.04.2020 von Dirk van der Laarse

COVID-19 hat stark zugeschlagen, und kleine Unternehmen ohne bezahlte VPN-Lösungen hatten keine Möglichkeit, schnell in den Homeoffice-Modus zu wechseln.

Einführung

Hier kommt Wireguard ins Spiel!

Wireguard ist so großartig, dass Linus Torvalds WireGuard VPN in den 5.6 Kernel-Quellcode aufgenommen hatIn einem neuen Fenster öffnen

Es ist unglaublich schnell - mit Wireguard erreicht die Verbindung fast das Maximum der ISP-Geschwindigkeit, während OpenVPN-Implementierungen viel langsamer waren.

Warnung

Bitte seien Sie vorsichtig im Umgang mit den privaten Schlüsseln, da jeder Zugang zu Ihrem Netzwerk erhält, wenn er diese in die Hände bekommt.

Dank dieses BeitragsIn einem neuen Fenster öffnen ist es nun einfach, ein "Road-Warrior"-VPN-Setup auf einem Windows-Server einzurichten. Alle Ehre gebührt Henry Chang.

Stellen Sie sicher, dass Sie Folgendes haben:

Warnung

Wireguard auf Windows als Server wird offiziell nicht unterstützt.

Vorbereitung der Wireguard Server- und Client-Konfigurationsdatei

Nachfolgend eine Beispielkonfigurationsdatei für den Server

[Interface]
Address = 172.89.100.1/24
ListenPort = 1194
DNS = 172.26.1.164
PrivateKey = ##Server-Privatschlüssel hier einfügen##

[Peer]
#user-1
PublicKey = ##Benutzer 1 Öffentlicher Schlüssel hier einfügen##
AllowedIPs = 172.89.100.2/32 

[Peer]
#user-2
PublicKey = ##Benutzer 2 Öffentlicher Schlüssel hier einfügen##
AllowedIPs = 172.89.100.3/32

Speichern Sie dies in C:\wireguard\wg_server.conf

Nachfolgend eine Beispielkonfigurationsdatei für einen Client

[Interface]
PrivateKey = ##Benutzer 1 Privatschlüssel hier einfügen##
Address = 172.89.100.2/24
DNS = ##DNS-Server hier einfügen, z.B. 172.26.1.111, 8.8.8.8##

[Peer]
PublicKey = ##Server Öffentlicher Schlüssel hier einfügen##
AllowedIPs = ##Falls Sie nur bestimmte Ziele über das VPN leiten möchten, geben Sie diese hier an, z.B. 172.89.100.0/24, 172.26.1.111/32, 172.26.0.0/16##
Endpoint = ##Server-Öffentliche IP/Domain-Name hier einfügen##
PersistentKeepalive = 25

Starten des Servers

Die folgenden Befehle können zum Starten oder Stoppen des Servers verwendet werden

#Start server
C:\Program Files\WireGuard\wireguard.exe /installtunnelservice "C:\wireguard\wg_server.conf"
#Stop server
C:\Program Files\WireGuard\wireguard.exe /uninstalltunnelservice wg_server

Sie müssen den Befehl nur einmal ausführen, der Hintergrunddienst von Wireguard merkt sich den Status über Neustarts hinweg.

Sobald Sie den Server starten, erstellt Wireguard einen neuen Netzwerkadapter mit demselben Namen wie Ihre Serverkonfigurationsdatei. In unserem Tutorial wäre der Netzwerkadaptername also “wg_server”.

Adapterprofil einstellen

Standardmäßig wird der Adapter als “Öffentlich” hinzugefügt. Führen Sie diese PowerShell-Befehle als Administrator aus, um das Profil auf "Privat" zu ändern:

$NetworkProfile = Get-NetConnectionProfile -InterfaceAlias "wg_server"

$NetworkProfile.NetworkCategory = "Private"

Set-NetConnectionProfile -InputObject $NetworkProfile

Server-Routing aktivieren

Wir müssen nun die Wireguard-Schnittstelle mit der physischen Internet-Schnittstelle des Servers überbrücken/NATen, damit Clients auf den Rest des Netzwerks zugreifen können. Verwenden Sie das folgende PowerShell-Skript, um NAT (aka “Internetfreigabe”) zu aktivieren:

Function Set-NetConnectionSharing
{
    Param
    (
        [Parameter(Mandatory=$true)]
        [string]
        $LocalConnection,

        [Parameter(Mandatory=$true)]
        [bool]
        $Enabled        
    )

    Begin
    {
        $netShare = $null

        try
        {
            # Create a NetSharingManager object
            $netShare = New-Object -ComObject HNetCfg.HNetShare
        }
        catch
        {
            # Register the HNetCfg library (once)
            regsvr32 /s hnetcfg.dll

            # Create a NetSharingManager object
            $netShare = New-Object -ComObject HNetCfg.HNetShare
        }
    }

    Process
    {
        #Clear Existing Share           
        $oldConnections = $netShare.EnumEveryConnection |? { $netShare.INetSharingConfigurationForINetConnection.Invoke($_).SharingEnabled -eq $true}           
        foreach($oldShared in $oldConnections)
        {
            $oldConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($oldShared)
            $oldConfig.DisableSharing()                        
        }        
    
        # Find connections
        $InternetConnection = Get-NetRoute | ? DestinationPrefix -eq '0.0.0.0/0' | Get-NetIPInterface | Where ConnectionState -eq 'Connected'        
        $publicConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $InternetConnection.InterfaceAlias }
        $privateConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $LocalConnection }

        # Get sharing configuration
        $publicConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($publicConnection)
        $privateConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($privateConnection)

        if ($Enabled)
        {           
            $publicConfig.EnableSharing(0)
            $privateConfig.EnableSharing(1)
        }
        else
        {
            $publicConfig.DisableSharing()
            $privateConfig.DisableSharing()
        }
    }
}

Dank an igoravl.

Speichern Sie dieses Skript hier:

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\wireguard\wireguard.psm1

Standard-IP-Adresse für die Internetfreigabe ändern

Standardmäßig ändert Windows die IP-Adresse des Adapters, wenn die Internetfreigabe (NAT) aktiviert ist, um Konflikte zu vermeiden.

Das brauchen wir nicht, da wir die gewünschte IP kennen. Öffnen Sie den Registrierungs-Editor und gehen Sie zu folgendem Pfad:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\SharedAccess\Parameters

Ändern Sie dann einfach ScopeAddress und StandaloneDHCPAddress auf die gewünschte IP-Adresse (172.89.100.1 in unserem Fall).

Deaktivieren und aktivieren Sie die Internetverbindungsteilung (NAT) erneut mit dem obigen PowerShell-Befehl, um sicherzustellen, dass diese Änderung wirksam wird (möglicherweise müssen Sie den Computer neu starten).

Batch-Dateien zum einfachen Starten und Stoppen des Servers

Für einige Automatisierungen können Sie die folgenden .bat-Skripte einrichten, um den Server zu starten und zu stoppen:

start.bat

@echo off
"C:\Program Files\WireGuard\wireguard.exe" /installtunnelservice "C:\WireGuard Config\wg-server.conf"
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-NetConnectionSharing "wg-server" $true

stop.bat

@echo off
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-NetConnectionSharing "wg-server" $false
"C:\Program Files\WireGuard\wireguard.exe" /uninstalltunnelservice "wg-server"
Mitwirkende: Dirk van der Laarse