Tags: Hyper-V, Netzwerk, Switch, Windows 10, Windows Server 2016
Während VMware Workstation oder VirtualBox schon lange die Konfiguration von NAT für virtuelle Maschinen erlauben, bot Hyper-V dieses Feature bisher nicht. Das ändert sich mit Windows 10 und Server 2016, die pro Host einen NAT-vSwitch unterstützen. Ein integrierter DHCP-Server kam mit Windows 10 1709 hinzu.
Microsoft hat mit Windows Server 2016 TP4 und Windows 10 1511 einen eigenen Switch-Typ für NAT eingeführt, diesen aber in späteren Versionen wieder entfernt. Daher muss man einen NAT-Switch auf Basis des Typs intern konfigurieren. Eine GUI-Option existiert dafür nicht, die Konfiguration ist auf PowerShell beschränkt.
Hyper-V kennt daher weiterhin nur drei Arten von virtuellen Switches: Extern, Intern und Privat. Während ein externer vSwitch den VMs Zugriff auf Ressourcen des gesamten Netzwerks erlaubt, beschränken interne und private Switches die Kommunikation auf den Host und seine VMs bzw. nur auf VMs des betreffenden Hosts.
Notwendigkeit für eigenen NAT-Router entfällt
Wer in der Vergangengeit auf einem Host ein eigenes NAT-Netzwerk für die VMs einrichten wollte, musste sich für einen Switch vom Typ Intern entscheiden und zusätzlich eines der Gastbetriebssysteme als Router konfigurieren, etwa durch Aktivierung von Internet Connection Sharing unter Windows.
Die Notwendigkeit für solche Behelfslösungen entfällt nun in Windows 10 und Server 2016. Ein für NAT-Netzwerke konfigurierter interner vSwitch wickelt den Traffic der VMs mit der Außenwelt über die Public IP des Host-Computers ab.
Konfiguration nur über PowerShell
Die Einrichtung eines NAT-vSwitches ist nicht über die GUI des Hyper-V Managers möglich. Die einzige Option ist zurzeit PowerShell, das für diesen Zweck die nötigen Cmdlets bereitstellt.
Im ersten Schritt richtet man mit New-VMSwitch einen neuen internen vSwitch ein, in diesem Beispiel erhält er den Namen NATSwitch:
New-VMSwitch -Name NATSwitch -SwitchType Intern
Anschließend kann man sich mit dem Befehl Get-VMSwitch einen Überblick verschaffen und sich überzeugen, dass der neue vSwitch angelegt wurde.
Im nächsten Schritt konfiguriert man das Gateway für den neuen vSwitch. Dafür benötigt man zuerst den Interface-Index, den man durch den Aufruf von
Get-NetAdapter
ermitteln kann.
Nun führt man New-NetIPAddress aus, dem man die gewünschte IP-Adresse des Gateways (typischerweise die xxx.xxx.xxx.1), die Präfixlänge des Subnets (abhängig von der Netmask beispielsweise 24 oder 32) sowie den oben erwähnten Interface-Index übergibt:
New-NetIPAddress -IPAddress 192.168.99.1 -PrefixLength 24 -InterfaceIndex 13
Schließlich erzeugt man mit Hilfe von New-NetNat ein neues NAT-Objekt auf dem Host, das die internen Adressen in externe übersetzt. Dabei gibt man das gleiche Subnet an, das man bereits für die Einrichtung des Switches verwendet hat:
New-NetNat -Name MyNAT -InternalIPInterfaceAddressPrefix 192.168.99.0/24
Mit diesen PowerShell-Kommandos ist die grundsätzliche Konfiguration des NAT-Netzwerks abgeschlossen.
IP-Konfiguration der VMs
Verbindet man nun VMs mit dem NAT-Switch, dann erhalten sie nicht automatisch eine IP aus dem zuvor festlegten Adresskreis. Anders als etwa die VMware Workstation vergibt Hyper-V nämlich keine dynamischen Adressen. Daher ist man entweder gezwungen, feste Adressen in den VMs einzutragen oder einen DHCP-Server in einer der VMs zu installieren.
Betreibt man Windows Server als einen der Gäste, dann kann man dort den integrierten DHCP-Dienst aktivieren. Für die Client-Versionen des Betriebssystems existiert eine Reihe von kostenlosen Implementierungen, beispielsweise DHCP Server for Windows oder Open DHCP Server.
Zugriff von außen auf VMs hinter dem NAT-Switch
Möchte man VMs von außerhalb des NAT-Netzwerks ansprechen, dann ist das auf dem jeweiligen Host selbst ohne weitere Konfiguration möglich. Das Betriebssystem der Parent Partition hat nämlich Zugang zum NAT-Switch.
Möchte man sich jedoch von einer externen Workstation aus mit bestimmten Diensten in den VMs wie HTTP-Server oder RDS verbinden, dann muss man dafür ein entsprechendes Port-Forwarding einrichten:
Add-NetNatStaticMapping -NatName MyNAT -Protocol TCP -ExternalIPAddress 0.0.0.0 -ExternalPort 23389 -InternalIPAddress 192.168.99.99 -InternalPort 3389
Dieser Aufruf erlaubt die Herstellung einer RDP-Verbindung mit dem Gast in der VM, wenn diese die IP-Adresse 192.168.99.99 hat. Als externen Port nimmt man typischerweise nicht den Standardwert des jeweiligen Protokolls (das obige Beispiel verwendet 23380). Als Argument für ExternalIPAddress wählt man 0.0.0.0, wenn der Host keine feste IP-Adresse nutzt. Dies ist in der Regel unter Windows 10 der Fall.
Möchte man hier stattdessen eine bestimmte IP angeben, dann muss man diese vorher mit Hilfe von Add-NetNatExternalAddress hinzufügen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Windows 10 1709 Hyper-V: Standard-Switch für NAT und DHCP-Server
- Hyper-V-Host mit PowerShell (remote) konfigurieren, vSwitch hinzufügen
- MAP Toolkit 9.6 prüft Voraussetzungen für Migration auf Server 2016
- Nested Virtualization: Hyper-V in einer Hyper-V-VM installieren
- Kostenloses E-Book von Microsoft Press zu Windows Server 2016
Weitere Links
6 Kommentare
Win Server 2012 R2, March 2018:
Folgendes Argument hat mir jeweils einen Fehler ausgelöst
–InternalIPInterfaceAddressPrefix
New-NetNat : Es wurde kein Parameter gefunden, der dem Parameternamen "InternalIPInterfaceAddressPrefix" entspricht.
Versucht habe ich viel, funktioniert hat es erst als ich das Statement aufteilte:
PS C:\Users\Administrator> new-netnat -Name MyNatnetwork
Cmdlet New-NetNat an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
ExternalIPInterfaceAddressPrefix: 192.168.0.1/24
Hoffentlich kann ich jemandem so Zeit sparen.
Mfg
Hat mir sehr geholfen,
Vielen Dank für die Veröffentlichung
Vielen Dank für den Tip.
Bei mir hat es auch gereicht die entsprechende Zeile wie folgt zu korrigieren:
New-NetNat -Name MyNAT -InternalIPInterfaceAddressPrefix: 192.168.99.0/24
Es hat nur der Doppelpunkt gefehlt.
System Win 10 Enterprise 1809
Beim ausführen des Befehls :New-VMSwitch -Name NATSwitch -SwitchType Intern
bekomme ich folgende Fehlermeldung
New-VMSwitch : Fehler beim Hinzufügen von Verbindungen für den virtuellen Ethernet-Switch.
In Zeile:1 Zeichen:1
+ New-VMSwitch -Name NATSwitch -SwitchType Intern
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-VMSwitch], VirtualizationException
+ FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.NewVMSwitch
Was mache ich falsch?
Hallo,
vielen Dank für die Anleitung. Hat mir auch gut geholfen. Mich würde noch interessieren, ob die Möglichkeit besteht, dem NATSwitch eine feste IP zu zuweisen. Möchte gerne nextcloud als VM laufen lassen und immer die selbe IP dafür haben.
Danke
Gruß
Hallo,
danke für die Anleitung! Echt super erklärt!
Ich hätte auch noch eine weiterführende Frage:
Ist es wohl möglich, dass man den virtuellen NAT-Switch mit einem weiteren externen virtuellen Switch verbindet?
Ich habe folgendes Szenario:
Hyper-V Host hat 2 Externe NIC's
Auf dem Host ist ein Nat-Switch anhand dieser Anleitung an NIC1 Angebunden.
Diesen habe ich mit 2 VM's verbunden, einer davon ist ein DC.
Ist es nun möglich, einen Hardware-Computer mit dem virtuellen NAT-Switch über die zweite Hardware-NIC zu verbinden und somit einen Hardware-PC in diesem virtuellen Testnetzwerk der Domäne anzuhängen?