Hyper-V: izolovaná NAT síť s přesměrováním portů

Tento návod popisuje, jak v Hyper-V vytvořit izolovanou NAT síť pro virtuální stroje — tedy obdobu režimu „NAT“ ve VirtualBoxu — a jak z ní vybrané služby zpřístupnit hostitelskému počítači i ostatním strojům v lokální síti.

Výsledek: virtuální stroj má přístup na internet, ale je pro okolní síť neviditelný. Hostitel se na něj dostane přímo přes jeho IP adresu a ostatní počítače v LAN se dostanou na vybrané porty přes adresu hostitele ve tvaru ip-hostitele:port.

Jak to funguje

Hyper-V nemá hotový režim „NAT“ jako VirtualBox. Stejného chování se dosáhne složením tří samostatných komponent:

  • Interní virtuální switch — privátní síť mezi hostitelem a virtuálními stroji, bez napojení na fyzickou síťovou kartu. Virtuální stroj tedy není z LAN vidět.
  • IP adresa na hostitelském adaptéru — hostitel se v této privátní síti stane výchozí bránou (gateway) pro virtuální stroje.
  • NetNat — komponenta Windows, která překládá adresy z privátní sítě ven přes internetové připojení hostitele, a zároveň umí přesměrovat vybrané příchozí porty dovnitř.

Tok provozu vypadá takto:

Ostatní PC v LAN  ──►  Hostitel 192.168.1.50:8080
                                │  NAT + přesměrování portu
                                ▼
                          vEthernet (NATSwitch) = 192.168.100.1
                                │
                                ▼
                          VM 192.168.100.10:80  ──►  internet přes NAT

Hyper-V sice nabízí předpřipravený Default Switch, který také dělá NAT, ale jeho rozsah adres se po restartu hostitele mění a nelze na něm nastavit přesměrování portů. Pro stabilní prostředí je proto potřeba vytvořit vlastní switch podle tohoto návodu.

Použité hodnoty

V celém návodu se pracuje s následujícími hodnotami. Klidně je nahraďte vlastními, jen je pak měňte důsledně ve všech příkazech.

Položka

Hodnota

Název switche

NATSwitch

Název NAT

NATNetwork

Podsíť

192.168.100.0/24

IP hostitele (brána)

192.168.100.1

IP virtuálního stroje

192.168.100.10

Služba uvnitř VM

TCP port 80

Port vystavený na hostiteli

TCP port 8080

Zvolená podsíť se nesmí překrývat s vaší firemní ani domácí sítí. Pokud je LAN například 192.168.1.0/24, je 192.168.100.0/24 v pořádku.

Předpoklady

  • Windows 10/11 Pro, Enterprise nebo Education, případně Windows Server, s povolenou rolí Hyper-V. Edice Home Hyper-V neobsahuje.
  • Všechny příkazy na hostiteli se spouští v PowerShellu spuštěném jako správce.
  • Na hostiteli smí existovat pouze jedna instance NetNat.

Před začátkem ověřte, zda už nějaký NAT na stroji není:

Get-NetNat

Pokud příkaz vypíše existující NAT (typicky ho vytvořil WSL2, Docker Desktop nebo dřívější pokus), máte dvě možnosti: použít pro virtuální stroj jeho podsíť, nebo ho odstranit příkazem Remove-NetNat -Name "<název>". Odstraňujte jen tehdy, pokud máte jistotu, že na něm nic jiného nezávisí — jinak přijdou o síť například kontejnery v Dockeru.

Postup

1. Vytvoření interního switche

New-VMSwitch -SwitchName "NATSwitch" -SwitchType Internal

Vznikne virtuální switch bez napojení na fyzickou síťovou kartu a zároveň na hostiteli nový virtuální adaptér s názvem vEthernet (NATSwitch).

2. Přiřazení IP adresy brány hostitelskému adaptéru

New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (NATSwitch)"

Hostitel nyní v této síti vlastní adresu 192.168.100.1. Tato adresa bude pro virtuální stroj výchozí branou.

Ověření:

Get-NetIPAddress -InterfaceAlias "vEthernet (NATSwitch)"

3. Vytvoření NAT

