前言

Docker Desktop使用hyper-v虚拟机,但Windows下的磁盘挂载比较麻烦,有文件权限问题,端口映射容易报错。于是删了Docker Destop,用hyper-v创建了一个CentOS 7.6虚拟机。

在虚拟机内部署服务时,需要把端口暴露出来,搜索后有两种办法,NAT映射与端口转发,可参考文章末尾的两个链接。

测试下来还是使用NAT映射比较方便,假定已经创建号虚拟机,创建的交换机名称为VMSwitch,NAT名称为VMNAT,下面是步骤。

创建交换机

创建一个Internal类型的交换机,设置名称为VMSwitch

1
New-VMSwitch -SwitchName "VMSwitch" -SwitchType Internal

配置交换机地址

为交换机创建IP地址池,注意网卡名称对应,这里使用172.21.21.1/24地址池

1
New-NetIPAddress -IPAddress 172.21.21.1 -PrefixLength 24 -InterfaceAlias "vEthernet (VMSwitch)"

配置虚拟机静态IP

首先将虚拟机关机,然后更改它的交换机为上面创建的交换机,然后启动虚拟机。

编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0,这里使用172.21.21.2 作为虚拟机固定IP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
TYPE=Ethernet                            
PROXY_METHOD=none                        
BROWSER_ONLY=no                          
BOOTPROTO=static                         
DEFROUTE=yes                             
IPV4_FAILURE_FATAL=no                    
IPV6INIT=yes                             
IPV6_AUTOCONF=yes                        
IPV6_DEFROUTE=yes                        
IPV6_FAILURE_FATAL=no                    
IPV6_ADDR_GEN_MODE=stable-privacy        
NAME=eth0                                
UUID=896b2aaa-0s52-4679-8b00-561e24c524f1
//下面是需要编辑配置静态IP的内容
DEVICE=eth0                              
ONBOOT=yes                               
GATEWAY=172.21.21.1                      
IPADDR=172.21.21.2                       
NETMASK=255.255.255.0                    
DNS1=8.8.8.8                             
DHS2=114.114.114.114                     

保存后退出,执行下面的命令重启网络服务

1
systemctl restart network

创建NAT并添加NAT映射

假设将宿主机的7777(TCP)、8888(UDP)、9999(UDP)三个TCP端口分别映射到虚拟机

1
2
3
4
5
6
// 创建NAT
New-NetNat -Name VMNAt -InternalIPInterfaceAddressPrefix 172.21.21.0/24
// 添加NAT映射,注意名称对应
Add-NetNatStaticMapping -NatName "VMNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.21.21.2 -InternalPort 7777 -ExternalPort 7777
Add-NetNatStaticMapping -NatName "VMNAt" -Protocol UDP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.21.21.2 -InternalPort 8888 -ExternalPort 8888
Add-NetNatStaticMapping -NatName "VMNAt" -Protocol UDP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.21.21.2 -InternalPort 9999 -ExternalPort 9999

访问与测试端口

可以使用telnel与nc来测试端口访问,实测在PC的有线网卡与无线网卡各自的子网内,都可以访问到虚拟机的服务

Tips

hyper-v创建虚拟机时可选第二代虚拟机,类似带UEFI启动的Windows 10笔记本,但CentOS及Ubuntu可能无法正常启动,可通过禁用安全启动或配置安全启动模板为Microsoft UEFI证书颁发机构解决这个问题

相关文档链接

Set up a NAT network

通过WINDOWS实现端口转发