windows用netsh实现端口映射

by:铁乐与猫

update: 2019-07-15

环境

  • 映射方(进行端口转发)
    • 系统: windows10(默认己安装netsh)
    • ip:10.0.10.21 (192.168.33.1)
    • 端口:tcp 8081
  • 被映射方(被转发)
    • 系统: centos7(vagrant虚拟机)
    • ip:192.168.33.111 (与宿主机网络连通)
    • 端口:tcp 8081 (web服务)

需求

对centos7的8081端口进行转发,以便与10.0.10.21同一网络的其它机器能够访问到虚拟机上的web服务。

使用netsh在windows宿主机上做转发好处是不需要影响到虚拟机的网络配置。虚拟机不需要设置成连接10网段的方式。比较灵活,在很多场合都能用上。当然如果宿主机是linux的系统就直接做iptables转发规则了。

这里要注意的是,netsh做完转发后,windows的防火墙规则也相应要添加开放。

netsh 命令

Windows的netsh是一个命令行脚本实用工具。

使用netsh工具 ,可以查看或更改本地计算机或远程计算机的网络配置。

可以手动运行Netsh命令,或创建批处理文件或脚本实现过程的自动化。

netsh提供了脚本功能,让您在批处理模式下针对指定的计算机,运行一组命令。利用netsh ,可以将配置脚本保存为文本文件,便于存档或用于配置其他的计算机。

  • 例,上面的需求可以添加一个IPV4到IPV4的端口映射去解决:
  • netsh interface portproxy add v4tov4 listenaddress=10.0.10.21 listenport=8081 connectaddress=192.168.33.111 connectport=8081
  • 其中:
    • netsh interface portproxy 表示端口映射列表
    • add v4tov4 表示添加的是IPV4到IPV4的端口
    • listenaddress 表示侦听的ip地址,填的是映射方
    • listenport 侦听的端口,可以与被映射的端口设置成不一样
    • connectaddress 被映射方(连接方)的ip地址
    • connectport 被映射方的端口
  • 如果开启后想删除的话:
  • netsh interface portproxy delete v4tov4 listenaddress=10.0.10.21 listenport=8081
  • add 换成delete,很简单。
  • 查看己存在的转发列表:netsh interface portproxy show all
  • # 例:
  • C:\Windows\system32>netsh interface portproxy show all                  
  • 侦听 ipv4:     连接到 ipv4:      
  • 地址           端口       地址           端口              
  • ————— ———-   ————— ———-                              
  • 10.0.10.21    8081   192.168.33.111   8081  
  • 如果需要一直做转发,重启机器后仍要生效的话,就做个脚本开机启动即可。

防火墙开启

如果宿主的window有开防火墙的话,要相应的添加开放端口规则。

打开【网络和internet设置】- 【Windows防火墙】- 【高级设置】- 【入站规则】- 【新建规则】

根据提示设置好相关端口即可。

【end】

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 × 1 =