前言
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)"
|
创建NAT
1
|
New-NetNat -Name VMNAt -InternalIPInterfaceAddressPrefix 172.21.21.0/24
|
配置虚拟机静态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映射
假设将宿主机的7777(TCP)、8888(UDP)、9999(UDP)三个TCP端口分别映射到虚拟机
1
2
3
4
|
// 添加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实现端口转发