跳至主要內容

NAT(网络地址转换,Network Address Translation)

LincZero大约 14 分钟

NAT(网络地址转换,Network Address Translation)

又称IP动态伪装(英語:IP Masquerade)

参考:

概念

作用

作用:

  • 内网上外网
    • 当在专用网open in new window内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
    • 这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
  • 宽带分享:这是 NAT 主机的最大功能
  • 解决IP地址不足
    • (诞生背景)有助于减缓可用的IP地址空间的枯竭
  • 安全性
    • 隐藏并保护网络内部的计算机
    • NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了。 外界在进行 portscan(端口扫描) 的时候,就侦测不到源 Client 端的 PC 。

不属于协议

NAT(Network Address Translation)严格来说不属于协议,而是一种技术或方法,用于在IP地址间进行转换。

与NAT相关的协议:

  • 如TCP和UDP。在NAT过程中,特别是当进行端口地址转换(PAT)时,路由器或防火墙需要查看TCP或UDP头部信息(如源端口和目标端口),来正确地进行地址和端口的转换。
  • 然而,这并不意味着路由协议与NAT没有关系。例如,静态路由协议可能被用于配置NAT设备,以使其知道应将哪些地址翻译为其他地址。而在更复杂的环境中,动态路由协议(如RIP,OSPF等)也可以与NAT一起使用,以实现更复杂的网络地址转换需求。

总的来说,NAT主要与传输层协议如TCP/UDP相关,而路由协议可以根据需要与NAT一起使用,来完成更复杂的网络需求。

ISO作用

NAT协议通常工作在网络层(第三层)和传输层(第四层)之间

局限性

  1. NAT违反了IP地址结构模型的设计原则。

    • IP地址结构模型的基础是每个IP地址均标识了一个网络的连接,Internet的软件设计就是建立在这个前提之上。

      而NAT使得有很多主机open in new window可能在使用相同的地址,如10.0.0.1。

  2. NAT使得IP协议从面向无连接open in new window变成面向连接

    • NAT必须维护专用IP地址与公用IP地址以及端口号open in new window的映射关系。

      TCP/IP协议open in new window体系中,如果一个路由器open in new window出现故障,不会影响到TCP协议的执行。因为只要几秒收不到应答,发送进程就会进入超时重传处理。

      而当存在NAT时,最初设计的TCP/IP协议过程将发生变化,Internet可能变得非常脆弱。

  3. NAT违反了基本的网络分层结构模型的设计原则

    • 因为在传统的网络分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。
  4. 有些应用是将IP地址插入到正文的内容中,例如标准的FTP协议与IP Phone协议H.323。

    • 如果NAT与这一类协议一起工作,那么NAT协议一定要做适当地修正。
    • 同时,网络的传输层open in new window也可能使用TCP与UDP协议之外的其他协议,那么NAT协议必须知道并且做相应的修改。
    • 由于NAT的存在,使得P2P应用实现出现困难,因为P2P的文件共享open in new window与语音共享都是建立在IP协议的基础上的。
  5. NAT同时存在对高层协议和安全性的影响问题。

    • RFC对NAT存在的问题进行了讨论。NAT的反对者认为这种临时性的缓解IP地址短缺的方案推迟了Ipv6迁移的进程,而并没有解决深层次的问题,他们认为是不可取的。

历史背景

要真正了解NAT就必须先了解现在IP地址的使用情况,私有 IP 地址是指内部网络或主机open in new window的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址。RFC 1918 为私有网络预留出了三个IP 地址块,如下:

  • A 类:10.0.0.0~10.255.255.255
  • B 类:172.16.0.0~172.31.255.255
  • C 类:192.168.0.0~192.168.255.255

上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。 [1]

