- Jak to funguje
- Použité hodnoty
- Předpoklady
- Postup
Hyper-V: izolovaná NAT síť s přesměrováním portů
- Jak to funguje
- Použité hodnoty
- Předpoklady
- Postup
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.
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
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 |
|
Název NAT |
|
Podsíť |
|
IP hostitele (brána) |
|
IP virtuálního stroje |
|
Služba uvnitř VM | TCP port |
Port vystavený na hostiteli | TCP port |
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
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
Nastavení | Hodnota |
IP adresa |
|
Maska / prefix |
|
Výchozí brána |
|
DNS |
|
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
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.0znamená 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 → 22pro 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
- Zjistěte IP adresu hostitele v LAN příkazem
ipconfig— například192.168.1.50. - Z hostitele otevřete
http://192.168.100.10:80— přímý přístup musí fungovat. - 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.
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.1a tato adresa musí existovat na adaptéruvEthernet (NATSwitch). Ověřte krok 2 — adresa může zmizet, pokud byl switch mezitím znovu vytvořen. - Pokud
ping 1.1.1.1funguje, 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
NATSwitcha ž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-NetNatStaticMappingvnitř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
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
Updated
by Frantisek Brych