将Hyper-V虚拟机内MySQL数据库3306端口暴露在局域网中

LonelyMan 375 2021-07-27

起因

需要将自己的数据库共享给局域网内他人使用,但是自己的数据库装在Hyper-V的虚拟机内,只能在虚拟交换机内的主机上访问

解决方案

虚拟机网络环境配置见此

本机在虚拟交换机中的IP地址为10.10.0.1,虚拟机在虚拟交换机中的IP地址为10.10.0.100,本机在局域网内的IP地址为192.168.14.77

先添加NAT映射

Add-NetNatStaticMapping -NatName "vNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 10.10.0.100 -InternalPort 3306 -ExternalPort 3306

将虚拟机10.10.0.100的3306端口映射到本机的10.10.0.1的3306端口

再添加本机的端口代理

netsh interface portproxy add v4tov4 listenport=3306 listenaddress=192.168.14.77 connectaddress=10.10.0.100 connectport=3306

将本机在虚拟交换机中的10.10.0.1的3306端口映射到本机在局域网中的192.168.14.77的3306端口

用同局域网内的其他设备连接192.168.14.77:3306便可以成功连接到虚拟机内的数据库

PS:可以在使用完后用以下命令删除相关配置

netsh interface portproxy delete v4tov4 listenaddress=192.168.14.77 listenport=3306

Remove-NetNatStaticMapping

参考

https://www.christchen.top/archives/porttunnel

https://wbuntu.com/hyper-v-vm-port-expose/

https://docs.microsoft.com/en-us/powershell/module/netnat/?view=windowsserver2019-ps