Windows端口转发(Port Forwarding in Windows)
在Windows系统中,从XP开始就内嵌了一个设置网络端口转发的功能。依靠这个功能,任何到本地端口的TCP连接(ipv4或ipv6)都能够被转发到任意一个本地端口,甚至是远程主机的某个端口。并且,Windows系统并不需要去开启监听这个转发端口的服务。
在Windows服务器中,远程访问控制协议(RRAS)通常被用作端口转发,但是有一种更简单的配置方法,并且这种配置方法适用于windows的任意版本。
Windows系统下的端口转发使用portproxy模式下的netsh命令,该命令的使用前提是要在管理员身份打开cmd进行执行。
netsh interface portproxy add v4tov4 listenaddress =localaddress listenport = localport connectaddress =destaddress connectport =destport protocol= tcp
listenaddress – 待连接的ip地址。
listenport –待连接的tcp本地端口 。
connectaddress – 待连接被转发的本地或远程主机的ip地址(支持域名)
connectport –从listenport转发到的tcp端口
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=1011110 connectport=3389 connectaddress=1011110
1) netstat -ano | findstr :3340来验证3340端口是否正在监听中,如果该命令没有返回任何信息,或者说通过netsh接口并没有实现端口转发的功能,那么需要查看下系统是否开启了iphlpsvc(ip Helper)服务。
2) tasklist | findstr 3340查看监听该端口的进程
3) 检查防火墙是否关闭,如果关闭则跳过。如果打开需要手工配置相应的防火墙。
连接时请确保防火墙(Windows防火墙或者其他的第三方防护软件)允许外部连接到一个全新的端口,如果不允许,那么只能自行添加一个新的Windows防火墙规则,命令如下:netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=1011110 localport=3340 action=allow
当通过Windows防火墙接口为3340端口建立一个新的规则时,这个端口需要保证没有被任何程序占用,也就是说此端口仅供网络驱动使用。你可以创立任意的Windows端口转发规则,所有的netsh接口下的端口代理规则都是永久的,并且储存在系统中(不受开机重启的影响)。
查看系统中的所有转发规则是否生效:
netsh interface portproxy show all
查看端口转发的设置:netsh interface portproxy dump
删掉一个特定的端口转发规则:
netsh interface portproxy delete v4tov4
清空当前所有的配置规则:
netsh interface portproxy reset
从远程主机来尝试连接这个新转发的端口3340,3340端口等同于原来的3389端口,连接的地址为10101110:3340。
注意:这些转发规则仅仅适用于TCP端口,对于UDP的端口转发,使用上面的方法是无效的。在配置规则时,不能将127001作为连接地址。
1) 通过一台windows机器端口转发到一台windows远程主机
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=1011110 connectport=3389 connectaddress=1011110
netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0000 connectport=3389 connectaddress=192168100101
2) 通过一台ipv4的Windows机器转发到一台ipv6的服务器。
netsh interface portproxy add v4tov6 listenport=3340 listenaddress=1011110 connectport=3389 connectaddress=ffff::66
1) 在Windows Server 2012 R2中,端口转发规则有可能会在系统重启后被重置,在这种情况下,需要在网络协议中检查是否存在配置不当,导致网络的间断性断开,或者当系统重启时是否出现了ip地址的变换(推荐使用静态ip)。在一个工作组里,通常是在windows任务计划程序里添加了一个实现端口转发的脚本。
2) 在Windows 2003/XP中,必须在注册表(HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters)中找到并设置IPEnableRouter参数为1才能实现端口转发。
3) 防火墙规则检查
4) 端口转发依赖的ip helper服务是否启动
5) 端口转发是否生效
6) Windows7和WindowsServer2008R2安全事件的说明 操作系统日志标识
Windows日志查看
6273 网络策略服务器拒绝用户访问。
6274 网络策略服务器放弃用户的请求。
4868 证书管理器拒绝了挂起的证书请求。
4870 证书服务吊销了证书。
4944 当启动 Windows 防火墙时,以下策略处于活动状态。
4945 当启动 Windows 防火墙已列出规则。
4946 Windows 防火墙例外列表已更改。添加的规则。
4947 Windows 防火墙例外列表已更改。修改规则的。
4948 Windows 防火墙例外列表已更改。规则已被删除。
4949 Windows 防火墙设置都恢复为默认值。
4950 更改 Windows 防火墙设置。
4951 Windows 防火墙忽略规则,因为无法识别的主要版本号。
4952 Windows 防火墙忽略规则的部分,因为无法识别它的次要版本号。将强制执行该规则的其他部分。
4953 由于无法分析,Windows 防火墙将忽略规则。
4954 Windows 防火墙组策略设置已更改,并且未应用新设置。
4956 Windows 防火墙更改活动配置文件。
5024 Windows 防火墙服务已成功启动。
5025 Windows 防火墙服务已停止。
5027 Windows 防火墙服务无法从本地存储区中检索的安全策略。Windows 防火墙将继续执行当前的策略。
5028 Windows 防火墙无法分析新的安全策略。Windows 防火墙将继续执行当前的策略。
http://woshubcom/port-forwarding-in-windows/
域名和端口作为服务器数据使用者访问的标识,是非常重要的,端口作为进入服务器的一道门,需要敞开才能让访问者进入,为此,做好端口(门户)的开启就是必不可少的一环,服务器提供者的网络形态一般有两种。
一:内网(拨号后得到的IP是内网IP),外网无法正常访问。
二:外网(拨号后得到的IP是公网IP),外网可以进行访问。
工具/原料
动态与解析软件(花生壳、NAT123等等)
PC
端口转发软件(PortTunnel、主要用于虚拟机开设服务器的情况)
方法/步骤
首先介绍内网的开启方式,这里我以花生壳动态域名解析软件为例来说明:
所谓内网,就是图示中的这种情况:
注册花生壳之后,花一块钱就可以得到一个免费的域名,如图:
双击域名,点“添加映射”,这里需要说明一下,填写的IP地址必须是本地IP,不知道的可以按win+R输入cmd回车,再输入ipconfig回车,就可以看到IPV4地址了,这就是本地IP,端口是服务器开启的端口。
点击确定,就转发出去了,注意看中的地址和端口,一定要弄清楚外网访问要通过哪个端口,如图:
下面就需要设置用户访问服务器的配置文件了,这里以游戏的配置文件作说明:如图
这样设置完成之后,外网就可以正常的访问到你的服务器了。
下面介绍公网IP的开启方法,公网开启只需要一步就完成,打开路由器设置,选择虚拟服务设置,添加端口,如图所示:
注意服务器的端口访问模式,根据自己的需要进行选择,通常都是TCP协议。
IP一定要填写本地的,端口工具自己的需要进行选择。
使用虚拟机开启服务器的时候,需要把虚拟的端口转发到本地才能进行以上的设置,端口转发软件有很多,我用的是PortTunnel,如图:
捆绑地址一定要选择本地IP,意思是把虚拟的的服务器端口捆绑到本地,输出地址为虚拟机的IP,这里不要弄错了。
填写完之后,点“确定”,然后右键选中添加好的条目,选择“enable”也就是启用的意思。
之后就可以进行动态域名解析了。
大前提,windows可以使用freesshd做ssh服务器当一级代理,但是它的端口转发功能有bug,所以还是用linux的ssh吧。
ps:Earthworm虽然简单好用,但是传输的流量是不加密的,已经碰到过好几次反弹回来仍然被安全设备拦截的情况,所以还是老老实实用ssh代理了
安装sshpass,需要gcc编译安装。
ssh会话会在空闲一段时间后自动僵死,但是要注意 进程 和 连接 仍在。虽然客户端也可以设置心跳检测,但在服务端设置更方便。
修改/etc/ssh/sshd_config
p参数表示ssh的端口
ssh命令
ssh -fCN -L 127001:1234:19216899125:3389 root@19216899199 -p 53
plinkexe命令
plinkexe -v -C -N -L 127001:8888:127001:3389 test@1172811273 -P 9398 -pw password
直接访问 本机 开启监听的1234端口,其实等于通过 远程主机 19216899199来访问 远程主机 19216899125上的3389端口
-n 将 stdio 重定向到 /dev/null,与 -f 配合使用
-T 不分配 TTY 只做代理用
-q 安静模式,不输出 错误/警告 信息
-f 后台连接
-N 连接后不取得shell
-C 启动压缩,加快速度
(如不理解参数可以去掉他们看效果)
-L 1234为建立隧道后本地监听的端口,19216899125是隧道出口转发到的目标地址(即xp靶机),3389是目标端口,root@19216899199是建立隧道的另一方,即rolling版登录的账号和ip,-p 53是rolling版的监听端口。
ssh -fCN -R 0000:9999:19216811:80 root@testcom
0000表示vps上监听所有地址。
直接访问 远程主机 上开启监听的9999端口就相当于通过 本机 来访问19216811上的80端口。
其中有个 大坑 。
bind_address 参数默认值为空,等价于
并不意味着任何机器,都可以通过 VPS 来访问 内网 机器。建立连接后,只能在 VPS ( sshd server ) 本地 访问 「内网」 机器。要在办公网的笔记本上通过 VPS 映射的端口来访问 内网 机器,需要修改vps上的/etc/ssh/sshd_config文件,启用 VPS sshd 的 GatewayPorts 参数,set to yes or clientspecified ,允许任意请求地址,通过转发的端口访问内网机器。
-D socks代理,不多解释了。
-g 监听所有地址,允许其他主机连接。
0条评论