一直以来没太关注过Windows系统的端口转发功能,毕竟使用需要用的的地方太少,最近给一个朋友调试一个挖虚拟币的软件,发现Windows的这个功能还挺有趣。从XP开始Windows系统就内嵌了网络端口转发的功能,使用Netsh命令即能实现Windows系统任何到本地端口的TCP连接(IPv4或者IPv6)被转发到任意一个本地/远端端口。
示例
将80端口转发到另一台服务器的80端口:
netsh interface portproxy add v4tov4 listenport=80 listenaddress=172.16.88.2 connectport=80 connectaddress=172.16.88.13
将8080端口转发到另一台服务器的IPv6地址的80端口:
netsh interface portproxy add v4tov6 listenport=8080 listenaddress=172.16.88.2 connectport=80 connectaddress=2001:de4::101
测试:netstat -ano | findstr :80 来验证80端口是否正在监听中。

参数说明:
- listenaddress — 本机IP地址(支持IPv4/IPv6,不能是127.0.0.1或localhost)。
- listenport — 待转发的本地端口。
- connectaddress — 转发目标的本地或远程主机的IP地址(支持域名/IPv6)。
- connectport — 转发目标的TCP端口。
其它命令
- 查看系统中的所有转发规则:
netsh interface portproxy show all - 查看系统中的所有IPv4转发规则:
netsh interface portproxy show v4tov4 - 查看端口转发的设置:
netsh interface portproxy dump - 删掉一个特定的端口转发规则(上面添加的80端口的转发规则):
netsh interface portproxy delete v4tov4 listenaddress=172.16.88.2 listenport=80 - 清空当前所有的配置规则:
netsh interface portproxy reset
为何不生效
- ip helper服务没有启动。
- 本地防火墙限制。
- 将本机端口转发不要使用127.0.0.1。
- 不支持UDP端口。
- 默认重启后转发规则也会生效,不过听说Win2008有时候会失效,请自行测试。
如果需要转发UDP端口或不喜欢命令行,可以使用其它的端口转发工具进行转发。
第三方的端口转发工具
-
NetworkActiv AUTAP

-
UPnP PortMapper
这个是Java软件,因为我没有安装Java,就不截图了。