NAT-hálózat beállítása

A Windows 10 és a Windows 11 Hyper-V lehetővé teszi a natív hálózati címfordítást (NAT) a virtuális hálózatok számára.

Ez az útmutató végigvezeti az útmutatón:

  • NAT-hálózat létrehozása
  • Meglévő virtuális gép csatlakoztatása az új hálózathoz
  • Ellenőrizze, hogy a virtuális gép megfelelően van-e csatlakoztatva

Követelmények:

Megjegyzés:

Jelenleg gazdagépenként egy NAT-hálózatra van korlátozva. A Windows NAT (WinNAT) implementációjának, képességeinek és korlátainak további részleteiért tekintse meg a WinNAT képességeit és korlátait ismertető blogot

NAT áttekintése

A NAT egy belső Hyper-V virtuális kapcsolón keresztül hozzáférést biztosít a virtuális gépek számára a hálózati erőforrásokhoz a gazdaszámítógép IP-címével és portjával.

A hálózati címfordítás (NAT) egy olyan hálózati mód, amely az IP-címek megőrzésére szolgál azáltal, hogy egy külső IP-címet és portot sokkal nagyobb belső IP-címekre megfeleltet. A NAT alapvetően egy folyamattáblával irányítja a forgalmat egy külső (gazdagép) IP-címéről és portszámáról a hálózati végponthoz (virtuális géphez, számítógéphez, tárolóhoz stb.) társított megfelelő belső IP-címre.

A NAT lehetővé teszi továbbá, hogy több virtuális gép azonos (belső) kommunikációs portokat igénylő alkalmazásokat üzemeltetjen azáltal, hogy ezeket egyedi külső portokra megfelelteti.

Mindezek miatt a NAT-hálózatkezelés nagyon gyakori a tárolótechnológia esetében (lásd : Tárolóhálózat-hálózatkezelés).

NAT virtuális hálózat létrehozása

Lássunk végig egy új NAT-hálózat beállításán.

  1. Nyisson meg egy PowerShell-konzolt rendszergazdaként.

  2. Hozzon létre egy belső kapcsolót.

    New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
    
  3. Keresse meg az imént létrehozott virtuális kapcsoló felületindexét.

    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
    
    

    A belső kapcsoló neve hasonló vEthernet (SwitchName) , és a felület leírása Hyper-V Virtual Ethernet Adapter. Jegyezze fel a ifIndex következő lépésben használni kívánt értékét.

  4. Konfigurálja a NAT-átjárót a New-NetIPAddress használatával.

    Íme az általános parancs:

    New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>
    

    Az átjáró konfigurálásához szüksége lesz egy kis információra a hálózatról:

    • IPAddress – A NAT-átjáró IP-címe megadja a NAT-átjáró IP-címeként használni kívánt IPv4- vagy IPv6-címet.

    Az általános űrlap a.b.c.1 (pl. 172.16.0.1). Bár a végső pozíciónak nem kell .1-nek lennie, általában (az előtag hossza alapján). Ez az IP-cím a vendég virtuális gépek által használt címek tartományában található. Ha például a vendég virtuális gépek 172.16.0.0 IP-tartományt használnak, akkor a 172.16.0.100 IP-címet használhatja NAT-átjáróként. Az átjárók gyakori IP-címe a 192.168.0.1

    • Előtaghossz – A NAT-alhálózat előtagjának hossza határozza meg a NAT helyi alhálózatának méretét (alhálózati maszk). Az alhálózat előtagjának hossza 0 és 32 közötti egész szám.

      0 leképezné a teljes internetet, 32 csak egy leképezett IP-címet engedélyezne. A gyakori értékek 24 és 12 között mozognak attól függően, hogy hány IP-címet kell csatlakoztatni a NAT-hoz.

      A közös előtaghossz 24 - ez egy alhálózati maszk 255.255.255.0

    • InterfaceIndex – ha az Index a virtuális kapcsoló felületindexe, amelyet az előző lépésben határozott meg.

    Futtassa a következőt a NAT-átjáró létrehozásához:

    New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24
    
  5. Konfigurálja a NAT-hálózatot a New-NetNat használatával.

    Íme az általános parancs:

    New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>
    

    Az átjáró konfigurálásához meg kell adnia a hálózatra és a NAT-átjáróra vonatkozó információkat:

    • Név – A NATOutsideName a NAT-hálózat nevét írja le. Ezzel eltávolíthatja a NAT-hálózatot.

    • InternalIPInterfaceAddressPrefix – A NAT alhálózati előtag a NAT-átjáró IP-előtagot és a NAT-alhálózat előtagjának hosszát egyaránt leírja.

    Az általános űrlap a.b.c.0/NAT alhálózati előtag hossza

    Ebben a példában a 192.168.0.0/24-et fogjuk használni

    Futtassa a következőt a NAT-hálózat beállításához:

    New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
    

