端口转发服务是由一组端口转发规则定义的策略。一个端口转发服务可以应用到一个或更多的服务器。然后服务器的入站网络访问就根据端口转发服务所定义的策略进行管理。可以根据需要指定一个或多个CIDR来过滤源lP地址,以允许来自特定IP地址的请求被转发。
这里介绍一下使用Windows服务器实现端口转发的功能,以一台Windows服务器转发另一台Linux服务器为例。
首先要找到Windows云服务器的内网IP,不是你的公网IP,使用命令ipconfig即可找到。
对于WindowsServer 2008以下版本的系统,需要安装IPV6才行,如果是Windows Server 2008或者以上的系统则默认已经支持。
之后,使用Portproxy模式下的Netsh命令即能实现Windows系统中的端口转发,转发命令如下,执行命令前,请使用管理员权限。
netsh interface portproxy add v4tov4 listenaddress=本地地址 listenport=本地端口 connectaddress=远程地址 connectport=远程端口
解释一下这其中的参数意义:
1.listenaddress – 等待连接的本地ip地址
2.listenport – 本地监听的TCP端口(待转发)
3.connectaddress – 被转发端口的本地或者远程主机的ip地址
4.connectport – 被转发的端口
使用netsh interface portproxy add v4tov6/v6tov4/v6tov6选项,可以在IPv4和IPv6地址之间创建端口转发规则。
这里举个例子,服务器内网IP是172.16.0.4,需要将3340端口转发到Linux服务器104.104.104.104的9999端口,那么命令如下:
netsh interface portproxy add v4tov4 listenaddress=172.16.0.4 listenport=3340 connectaddress=104.104.104.104 connectport=9999
如果没有任何回显,说明执行成功。
注意转发前需要确认端口是否占用:
# 使用cmd
netstat -na|find "3340"
# 使用powershell
Test-NetConnection -ComputerName localhost -Port 3340
如果开启了防火墙,需要使用以下命令放行转发的端口:
# 使用cmd
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 show v4tov4
删除刚才创建的那个转发的命令:
netsh interface portproxy delete v4tov4 listenaddress=172.16.0.4 listenport=8080
若要进行tcp端口重定向:
# 如将本机的5555端口,重定向到220.181.38.148的80端口
netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress=220.181.38.148 protocol=tcp
前面的命令默认是转发tcp端口,如果要转发udp端口,如将本机的53端口转发至192.168.100.100的53端口:
netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53
注意:连接时请确保防火墙(Windows防火墙或者其他的第三方防护软件)允许外部连接到一个全新的端口,如果不允许,那么只能自行添加一个新的Windows防火墙规则。
netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53
该命令的常用参数如下:
#查看是否启动成功
netstat -ano | findstr 监听的端口
#显示系统中的转发规则列表
netsh interface portproxy show all
#查看portproxy设置
netsh interface portproxy dump
#删除转发规则
netsh interface portproxy delete v4tov4 listenport=本地端口 listenaddress=本地地址
#清除所有端口转发规则
netsh interface portproxy reset