Ein NAT Gateway mit der PowerShell

Im letzten Blogeintrag haben wir uns angesehen, man den route Befehl aus der CMD Shell mit der PowerShell ablösen kann, um Netzwerk Routing Tabellen auszulesen oder hinzuzufügen.

In diesem Blogeintrag schauen wir uns an, wie man unter Windows 10 ein NAT Gateway mit der PowerShell erstellen kann.

NAT ist die Kurzform von Network Address Translation und dient dem Umschreiben der IP Adresse in IP Paketen. Mit dem Windows NAT (genauer ein Source NAT) wird die Adresse des verbindungsaufbauenden Computers umgeschrieben.

Dadurch ist es mit Windows 10 und Hyper-V möglich, dass alle virtuelle Maschinen über das gerade aktive Client Netzwerkinterface das Internet erreichen. Dies ist eine deutliche Erleichterung, wenn man unter Hyper-V eine virtuelle Testumgebung mit einem eigenen Netzwerksegment einrichten möchte. Jede virtuelle Instanz erreicht das Internet (der Windows 10 Client mit Hyper-V schreibt die IP Adresse auf seine eigene um = NAT) und kann so z.B. Microsoft Updates herunterladen oder eine Hybridstellung zu Office 365 etablieren.

Mit passenden FritzBox Portweiterleitungen konnte ich dadurch auf meinem Notebook eine funktionstüchtige Exchange Hybrid Testumgebung einrichten.

Für die "mich interessieren nur die nackten PowerShell Befehle" zuerst alle Befehle in Kurzform - wer es genauer verstehen will, kann dann den restlichen Artikel lesen.

Alles noch einmal detailliert:

Zuerst sucht man sich ein freies, privates Netzwerksegment für die VMs aus. Da Router gerne die 192.168.0.0/24 bzw. 192.168.178.0/24 nutzen habe ich mich für das Segment 192.168.222.0/24 entschieden. Als Gateway für die VMs nehme ich die 192.168.222.254.

Danach legt man einen neuen, internen virtuellen Hyper-V Switch mit passenden Namen an. Ich nenne meinen TestLab_222

New-VMSwitch -SwitchName Testlab_222 -SwitchType Internal

Um schon bestehende VMs auf diesen Switch umzustellen, nutze ich folgenden PowerShell Befehl:

Get-VM | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "Testlab_222"

Die einzelnen VMs benötigen jetzt jeweils eine freie Adresse auf dem 192.188.222.0/24 Bereich. Als Nameserver nutzte ich die IPs von den Testlab Domain Controllern. Als Gateway wird die 192.168.222.254 eingetragen.

Mit der PowerShell kann man schnell überprüfen, ob alles richtig konfiguriert ist:

Get-VM | Where {$_.state -eq "Running"} | Get-VMNetworkAdapter | FT VMName,SwitchName,IPAddresses -a

Als nächstes bekommt die virtuelle Netzwerkkarte von meinem Switch TestLab_222 die Gateway Adresse 192.168.222.254.

Dafür muss ich die Interface Nummer herausfinden:

Get-NetAdapter | where {$_.name -like "*Testlab_222*"}

O.K. das Interface hat den Index 41.

Jetzt füge ich diesem Interface die GatewayAdresse 192.168.222.254 hinzu.

New-NetIPAddress -IPAddress 192.168.222.254 -PrefixLength 24 -InterfaceIndex 41

Als letztes wird das NAT auf dem Client eingerichtet, damit die Datenpakete, die die virtuellen Instanzen aus dem 192.168.220.0/24 Netz an das Gateway schicken, auf die Client-IP umgeschrieben und dann weitergeleitet werden.

New-NetNat -Name NetNat -InternalIPInterfaceAddressPrefix 192.168.222.0/24

Als Test öffne ich auf einer VM eine externe Webseite:

Eh voilà - es funktioniert wie es soll ...

Im nächsten Blogeintrag beschäftigen wir uns damit, wie man anstatt mit dem CMD Befehl more bzw. den bash Befehl less sich Textdateien oder die Hilfe seitenweise anzeigen lässt.

Was denken Sie?