New-NetNat -Name "NATNetwork" -InternalIPInterfaceAddressPrefix 192.168.100.0/24

Tímto se Windows řekne, že veškerý provoz z podsítě 192.168.100.0/24 má překládat ven přes aktivní internetové připojení hostitele.

Ověření:

Get-NetNat

4. Připojení virtuálního stroje ke switchi

Přes grafické rozhraní: Settings → Network Adapter → Virtual switch → NATSwitch.

Nebo příkazem:

Connect-VMNetworkAdapter -VMName "MyVM" -SwitchName "NATSwitch"

5. Nastavení sítě uvnitř virtuálního stroje

Na vlastním NAT switchi neběží DHCP server. Virtuální stroj si sám adresu nepřidělí — je nutné nastavit statickou konfiguraci uvnitř hostovaného systému.

Nastavení

Hodnota

IP adresa

192.168.100.10

Maska / prefix

255.255.255.0 (/24)

Výchozí brána

192.168.100.1

DNS

1.1.1.1 a/nebo 8.8.8.8

Brána 192.168.100.1 neposkytuje DNS — nelze ji tedy zadat jako DNS server. Vždy uveďte veřejný nebo firemní DNS server.

Linux (Ubuntu, netplan)

Soubor /etc/netplan/01-static.yaml:

network:
  version: 2
  ethernets:
    eth0:
      addresses: [192.168.100.10/24]
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]

Konfiguraci aplikujte příkazem sudo netplan apply. Název rozhraní (eth0) ověřte příkazem ip a — bývá také ens33 nebo podobně.

Windows (PowerShell uvnitř VM)
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.100.10 -PrefixLength 24 -DefaultGateway 192.168.100.1
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 1.1.1.1,8.8.8.8

Kontrola z virtuálního stroje
ping 192.168.100.1     # brána je dostupná
ping 1.1.1.1          # internet přes NAT funguje
nslookup example.com   # DNS funguje

V tuto chvíli se hostitel na virtuální stroj už dostane přímo — například na http://192.168.100.10:80 — a to bez jakéhokoli přesměrování portů. Následující dva kroky jsou potřeba pouze pro přístup z ostatních počítačů v síti.

6. Přidání pravidla pro přesměrování portu

Přesměrování portu 8080 na hostiteli na port 80 ve virtuálním stroji:

Add-NetNatStaticMapping -NatName "NATNetwork" -Protocol TCP -ExternalIPAddress 0.0.0.0 -ExternalPort 8080 -InternalIPAddress 192.168.100.10 -InternalPort 80

  • -ExternalIPAddress 0.0.0.0 znamená naslouchání na všech rozhraních hostitele. Pokud má být služba dostupná jen na jednom z nich (například na drátovém připojení, ale ne na Wi-Fi), uveďte místo nul konkrétní IP adresu daného rozhraní.
  • Pro každou další službu vytvořte samostatné pravidlo s jinými porty — například 2222 → 22 pro SSH.
  • Podporovány jsou pouze protokoly TCP a UDP. Pokud služba potřebuje oba, vytvořte dvě pravidla.

Správa existujících pravidel:

Get-NetNatStaticMapping                    # výpis všech pravidel
Remove-NetNatStaticMapping -StaticMappingID 0   # odstranění jednoho (ID z výpisu výše)

7. Otevření firewallu na hostiteli

Samotné přesměrování nestačí — Windows Firewall příchozí spojení z ostatních počítačů stále zahodí. Je nutné povolit externí port:

New-NetFirewallRule -DisplayName "Forward 8080 to VM web" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

Volitelně lze pravidlo omezit pouze na vlastní LAN, což je z bezpečnostního hlediska vhodnější:

New-NetFirewallRule -DisplayName "Forward 8080 to VM web (LAN only)" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -RemoteAddress 192.168.1.0/24

Rozsah 192.168.1.0/24 upravte podle své skutečné podsítě.

Ověření funkčnosti

  1. Zjistěte IP adresu hostitele v LAN příkazem ipconfig — například 192.168.1.50.
  2. Z hostitele otevřete http://192.168.100.10:80 — přímý přístup musí fungovat.
  3. Z jiného počítače v síti otevřete http://192.168.1.50:8080 — musí se zobrazit služba běžící ve virtuálním stroji.

