在内部网络和公网之间,需要有程序完成网络地址转换,这种程序(NAT网关)常见部署在路由器、防火墙、负载均衡等设备上。
注:事实上,NAT类型的划分是很多混淆的起源。现实中的很多NAT设备是将这些转换方式混合在一起工作的,而不单单使用一种,所以NAT类型的定义只适合描述一种工作方式,而不是一个设备。比如,很多NAT设备对内部发出的连接使用对称型NAT方式,而同时支持静态的端口映射,后者可以被看作是全锥型NAT方式。而有些情况下,NAT设备的一个公网地址和端口可以同时映射到内部几个服务器上以实现负载分担,比如一个对外提供WEB服务器的站点可能是有成百上千个服务器在提供HTTP服务,但是对外却表现为一个或少数几个IP地址。
NAT网络结构,仅示意部署在路由器上的NAT
NAT工作原理:网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;网络访问只能先由私网侧发起,公网无法主动访问私网主机;NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;NAT网关的存在对通信双方是保持透明的;NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。从上面的特征来看,NAT将内部网络的信息隐藏和转换,如果要实现隐藏在NAT下的设备之间通信(对等网络传输),则必须穿透NAT;此外,NAT网关实际上并不能实现对通信双方的全透明,因为用户可以在传输的数据包中携带ip和port信息(而不是在IP header中)。
5.NAT引起的问题:对等网络传输需穿透NAT:IP协议的定义中,在理论上,具有IP地址的每个站点在协议层面有相当的获取服务和提供服务的能力,不同的IP地址之间没有差异。但NAT工作原理破坏了这个特征,如需实现真正意义上的对等网络传输,则需要穿透NAT。这是本文重点。应用层需保持UDP会话连接:由于NAT资源有限,会根据一定规则回收转换出去的资源(即ip/port组合),UDP通信又是无连接的,所以基于UDP的应用层协议在无数据传输、但需要保持连接时需要发包以保持会话不过期,就是通常的heartbeat之类的。基于IP的访问限制策略复杂化二、技术点和原理1.术语:1.内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组;2.外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口;3.目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组。4.打洞hole punch:穿透NAT2.NAT类型1).基础型NAT仅将内网主机的私有IP地址一对一地转换成公网的IP地址,并不将TCP/UDP端口信息进行转换,分为静态NAT和动态NAT。
2).NAPTNAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。
全锥型(Full Cone NAT):所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全。这是水淼·dedeCMS站群文章更新器的试用版本更新的文章,故有此标记(2023-09-16 08:33:32)