# Wireguard Reconnect bei IP Wechsel

# Windows Powershell script

### Beschreibung:

Ist der Server unter einer DYN Adresse errreichbar, bekommt wireguard nicht mit, das sich die IP geändert hat.  
Dazu müssen wir den Dienst neustarten. Dazu nehmen wir ein Powershell Script, das immer die aktuelle mit der alten IP alle 5 Minuten vergleicht.  
Das alle 5 Minuten rufen wir mit bdem Taskplaner auf

### Los gehts:

#### Tunnelname herausbekommen.

Unter Windows Dienste den Tunnel raussuchen

[![bild01.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/e3cXzG0mcto3f2zN-bild01.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/e3cXzG0mcto3f2zN-bild01.PNG)

In unserem Beispiel heißt der Tunnel "WireGuardTunnel$tk-anlage"

[![bild02.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/HB5JvBPKkkmc73TR-bild02.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/HB5JvBPKkkmc73TR-bild02.PNG)

#### Das Script:

Hier muss noch der Pfad zur TXT Datei, zur Log Datei und der Tunnelname angeben werden.

<div id="bkmrk-hinweis%3A-das-wiregua" style="border: 1px solid #ffc107; background-color: #fff3cd; padding: 15px; margin-bottom: 20px;">**Hinweis:**   
Das WireGuardTunnel steht schon da, es muss nur noch der Name mit dem Dollar angegben werden.  
Das Dollar muss mit ` escaped werden. : Beispiel : $TunnelName = "`$tk-anlage"  
</div>```
$FilePath =  'path\to\ip.txt'
$LogPath =  'path\to\ip.log'
$TunnelName = "`$meintunnelnamenachdemdollar"

function Write-Log {
    param (
        [string]$Message
    )
    Add-Content -Path $Global:LogPath -Value "[$(Get-Date)] $Message"
}

try {
    $CurrentIP = (Invoke-RestMethod -Uri 'http://ifconfig.me/ip').Trim()
    Write-Log "Aktuelle IP: $CurrentIP"
    
    $StoredIP = Get-Content $FilePath -ErrorAction SilentlyContinue
    Write-Log "Gespeicherte IP: $StoredIP"
    
    if ($CurrentIP -ne $StoredIP) {
        Write-Log "IP-Adresse hat sich geändert. Neustart des Dienstes..."
        
        # Neustart des WireGuard-Dienstes und Erfassung der Ausgabe
        $ServiceRestartOutput = Restart-Service -Name "WireGuardTunnel$TunnelName" -PassThru
        Write-Log "Dienstneustart-Ausgabe: $ServiceRestartOutput"
        
        # Aktualisierung der gespeicherten IP-Adresse
        Set-Content -Path $FilePath -Value $CurrentIP
        Write-Log "Die gespeicherte IP-Adresse wurde aktualisiert."
    }
}
catch {
    # Logging von Fehlern
    Write-Log "Es gab einen Fehler beim Abrufen der aktuellen IP-Adresse oder beim Neustart des Dienstes: $_"
}

Beispiel:

$FilePath = 'c:\tunnel\ip.txt'
$LogPath = 'c:\unnel\log.txt'
$TunnelName = "`$tk-anlage"

function Write-Log {
    param (
        [string]$Message
    )
    Add-Content -Path $Global:LogPath -Value "[$(Get-Date)] $Message"
}

try {
    $CurrentIP = (Invoke-RestMethod -Uri 'http://ifconfig.me/ip').Trim()
    Write-Log "Aktuelle IP: $CurrentIP"
    
    $StoredIP = Get-Content $FilePath -ErrorAction SilentlyContinue
    Write-Log "Gespeicherte IP: $StoredIP"
    
    if ($CurrentIP -ne $StoredIP) {
        Write-Log "IP-Adresse hat sich geändert. Neustart des Dienstes..."
        
        # Neustart des WireGuard-Dienstes und Erfassung der Ausgabe
        $ServiceRestartOutput = Restart-Service -Name "WireGuardTunnel$TunnelName" -PassThru
        Write-Log "Dienstneustart-Ausgabe: $ServiceRestartOutput"
        
        # Aktualisierung der gespeicherten IP-Adresse
        Set-Content -Path $FilePath -Value $CurrentIP
        Write-Log "Die gespeicherte IP-Adresse wurde aktualisiert."
    }
}
catch {
    # Logging von Fehlern
    Write-Log "Es gab einen Fehler beim Abrufen der aktuellen IP-Adresse oder beim Neustart des Dienstes: $_"
}


```

#### Task Planen  


Programm zum starten wählen:

```
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
```

Als Parameter

```
-ExecutionPolicy Bypass -File "C:\Pfad\zu\Ihrem\Skript.ps1"

In unserem Beispiel

-ExecutionPolicy Bypass -File "c:\tunnel\reconnect.ps1"
```

[![bild04.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/JAdUJS6D14dzNS2z-bild04.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/JAdUJS6D14dzNS2z-bild04.PNG)

Nun in den erweitertet Eigenschaften jeden Tag um 00:00 UHR und Ausführung alle 5 Minuten auswählen und Ausführung alle 1 Tag!

<div id="bkmrk-hinweis%3A-den-haken-b" style="border: 1px solid #ffc107; background-color: #fff3cd; padding: 15px; margin-bottom: 20px;">**Hinweis:**   
Den Haken bei Aktiviert nicht vergessen!  
</div>[![bild06.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/i8HqeuseOQHbmcW5-bild06.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/i8HqeuseOQHbmcW5-bild06.PNG)

Nun noch mit Windows 10 auswählen und unabhängig von der Benutzeranmeldung ausführen auswählen.  
Dann noch mit höchsten Privilegien ausführen.

[![bild05.PNG](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/scaled-1680-/OfSeHbpr3MRSxpVR-bild05.PNG)](https://wiki.hacker-net.de/uploads/images/gallery/2023-09/OfSeHbpr3MRSxpVR-bild05.PNG)

Fertig.