Pro rychlý test bez nasazování reálné služby stačí ve virtuálním stroji spustit dočasný webový server: python3 -m http.server 80 (Linux). Server běží, dokud ho neukončíte klávesovou zkratkou Ctrl+C.

Řešení problémů

Virtuální stroj nemá internet

  • Spusťte Get-NetNat — existuje NAT a odpovídá jeho podsíť zadané konfiguraci?
  • Brána ve virtuálním stroji musí být 192.168.100.1 a tato adresa musí existovat na adaptéru vEthernet (NATSwitch). Ověřte krok 2 — adresa může zmizet, pokud byl switch mezitím znovu vytvořen.
  • Pokud ping 1.1.1.1 funguje, ale názvy se nepřekládají, jsou špatně nastavené DNS servery ve virtuálním stroji.

Hostitel se nedostane na VM přímo

  • Firewall uvnitř virtuálního stroje — hostovaný systém musí mít povolený port dané služby. Toto je zdaleka nejčastější příčina.
  • Ověřte, že je síťový adaptér virtuálního stroje připojen ke switchi NATSwitch a že má správnou IP adresu.

Ostatní počítače se nepřipojí, ale přímý přístup z hostitele funguje

  • Chybí pravidlo firewallu na hostiteli, nebo je nastaveno na jiný port (krok 7).
  • Překlep v pravidle přesměrování — zkontrolujte pomocí Get-NetNatStaticMapping vnitřní IP adresu a oba porty.
  • Některé VPN klienty na hostiteli zachytávají příchozí provoz. Vyzkoušejte s odpojenou VPN.

Příkaz New-NetNat skončí chybou

Typicky s hláškou „The parameter is incorrect“ nebo podobnou.

  • Na hostiteli už existuje jiná instance NetNat — ověřte příkazem Get-NetNat. Odstraňte ji, nebo použijte její podsíť.
  • Na některých strojích zde koliduje WSL2 nebo Docker Desktop, které si vlastní NAT vytváří automaticky.

Po restartu hostitele přestane vše fungovat

Switch, IP adresa, NAT, pravidla přesměrování i pravidla firewallu jsou perzistentní a restart přežijí. Pokud adresa na straně hostitele zmizí po větší aktualizaci Windows, stačí zopakovat krok 2.

Odstranění konfigurace

Vše se odstraňuje v opačném pořadí, než v jakém bylo vytvořeno:

Get-NetNatStaticMapping | Remove-NetNatStaticMapping -Confirm:$false
Remove-NetFirewallRule -DisplayName "Forward 8080 to VM web"
Remove-NetNat -Name "NATNetwork" -Confirm:$false
Remove-NetIPAddress -InterfaceAlias "vEthernet (NATSwitch)" -IPAddress 192.168.100.1 -Confirm:$false
Remove-VMSwitch -Name "NATSwitch" -Force

První příkaz odstraní všechna pravidla přesměrování na hostiteli, nikoli jen ta z tohoto návodu. Pokud na stroji existují i jiná, odstraňujte je jednotlivě podle StaticMappingID.

Rychlá reference

Celá konfigurace v jednom bloku

Spouštějte na hostiteli v PowerShellu jako správce:

New-VMSwitch -SwitchName "NATSwitch" -SwitchType Internal
New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (NATSwitch)"
New-NetNat -Name "NATNetwork" -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Connect-VMNetworkAdapter -VMName "MyVM" -SwitchName "NATSwitch"

Ve virtuálním stroji nastavte statickou IP 192.168.100.10/24, bránu 192.168.100.1 a DNS 1.1.1.1.

Vystavení portu 80 z VM jako portu 8080 na hostiteli:

Add-NetNatStaticMapping -NatName "NATNetwork" -Protocol TCP -ExternalIPAddress 0.0.0.0 -ExternalPort 8080 -InternalIPAddress 192.168.100.10 -InternalPort 80
New-NetFirewallRule -DisplayName "Forward 8080 to VM web" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

Frantisek Brych Updated by Frantisek Brych

Change the default URL in Oracle VirtualBox

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)