Nat技术详解

提出问题 什么是Nat? Nat全称Network Address Translation,即网络地址转换,就是替换IP报文头部的地址信息。Nat通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口网络的IP地址,从而提供公网连通内部网络的能力。 为什么需要Nat技术? 解决IPV4地址即将耗尽的问题,对于有网络访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。在接收方收到访问请求后,在接收方看来,此次请求是来自组织的出口设备的,因此接收方会将响应消息发送回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内网。依据这种模型,数量庞大的内网主机就不需要公有IP地址来。 Nat网络的种类 一对一 一个内部主机占用一个公网IP,一般是用来隐藏内部主机的真实IP 一对多 典型的应用。即在一个组织网络的出口位置部署Nat网关,所有对公网的访问表现为一台主机。这里面就有产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分response应该转发到哪个内部主机。因此,这就需要Nat设备根据传输层信息或其他的上层协议去区分不同的会话,这里引出了后面的很多坑,这种一对多的方式也被称为端口转换PAT,NAPT或IP伪装。 在一对多模型中,按照NAT端口映射方式分类又可做进一步划分,为方便描述,将IP和端口标记为(nAddr) 全锥型(谁都可以找我) 一旦内部主机的IP和端口被Nat网关映射到某个地址A上,之后该主机的所有出口报文的源IP都会是A这个地址。任何一个外部主机 发送到A地址上时,都会被转发到该内部主机。 限制锥型(我先找你,你才能找我) 一旦内部主机的IP和端口被Nat网关映射到某个地址A上,之后该主机的所有出口报文的源IP都会是A这个地址。只有该内部主机向特定的外部主机H发送过数据,那么后续H主机从任意端口发送到地址A的报文都会被转发到该内部主机 端口限制锥型(我从某个port找过你,以后你找我也要从这个port) 基本跟限制锥型是一样的,内部主机发数据到特定外部主机的特定端口上,之后只有这个外部主机从这个特定端口发过来的数据才会被转化到该内部主机 对称型 (我从某个port找你,但你要) 同一内网主机同一端口号,当与同一外部主机通信时,NAT分配的端口号不变;每一次与不同的外网主机通讯,就重新分配另一个端口号 Nat的弊端 Nat技术最大的弊端在于 破坏了IP端到端通信的能力,首先,Nat使IP会话的保持时效变短,因为一个会话建立后会在Nat设备上建立一个关联表,在会话静默的这段时间,Nat网关会进行老化操作,会回收资源。一般基于UDP的通信协议很难确定何时通信结束,所以Nat网关主要依赖超时机制回收外部端口。如果应用需要维持连接的时间大于Nat网关的设置,通信就会意外中断。因为网关回收相关转换表资源以后,新的数据到达时就找不到相关的转换信息,必须建立新的连接。 当这个新数据是由公网侧向内网侧发送时,就会发生无法出发新连接建立,也不能通知到内网侧的主机去重建连接的情况,这时候通信就会中断。 即使新数据是从内网侧发向公网侧,因为重建的会话表往往使用不同于之前的公网IP和端口地址,公网侧的主机也无法对应到之前的通信上。 连接保活机制 Nat穿透技术 前面提出来了Nat的弊端,为例解决IP端到端应用在Nat环境下遇到的问题,一般由如下的解决方式,只是每一种方法都不完美,需要内部主机,应用程序或Nat网关上增加额外的处理。 应用层网关 因为Nat不感知应用协议,所以有必要额外为每个应用协议定制协议分析方法。 探针技术 STUN和TURN 所谓的探针技术,是通过在所有参与通信的实体上安装探测插件,以检测网络中是否存在Nat网关,并对不同模型实施不同穿透方法的一种技术。 中间件技术 通过开发通用方法解决Nat穿透,客户端会参与网关公网映射信息的维护,此时Nat网关只要理解客户端的请求并按照要求去分配转换表,不需要自己去分析客户端的应用层数据,其中典型的技术由 UPNP。 UPNP,即通用即插即用,是一个通用的网络终端与网关的通信协议,具备发布和管理控制的能力,其中,网关映射请求可以为客户动态添加映射表项。此时Nat不再需要理解应用层携带的信息,只转换IP地址和端口信息,而客户端通过控制 消息或信令 发到公网侧的信息中,直接携带公网映射的IP地址和端口,接收端可以按照此信息建立数据连接。Nat网关在接受数据或着连接请求时,按照UPNP建立的表项只转换地址和端口信息,不关心内容,再将数据转发到内网。这种方案需要网关,内部主机和应用程序都支持UPNP技术,且组网允许内部主机和Nat网关之间可以直接交换UPNP信令才能实施。 中继代理技术 在Nat网关所在位置旁边放置一个应用服务器,这个服务器在内部网络和外部公网分别由自己的网络连接,客户端特定的应用产生网络请求时,将定向发送到应用代理服务器,应用代理服务器根据代理协议解析客户端的请求,再从服务器的公网侧发起一个新的请求,把客户端请求的内容中继到外部网络上,返回的相应反方向中继。 特定协议的自穿越技术 基于UDP协议的P2P打洞技术详解 什么是UDP打洞? Nat技术和P2P技术在现有网络上都有着广泛应用,P2P主机位于Nat网关后面的情况屡见不鲜,Nat技术虽然在一定程度上解决了IPv4地址短缺的问题,在构建防火墙,保证网络安全方面都发挥了一定的作用,但却破坏了端到端的网络通信,Nat阻碍主机进行P2P通信的主要原因是Nat不允许外部主机主动访问内网主机,但是P2P技术却要求通信双方都能主动发起访问,所以要在Nat网络环境中进行有效的P2P通信,就必须采用新的解决方案。 原理 UDP打洞技术是通过集中服务器的协助,在各自的Nat网关上建立相应的表项,使P2P连接的双方发送的报文能够直接穿透对方的Nat网关 ,从而实现P2P客户端的互联。 什么是集中服务器 集中服务器本质是一台被设置在公网的服务器,建立P2P的双方都可以直接访问到这台服务器,位于Nat网关后面的客户端A和客户端B都可以与一台已知的集中服务器建立连接,并通过这台服务器了解对方的信息并中转各自的信息。 同时集中服务器的另一个重要的作用是判断某个客户端是否在Nat网关之后。具体的方法是:一个客户端在集中服务器登陆的时候,服务器记录下该客户端的两对二元组信息 {IP地址: UDP端口},其中一对可以看作是内网IP和端口,另一对可以看作是外网IP和端口。如果该客户端不是位于Nat设备后面,那么两对IP端口应该是一样的。 打洞session的建立 假设A要向B发起连接请求,具体的打洞过程如下: A最初不知道如何向B发起连接,于是A向集中服务器发送消息,请求集中服务器帮助建立与B的UDP连接...

October 4, 2018 · 1 min · Theme PaperMod