前文:
关于“内网穿透”的一些知识(续2)—— 端口预测
——————————————-
本文是对前面几篇文章的补充。这里要说下我们这几篇文章讨论的都只是NAT功能的设备,在实际的家庭用户中这个NAT设备就是家庭路由器或者说是带有网关功能的家庭网络共享器,但是在实际的企业环境下作为NAT设备的网关设备往往在具备NAT功能的同时还具有防火墙和均衡负载等功能,这时候前面讨论的很多情况就不适用了。比如说带防火墙的NAT设备,往往会检测数据包的内容并做主动防御的,对于短时间的扫描端口的数据包可能是会直接拒绝访问的(比如:https://www.cnblogs.com/colin-vio/p/17852504.html),这样就不能使用所谓的“端口预测”技术,而有的NAT设备带有均衡负载功能,所以这种NAT设备的类型是不固定的,有时候是Full Cone Net类型,而有的时候却是Symmetric NAT类型,但是不管是什么样类型的NAT设备和NAT网络,在打洞技术无效的情况下都是可以使用中继服务器做中转通信从而实现内网穿透的。
关于NAT类型判断:
给出https://www.cnblogs.com/colin-vio/p/13323228.html中的内容:
——————————–
引自:https://www.cnblogs.com/colin-vio/p/13323228.html
路由器nat类型判断可以用排除法按下面几个步骤来实现。 首先我们应该明确IETF提供的标准一共有4种常见NAT。分别是:
全锥型(full cone nat)
地址限制锥型(ip restrict cone nat)
端口限制锥型(port restrict cone nat)
对称型(symmetric nat) 对于市场上面一些厂商自已实现其它的nat我们不做过多的探讨,以实际测试经验来看,这类nat的路由器非不的少,但也不是不存在,我们过往测试中也发现过。比如中国移动在给宽带用户安装宽带时使用了一种集成了光猫和路由功能的盒子。他的安全性像全锥型,即外来连接消息包都允许进来,但对外端口映射时又表现为对称型。
NAT类型判断算法整体流程大至是,先判断防火墙是否阻止所有udp包进来,再判断是否是公网ip,再判断是否为全锥型,然后判断是否是对称型,最后判断是否是端口或地址限制型。
下面描述详细的判断过程,过程中需要与3台具有不同IP的服务器交互辅助。我们把这3台服务器称之为“协调服务器”,分别称为s1,s2,s3。
判断路由器防火墙是否防止所有UDP包进入 客户端向s1:30017发送一UDP包,s1收到后直接返回一udp数据包,如果客记端收不到s1的回包,那么判定为阻止所有udp,判断结束,否则进入一下判断。为了降低udp在网络中丢失,此过程可以重复多次。
判断主机是否直连公网 客户端收到s1回复,s1在处理时取出客户端的ip放入回复包里,客户商解析出数据区的ip与本机本地取出的所有ip对比,看是否存在匹配。存在匹配即认定当前主机是直接连接在公网上的,中间没有经过任何网关路由器,判断结束,否则进入一下判断。
判断当前网络的网关路由器是否为全锥型 客户端向s1:30017端口发送消息请求s1通知s3从不同于30017端口回一个udp消息包,如果客户端能收到s3的回复。那判定为全锥型nat,否则进入下一步判断。
判断是否为对称型nat 客户端分别向s1:30018,s2:30018发送udp消息,s1,s2收到包后,取出客户端的ip:port放入数据包发送回给客户端。客户端这样就取回自己的两份公网ip:port数据,客户端对比这两个地址,如果这两ip:port不一样那么就是客户端网关就是对称型。否则就是锥型,要么是地址限制型,要么是端口限制型。就需要继续向下判断了。
判断是地址限制型还是端口限制型nat 客户端向s1:30018发消息,请求s1从另一个端口回复一个消息比如端口6000。如果客户端收到了s1所回复的消息,那么判定为地址限制型而非端口限制型。否则收不到回复就判定为端口限制型。因为s1从非30018端口回复消息补路由器阻止了。
——————————–
在对NAT类型进行判断时可以使用TCP数据包也可以使用UDP数据包,但是由于TCP数据包的协议性质有一定时间的等待(重发机制和三次握手)所以速度上要慢于UDP,所以在进行NAT类型判断的时候会优先使用UDP数据包进行判断,但是UDP包协议存在不可靠性因此需要多发几次包才有可信度。上面给出的NAT类型判断的第一步就是判断UDP数据包可以不可以作为发送方被NAT设备方向,如果有的NAT设备防火墙机制较高不允许UDP作为主动方发送(各别NAT设备防火墙可能禁止使用UDP通信协议),那么在进行NAT类型判断时就需要换用TCP协议,当然这会导致判断过程的时间增加。
参考:
https://blog.csdn.net/u011060906/article/details/129533798
https://www.cnblogs.com/colin-vio/p/13323228.html
https://www.cnblogs.com/ssyfj/p/14791064.html
https://www.cnblogs.com/ssyfj/p/14797389.html