VPN-Verbindung zu Azure mit FritzBox und dynamischer IP (update-gatewayip.ps1)

Besitzer einer Fritzbox können ein Site-to-Site-VPN mit Azure aufbauen. Wie das geht, ist z.B. hier beschrieben: http://www.krombusch.de/?p=629

Nun ist es leider so, dass die meisten Privatanschlüsse eine dynamische IP-Adresse haben und der Tunnel somit nach einer IP-Adressänderung nicht mehr funktioniert und die neue IP-Adresse manuell in den Azure VNET-Einstellungen geändert werden muss.

Das fand‘ ich ziemlich unbefriedigend, daher habe ich mir gedacht, das kann man doch mit einem PowerShell Skript und Azure Automation automatisieren. Als erstes braucht man dafür einen Service-Account, unter dem das Skript laufen soll. Wie dieser angelegt wird, ist hier beschrieben: http://azure.microsoft.com/blog/2014/08/27/azure-automation-authenticating-to-azure-using-azure-active-directory/

Dann muss das folgende Skript als Runbook in Azure Automation eingefügt werden. Die Werte in spitzen Klammern müssen angepasst werden. Das Skript löst den DynDNS-Namen auf die öffentliche IP-Adresse der Fritzbox auf und ersetzt per Regular Expression die IP-Adresse des lokalen VPN-Gateways in der Azure VNET-Konfiguration.


workflow Update-GatewayIp {
 Param(
 [string]$DNSName=“<DNS-Name>“
 )

$ErrorActionPreference = „Stop“
 $Cred = Get-AutomationPSCredential -Name „<Account-Name>“
 Add-AzureAccount -Credential $Cred | Write-Verbose
 Select-AzureSubscription -SubscriptionId <Subscription ID>

inlineScript {
 $DNSName = $using:DNSName

# Suchmuster für IP-Adresse anlegen
 $pattern = „[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}“

# IP Adresse ermitteln
 $ip = [System.Net.Dns]::GetHostAddresses(„$($dnsname)“) | Select-Object -First 1 -ExpandProperty IPaddressToString

# XML Content laden
 $config = Get-AzureVNetConfig

# IP ersetzen
 $config = $config.XMLConfiguration -replace „<VPNGatewayAddress>$($pattern)</VPNGatewayAddress>“,“<VPNGatewayAddress>$($ip)</VPNGatewayAddress>“

# Neuen XML Content schreiben
 Set-Content $env:temptemp.netcfg -Value $config

Set-AzureVNetConfig -ConfigurationPath $env:temptemp.netcfg

Write-Output „IP-Adresse wurde ersetzt.“
 }
 }

Ich habe meine Fritzbox so konfiguriert, dass nachts eine Zwangstrennung erfolgt. Das Runbook wird alle drei Stunden von Azure Automation ausgeführt, so dass der VPN-Tunnel zu normalen Arbeitszeiten immer zur Verfügung steht.

Danke an Ingo Deissenroth für die Umsetzung des Teils mit den regulären Ausdrücken!

Quelle Titelbild: Pixabay