网络地址转换















網絡地址轉換又称網絡掩蔽IP掩蔽英语:Network Address Translation,縮寫:NAT),在計算機網絡中是一種在IP封包通過路由器或防火牆時重寫來源IP地址或目的IP地址的技術。這種技術被普遍使用在有多台主機但只通過一個公有IP地址訪問因特網的私有網絡中。它是一個方便且得到了廣泛應用的技術。當然,NAT也讓主機之間的通信變得複雜,導致了通信效率的降低。




目录






  • 1 概述


    • 1.1 缺点




  • 2 基本NAT和端口号转换


    • 2.1 基本网络地址转换(Basic NAT)


    • 2.2 网络地址端口转换(NAPT)


    • 2.3 受到NAT影响的应用程序




  • 3 不同類型的NAT


  • 4 NAT其他用途实例


  • 5 参见


  • 6 外部链接





概述




无NAT网络,假设每个接入子网都需要一组/24的IP,而且还能对外连接,对外的路由至少要保留或申请1000个对外IP




带NAT网络,通过NAT转换,接入子网可以使用私用IP,对外连接时由路由绑定私用IP与对外IP的关系,修改传输的IP包上的地址,从而只需要255个对外IP就能满足内部接入子网的对外连接需求


1990年代中期,NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。网络地址转换在很多国家广泛使用。所以NAT就成了家庭和小型办公室网络连接上的路由器的一个标准特征,因为对他们来说,申请独立的IP地址的代价要高于所带来的效益。


在一个典型的配置中,一个本地网络使用一个专有网络的指定子网(比如192.168.x.x或10.x.x.x)和连在这个网络上的一个路由器。这个路由器占有这个网络地址空间的一个专有地址(比如192.168.0.1),同时它还通过一个或多个因特网服务提供商提供的公有的IP地址(叫做“过载”NAT)连接到因特网上。当信息由本地网络向因特网传递时,源地址从专有地址转换为公用地址。由路由器跟踪每个连接上的基本数据,主要是目的地址和端口。当有回复返回路由器时,它通过输出阶段记录的连接跟踪数据来决定该转发给内部网的哪个主机;如果有多个公用地址可用,当数据包返回时,TCP或UDP客户机的端口号可以用来分解数据包。对于因特网上的通信,路由器本身充当源和目的。


流行在网络上的一种看法认为,IPv6的廣泛採用將使得NAT不再需要,因為NAT只是一個處理IPv4的地址空間不足的方法。



缺点


在一个具有NAT功能的路由器下的主机并没有建立真正的IP位址,并且不能参与一些因特网协议。一些需要初始化从外部网络建立的TCP连接和无状态协议(比如UDP)无法实现。除非NAT路由器管理者预先设置了规则,否则送来的数据包将不能到达正确的目的地址。一些协议有时可以在应用层网关(见下)的辅助下,在参与NAT的主机之间容纳一个NAT的实例,比如FTP。NAT也会使安全协议变的复杂,比如IPsec


端对端连接是被IAB委員會(Internet Architecture Board)支持的核心因特网协议之一,因此有些人据此认为NAT是对公用因特网的一个破坏。一些因特网服务提供商(ISP)只向他们的客户提供本地IP地址,所以他们必须通过NAT来访问ISP网络以外的服务,并且这些公司能不能算的上真正的提供了因特网服务的话题也被谈起。


NAT除了帶來方便和代價之外,對全雙工連接支持的缺少在一些情況下可以看作是一個有好處的特徵而不是一個限制。在一定程度上,NAT依賴於本地網絡上的一台機器來初始化和路由器另一邊的主機的任何連接,它可以阻止外部網絡上的主機的惡意活動。這樣就可以阻止網絡蠕蟲病毒來提高本地系統的可靠性,阻擋惡意瀏覽來提高本地系統的私密性。很多具有NAT功能的防火牆都是使用這種功能來提供核心保護的。另外,它也為UDP的跨局域網的傳輸提供了方便。



基本NAT和端口号转换



基本网络地址转换(Basic NAT)


