Windows下的端口转发及其当作zabbix proxy跳板的用法示例

从XP(2001)开始,Windows就内置了网络端口转发功能,传入本地计算机端口的任何TCP连接(IPV4/IPV6),都可以被转发到本地或远程计算机的另一个端口,而无需本地计算机真的运行一个监听该端口的服务。

在Linux中,使用iptables可以很轻易地实现这一功能,而在Windows中,则由Routing and Remote Access服务(RRAS)来配置端口转发,但还有一种更简单的、适合任意windows版本的方法:netsh。

可以使用命令netsh的portproxy模式配置Windows中的端口转发,命令语法如下:

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
  • listenaddress:监听地址
  • listenport:监听端口
  • connectaddress:转发地址
  • connectport:转发端口

一个使用示例:通过非标准端口连接远程桌面(可以更改RDP服务的端口,此处只是为了举例),即将TCP端口3340重定向到本地端口3389(标准RDP端口)。

以管理员身份启动命令提示符,并运行如下命令:

netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110

其中10.1.1.110为提供远程桌面服务的计算机IP地址。

使用netstat命令看下3340端口此时是否处于监听状态:

netstat -ano | findstr :3340

如果此时看不到一个监听在3340端口的进程,请检查如下两个地方:

1、检查IP Helper服务是否运行(win+R:service.msc查看)

2、检查网络接口是否启用了IPV6支持(检查适配器属性,是否勾选Intermet Protocol Version6(TCP/IPV6)/Internet协议版本6(TCP/IPV6))

这是实现端口转发的先决条件。

此时可以尝试远程桌面连接10.1.1.110:3340,如果一切正常,将和连接10.1.1.110:3389效果一样。

记得在Windows防火墙中开放3340端口

可以通过图形界面配置,或者使用命令:
netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=10.1.1.110  localport=3340 action=allow

可以创建任意数量的转发规则,且所有netsh interface portproxy规则都是永久的,不会随着系统重启而失效。可以通过如下命令显示当前计算机的所有转发规则:

netsh interface portproxy show all

或者使用如下命令获取端口代理配置:

netsh interface portproxy dump

可以使用如下命令删除某个端口转发规则:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

使用如下命令清除所有规则:

netsh interface portproxy reset

如果想将传入的tcp连接转发到另外一台计算机,可以使用(将连接请求转发到192.168.100.101:3389):

netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101

如果想让远程服务看起来像是运行在本地,可以使用(此时访问localhost:5555将重定向到157.166.226.25:80):

netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp

注意:在Windows Server 2012 R2中端口转发规则可能在系统重启后被重置,请检查网络接口是否中断或者服务器IP地址是否变更(建议设置为静态地址),另一个解决方法是在windows任务计划程序中添加一个配置规则的开机启动脚本。

在Windows Server 2003 / XP中,还需要确保注册表HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters中的IPEnableRouter参数已设置为1。

以上内容译自:http://woshub.com/port-forwarding-in-windows/


另一个用法示例

之前遇到过一个问题,一组独立网络中的服务器需要添加到现有的zabbix监控系统中,而该系统中的已没有多余的服务器可供安装zabbix proxy,仅有一台windows(192.168.0.179)服务器具有访问现有监控系统中某个zabbix proxy(132.222.222.222)的条件,此时就可以使用这台windows做跳板来监控其所在网络中的其他服务器。

netsh interface portproxy add v4tov4 listenport=10051 listenaddress=192.168.0.179 connectport=10051 connectaddress=132.222.222.222

待监控网络中的zabbix agent应设置为active模式,且ServerActive字段应设置为192.178.0.179,这样即可在不对现有网络做任何变动的条件下实现对该网络的监控。

发表评论

电子邮件地址不会被公开。