2019-03-07

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

在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 虛擬網路交換器設定,此文中 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

參考:

沒有留言:

adsense