Nastavení sítě NAT
Windows 10 a Windows 11 Hyper-V umožňuje nativní překlad síťových adres (NAT) pro virtuální síť.
Tato příručka vás provede postupy:
- Vytvoření sítě NAT
- Připojení existujícího virtuálního počítače k nové síti
- Ověřte, že je virtuální počítač správně připojený.
Požadavky:
- Windows 10 Anniversary Update nebo novější
- Hyper-V je povolená. Postupujte podle pokynů, abyste povolili Hyper-V.
Poznámka
V současné době jste omezeni na jednu síť NAT na hostitele. Další podrobnosti o implementaci, možnostech a omezeních pro Windows NAT (WinNAT) najdete v blogu o možnostech a omezeních WinNAT
Přehled NAT
Překlad adres (NAT) poskytuje virtuálnímu počítači přístup k síťovým prostředkům pomocí IP adresy hostitelského počítače a portu prostřednictvím interního virtuálního přepínače Hyper-V.
Překlad síťových adres (NAT) je síťový režim určený k úspoře IP adres tím, že mapuje externí IP adresu a port na mnohem širší soubor interních IP adres. Překlad adres (NAT) v podstatě používá tabulku toku dat ke směrování provozu z externí (hostitelské) IP adresy a čísla portu na správnou interní IP adresu, která je spojená s koncovým bodem v síti (virtuální počítač, počítač, kontejner atd.).
Překlad adres (NAT) umožňuje více virtuálním počítačům hostovat aplikace, které vyžadují identické (interní) komunikační porty namapováním těchto portů na jedinečné externí porty.
Ze všech těchto důvodů je síť NAT velmi běžná pro technologie kontejnerů (viz Container Networking).
Vytvoření virtuální sítě NAT
Pojďme si projít nastavení nové sítě NAT.
Otevřete konzolu PowerShellu jako správce.
Vytvořte interní přepínač.
New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
Najděte index rozhraní virtuálního přepínače, který jste právě vytvořili.
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
Interní přepínač má název, například
vEthernet (SwitchName)
a popis rozhraníHyper-V Virtual Ethernet Adapter
. Poznamenejte si jehoifIndex
, abyste ho mohli použít v dalším kroku.Nakonfigurujte bránu NAT pomocí New-NetIPAddress.
Tady je obecný příkaz:
New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>
Ke konfiguraci brány budete potřebovat trochu informací o vaší síti:
- IPAddress – IP adresa služby NAT Gateway určuje adresu IPv4 nebo IPv6, která se má použít jako IP adresa brány NAT.
Obecný formulář je a.b.c.1 (např. 172.16.0.1). I když konečná pozice nemusí být 0,1, obvykle je (na základě délky předpony). Tato IP adresa je v rozsahu adres používaných hostujícími virtuálními počítači. Pokud například hostující virtuální počítače používají rozsah IP adres 172.16.0.0, můžete jako službu NAT Gateway použít IP adresu 172.16.0.100. Běžná IP adresa brány je 192.168.0.1
PrefixLength – Délka předpony podsítě NAT definuje velikost místní podsítě (maska podsítě). Délka předpony podsítě je celočíselná hodnota mezi 0 a 32.
0 by mapovalo celý internet, 32 by umožňovalo pouze jednu mapovanou IP adresu. Běžné hodnoty se pohybují v rozsahu od 12 do 24, v závislosti na tom, kolik IP adres je potřeba připojit k NAT.
Běžná délka předpony je 24 — jedná se o masku podsítě 255.255.255.0.
InterfaceIndex - ifIndex je index rozhraní virtuálního přepínače, který jste určili v předchozím kroku.
Spuštěním následujícího příkazu vytvořte bránu NAT Gateway:
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24
Nakonfigurujte síť NAT pomocí New-NetNat.
Tady je obecný příkaz:
New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>
Abyste mohli bránu nakonfigurovat, budete muset zadat informace o síti a službě NAT Gateway:
Název – NATOutsideName popisuje název sítě NAT. Použijete ho k odebrání sítě NAT.
InternalIPInterfaceAddressPrefix – předpona podsítě NAT popisuje předponu IP adresy služby NAT Gateway i délku předpony podsítě NAT.
Obecný formulář je délka předpony podsítě a.b.c.0/NAT.
V tomto příkladu použijeme verzi 192.168.0.0/24.
Spuštěním následujícího příkazu nastavte síť NAT:
New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
Blahopřejeme! Teď máte virtuální síť NAT!
Připojení virtuálního počítače
Pokud chcete připojit virtuální počítač k nové síti NAT, připojte interní přepínač, který jste vytvořili v prvním kroku tohoto článku, k virtuálnímu počítači pomocí nabídky Nastavení virtuálního počítače.
Vzhledem k tomu, že WinNAT sám nepřiděluje a nepřiřazuje IP adresy koncovému bodu (např. virtuálnímu počítači), budete to muset provést ručně v samotném virtuálním počítači – tj. nastavit IP adresu v rozsahu interní předpony NAT, nastavit výchozí IP adresu brány, nastavit informace o serveru DNS. Jediným upozorněním na to je, když je koncový bod připojený ke kontejneru. V tomto případě služba host Network Service (HNS) přidělí a použije hostitelskou výpočetní službu (HCS) k přiřazení IP adresy, IP adresy brány a informací DNS k kontejneru přímo.
Příklad konfigurace: Připojení virtuálních počítačů a kontejnerů k síti NAT
Pokud potřebujete k jednomu překladu adres (NAT) připojit více virtuálních počítačů a kontejnerů, musíte zajistit, aby předpona interní podsítě NAT byla dostatečně velká, aby zahrnovala rozsahy IP adres přiřazené různými aplikacemi nebo službami (např. Docker pro Windows a kontejner Windows – HNS). To vyžaduje přiřazení IP adres na úrovni aplikace a konfiguraci sítě nebo ruční konfiguraci, které musí provést správce a zaručit, že nebudete znovu používat stávající přiřazení IP adres na stejném hostiteli.
Docker pro Windows (virtuální počítač s Linuxem) a kontejnery Windows
Podle pokynů v této části umožněte Docker for Windows (Linux VM provozující Linuxové kontejnery) a Windows kontejnery sdílet stejnou instanci WinNAT pomocí oddělených interních virtuálních přepínačů. Připojení mezi kontejnery Linuxu a Windows funguje.
Uživatel připojil virtuální počítače k síti NAT prostřednictvím interního virtuálního přepínače s názvem VMNAT a teď chce nainstalovat funkci kontejneru Windows s modulem Dockeru:
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 přiřadí IP adresy ke kontejnerům Windows a správce přiřadí IP adresy virtuálním počítačům z rozdílové sady těchto dvou.
Uživatel nainstaloval funkci kontejneru Windows se spuštěným modulem Dockeru a teď chce připojit virtuální počítače k síti NAT:
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 přiřadí IP adresy ke kontejnerům Windows a správce přiřadí IP adresy virtuálním počítačům z rozdílové sady těchto dvou.
Nakonec budete mít dva interní přepínače virtuálních počítačů a jeden NetNat, který je mezi nimi sdílený.
Více aplikací používajících stejný překlad adres (NAT)
Některé scénáře vyžadují, aby stejný překlad adres (NAT) používalo více aplikací nebo služeb. V takovém případě je nutné dodržet následující pracovní postup, aby vícero aplikací nebo služeb mohlo využívat větší předponu interní podsítě NAT.
Podrobně si ukážeme, jak docker 4 pro Windows – Docker Beta – Virtuální počítač s Linuxem spolupracuje s funkcí kontejneru Windows na stejném hostiteli jako příklad. Tento pracovní postup se může změnit
-
net stop docker
-
Stop Docker4Windows MobyLinux VM
-
Get-ContainerNetwork | Remove-ContainerNetwork -force
Odeberte všechny dříve existující sítě kontejnerů (tj. odstraní vSwitch, NetNat a provede úklid).
Get-NetNat | Remove-NetNat
Vytvořte interní vSwitch s názvem nat a síť NAT s předponou IP 10.0.76.0/24.
New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24
Odeberte sítě DockerNAT i nat NAT (udržuje interní virtuální přepínače).
Remove-NetNAT
Vytvořte síť NAT s názvem DockerNAT s větší předponou 10.0.0.0/17 pro sdílení D4W i kontejnerů.
New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17
Spuštění Docker4Windows (MobyLinux.ps1)
Jako výchozí použijte uživatelsky definovanou síť NAT pro připojení kontejnerů Windows.
Net start docker
Na konci máte dva interní virtuální přepínače – jeden s názvem DockerNAT a druhý pojmenovaný nat. Spuštěním rutiny Get-NetNat máte pouze jednu síť NAT (10.0.0.0/17). IP adresy pro kontejnery Windows jsou přiřazeny službou Windows Host Network Service (HNS) z podsítě 10.0.76.0/24. Na základě existujícího skriptu MobyLinux.ps1 se IP adresy pro Docker 4 Windows přiřazují z podsítě 10.0.75.0/24.
Řešení problémů
Vícenásobné sítě NAT nejsou podporovány.
Tato příručka předpokládá, že na hostu nejsou žádné další NAT. Aplikace nebo služby však vyžadují použití překladu adres (NAT) a můžou ji vytvořit jako součást instalace. Vzhledem k tomu, že Windows (WinNAT) podporuje pouze jednu interní předponu podsítě NAT, snaha o vytvoření více NATů způsobí, že se systém dostane do neznámého stavu.
Pokud chcete zjistit, jestli se jedná o problém, ujistěte se, že máte jenom jednu NAT:
Get-NetNat
Pokud NAT (překlad adres) již existuje, odstraňte jej.
Get-NetNat | Remove-NetNat
Ujistěte se, že máte pouze jeden interní virtuální přepínač pro aplikaci nebo funkci (např. kontejnery Windows). Poznamenejte si název přepínače vSwitch:
Get-VMSwitch
Zkontrolujte, jestli existují privátní IP adresy (např. výchozí IP adresa brány NAT – obvykle x.y.z.1) ze starého překladu adres (NAT), která je stále přiřazena adaptéru:
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"
Pokud se používá stará privátní IP adresa, odstraňte ji:
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>
Odstranění více překladů adres (NAT) Obdrželi jsme zprávy o více sítích NAT, které byly vytvořeny neúmyslně. Pokud se po spuštění sítě Dockeru ls nebo Get-ContainerNetwork zobrazí více sítí NAT, proveďte v PowerShellu se zvýšenými oprávněními následující:
$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
Před provedením následujících příkazů (Restart-Computer
) restartujte operační systém.
Get-NetNat | Remove-NetNat
Set-Service docker -StartupType Automatic
Start-Service docker