网络地址转换
发布时间:2026-10-27 | 浏览:1
网络地址转换 (英語: N etwork A ddress T ranslation ,縮寫: NAT ),又称 IP动态伪装 (英語: IP Masquerade ) [ 1 ] : 176 ,是一種在IP 封包 通過 路由器 或 防火牆 時重寫來源或目的 IP地址 或 端口 的技術。這種技術普遍应用于有多台主機,但只通過一個公有IP地址訪問 網際網路 的 私有網絡 中。
NAT技术部署方便,且得到了广泛应用。然而,NAT也讓主機之間的通信變得複雜,導致了通信效率的降低。
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 网络以外的服务,并且这些公司能不能算得上真正的提供了因特网服务的话题也被谈起。
基本网络地址转换(Basic NAT)
这一种也可称作NAT或“静态NAT”,在 RFC 2663 中提供了信息。它在技术上比较简单,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。 宽带 (broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为 DMZ主机 。由于改变了IP源地址,在重新封装数据包时候必须重新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要重新计算。
Basic NAT要维护一个无端口号NAT表,结构如下。
这种方式支持 传输层协议 (例如TCP、UDP等)的端口映射,并允许多台主机共享一个公网IP地址。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
NAPT维护一个带有IP以及端口号的NAT表,结构如下。
一些高层协议(比如 FTP 、 Quake 、 SIP )在IP包的有效数据内发送 网络层 (第三层)信息。比如, 主动模式 的 FTP 使用单独的端口分别来控制命令传输和数据传输。当请求一个文件传输时,主机在发送请求的同时也通知对方自己想要在哪个端口接受数据。但是,如果主机是在一个简单的NAT防火墙后发送的请求,那么由于端口的映射,将会使对方接收到的信息无效。
一个 應用層閘道 ( Application Layer Gateway ,ALG)可以修正这个问题。运行在NAT防火墙设备上的 ALG 软件模块可以更新任何由地址转换而导致无效的信息。显然,ALG需要明白它所要修正的上层协议,所以每个有这种问题的协议都需要有一个单独的 ALG 。
但是,除 FTP 外的大多数传统的客户机-服务器协议不需要发送网络层(第三层)信息,也就不需要 ALG 。
这个问题的另一个可能的解决方法是使用像 STUN 这样的技术,但是这只针对建立在 UDP 上的高层协议,并且需要它内建这种技术。这种技术对於对称NAT也是无效的。还有一种可能的方案是 UPnP ,但它需要和NAT设备配合起来使用。
下列「圓錐型/對稱型」分類源自已廢止的RFC 3489,且只用於描述UDP上的NAT變體。RFC 4787指出這套術語不足以描述實際NAT行為,因此改以映射與過濾等個別行為描述;其後RFC 5389也從STUN移除NAT類型偵測,理由是現實設備的變化使該技術過於脆弱。 [ 2 ] [ 3 ] 下表保留該歷史分類:
一旦内部地址(iAddr:iPort)映射到外部地址(eAddr:ePort),所有发自iAddr:iPort的封包都经由eAddr:ePort向外发送。
任意外部主机都能經由發送封包給eAddr:ePort到达iAddr:iPort。
一旦内部地址(iAddr:iPort)映射到外部地址(eAddr:ePort),所有发自iAddr:iPort的封包都经由eAddr:ePort向外发送。
唯iAddr:iPort曾經發送封包到外部主机(nAddr:any),外部主机才能經由發送封包給eAddr:ePort到达iAddr:iPort。(注:any指外部主机源端口不受限制。)
类似受限制錐形NAT,但是还有端口限制。
一旦内部地址(iAddr:iPort)映射到外部地址(eAddr:ePort),所有发自iAddr:iPort的封包都经由eAddr:ePort向外发送。
在受限圆锥型NAT基础上增加了外部主机源端口必须是固定的。
每一個來自相同內部IP與端口,到一個特定目的地IP和端口的請求,都映射到一個獨特的外部IP和端口。 同一內部IP與端口發到不同的目的地和端口的信息包,都使用不同的映射。
只有曾经收到过内部主机数据的外部主机,才能够把封包发回。
负载均衡 :目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。
失效终结:目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器當机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上。
透明代理 :NAT可以把连接到因特网的 HTTP 连接重定向到一个指定的 HTTP 代理服务器 以缓存数据和过滤请求。一些 因特网服务提供商 就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的 浏览器 支持代理连接。
P2P 联机:在纯 IPv4 网络中,进行点对点联机,例如 VoIP 应用,游戏机联机,或者 Tailscale 等异地组网(不同于内网穿透,内网穿透对应端口转发,例如 FRP ,需要 1 台具有全球唯一单播地址的服务器) 工具(基于 WireGuard ) 等网络尝试打通 STUN 直连时,需要考虑双方的 NAT 类型。例如针对端口受限锥型到端口受限锥型,通常能够成功建立 对等网络 ,因为二者都属于 EIM 锥型家族( RFC 5780 定义),即 Easy- NAT 。 而针对对称型和端口受限锥型,会比对称型到全锥型 困难很多 ,这和对称型的特征有关,部分 ISP 在外部端口或 IP 变化时会使用递增端口,而部分 ISP 会使用随机端口,甚至有可能需要利用 生日攻击 来进行 NAT 穿透 。 RFC 5780 本身为对 RFC 3489 的改进,但现实中的网络地址转换,比映射规则和过滤规则还要复杂得多。在开源社区有部分针对 RFC 5780 和 3489 规则开发的 NAT 类型和特征测试器 ,供专业网络工程人员使用。
^ Olaf Kirch; Terry Dawson. Linux Network Administrator's Guide, 2nd Edition . O'Reilly . 2000 [ 2023-12-12 ] . ISBN 1-56592-400-2 . (原始内容 存档 于2024-02-05).
^ Network Address Translation (NAT) Behavioral Requirements for Unicast UDP . RFC Editor. January 2007 [ 2026-10-09 ] (英语) .
^ Session Traversal Utilities for NAT (STUN) . RFC Editor. October 2008 [ 2026-10-09 ] (英语) .
IPv6至IPv6网络前缀翻译 (NPTv6), IPv6 下的一种NAT实践
Network Address Translation Traversal of MSDN ( 页面存档备份 ,存于 互联网档案馆 )
http://www.windowsnetworking.com/articles_tutorials/NAT_Windows_2003_Setup_Configuration.html ( 页面存档备份 ,存于 互联网档案馆 )–这篇文章介绍了怎样在 Windows 2003 中建立和配置NAT
http://www.cisco.com/en/US/about/ac123/ac147/archived_issues/ipj_7-3/anatomy.html ( 页面存档备份 ,存于 互联网档案馆 )
http://computer.howstuffworks.com/nat.htm/printable ( 页面存档备份 ,存于 互联网档案馆 )
RFC 4008 – Standards Track – NAT中的被管理对象的定义
RFC 3022 –传统NAT
RFC 1631 –已作废– IP NAT
http://freshmeat.net/projects/nat-traverse/ ( 页面存档备份 ,存于 互联网档案馆 )
自2023年12月需补充来源的条目
拒绝当选首页新条目推荐栏目的条目