2019-03-07

Hyper-V 內部虛擬交換器 NAT Static Mapping

markdown 在Hyper-V 中安裝好虛擬機後,若是使用內部虛擬交換器(Internal Virtual Switch)則需要將 Host 的 port 對應到虛擬機的 port,外部的主機才能透過 Host 的 IP:port 連線到虛擬機的服務。這裡透過 Powershell 命令建立 NAT 的規則。 # 建立 NAT Static Mapping ## 實驗環境 * Host: Windows 10 Pro (IP:192.168.100.1) * Hyper-V: 二台虛擬機 1. win2019: Windows 2019 Standard (IP: 192.168.200.2) 2. ubuntu1804: Ubuntu 18.04.1 (IP: 192.168.200.3) 虛擬交換器的建立方式,請參考[Hyper-V 虛擬網路交換器設定](https://uzch.blogspot.com/2019/03/hyper-v.html),此文中 Step 2.2 有使用 `New-NetNAT` 指令建立 NAT,在此文中有用到。 我在 Hyper-V 已建立內部虛擬交換器,名稱`InternalSwitch`: ``` IPv4 Address. . . . . . . . . . . : 192.168.200.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 ``` ## 新增 NetNAT 先確認是否有已有建立好與網路介面卡名稱`vEthernet(InternalSwitch)` 所設定的私有地址範圍相同的 NAT。 我這裡 vEthernet(InternalSwitch) 設定的地址範圍是 `192.168.200.0/24`。 ``` Get-NetNat ``` 取回的NAT設定結果 如果 Get-NetNat 的結果為空的,需要配置一個NAT網路的地址範圍, `-Name "NATNetwork"` 的 NATNetwork 可以更改為易於識別的名稱。 ``` New-NetNAT -Name "NATNetwork" -InternalIPInterfaceAddressPrefix 192.168.200.0/24 ``` 配置將在虛擬交換器上運行的NAT網路的網路地址; 這是虛擬機將在抽象虛擬交換機中使用的私有地址範圍。請注意,上一步中的IPv4地址必須在此範圍內 ## NAT 規則範例 如果要讓外部能連到虛擬機的網頁服務,則要能連到虛擬機的 port:80,參閱以下範例: * 外部IP(ExternalIPAddress): 0.0.0.0 * 外部通訊埠(ExternalPort): 80 * 內部IP(InternalIPAddress): 192.168.200.2 * 內部通訊埠(InternalPort): 80 ``` Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/0" -ExternalPort 80 -Protocol TCP -InternalIPAddress "192.168.200.2" -InternalPort 80 -NatName NATNetwork ``` * ExternalIPAddress: 這是指定要轉送的來源IP,這裡指的是 Host 主機設定的 IP;這可以是特定的實體 IP 或是 0.0.0.0/0 這是 Host 主機上全部 IP 。 * ExternalPort: 這是要接收轉送的通訊埠,例如 Web 是 80,遠端桌面是 3389. * Protocol: 這只能是 TCP 或 UDP. * InternalIPAddress: 這是指定要轉送給已啟用 NAT 對應的虛擬機的IP. * InternalPort: 這是指定虛擬機的通訊埠. ## 通訊埠轉送 在前一個例子中,只建立了一個使用 TCP 80 的 NAT 規則,此時只有虛擬交換器只有轉送監聽單一個 80 port。 以下我們使用二台虛擬機將外部的通訊埠請求轉送到內部,這裡 VM1 的遠端桌面(3389) 和 VM2 的 SSH(22) 要設定可連入: * VM1 win2019: Windows 2019 Standard (IP: 192.168.200.2 通訊埠 3389) 外部通訊埠 60002 * VM2 ubuntu1804: Ubuntu 18.04.1 (IP: 192.168.200.3 通訊埠 22) 外部通訊埠 60003 ``` Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 60002 -Protocol TCP -InternalIPAddress "192.168.200.2" -InternalPort 3389 -NatName NATNetwork Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 60003 -Protocol TCP -InternalIPAddress "192.168.200.3" -InternalPort 22 -NatName NATNetwork ``` 就可以從其它主機連線,使用遠端桌面連線到 VM1 ``` mstsc /v:192.168.88.82:60002 ``` 使用 win10 的 ssh 指令連到 VM2 ``` ssh username@192.168.88.82 -p 60003 ``` 這裡 ubuntu 記得要開防火牆允許連入 port 22 開啟防火牆 允許 192.168.100.8 連入 22 ``` sudo ufw allow from 192.168.100.8 to any port 22 proto tcp ``` 刪除防火牆設定 ``` sudo ufw delete allow from 192.168.100.8 to any port 22 proto tcp ``` ## 參考: * [Using a NAT Virtual Switch with Hyper-V](https://www.petri.com/using-nat-virtual-switch-hyper-v) - March 17, 2017 by [Aidan Finn](https://www.petri.com/author/aidan-finn) * [Create NAT Rules for the Hyper-V NAT Virtual Switch](https://www.petri.com/create-nat-rules-hyper-v-nat-virtual-switch) - April 10, 2017 by [Aidan Finn](https://www.petri.com/author/aidan-finn)

沒有留言:

adsense