Gratulálok! Most már van egy virtuális NAT-hálózata!

Virtuális gép csatlakoztatása

Ha virtuális gépet szeretne csatlakoztatni az új NAT-hálózathoz, csatlakoztassa a jelen cikk első lépésében létrehozott belső kapcsolót a virtuális géphez a Virtuális gép beállításai menüvel.

Mivel a WinNAT önmagában nem foglalja le és rendeli hozzá az IP-címeket egy végponthoz (például virtuális géphez), ezt manuálisan kell elvégeznie a virtuális gépen belülről – azaz az IP-cím beállítása a NAT belső előtagjának tartományán belül, az alapértelmezett átjáró IP-címe, a DNS-kiszolgáló adatainak beállítása. Ehhez csak akkor van kifogás, ha a végpont egy tárolóhoz van csatolva. Ebben az esetben a gazdagéphálózati szolgáltatás (HNS) lefoglalja és használja a gazdagép számítási szolgáltatását (HCS) az IP-cím, az átjáró IP-címe és a DNS-adatok közvetlen hozzárendeléséhez a tárolóhoz.

Konfigurációs példa: Virtuális gépek és tárolók csatlakoztatása NAT-hálózathoz

Ha több virtuális gépet és tárolót kell egyetlen NAT-hoz csatolnia, meg kell győződnie arról, hogy a NAT belső alhálózati előtagja elég nagy ahhoz, hogy magában foglalja a különböző alkalmazások vagy szolgáltatások által hozzárendelt IP-tartományokat (pl. Docker for Windows és Windows Container – HNS). Ehhez az IP-címek és a hálózati konfiguráció alkalmazásszintű hozzárendelése vagy manuális konfiguráció szükséges, amelyet a rendszergazdának kell elvégeznie, és garantáltan nem használhatja újra a meglévő IP-hozzárendeléseket ugyanazon a gazdagépen.

Docker for Windows (Linux rendszerű virtuális gép) és Windows-tárolók

Kövesse az ebben a szakaszban ismertetett lépéseket, amelyek lehetővé teszik, hogy a Docker for Windows, (Linux rendszerű Linux rendszerű virtuális gépek) és a Windows-tárolók ugyanazt a WinNAT-példányt külön belső virtuális kapcsolókkal osztják meg. A Linux- és Windows-tárolók közötti kapcsolat is működik.

A felhasználó egy "VMNAT" nevű belső vSwitchen keresztül csatlakoztatta a virtuális gépeket egy NAT-hálózathoz, és most a Windows Container szolgáltatást szeretné telepíteni a Docker-motorral:

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

A Docker/HNS IP-címeket rendel a Windows-tárolókhoz, a rendszergazda pedig ip-címeket rendel a virtuális gépekhez a kettő különbséghalmazából.

A felhasználó telepítette a Windows Container szolgáltatást a docker motor futtatásával, és most virtuális gépeket szeretne csatlakoztatni a NAT-hálózathoz:

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

A Docker/HNS IP-címeket rendel a Windows-tárolókhoz, a rendszergazda pedig ip-címeket rendel a virtuális gépekhez a kettő különbséghalmazából.

Végül két belső virtuálisgép-kapcsoló és egy NetNat lesz megosztva közöttük.

Több alkalmazás ugyanazzal a NAT-tal