这一种也可称作NAT或“静态NAT”,在RFC 2663中提供了信息。它在技术上比较简单,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。宽带(broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为DMZ主机。由于改变了IP源地址,在重新封装数据包时候必须重新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要重新计算。


Basic NAT要维护一个无端口号NAT表,结构如下。



















内网IP 外网IP
192.168.1.55 219.152.168.222
192.168.1.59 219.152.168.223
192.168.1.155 219.152.168.224


网络地址端口转换(NAPT)


这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。


支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。


NAPT维护一个带有IP以及端口号的NAT表,结构如下。



















内网IP 外网IP
192.168.1.55:5566 219.152.168.222:9200
192.168.1.59:80 219.152.168.222:9201
192.168.1.59:4465 219.152.168.222:9202


受到NAT影响的应用程序


一些高层协议(比如FTPQuakeSIP)在IP包的有效数据内发送网络层(第三层)信息。比如,主动模式的FTP使用单独的端口分别来控制命令传输和数据传输。当请求一个文件传输时,主机在发送请求的同时也通知对方自己想要在哪个端口接受数据。但是,如果主机是在一个简单的NAT防火墙后发送的请求,那么由于端口的映射,将会使对方接收到的信息无效。


一个應用層閘道(Application Layer Gateway,ALG)可以修正这个问题。运行在NAT防火墙设备上的ALG软件模块可以更新任何由地址转换而导致无效的信息。显然,ALG需要明白它所要修正的上层协议,所以每个有这种问题的协议都需要有一个单独的ALG


但是,除FTP外的大多数传统的客户机-服务器协议不需要发送网络层(第三层)信息,也就不需要ALG


这个问题的另一个可能的解决方法是使用像STUN这样的技术,但是这只针对建立在UDP上的高层协议,并且需要它内建这种技术。这种技术对於对称NAT也是无效的。还有一种可能的方案是UPnP,但它需要和NAT设备配合起来使用



不同類型的NAT




















完全圆锥型NAT(Full cone NAT),即一對一(one-to-one)NAT
  • 一旦一个内部地址(iAddr:port)映射到外部地址(eAddr:port),所有发自iAddr:port的包都经由eAddr:port向外发送。任意外部主机都能通过给eAddr:port发包到达iAddr:port(注:port不需要一样)


Full Cone NAT.svg


受限圆锥型NAT(Address-Restricted cone NAT)

  • 内部客户端必须首先发送数据包到对方(IP=X.X.X.X),然后才能接收来自X.X.X.X的数据包。在限制方面,唯一的要求是数据包是来自X.X.X.X。

  • 内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。外部主机(hostAddr:any)能通过给eAddr:port2发包到达iAddr:port1。(注:any指外部主机源端口不受限制,但是目的端口必须是port2。只有外部主机数据包的目的IP 为 内部客户端的ip,且目的端口为port2时数据包才被放行。)



Restricted Cone NAT.svg


端口受限圆锥型NAT(Port-Restricted cone NAT)

类似受限制錐形NAT(Restricted cone NAT),但是还有端口限制。



  • 一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。


  • 在受限圆锥型NAT基础上增加了外部主机源端口必须是固定的。



Port Restricted Cone NAT.svg


對稱NAT(Symmetric NAT)

  • 每一個來自相同內部IP與端口,到一個特定目的地地址和端口的請求,都映射到一個獨特的外部IP地址和端口。
    同一內部IP與端口發到不同的目的地和端口的信息包,都使用不同的映射


  • 只有曾经收到过内部主机数据的外部主机,才能够把封包发回



Symmetric NAT.svg



NAT其他用途实例




  • 负载均衡:目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。

  • 失效终结:目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器宕机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上。


  • 透明代理:NAT可以把连接到因特网的HTTP连接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的浏览器支持代理连接。



参见



  • NAT穿越

  • 端口地址轉換

  • 防火牆

  • 路由

  • IPv4

  • IPv6

  • IPv4地址枯竭

  • 专用网络

  • 網際網路連接共享

  • 代理伺服器

  • 端口转发

  • 电信级NAT


  • STUNNATUDP簡單穿越


  • TURN:NATUDP簡單中繼


  • ICE:結合STUN與TURN的NATUDP簡單穿越與中繼



外部链接



  • Network Address Translation Traversal of MSDN


  • Windows 2003中的NAT:建立和配置–这篇文章介绍了怎样在Windows 2003中建立和配置NAT

  • Anatomy – Volume 7, Issue 3, September 2004


  • HowStuffWorksNAT如何工作


  • RFC 4008Standards TrackNAT中的被管理对象的定义


  • RFC 3022–传统NAT


  • RFC 1631–已作废–IP NAT

  • 不通过重新配置路由器,通过NAT网关来建立隧道的方法




Popular posts from this blog

Lambaréné

Chris Pine

Kashihara Line