`
jiagou
  • 浏览: 2532764 次
文章分类
社区版块
存档分类
最新评论

NAT

 
阅读更多

第一部分: NAT介绍

各种不同类型的NAT(according to RFC)

Full Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包

Restricted Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包

Port Restricted Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包

Symmetric NAT:

内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。

第二部:NAT类型检测

前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就不能P2P了(检测停止)。
当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的(LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。

第二步:检测客户端NAT是否是Full Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

第三步:检测客户端NAT是否是Symmetric NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
比较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。

注:以上检测过程中只说明了可否进行UDP-P2P的打洞通信,具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P达洞通信,可以进行端口预测打洞,不过不能保证成功

分享到:
评论

相关推荐

    多出口NAT策略路由配置

    多出口NAT策略路由案例·已完成·GNS3 通过配置实现: 宿舍区访问互联网使用电信出口.教学区使用联通出口 任何一条链路故障,能够自动切换 宿舍区和教学区均使用路由器出口地址做PAT 配置思路: 基础拓扑搭建. 划分...

    何为NAT 何为NAT 何为NAT

    何为NAT 何为NAT 何为NAT 何为NAT 何为NAT

    防火墙NAT Server & 源NAT实验.zip

    防火墙NAT Server & 源NAT实验

    CheckPoint防火墙Nat配置讲解

    CheckPoint防火墙Nat配置讲解

    UDP穿越Symmetric NAT(对称型NAT)的端口猜测方法

    UDP穿越Symmetric NAT(对称型NAT)的端口猜测方法的几篇文章

    VMWare ESX 服务器配置NAT上网

    VMWARE ESXi服务器配置NAT上网教程。单IP设置虚拟机共享上网和NAT设置。

    H3C_NAT 配置举例

    4.5.1 典型nat 配置举例 1. 组网需求 如下图所示,一个公司通过secpath 防火墙的地址转换功能连接到广域网。要求该公司能够通过防火墙ethernet3/0/0 访问internet,公司内部对外提供www、ftp和smtp 服务,而且提供...

    NAT9914 参考手册(NAT9914 Reference Manual)

    GPIB专用接口芯片 NAT9914 参考手册

    C#P2P与NAT技术及示例源码

    NAT技术基本原理 NAT 技术能帮助解决令人头痛的 IP 地址紧缺的问题,而且能使得内外网络隔离,提供一定的网络安全保障。它解决问题的办法是:在内部网络中使用内部地址,通过 NAT 把内部地址翻译成合法的 IP 地址在...

    virtualbox虚拟机NAT模式下不能连接外网的解决方法

    给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为“网络地址转换(NAT)”和“仅主机(Host-Only)适配器”,其中,enp0s3网卡(NAT)用于外网访问,而enp0s8网卡(Host-Only)用于主机...

    nat穿透测试工具

    nat穿透辅助测试工具,方便侦察自身nat类型,便捷好用。

    NAT类型测试的小工具

    NAT类型测试工具,检查判断自己或对方的nat类型。公开的免费STUN服务器 当SIP终端在使用私有IP地址时,可能需要配置stun服务器 公开的免费STUN服务器有: stunserver.org 测试是OK的

    NAT配置使用详解

    NAT的功能就是指将使用私有地址的网络与公用网络INTERNET相连,使用私有地址的内部网络通过NAT路由器发送数据时,私有地址将被转化为合法注册的IP地址从而可以与INTERNET上的其他主机进行通讯。 NAT路由器被置于内部...

    IPsec nat穿越技术

    IPsec nat穿越技术,学习研究提升自己的能力

    泰克网络实验室老林--nat总结

    静态的NAT和动态的NAT的区别: 一、静态的翻译,是指在数据流来临之前,NAT的条目就已经存在了。 1、如果是对静态的inside source进行翻译,那么,就是在NAT表的Inside部分创建一个映射,映射的内容是将inside->...

    一个iptables的stateless NAT模块实现

    如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题...

    P2P之UDP穿透NAT的实现+(附带源代码)

    P2P之UDP穿透NAT的实现+(附带源代码).rarP2P之UDP穿透NAT的实现+(附带源代码).rarP2P之UDP穿透NAT的实现+(附带源代码).rarP2P之UDP穿透NAT的实现+(附带源代码).rarP2P之UDP穿透NAT的实现+(附带源代码)....

    基于UPnP的穿越NAT的技术

    基于UPnP可以支持数据包中包含后继会话的新地址端口的通信穿越NAT,这样就可以支持SIP、H.323等协议穿越NAT。 基于UPnP的方法不能穿越多级NAT,因为UPnP Internet Gateway Device V1.0(IGD)目前不支持多级NAT 基于...

    NAT64-rfc6146

    NAT64-rfc6146

    NAT类型测试工具.zip

    1、公网;...2、完全圆锥型(Full Cone NAT); 3、地址限制圆锥型(Address Restricted Cone NAT); 4、端口限制圆锥型(Port Restricted Cone NAT); 5、对称型(Symmetric NAT); 查询当前网络NAT类型

Global site tag (gtag.js) - Google Analytics