2019-03-06
Hyper-V 虛擬網路交換器設定
markdown
說明 hyper-v 裡的三種虛擬網路設定差異,實作三個虛擬網路交換器實驗,讓虛擬機器互連。
1. 私人虛擬交換器:二台虛擬機互連
2. 內部虛擬交換器:二台虛擬機互連且 Host 也可連 二台虛擬機
3. 外部虛擬交換器:讓虛擬機設定跟 Host 主機的相同 IP 區段,Host 與虛擬機互連
# 三種虛擬交換器
* 外部(External):會橋接到實體機器的網路卡,讓虛擬機可以透過實體機的網路卡連線到外部網路
* 內部(Internal):可以跟所有虛擬機器互通,且可以和宿主主機網路互通
* 私人(Private):虛擬機器的網路設定在相同區段時可以透過這個虛擬交換器互通
# 實驗環境
* 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)
---
# 實驗1:私人虛擬交換器
IP Address:
* win2019: 192.168.200.2
* ubuntu1804: 192.168.200.3
## Step 1.1. 新增「虛擬交換器」
新增一個私人虛擬交換器(Private Virtual Switch),名稱為「PrivateSwitch」
```
New-VMSwitch -Name 'PrivateSwitch' -SwitchType Private
```
## Step 1.2. 查看 win2019 虛擬機的網路介面卡設定,將其改成 `PrivateSwitch`
```
Get-VM "win2019" | Get-VMNetworkAdapter
Get-VM "win2019" | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "PrivateSwitch"
Get-VM "win2019" | Get-VMNetworkAdapter
```
## Step 1.3. 查看 ubuntu1804 虛擬機的網路介面卡設定,將其改成 `PrivateSwitch`
```
Get-VM "ubuntu1804" | Get-VMNetworkAdapter
Get-VM "ubuntu1804" | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "PrivateSwitch"
Get-VM "ubuntu1804" | Get-VMNetworkAdapter
```
## Step 1.4. 設定 win2019 虛擬機的網路介面卡 IP Address
```
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.200.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.200.1
DNS Servers . . . . . . . . . . . : 192.168.200.1
```
## Step 1.5. 設定 ubuntu1804虛擬機的網路介面卡 IP Address
```
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.200.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.200.1
DNS Servers . . . . . . . . . . . : 192.168.200.1
```
查看網路介面卡名稱
```
ifconfig
```
這裡我要修改的目標網路介面卡名稱是 `eth0`
在 ubuntu1804 透過 netplan 修改網卡設定。
```
# 備份原本的設定檔
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50.cloud-init.yaml.bak
```
編輯 50-cloud-init.yaml,將 50-cloud-init.yaml 設定改成下面內容
```
network:
ethernets:
eth0:
addresses: [192.168.200.3/24]
gateway4: 192.168.200.1
nameservers:
addresses: [192.168.200.1]
dhcp4: no
version: 2
```
套用設定
```
# 檢查設定
sudo netplan --debug apply
# 套用設定
sudo netplan apply
```
## Step 1.6. 測試連線,win2019 ping ubuntu1804
在 win2019 開啟命令提示字元
```
ping 192.168.200.3
```
應該回應正常
## Step 1.7. 測試連線,ubuntu1804 ping win2019
在 ubuntu1804 的 Terminal
```
ping 192.168.200.2
```
測試連到 win2019,此時連線應該會失敗,win2019 沒有回應,是因為預設 windows 伺服器會開啟防火牆,所以 ICMP 是會被擋掉的。這裡測試時可以暫時停用防火牆。
在 win2019 虛擬機中執行,停用防火牆:
```powershell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
```
再一次測試 ubuntu1804 ping win2019,應該成功了
```
ping 192.168.200.2
```
在 win2019 虛擬機中執行,啟用防火牆:
```powershell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
```
如果要啟用 ICMP 通過防火牆,可以用下面命令
```
New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress -Action Allow
```
或
```
#IPv4
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol="icmpv4:8,any" dir=in action=allow
#IPv6
netsh advfirewall firewall add rule name="ICMP Allow incoming V6 echo request" protocol="icmpv6:8,any" dir=in action=allow
```
---
# 實驗二:內部虛擬交換器
IP Address:
* Host: 192.168.100.1, vEthernet (InternalSwitch): 192.168.200.1
* win2019: 192.168.200.2
* ubuntu1804: 192.168.200.3
## Step 2.1. 新增內部虛擬交換器
```
New-VMSwitch -Name 'InternalSwitch' -SwitchType Internal
```
執行後會新增一個名稱為`vEthernet (InternalSwitch)`的網路介面卡
## Step 2.2. 設定 vEthernet (InternalSwitch) 的 IP Address
```
New-NetIPAddress -IPAddress 192.168.200.1 -PrefixLength 24 -InterfaceAlias “vEthernet (InternalSwitch)”
```
然後配置將在虛擬交換器上運行的NAT網路的網路地址; 這是虛擬機將在抽象虛擬交換機中使用的私有地址範圍。請注意,上一步中的IPv4地址必須在此範圍內。
```
New-NetNAT -Name "NATNetwork" -InternalIPInterfaceAddressPrefix 192.168.200.0/24
```
## Step 2.3. 查看 win2019 虛擬機的網路介面卡設定,將其改成 `InternalSwitch`
```
Get-VM "win2019" | Get-VMNetworkAdapter
Get-VM "win2019" | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "InternalSwitch"
Get-VM "win2019" | Get-VMNetworkAdapter
```
## Step 2.4. 查看 ubuntu1804 虛擬機的網路介面卡設定,將其改成 `InternalSwitch`
```
Get-VM "ubuntu1804" | Get-VMNetworkAdapter
Get-VM "ubuntu1804" | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "InternalSwitch"
Get-VM "ubuntu1804" | Get-VMNetworkAdapter
```
## Step 2.5. 設定 win2019 虛擬機的網路介面卡 IP Address
```
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.200.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.200.1
DNS Servers . . . . . . . . . . . : 192.168.200.1
```
這裡 Gateway 和 DNS 是指定 `vEthernet (InternalSwitch)`的網路介面卡 IP
## Step 2.6. 設定 ubuntu1804虛擬機的網路介面卡 IP Address(設定方式參考 Step 1.5)
```
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.200.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.200.1
DNS Servers . . . . . . . . . . . : 192.168.200.1
```
這裡 Gateway 和 DNS 是指定 `vEthernet (InternalSwitch)`的網路介面卡 IP
## 測試連線
### 先暫時停用 host 和 win2019 的防火牆
```powershell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
```
### 測試連線:win2019 ping ubuntu1804
```
ping 192.168.200.3
```
### 測試連線:win2019 ping host
```
ping 192.168.100.1
```
### 測試連線:ubuntu1804 ping win2019
```
ping 192.168.200.2
```
### 測試連線:ubuntu1804 ping host
```
ping 192.168.100.1
```
### 測試連線:host ping ubuntu1804
```
ping 192.168.200.3
```
### 測試連線:host ping win2019
```
ping 192.168.200.2
```
### 測試完,記得再啟用防火牆
```powershell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
```
---
# 實驗三:外部虛擬交換器
此範例只示範設定 win2019 使用外部虛擬交換器連線
IP Address:
* Host: 被橋接後原設定套用到 `vEthernet (ExternalSwitch)`, vEthernet (ExternalSwitch): 192.168.100.1
* win2019: 192.168.100.2
## Step 3.1. 新增外部虛擬交換器
```
New-VMSwitch -Name 'ExternalSwitch' -NetAdapterName 'Ethernet' -AllowManagementOS $true
```
-Name: 要新增的虛擬交換器名稱 `ExternalSwitch`
-NetAdapterName: 透過`Ethernet` 的網路卡橋接連線
-AllowManagementOS: 允許
## Step 3.2. 查看 win2019 虛擬機的網路介面卡設定,將其改成 `ExternalSwitch`
```
Get-VM "win2019" | Get-VMNetworkAdapter
Get-VM "win2019" | Get-VMNetworkAdapter | Connect-VMNetworkAdapter -SwitchName "ExternalSwitch"
Get-VM "win2019" | Get-VMNetworkAdapter
```
## Step 3.2. 修改 win2019 的 IP Address
如果外部 DHCP 配發 IP ,則 win2019 虛擬機中網路介面卡的 IP 與 DNS 可自動取得。
若要指定IP,則依Host 主機的網路介面卡設定方式設定,例如:
```
Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
DHCP Enabled. . . . . . . . . . . : No
IPv4 Address. . . . . . . . . . . : 192.168.100.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.100.254
DNS Servers . . . . . . . . . . . : 168.95.1.1
```
這裡的範例 DNS Servers 是指定成 Hinet 的 168.95.1.1。也可以指定成你慣用或自架的 DNS。
---
# 參考:
* 微軟文件[新增虛擬交換器](https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/get-started/create-a-virtual-switch-for-hyper-v-virtual-machines)
* [What is the Hyper-V Virtual Switch and how does it work?](https://www.altaro.com/hyper-v/the-hyper-v-virtual-switch-explained-part-1//) 28 Jun 2016 by [Eric Siron](https://www.altaro.com/hyper-v/author/eric-siron/)
* [Managing the Hyper-V Default Switch in Windows 10 version 1709 and higher with PowerShell](https://mikefrobbins.com/2018/11/08/managing-the-hyper-v-default-switch-in-windows-10-version-1709-and-higher-with-powershell/) [MIKE F ROBBINS](https://mikefrobbins.com/author/mikefrobbins/) NOVEMBER 8, 2018
* Windows Server 2012 新手村 [(05) 規劃與設定 Hyper-V 虛擬網路](https://channel9.msdn.com/Series/Windows-Server-2012-Entry-Level/Windows-Server-2012-Entry-Level-5)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言