SC2012 R2 VMM Preview verwirft Windows Server 2012 R2 Preview NVGRE Gateway NAT Einstellungen

Heute hatte ich schon eine Anleitung für das Windows Server 2012 R2 Preview NVGRE Gateway mit NAT in SC2012 R2 VMM Preview veröffentlicht.

-> http://www.danielstechblog.de/windows-server-2012-r2-preview-nvgre-gateway-mit-nat-in-sc2012-r2-vmm-preview/

Bei weiteren Tests ist mir heute aufgefallen, sobald der VMM Server und das NVGRE Gateway heruntergefahren worden sind, verwirft der VMM Server beim nächsten Start die NAT Einstellungen für das NVGRE Gateway. Dies fällt erst beim Starten des NVGRE Gateway in den Jobs auf.

Problems

Dies sieht man wunderbar in dem Screenshot wo die NAT-Adresse 10.0.0.15 einfach verworfen wird. Demzufolge haben dann die VMs in diesem VM Network keinen Zugriff mehr nach außen.

Die Problemlösung beziehungsweise der Workaround gestaltet sich etwas aufwendig, da man die NAT Regeln sowie die NAT Verbindung entfernen und wieder neuanlegen muss. Das war es auf der NVGRE Gateway und VM Network Seite. Bei den VMs in diesem VM Network muss die NIC entfernt und wieder neuhinzugefügt werden. Damit ist die Prozedur abgeschlossen und der Zugriff in das Datacenter funktioniert wieder.

Ich habe kurz um ein PowerShell Skript geschrieben, welches die Einstellungen ausließt, das Entfernen vornimmt und die Einstellungen in den ursprünglichen Zustand wiederherstellt. Wichtig die VMs, die ich in diesem VM Network betreibe, sind per Custom Properties mit NVGRE gekennzeichnet, so lassen sich diese leichter identifizieren.

import-module virtualmachinemanager
#Information Gathering
$Gateway=Get-SCNetworkGateway
$VMNetwork=Get-SCVMNetwork -Name “Tenant_Datacenter”
$VMGateway=Get-SCVMNetworkGateway -VMNetwork $VMNetwork
$NATConnections=Get-SCNATConnection -VMNetworkGateway $VMGateway
$NATRules=Get-SCNATRule -VMNetworkGateway $VMGateway|Where{$_.InternalPort -ne $null}
$VMs=Get-SCVirtualMachine|Where{$_.CustomProperties -eq “NVGRE”}
#Remove NAT Connection & Rules|Remove vNIC
foreach($NATRule in $NATRules){
Remove-SCNATRule -NATRule $NATRule
$ExternalIPAddress=$NATRule.ExternalIPAddress
}
foreach($NATConnection in $NATConnections){
Remove-SCNATConnection -NATConnection $NATConnection
}
foreach($VM in $VMs){
if($VM.Status -eq “Running”){
Stop-SCVirtualMachine -VM $VMs -Shutdown
}
$Adapter=Get-SCVirtualNetworkAdapter -VM $VM
Remove-SCVirtualNetworkAdapter -VirtualNetworkAdapter $Adapter
if($Adapter.PortClassification -eq $null){
New-SCVirtualNetworkAdapter -VM $VM -VirtualNetwork $Adapter.VirtualNetwork -VMNetwork $Adapter.VMNetwork -VMSubnet $Adapter.VMSubnet -Synthetic -IPv4AddressType Static
}
else{
New-SCVirtualNetworkAdapter -VM $VM -VirtualNetwork $Adapter.VirtualNetwork -VMNetwork $Adapter.VMNetwork -VMSubnet $Adapter.VMSubnet -Synthetic -IPv4AddressType Static -PortClassification $Adapter.PortClassification
}
$AdapterNew=Get-SCVirtualNetworkAdapter -VM $VM
Set-SCVirtualNetworkAdapter -IPv4AddressType Static -VirtualNetworkAdapter $AdapterNew -IPv4Addresses $Adapter.IPv4Addresses
Start-SCVirtualMachine -VM $VM
}
#Add NAT Connection & Rules
foreach($NATConnection in $NATConnections){
$Connection=Add-SCNATConnection -Name $NATConnection.Name -VMNetworkGateway $NATConnection.VMNetworkGateway -ExternalIPAddress $ExternalIPAddress
}
foreach($NATRule in $NATRules){
Add-SCNATRule -NATConnection $Connection -Name $NATRule.Name -InternalIPAddress $NATRule.InternalIPAddress -InternalPort $NATRule.InternalPort -ExternalPort $NATRule.ExternalPort -Protocol $NATRule.Protocol
}
#Update Gateway in VMM
Read-SCNetworkGateway -NetworkGateway $Gateway
Read-SCVMNetworkGateway -VMNetworkGateway $VMGateway

NVGRE_Gateway_Reset

Facebooktwittergoogle_pluslinkedinmail