Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows 10 und Windows 11 Hyper-V ermöglichen die native Netzwerkadressübersetzung (NAT) für ein virtuelles Netzwerk.
Dieser Leitfaden führt Sie durch die Vorgehensweise:
- Erstellen eines NAT-Netzwerks
- Verbinden eines vorhandenen virtuellen Computers mit Ihrem neuen Netzwerk
- Vergewissern Sie sich, dass der virtuelle Computer ordnungsgemäß verbunden ist.
Anforderungen:
- Windows 10 Anniversary Update oder höher
- Hyper-V ist aktiviert. Folgen Sie den Anweisungen zum Aktivieren von Hyper-V
Hinweis
Derzeit sind Sie auf ein NAT-Netzwerk pro Host beschränkt. Weitere Informationen zur Windows NAT-Implementierung, -Funktionen und -Einschränkungen finden Sie im Blog zu WinNAT-Funktionen und -Einschränkungen.
NAT-Übersicht
NAT gewährt einem virtuellen Computer Zugriff auf Netzwerkressourcen mithilfe der IP-Adresse des Hostcomputers und eines Ports über einen internen Hyper-V Virtual Switch.
Network Address Translation (NAT) ist ein Netzwerkmodus, der zum Sparen von IP-Adressen konzipiert ist, indem eine externe IP-Adresse und ein Port zu einem viel größeren Satz interner IP-Adressen zugeordnet werden. Im Grunde verwendet eine NAT eine Flusstabelle, um Datenverkehr von einer externen (Host)-IP-Adresse und -Portnummer an die richtige interne IP-Adresse zu leiten, die einem Endpunkt im Netzwerk zugeordnet ist (virtueller Computer, Computer, Container usw.).
Darüber hinaus ermöglicht NAT mehreren virtuellen Computern das Hosten von Anwendungen, die identische (interne) Kommunikationsports erfordern, indem sie diese eindeutigen externen Ports zuordnen.
Aus all diesen Gründen ist NAT-Netzwerk für Containertechnologie sehr üblich (siehe Containernetzwerk).
Erstellen eines virtuellen NAT-Netzwerks
Sehen wir uns die Einrichtung eines neuen NAT-Netzwerks an.
Öffnen Sie eine PowerShell-Konsole als Administrator.
Erstellen Sie einen internen Switch.
New-VMSwitch -SwitchName "SwitchName" -SwitchType InternalSuchen Sie den Schnittstellenindex des virtuellen Switchs, den Sie soeben erstellt haben.
PS C:\> Get-NetAdapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- vEthernet (intSwitch) Hyper-V Virtual Ethernet Adapter 24 Up 00-15-5D-00-6A-01 10 Gbps Wi-Fi Marvell AVASTAR Wireless-AC Net... 18 Up 98-5F-D3-34-0C-D3 300 Mbps Bluetooth Network ... Bluetooth Device ... 21 Disconnected 98-5F-D3-34-0C-D4 3 MbpsDer interne Switch hat einen Namen wie
vEthernet (SwitchName)und eine Schnittstellenbeschreibung vonHyper-V Virtual Ethernet Adapter. Notieren Sie sich dieifIndexVerwendung im nächsten Schritt.Konfigurieren Sie das NAT-Gateway mithilfe von New-NetIPAddress.
Nachfolgend sehen Sie den generischen Befehl:
New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>Um das Gateway zu konfigurieren, benötigen Sie einige Informationen zu Ihrem Netzwerk:
- IPAddress - NAT-Gateway-IP gibt die IPv4- oder IPv6-Adresse an, die als NAT-Gateway-IP verwendet werden soll.
Die generische Form ist a.b.c.1 (z. B. 172.16.0.1). Während die endgültige Position nicht 1 sein muss, ist sie in der Regel (basierend auf der Präfixlänge). Diese IP-Adresse befindet sich im Bereich der Adressen, die von den virtuellen Gastcomputern verwendet werden. Wenn die Gast-VMs beispielsweise den IP-Bereich 172.16.0.0 verwenden, können Sie eine IP-Adresse 172.16.0.100 als NAT-Gateway verwenden. Eine allgemeine Gateway-IP ist 192.168.0.1
PrefixLength - NAT-Subnetzpräfixlänge definiert die lokale NAT-Subnetzgröße (Subnetzmaske). Die Subnetzpräfixlänge ist ein ganzzahliger Wert zwischen 0 und 32.
0 würde das gesamte Internet zuordnen, 32 würde nur eine zugeordnete IP zulassen. Allgemeine Werte reichen von 24 bis 12, je nachdem, wie viele IPs an die NAT angefügt werden müssen.
Ein gängiges PrefixLength ist 24 - dies ist eine Subnetzmaske von 255.255.255.0
InterfaceIndex - ifIndex ist der Schnittstellenindex des virtuellen Switches, den Sie im vorherigen Schritt ermittelt haben.
Führen Sie Folgendes aus, um das NAT-Gateway zu erstellen:
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24Konfigurieren Sie das NAT-Netzwerk mit New-NetNat.
Nachfolgend sehen Sie den generischen Befehl:
New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>Um das Gateway zu konfigurieren, müssen Sie Informationen über das Netzwerk und das NAT-Gateway bereitstellen:
Name -- NATOutsideName beschreibt den Namen des NAT-Netzwerks. Verwenden Sie diese Option, um das NAT-Netzwerk zu entfernen.
InternalIPInterfaceAddressPrefix – NAT-Subnetzpräfix beschreibt sowohl das NAT-Gateway-IP-Präfix als auch die NAT-Subnetzpräfixlänge.
Das generische Formular ist a.b.c.0/NAT Subnetzpräfixlänge.
In diesem Beispiel verwenden wir 192.168.0.0/24
Führen Sie Folgendes aus, um das NAT-Netzwerk einzurichten:
New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
Glückwunsch! Sie verfügen jetzt über ein virtuelles NAT-Netzwerk!
Verbinden eines virtuellen Computers
Um einen virtuellen Computer mit Ihrem neuen NAT-Netzwerk zu verbinden, verbinden Sie den internen Switch, den Sie im ersten Schritt dieses Artikels erstellt haben, mithilfe des Menüs "VM-Einstellungen" mit Ihrem virtuellen Computer.
Da WinNAT selbst keine IP-Adressen einem Endpunkt (z. B. VM) zuweist und zuweist, müssen Sie dies manuell innerhalb des virtuellen Computers selbst tun, d. h. die IP-Adresse innerhalb des BEREICHs des internen NAT-Präfixes festlegen, die Ip-Adresse des Standardgateways festlegen, DNS-Serverinformationen festlegen. Die einzige Einschränkung hierfür ist, wenn der Endpunkt an einen Container angefügt ist. In diesem Fall weist der Host Network Service (HNS) den Host Compute Service (HCS) zu und verwendet diesen, um dem Container die IP-Adresse, Gateway-IP und DNS-Informationen direkt zuzuweisen.
Konfigurationsbeispiel: Anfügen von VMs und Containern an ein NAT-Netzwerk
Wenn Sie mehrere VMs und Container an eine einzelne NAT anfügen müssen, müssen Sie sicherstellen, dass das interne NAT-Subnetzpräfix groß genug ist, um die IP-Bereiche einzuschließen, die von verschiedenen Anwendungen oder Diensten zugewiesen werden (z. B. Docker für Windows und Windows-Container – HNS). Dies erfordert entweder die Zuordnung von IPs auf Anwendungsebene und die Netzwerkkonfiguration oder manuelle Konfiguration, die von einem Administrator durchgeführt werden muss und garantiert keine vorhandenen IP-Zuordnungen auf demselben Host wiederverwenden muss.
Docker für Windows (Linux-VM) und Windows-Container
Befolgen Sie in diesem Abschnitt, um sowohl Docker für Windows als auch (Linux-VM mit Linux-Containern) und Windows-Containern die Gemeinsame Nutzung derselben WinNAT-Instanz mithilfe separater interner vSwitches zu ermöglichen. Die Konnektivität zwischen Linux- und Windows-Containern funktioniert.
Der Benutzer hat virtuelle Computer über einen internen vSwitch namens "VMNAT" mit einem NAT-Netzwerk verbunden und möchte nun das Windows-Containerfeature mit dem Docker-Modul installieren:
PS C:\> Get-NetNat “VMNAT”| Remove-NetNat (this removes the NAT but keep the internal vSwitch).
Install Windows Container Feature
DO NOT START Docker Service (daemon)
Edit the arguments passed to the docker daemon (dockerd) by adding –fixed-cidr=<container prefix> parameter. This tells docker to create a default nat network with the IP subnet <container prefix> (e.g. 192.168.1.0/24) so that HNS can allocate IPs from this prefix.
PS C:\> Start-Service Docker; Stop-Service Docker
PS C:\> Get-NetNat | Remove-NetNAT (again, this removes the NAT but keep the internal vSwitch)
PS C:\> New-NetNat -Name SharedNAT -InternalIPInterfaceAddressPrefix <shared prefix>
PS C:\> Start-Service docker
Docker/HNS weist Windows-Containern IPs zu, und Der Administrator weist VMs IPs aus dem Unterschiedssatz der beiden zu.
Der Benutzer hat das Windows Container-Feature mit ausgeführtem Docker-Modul installiert und möchte jetzt VMs mit dem NAT-Netzwerk verbinden:
PS C:\> Stop-Service docker
PS C:\> Get-ContainerNetwork | Remove-ContainerNetwork -force
PS C:\> Get-NetNat | Remove-NetNat (this will remove the NAT but keep the internal vSwitch)
Edit the arguments passed to the docker daemon (dockerd) by adding -b “none” option to the end of docker daemon (dockerd) command to tell docker not to create a default NAT network.
PS C:\> New-ContainerNetwork –name nat –Mode NAT –subnetprefix <container prefix> (create a new NAT and internal vSwitch – HNS will allocate IPs to container endpoints attached to this network from the <container prefix>)
PS C:\> Get-Netnat | Remove-NetNAT (again, this will remove the NAT but keep the internal vSwitch)
PS C:\> New-NetNat -Name SharedNAT -InternalIPInterfaceAddressPrefix <shared prefix>
PS C:\> New-VirtualSwitch -Type internal (attach VMs to this new vSwitch)
PS C:\> Start-Service docker
Docker/HNS weist Windows-Containern IPs zu, und Der Administrator weist VMs IPs aus dem Unterschiedssatz der beiden zu.
Am Ende haben Sie zwei interne VM-Switches und ein NetNat gemeinsam genutzt.
Mehrere Anwendungen mit derselben NAT
Einige Szenarien erfordern mehrere Anwendungen oder Dienste, um dieselbe NAT zu verwenden. In diesem Fall muss der folgende Workflow befolgt werden, damit mehrere Anwendungen/Dienste ein größeres NAT-internes Subnetzpräfix verwenden können.
Wir werden die Docker 4 Windows - Docker Beta - Linux-VM gemeinsam mit dem Windows-Container-Feature auf demselben Host wie ein Beispiel detailliert erläutern. Dieser Workflow kann geändert werden.
-
net stop docker -
Stop Docker4Windows MobyLinux VM -
Get-ContainerNetwork | Remove-ContainerNetwork -force Entfernen Sie alle zuvor vorhandenen Containernetzwerke (d. h. löscht vSwitch, löscht NetNat, bereinigt).
Get-NetNat | Remove-NetNatErstellen Sie einen internen vSwitch namens NAT und ein NAT-Netzwerk mit dem IP-Präfix 10.0.76.0/24.
New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24Entfernen Sie sowohl DockerNAT- als auch NAT-Netzwerke (behält interne vSwitches bei).
Remove-NetNATErstellen Sie ein NAT-Netzwerk namens DockerNAT mit größerem Präfix 10.0.0.0/17 für die Gemeinsame Nutzung von D4W und Containern.
New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17Ausführen von Docker4Windows (MobyLinux.ps1)
Verwenden Sie das benutzerdefinierte NAT-Netzwerk als Standard zum Verbinden von Windows-Containern.
Net start docker
Am Ende haben Sie zwei interne vSwitches – eine namens DockerNAT und die andere benannte NAT. Sie haben nur ein NAT-Netzwerk (10.0.0.0/17) bestätigt, indem Sie Get-NetNat ausführen. IP-Adressen für Windows-Container werden vom Windows Host Network Service (HNS) aus dem Subnetz 10.0.76.0/24 zugewiesen. Basierend auf dem vorhandenen MobyLinux.ps1 Skript werden IP-Adressen für Docker 4 Windows aus dem Subnetz 10.0.75.0/24 zugewiesen.
Problembehandlung
Mehrere NAT-Netzwerke werden nicht unterstützt.
In diesem Leitfaden wird davon ausgegangen, dass keine anderen NATs auf dem Host vorhanden sind. Anwendungen oder Dienste erfordern jedoch die Verwendung einer NAT und können eine als Teil des Setups erstellen. Da Windows (WinNAT) nur ein internes NAT-Subnetzpräfix unterstützt, wird das System durch den Versuch, mehrere NATs zu erstellen, in einen unbekannten Zustand versetzt.
Um festzustellen, ob dies das Problem sein kann, stellen Sie sicher, dass Sie nur eine NAT haben:
Get-NetNat
Wenn bereits eine NAT vorhanden ist, löschen Sie sie:
Get-NetNat | Remove-NetNat
Stellen Sie sicher, dass Sie nur über einen "internen" vmSwitch für die Anwendung oder das Feature verfügen (z. B. Windows-Container). Notieren Sie den Namen des vSwitch:
Get-VMSwitch
Überprüfen Sie, ob private IP-Adressen vorhanden sind (z. B. NAT-Standardgateway-IP-Adresse – in der Regel x).y. z.1) von der alten NAT, die noch einem Adapter zugewiesen ist:
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"
Wenn eine alte private IP-Adresse verwendet wird, löschen Sie sie bitte:
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>
Entfernen mehrerer NATs Wir haben Berichte über mehrere NAT-Netzwerke gesehen, die versehentlich erstellt wurden. Wenn mehrere NAT-Netzwerke angezeigt werden, führen Sie nach dem Ausführen von Docker Network ls oder Get-ContainerNetwork folgendes aus einer PowerShell mit erhöhten Rechten aus:
$keys = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services\vmsmp\parameters\SwitchList"
foreach($key in $keys)
{
if ($key.GetValue("FriendlyName") -eq 'nat')
{
$newKeyPath = $KeyPath+"\"+$key.PSChildName
Remove-Item -Path $newKeyPath -Recurse
}
}
Remove-NetNat -Confirm:$false
Get-ContainerNetwork | Remove-ContainerNetwork
Get-VmSwitch -Name nat | Remove-VmSwitch # failure is expected
Stop-Service docker
Set-Service docker -StartupType Disabled
Starten Sie das Betriebssystem neu, bevor Sie die nachfolgenden Befehle ausführen (Restart-Computer)
Get-NetNat | Remove-NetNat
Set-Service docker -StartupType Automatic
Start-Service docker