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 hat
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 Beitrags 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:
- Neuester Wireguard Windows Client
- Firewall-Regeln einrichten (Port
51820weiterleiten)
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"
