Windows服务器基于netsh命令实现请求转发

一、前言

        在日常工作中经常会遇到涉及内外网互通的情况,常规操作是使用第三方软件Nginx等代理请求,实现内外网的互联互通。但是某种层度上看的话,如果只是涉及请求代理,使用Nginx第三方服务器软件有种小题大做的感觉,它的核心作用更多是实现请求分发、负载均衡等性能调优。

        基于上述背景,本文将介绍如何在Windows服务器使用netsh命令进行TCP请求转发。Linux版本可参考:使用ssh或者autossh进行端口转发

二、正文

1、netsh与nginx区别

  1. netsh

    • 用途:netsh 是 Windows 操作系统中的一个命令行实用程序,用于管理网络接口、网络协议和各种网络服务。
    • 功能:netsh 可以用来配置网络设置,如 IP 地址、子网掩码、网关、DNS 服务器等;还可以管理防火墙、VPN、网络适配器等功能。
    • 操作系统:netsh 是 Windows 特有的工具,可以在 Windows 中的命令提示符或 PowerShell 中使用。
  2. Nginx

    • 用途:Nginx 是一个高性能的开源 Web 服务器,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存。
    • 功能:Nginx 的主要功能是处理和响应 HTTP 请求,它可以处理静态内容、动态内容(通过 FastCGI、uWSGI 等)、SSL/TLS 加密、虚拟主机配置等。
    • 操作系统:Nginx 是跨平台的,可以在多种操作系统上运行,包括各种 UNIX 类系统和 Windows。

主要区别

  • 用途和功能:netsh 主要用于管理和配置网络设置和服务,而 Nginx 主要用于处理和分发 Web 请求。
  • 操作系统支持:netsh 仅限于 Windows 系统,而 Nginx 可以在多种操作系统上运行。
  • 领域:netsh 属于网络管理领域,主要服务于操作系统本身的网络功能;而 Nginx 属于服务器软件领域,主要服务于 Web 应用程序的处理和分发。

因此,netsh 和 Nginx 是两个在不同领域、解决不同问题的工具,没有直接的功能比较基础。

2、netsh功能介绍

注意!在window中,netsh现在只能针对TCP请求进行端口转发,不能对UDP协议进行转发。

端口转发(Port Forwarding):通过监听一个端口,将所有收到的数据,转发到另一个配置的本地端口或者远程地址的端口中。

举个例子:192.168.1.100 机器上部署了Tomcat服务,端口为8080。可用户所在网段为192.168.2.xxx,如果要访问到Tomcat服务就需要在 192.168.2.xxx 网段进行服务代理。

我们选择在 192.168.2.100 机器上使用netsh命令进行TCP端口代理,映射到 192.168.1.100 的Tomcat服务上。

netsh interface portproxy add v4tov4 listenport=6666 listenaddress=0.0.0.0 connectaddress=192.168.1.100 connectport=8080

上述指令中 我们将 2.100 的 6666 端口进行监听,一旦有请求访问过来就进行请求转发到 192.168.1.100 机器的 8080 端口,从而实现请求的代理。

当然,上述前提是192.168.2.100 与 192.168.1.100之间互通。用户后续访问 192.168.2.100:6666 等同于访问到 192.168.1.100:8080 。

3、netsh具体使用

上述指令中参数说明如下:

  • interface portproxy:切换到端口代理的上下文中。固定不变。
  • add:表示添加一个端口转发。
  • v4tov4:表示添加的类型。还可以v4tov6,v6tov4,v6tov6四种参数
  • listenport:想要监听那个端口,相当于图1中的PortA
  • listenaddress:配置监听的地址,如何配置0.0.0.0表示本地的任何地址,如果是127.0.0.1,只有在请求通过这个回环地址,才会进行端口转发。监听的网卡地址。
  • connecport:转发到的端口,相当于图1中的PortB。
  • connectaddress:配置的转发的地址,可以是这个机器连接到的任何地址。

其他相关指令介绍:

--查看所有的端口转发:
netsh interface portproxy show all

--删除一个端口映射
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=0.0.0.0

--删除所有的端口映射
netsh interface portproxy reset

--显示端口配置脚本
netsh interface portproxy dump

三、总结

        在日常网络管理和应用部署中,需要实现内外网之间的互通是一种常见的需求。传统上,我们可能会使用像Nginx这样的第三方软件来实现请求代理和转发。然而,在Windows服务器环境下,利用netsh命令进行TCP请求转发是一种更加直接和内置的方法。 

         本文通过比较netsh和Nginx的区别,清晰地展示了它们的功能定位和适用场景。netsh作为Windows操作系统的一部分,主要用于配置网络设置和服务,特别适合于在本地网络环境中进行端口转发和代理。相比之下,Nginx则是一个跨平台的高性能Web服务器和反向代理服务器,更适合处理Web请求的分发和负载均衡。

        进一步地,文章详细介绍了如何使用netsh命令在Windows服务器上进行TCP端口转发。通过实际的例子,展示了如何将来自一个网络段的请求代理到另一个网络段中的服务,从而实现内外网的互通。重点解释了各个参数的含义和使用方法,确保读者能够准确地配置和管理端口转发。

        最后,强调了netsh在Windows环境中的独特优势和局限性,例如它只支持TCP请求转发,不能处理UDP协议。总结指出,选择合适的工具取决于具体的需求和操作系统环境,netsh为Windows管理员提供了一个方便和强大的工具来管理和优化网络连接。

        通过本文的学习,读者可以更加深入地理解和利用netsh命令来解决内外网互通的需求,提升网络管理效率和灵活性。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aikes902

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值