windows用netsh实现端口映射

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:Windowssystem32>netsh interface portproxy show all                                                                                                                      侦听 ipv4:                 连接到 ipv4:                                                                                                                       地址            端口        地址            端口                                --------------- ----------  --------------- ----------                          10.0.10.21    8081          192.168.33.111  8081   
    

    如果需要一直做转发,重启机器后仍要生效的话,就做个脚本开机启动即可。

防火墙开启

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

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

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

【end】

原文地址:https://www.cnblogs.com/tielemao/p/14149311.html