Egyes forgatókönyvek esetén több alkalmazás vagy szolgáltatás is ugyanazt a NAT-ot használja. Ebben az esetben a következő munkafolyamatot kell követni, hogy több alkalmazás/szolgáltatás nagyobb NAT belső alhálózati előtagot használjon

Bemutatjuk a Docker 4 Windows – Docker Bétaverzió – Linux rendszerű virtuális gépét, amely ugyanazon a gazdagépen található a Windows Container szolgáltatással együtt, mint egy példa. Ezt a munkafolyamatot módosítani kell

  1.  net stop docker
    
  2.  Stop Docker4Windows MobyLinux VM
    
  3.  Get-ContainerNetwork | Remove-ContainerNetwork -force
    
  4. Távolítsa el a korábban meglévő tárolóhálózatokat (például törli a vSwitch-et, törli a NetNat-et, és megtisztítja).

     Get-NetNat | Remove-NetNat
    
  5. Hozzon létre egy nat nevű belső vSwitch-hálózatot és egy NAT-hálózatot a 10.0.76.0/24 IP-előtaggal.

     New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24
    
  6. Távolítsa el a DockerNAT- és nat NAT-hálózatokat is (megtartja a belső virtuális kapcsolókat).

     Remove-NetNAT
    
  7. Hozzon létre egy DockerNAT nevű NAT-hálózatot nagyobb, 10.0.0.0/17 előtaggal a D4W és a tárolók megosztásához.

     New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17
    
  8. Docker4Windows futtatása (MobyLinux.ps1)

  9. Windows-tárolók csatlakoztatásához használja alapértelmezettként a felhasználó által definiált NAT-hálózatot.

     Net start docker
    

Végül két belső virtuális kapcsolóval rendelkezik: az egyik DockerNAT , a másik pedig nat. A Get-NetNat futtatásával csak egy NAT-hálózattal (10.0.0.0/17) rendelkezik. A Windows-tárolók IP-címeit a 10.0.76.0/24 alhálózatról a Windows gazdagéphálózati szolgáltatás (HNS) rendeli hozzá. A meglévő MobyLinux.ps1 szkript alapján a Docker 4 Windows IP-címei a 10.0.75.0/24 alhálózatból vannak hozzárendelve.

Hibaelhárítás

Több NAT-hálózat nem támogatott

Ez az útmutató feltételezi, hogy a gazdagépen nincsenek más naT-k. Az alkalmazások vagy szolgáltatások azonban megkövetelik a NAT használatát, és létrehozhatnak egyet a beállítás részeként. Mivel a Windows (WinNAT) csak egy belső NAT-alhálózat-előtagot támogat, több NAT létrehozása ismeretlen állapotba helyezi a rendszert.

Annak megtekintéséhez, hogy ez lehet-e a probléma, győződjön meg arról, hogy csak egy NAT-ra van szüksége:

Get-NetNat

Ha már létezik NAT, törölje a következőt:

Get-NetNat | Remove-NetNat

Győződjön meg arról, hogy csak egy "belső" vmSwitch van az alkalmazáshoz vagy szolgáltatáshoz (például Windows-tárolókhoz). Jegyezze fel a vSwitch nevét:

Get-VMSwitch

Ellenőrizze, hogy vannak-e privát IP-címek (pl. NAT alapértelmezett átjáró IP-címe – általában x.y. z.1) a régi NAT-ból, amely továbbra is egy adapterhez van rendelve:

Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"

Ha egy régi magánhálózati IP-cím van használatban, törölje azt:

Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>

Több NAT eltávolítása Több, véletlenül létrehozott NAT-hálózatról is láthattunk jelentéseket. Ha több NAT-hálózatot lát, a Docker Network ls vagy a Get-ContainerNetwork futtatása után hajtsa végre a következőket egy emelt szintű PowerShell-lel:

$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

Indítsa újra az operációs rendszert a következő parancsok végrehajtása előtt (Restart-Computer)

Get-NetNat | Remove-NetNat
Set-Service docker -StartupType Automatic
Start-Service docker