随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网open in new window(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。

虽然NAT可以借助于某些代理服务器open in new window来实现,但考虑到运算成本和网络性能,很多时候都是在路由器open in new window上来实现的。

实现方式

三种实现

NAT的实现方式有三种:

  • 静态转换 Static Nat
  • 动态转换 Dynamic Nat
  • 端口多路复用 OverLoad

静态转换

静态open in new window转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态open in new window转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

动态转换

动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISPopen in new window提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

PAT(端口多路复用,Port Address Translation)

端口多路复用 是指改变外出数据包的源端口open in new window并进行端口转换,即端口地址转换open in new window(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机open in new window均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机open in new window,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

ALG(应用程序级网关技术,Application Level Gateway)

ALG,即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议open in new window,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 "A" 和 "PTR" queries命令和部分ICMP消息类型等都需要相应的ALG来支持。

0

如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常我们使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。

NAPT

NAPT(Network Address Port Translation),即网络地址端口转换open in new window,可将多个内部地址映射open in new window为一个合法公网地址,但以不同的协议端口号open in new window与不同的内部地址相对应,也就是与之间的转换。NAPT普遍用于接入设备open in new window中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换open in new window)、地址超载(address overloading)。

NAPT与动态地址open in new windowNAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号open in new window。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号open in new window以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号open in new window,以及NAT盒使用的一个协议端口号。

NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机open in new window访问同一台外部计算机,相互之间不会发生冲突。 [2]

穿透方法

目前常用的针对UDP的NAT 穿透(NAT Traversal)方法主要有:STUNTURNICEuPnP等。其中ICE方式由于其结合了STUN和TURN的特点,所以使用最为广泛。针对TCP的NAT穿透技术open in new window目前仍为难点。实用的技术仍然不多。

路由协议(Routing protocol)

路由表

区别:路由表、ARP表、NAT表

  • 映射关系不同:NAT表是IP到IP,ARP表是IP到MAC
  • 维护/老化等可能不同?
  • 学习方式可能不同?

GPT4

  • 路由表

    路由表是一种让路由器知道如何将数据包路由到其目的地的表格。这种表格包含了关于网络中所有其他路由器的信息,以及它们到达目的地的路径。路由表中的每个条目都包含一个网络目标(即网络地址)和下一步的路由器地址。

  • ARP表

    ARP(Address Resolution Protocol)表,即地址解析协议表,是存储在网络设备中的一种表格,用于映射网络层(IP地址)到链路层(MAC地址)的地址。当一个设备需要将数据包发送到另一个设备时,它将查阅ARP表,以确定接收设备的MAC地址。如果ARP表中没有相关的映射信息,发送设备将通过ARP协议请求接收设备的MAC地址,并更新ARP表。

  • NAT表

    NAT(Network Address Translation)表,即网络地址转换表,是一种在网络设备(如路由器)上执行IP地址转换的技术。它允许一个IP地址的设备与另一个IP地址的设备进行通信,即使这些设备在不同的网络上。例如,在家庭网络中,路由器使用NAT表将私有(内部)IP地址转换为公共(外部)IP地址,这样家庭网络中的设备就可以与互联网上的设备进行通信。

区别

  • 数据处理阶段
    • 路由表:主要在网络层处理和转发IP包
    • ARP表:主要在数据链路层处理MAC地址和IP地址的转换
    • NAT表:主在网络层处理私网IP和公网IP的转换。
  • 作用和功能
    • 路由表:负责决定IP数据包的转发路径,目标是找到最佳路径将数据包送达目标地址
    • ARP表:负责解析并存储网络中设备的IP地址和MAC地址的对应关系,目的是获取目标设备的MAC地址以保证数据包能够成功在本网络中传递
    • NAT表:负责转换私有IP地址和公共IP地址,目的是在有限的公网IP地址下,能够使更多的私有网络设备能够访问公网。
  • 存储位置
    • 路由表、ARP表和NAT表都是存储在网络设备上的
    • 路由表:存储在路由器上
    • ARP表:可能存储在交换机或者计算机上
    • NAT表:通常存储在执行NAT功能的设备,如防火墙或路由器上
  • 更新方式
    • 路由表:更新通常通过路由协议(如RIP,OSPF等)自动完成
    • ARP表:更新通过ARP协议,当需要的IP地址和MAC地址映射关系不存在时,会发送ARP请求并更新ARP表;
    • NAT表:更新则是在需要进行网络地址转换时动态创建的。
  • 生存周期
    • 路由表:生存周期比较长,只有网络拓扑发生变化时才会被更新;
    • ARP表:生存周期较短,通常在一段时间后需要进行刷新
    • NAT表:生命周期取决于NAT会话,当会话结束时,相关的NAT表项就会被删除。

分类

一个实际的网络中,一台路由器通常包含多条路由条目,这些路由条目从不同的来源获取。路由表的来源可分为三类:

  • 直连路由:路由器直接连接的路由条目,只要路由器接口配置了 IP 地址,接口状态正常,就会自动生成对应的直连路由
  • 静态路由:通过命令手动添加的路由条目就是静态路由
  • 动态路由:通过路由协议从相邻路由器动态学习到的路由条目

路由优先级

路由环路

黑洞路由