Hyper-V使用NAT如何通过外网访问

上一篇文章在Hyper-V下搭建了NAT模式的网络结构,解决了虚拟机的网络问题以及物理机和虚拟机的相对网络路径问题

但是问题来了

NAT是通过物理网卡共享连接外部网络,而直接使用外部网络的是物理机

但是我虚拟机有个端口,想对外部网络开放访问怎么办

外部是访问不了本地的NAT的,只能访问物理机

这个时候,我们就在物理机上动手脚了

我的测试环境是WIN10专业版

原理是使用netsh命令,实现端口转发

外部访问物理机的指定端口的时候,物理机将其转发至指定的NAT网络下的IP和端口

具体的是netsh interface portproxy

MSDN上的官方文档链接: Netsh interface portproxy commands

使用方法文档其实很清楚了,我这里再介绍一下几个

[添加端口转发]

比如使用IPv4+Port访问转发到IPv4+Port访问,就使用

netsh interface portproxy add v4tov4 listenaddress=监听IP listenport=监听端口 connectport=目标端口 connectaddress=目标IP

其中listenaddress可以省略,省略后就会监听所有访问物理机的IP,就不用担心网络环境改变后物理机的IP改变需要重新设置的问题

比如我想外部访问80端口,转发到虚拟机的192.168.147.199:80

命令就是

netsh interface portproxy add v4tov4 listenport=80 connectport=80 connectaddress=192.168.147.199

[删除端口转发]

比如我要删除一个v4tov4的端口转发,就使用

netsh interface portproxy delete v4tov4 listenaddress=监听IP listenport=监听端口

如果你的监听IP设置的泛型,删除也不用填

比如我要删除上述添加的转发规则,命令就是

netsh interface portproxy delete v4tov4 listenport=80

[查看所有转发规则]

使用如下命令

netsh interface portproxy show all

当然如果你只想看v4tov4

就把最后改为v4tov4

netsh interface portproxy show v4tov4

[补充]

有些人说执行不了的,用管理员权限打开powershell再试,还有要确保你的端口是正确的以及没有被占用