Konfigurera ett NAT-nätverk
Windows 10 och Windows 11 Hyper-V tillåter nat (native network address translation) för ett virtuellt nätverk.
Den här guiden beskriver hur du gör:
- Skapa ett NAT-nätverk
- Ansluta en befintlig virtuell dator till ditt nya nätverk
- Bekräfta att den virtuella datorn är korrekt ansluten
Krav:
- Windows 10 Anniversary Update eller senare
- Hyper-V är aktiverat. Följ anvisningarna för att Aktivera Hyper-V-
Not
För närvarande är du begränsad till ett NAT-nätverk per värd. Mer information om Implementering, funktioner och begränsningar för Windows NAT (WinNAT) finns i bloggen WinNAT-funktioner och begränsningar
NAT-översikt
NAT ger en virtuell dator åtkomst till nätverksresurser med hjälp av värddatorns IP-adress och en port via en intern Hyper-V virtuell växel.
NAT (Network Address Translation) är ett nätverksläge som är utformat för att spara IP-adresser genom att mappa en extern IP-adress och port till en mycket större uppsättning interna IP-adresser. I grund och botten använder en NAT en flödestabell för att dirigera trafik från en extern IP-adress (värd) och portnummer till rätt intern IP-adress som är associerad med en slutpunkt i nätverket (virtuell dator, dator, container osv.).
Nat tillåter också att flera virtuella datorer är värdar för program som kräver identiska (interna) kommunikationsportar genom att mappa dessa till unika externa portar.
Av alla dessa skäl är NAT-nätverk mycket vanligt för containerteknik (se Container Networking).
Skapa ett virtuellt NAT-nätverk
Nu ska vi gå igenom hur du konfigurerar ett nytt NAT-nätverk.
Öppna en PowerShell-konsol som administratör.
Skapa en intern växel.
New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
Leta reda på gränssnittsindexet för den virtuella växel som du nyss skapade.
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 Mbps
Den interna växeln har ett namn som
vEthernet (SwitchName)
och en gränssnittsbeskrivning förHyper-V Virtual Ethernet Adapter
. Anteckna dessifIndex
som ska användas i nästa steg.Konfigurera NAT-gatewayen med New-NetIPAddress.
Här är det allmänna kommandot:
New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>
För att konfigurera gatewayen behöver du lite information om nätverket:
- IPAddress – NAT Gateway IP anger den IPv4- eller IPv6-adress som ska användas som NAT-gateway-IP.
Det generiska formuläret är a.b.c.1 (t.ex. 172.16.0.1). Även om den slutliga positionen inte behöver vara .1 är den vanligtvis (baserat på prefixets längd). Den här IP-adressen finns i det adressintervall som används av de virtuella gästdatorerna. Om de virtuella gästdatorerna till exempel använder IP-intervall 172.16.0.0 kan du använda IP-adressen 172.16.0.100 som NAT Gateway. En vanlig gateway-IP är 192.168.0.1
PrefixLength – NAT Subnet Prefix Length definierar NAT:s lokala undernätsstorlek (nätmask). Undernätets prefixlängd är ett heltalsvärde mellan 0 och 32.
0 skulle mappa hela Internet, 32 tillåter bara en mappad IP-adress. Vanliga värden varierar från 24 till 12 beroende på hur många IP-adresser som måste kopplas till NAT.
En vanlig längd för prefix är 24 – det här är en subnätmask på 255.255.255.0
InterfaceIndex – ifIndex är gränssnittsindexet för den virtuella växeln, som du fastställde i föregående steg.
Kör följande för att skapa NAT Gateway:
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24
Konfigurera NAT-nätverket med New-NetNat.
Här är det allmänna kommandot:
New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>
För att kunna konfigurera gatewayen måste du ange information om nätverket och NAT Gateway:
Name – NATOutsideName beskriver namnet på NAT-nätverket. Du använder detta för att ta bort NAT-nätverket.
InternalIPInterfaceAddressPrefix – NAT-undernätsprefixet beskriver både NAT Gateway IP-prefixet och NAT-undernätets prefixlängd.
Det generiska formatet är a.b.c.0/NAT-undernätets prefixlängd
I det här exemplet använder vi 192.168.0.0/24
Kör följande för att konfigurera NAT-nätverket:
New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
Grattis! Nu har du ett virtuellt NAT-nätverk!
Anslut en virtuell maskin
Om du vill ansluta en virtuell dator till ditt nya NAT-nätverk ansluter du den interna växeln som du skapade i det första steget i den här artikeln till den virtuella datorn med hjälp av menyn Inställningar för virtuella datorer.
Eftersom WinNAT i sig inte allokerar och tilldelar IP-adresser till en slutpunkt (t.ex. virtuell dator) måste du göra detta manuellt inifrån själva den virtuella datorn, d.v.s. ange IP-adress inom intervallet för internt NAT-prefix, ange standard-GATEWAY-IP-adress, ange DNS-serverinformation. Det enda förbehållet är när slutpunkten är kopplad till en container. I det här fallet allokerar och använder värdnätverkstjänsten (HNS) värdberäkningstjänsten (HCS) för att tilldela IP-adressen, gateway-IP-adressen och DNS-informationen till containern direkt.
Konfigurationsexempel: Koppla virtuella datorer och containrar till ett NAT-nätverk
Om du behöver koppla flera virtuella datorer och containrar till en enda NAT måste du se till att det interna NAT-undernätsprefixet är tillräckligt stort för att omfatta DE IP-intervall som tilldelas av olika program eller tjänster (t.ex. Docker för Windows och Windows Container – HNS). Detta kräver antingen tilldelning på programnivå av IP-adresser och nätverkskonfiguration eller manuell konfiguration som måste göras av en administratör och garanterat inte återanvända befintliga IP-tilldelningar på samma värd.
Docker för Windows (virtuell Linux-dator) och Windows-containrar
Följ med i det här avsnittet för att tillåta att både Docker för Windows (virtuell Linux-dator som kör Linux-containrar) och Windows-containrar delar samma WinNAT-instans med hjälp av separata interna vSwitches. Anslutningen mellan både Linux- och Windows-containrar fungerar.
Användaren har anslutit virtuella datorer till ett NAT-nätverk via en intern vSwitch med namnet "VMNAT" och vill nu installera Windows Container-funktionen med Docker-motorn:
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 tilldelar IP-adresser till Windows-containrar och Administratör tilldelar IP-adresser till virtuella datorer från skillnadsuppsättningen för de två.
Användaren har installerat Windows Container-funktionen med Docker-motorn igång och vill nu ansluta virtuella datorer till NAT-nätverket:
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 tilldelar IP-adresser till Windows-containrar och Administratör tilldelar IP-adresser till virtuella datorer från skillnadsuppsättningen för de två.
Till slut har du två interna VM-växlar och en NetNat som delas mellan dem.
Flera program som använder samma NAT
Vissa scenarier kräver flera program eller tjänster för att använda samma NAT. I det här fallet måste följande arbetsflöde följas så att flera program/tjänster kan använda ett större nat-internt undernätsprefix
Vi kommer att beskriva Docker 4 Windows – Docker Beta – Linux VM samexistera med Windows Container-funktionen på samma värd som ett exempel. Det här arbetsflödet kan komma att ändras
-
net stop docker
-
Stop Docker4Windows MobyLinux VM
-
Get-ContainerNetwork | Remove-ContainerNetwork -force
Ta bort befintliga containernätverk (d.v.s. tar bort vSwitch, tar bort NetNat, rensar).
Get-NetNat | Remove-NetNat
Skapa en intern vSwitch med namnet nat och ett NAT-nätverk med IP-prefixet 10.0.76.0/24.
New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24
Ta bort både DockerNAT- och nat NAT-nätverk (behåller interna vSwitches).
Remove-NetNAT
Skapa ett NAT-nätverk med namnet DockerNAT med större prefix 10.0.0.0/17 för både D4W och containrar att dela.
New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17
Kör Docker4Windows (MobyLinux.ps1)
Använd det användardefinierade NAT-nätverket som standard för att ansluta Windows-containrar.
Net start docker
Till slut har du två interna vSwitches – en med namnet DockerNAT och den andra med namnet nat. Du har bara ett NAT-nätverk (10.0.0.0/17) som bekräftats genom att köra Get-NetNat. IP-adresser för Windows-containrar tilldelas av Windows Host Network Service (HNS) från undernätet 10.0.76.0/24. Baserat på det befintliga MobyLinux.ps1 skriptet tilldelas IP-adresser för Docker 4 Windows från undernätet 10.0.75.0/24.
Felsökning
Flera NAT-nätverk stöds inte
Den här guiden förutsätter att det inte finns några andra NAT:er på värdmaskinen. Program eller tjänster kräver dock användning av en NAT och kan skapa en som en del av installationen. Eftersom Windows (WinNAT) endast stödjer ett internt NAT-undernätsprefix, försätter försök att skapa flera NAT systemet i ett oförutsägbart tillstånd.
För att se om detta kan vara problemet, kontrollera att du endast har en NAT:
Get-NetNat
Om det redan finns en NAT tar du bort den:
Get-NetNat | Remove-NetNat
Kontrollera att du bara har en "intern" vmSwitch för programmet eller funktionen (t.ex. Windows-containrar). Registrera namnet på vSwitch:
Get-VMSwitch
Kontrollera om det finns privata IP-adresser (t.ex. NAT-standardgateway-IP-adress – vanligtvis x.y.z.1) som fortfarande är tilldelade till en nätverksadapter från den gamla NAT:
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"
Om en gammal privat IP-adress används tar du bort den:
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>
Ta bort flera NAT- Vi har sett rapporter om flera NAT-nätverk som skapats oavsiktligt. Om du ser flera NAT-nätverk, när du har kört docker network ls eller Get-ContainerNetwork, utför du följande från en upphöjd PowerShell:
$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
Starta om operativsystemet innan du kör efterföljande kommandon (Restart-Computer
)
Get-NetNat | Remove-NetNat
Set-Service docker -StartupType Automatic
Start-Service docker