Hyper-V虚拟机端口暴露

Overview

前言

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

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

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

创建交换机

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

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

配置交换机地址

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

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

创建NAT

1New-NetNat -Name VMNAt -InternalIPInterfaceAddressPrefix 172.21.21.0/24

配置虚拟机静态IP

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

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

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

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

1systemctl restart network

添加NAT映射

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

1// 添加NAT映射,注意名称对应
2Add-NetNatStaticMapping -NatName "VMNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.21.21.2 -InternalPort 7777 -ExternalPort 7777
3Add-NetNatStaticMapping -NatName "VMNAt" -Protocol UDP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.21.21.2 -InternalPort 8888 -ExternalPort 8888
4Add-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实现端口转发