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)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言