Hey Checkyourlogs Fans,
For your viewing pleasure we have added a nice modification to our BigDemo scripts used to provision environments for our demos and books.
This time we have cleaned up a lot of the manual steps required to get routing working in our example labs in #Azure.
The Routing and NAT Switch is what we have fixed up this time.
Now, it is a bit tricky to get all this working properly but we have a working prototype:
Function Install-NetNat { param ( [string]$VMName, [string]$GuestOSName ) Write-Output -InputObject "[$($VMName)]:: Configuring NAT on the Hyper-V Internal Switch `"$($env:computername)`"" $CheckNATSwitch = get-vmswitch | where Name -eq $virtualNATSwitchName | Select Name If ($CheckNATSwitch -ne $null) { write-Host "Internal NAT Switch Found"} Else { write-Host "Not Found" Write-Host "Creating NAT Switch" New-VMSwitch -SwitchName $virtualNATSwitchName -SwitchType Internal $ifindex = Get-NetAdapter | Where Name -like *$virtualNATSwitchName* | New-NetIPAddress 192.168.10.1 -PrefixLength 24 Get-Netnat | Remove-NetNat -confirm:$false New-NetNat -Name $virtualNATSwitchName -InternalIPInterfaceAddressPrefix 192.168.10.0/24 } } Function Install-RRAS{ param ( [string] $VMName, [string] $GuestOSName, [string] $IPAddress ) Add-VMNetworkAdapter -VMName $VMName -SwitchName $virtualNATSwitchName Invoke-Command -VMName $VMName -Credential $domainCred { Write-Output -InputObject "[$($VMName)]:: Setting InternetIP Address to 192.168.10.254" $null = New-NetIPAddress -IPAddress "192.168.10.254" -InterfaceAlias 'Ethernet 2' -PrefixLength 24 $newroute = '192.168.10.1' Write-Output -InputObject "[$($VMName)]:: Configuring Default Gateway" $null = Get-Netroute | Where DestinationPrefix -eq "0.0.0.0/0" | Remove-NetRoute -Confirm:$False #$null = Test-NetConnection localhost new-netroute -InterfaceAlias "Ethernet 2" -NextHop $newroute -DestinationPrefix '0.0.0.0/0' -verbose $null = Get-NetAdapter | where name -EQ "Ethernet" | Rename-NetAdapter -NewName CorpNet $null = Get-NetAdapter | where name -EQ "Ethernet 2" | Rename-NetAdapter -NewName Internet Write-Output -InputObject "[$($VMName)]:: Installing RRAS" $null = Install-WindowsFeature -Name RemoteAccess,Routing,RSAT-RemoteAccess-Mgmt #$null = Stop-Service -Name WDSServer -ErrorAction SilentlyContinue #$null = Set-Service -Name WDSServer -StartupType Disabled -ErrorAction SilentlyContinue $ExternalInterface="Internet" $InternalInterface="CorpNet" Write-Output -InputObject "[$($VMName)]:: Coniguring RRAS - Adding Internal and External Adapters" $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "ras set conf ENABLED" $null = Set-Service -Name RemoteAccess -StartupType Automatic $null = Start-Service -Name RemoteAccess Write-Output -InputObject "[$($VMName)]:: Configuring NAT - Lab is now Internet Enabled" $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "routing ip nat install" $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "routing ip nat add interface ""CorpNet""" $null = Test-NetConnection 192.168.10.1 $null = Test-NetConnection 4.2.2.2 $null = cmd.exe /c "netsh routing ip nat add interface $externalinterface" $null = cmd.exe /c "netsh routing ip nat set interface $externalinterface mode=full" $null = Test-NetConnection 192.168.10.1 # $null = Test-NetConnection $($Subnet)1 $null = Test-NetConnection 4.2.2.2 Write-Output -InputObject "[$($VMName)]:: Disable FireWall" $null = cmd.exe /c "netsh firewall set opmode disable" }
The real test for this is to see if we can get out to the Internet automatically once configured.
The code is up on github: https://github.com/dkawula/Deploying-System-Center-Virtual-Machine-Manager-2016
This is really handy because it cuts down on the time for me to write the next revisions of the books.
Happy Friday and happy learning everyone,
Dave Kawula – Founder MVPDays Publishing