网络地址转换协议:NAT

2019 年 11 月 26 日,是人类互联网时代值得纪念的一天,全球 43 亿个 IPv4 地址今日正式耗尽。而在IPv4地址不够用时,支持网络的核心技术就是 NAT 协议。

概念

  NAT(Network Address Translation,网络地址转换) 技术是一种把内部网络(简称为内网)私有 IP 地址转换为外部网络(简称为外网)公共 IP 地址的技术,它使得一定范围内的多台主机只利用一个公共 IP 地址连接到外网,可以在很大程度上缓解了公网 IPv4 地址紧缺的问题。

30-1

  NAT 不仅能缓解 lPv4 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。目前,IPv4 地址资源的紧缺使得 NAT 技术获得了广泛的应用。

NAT 分类

静态 NAT

  私网和公网 IP 一对一映射,一旦确定,即便不用,其他私网 IP 也不能再使用该公网 IP 地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。缺点也很明显,需要独占宝贵的合法 IP 。

动态 NAT

  私网和公网 IP 池进行一对一映射,免去了人为的配置,同时可以让有限的公网 IP 地址能够重复使用,但依旧是一个私网 IP 对应一个公网 IP 地址。

  需要进行数据传输时,从内部全局地址池动态选择一个未使用的地址对内部本地地址进行转换。当数据传输完毕,将地址放回地址池子。

端口地址转换 PAT

  真正实现多对一的映射,一个私网 IP 对应一个公网 IP + 端口号,因此端口不同,一个公网 IP 就能被多个私网 IP 地址使用。端口复用,实现了多个内部地址与同一个内部全局地址进行转换。

30-2

基本原理

  NAT 通过利用端口号对内部地址和端口号进行转换,并维护一个转换表。主要步骤:

  • 替换,内网主机访问外网时,利用(公网 IP 地址,新端口号)替换每个外出 IP 数据报的(源 IP 地址,源端口号)

  • 记录,将每对(公网 IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到 NAT 转换表中。

  • 替换,根据 NAT 转换表,利用(源 IP 地址,源端口号)替换每个进入内网 IP 数据报的(目的 IP 地址,目的端口号),即(公网 IP 地址,新端口号)

  NAT 丢弃不活跃链接的时候,是不会通知内网的你以及外网的程序的,也就是说,是不可能重建的。这样就带来了一个问题,假如有的应用程序需要长时间的链接呢?

  最合理的方法当然就是自己实现心跳包,每隔一段时间程序发送一个小包给对方,对方也发回来,不仅保活,也可以检查服务是否遇到不可知错误而中断。当然,不一定需要自己实现心跳包,对稳定性需求不高,可以用 linux 内核提供的 TCP keep-alive。启用后,系统会按设定的时间(默认是2小时),发送一个包过去。

实现方式

  NAT可以分为 SNAT(Source Network Address Translation,源网络地址转换)、MASQUERADE( IP 地址伪装)和 DNAT(Destination Network Address Translation,目的网络地址转换)两种模式。Linux 的 NAT 可以通过 iptables 配置实现。

SNAT

  内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有 IP。例如,内网的多个 PC 机访问外部网络的时候,具有公网 IP 的路由器将数据包的报头中的源地址替换成路由器的 IP,当外部网络的服务器接到访问请求的时候,记录下来的是路由器的 IP 地址,而不是 PC 机的内网 IP,因为服务器收到的数据包的“源地址”已经被替换。

30-3

MASQUERADE

  SNAT 中的一种特例,可以实现自动化的 SNAT。采用 SNAT 时,对于那些 IP 不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,出口 IP 经常会改变,而 iptables 规则内的 IP 是不会随着自动变化的,每次地址变化后都必须手工修改一次 iptables,把规则里边的固定 IP 改成新的 IP 。MASQUERADE 就是针对这种场景而设计的,它可以从服务器的网卡上自动获取当前 IP 地址来做 NAT。

DNAT

  当内部需要对外提供服务时,外部发起主动连接,路由器或着防火墙的网关接收到这个连接,然后把连接转换到内部,此过程是由带公有 IP 的网关代替内部服务来接收外部的连接,然后在内部做地址转换。主要用于内部服务对外发布。典型应用就是 Web 服务器放在内网,配置内网 IP,前端有个防火墙,配置公网 IP,互联网上的访问者使用公网 IP 来访问这个网站。

30-4

展望

  随着 IPv4 地址的耗尽,再经济的模式也无以为继,IPv4 必须退出历史舞台。人们自然会认为,NAT作为 IPv4的超级补丁技术使命已经完结。

  实际上,IPv4 向 IPv6过渡的阶段,NAT 仍然是一种必不可少的技术。因为 Internet 无法在一日之内完成全网升级,必然是局部升级,逐渐替换。在两套协议并存的时期,用户和服务资源分布在不同网络之间,跨网访问的需求必须得到满足。而这正是 NAT 所擅长的领域:地址替换,因此 NAT-PT(Network Address Translator - Protocol Translator,附带协议转换器的网络地址转换器,是一种纯 IPv6 节点和IPv4节点间的互通方式)应运而生。由于 IPv4 和 IPv6 之间的差异,NAT 要做的事比以往更复杂,有更多的限制和细节。

坚持原创技术分享,您的支持将鼓励我继续创作!