1.1 NAT概述

随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足的问题,但目前众多的网络设备和网络应用仍是基于IPv4的,因此在IPv6广泛应用之前,一些过渡技术的使用是解决这个问题的主要技术手段。
网络地址转换技术NAT(Network Address Translation)主要用于实现位于内部网络的主机访问外部网络的功能。当局域网内的主机需要访问外部网络时,通过NAT技术可以将其私网地址转换为公网地址,并且多个私网用户可以共用一个公网地址,这样既可保证网络互通,又节省了公网地址。

NAT - 图1

1.2 NAT应用场景

image.png

  • 随着网络设备的数量不断增长,对IPv4地址的需求也不断增加,导致可用IPv4地址空间逐渐耗尽。解决IPv4地址枯竭问题的权宜之计是分配可重复使用的各类私网地址段给企业内部或家庭使用。但是,私有地址不能在公网中路由,即私网主机不能与公网通信,也不能通过公网与另一个私网通信。
  • NAT是将IP数据报报头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私网IP地址)访问外部网络(公有IP地址)的功能。NAT一般部署在连接内网和外网的网关设备上。当收到的报文源地址为私网地址、目的地址为公网地址时,NAT可以将源私网地址转换成一个公网地址。这样公网目的地就能够收到报文,并做出响应。此外,网关上还会创建一个NAT映射表,以便判断从公网收到的报文应该发往的私网目的地址。

1.3 静态NAT

image.png

  • 静态NAT实现了私有地址和公有地址的一对一映射。如果希望一台主机优先使用某个关联地址,或者想要外部网络使用一个指定的公网地址访问内部服务器时,可以使用静态NAT。但是在大型网络中,这种一对一的IP地址映射无法缓解公用地址短缺的问题。
  • 在本示例中,源地址为192.168.1.1的报文需要发往公网地址100.1.1.1。在网关RTA上配置了一个私网地址192.168.1.1到公网地址200.10.10.1的映射。当网关收到主机A发送的数据包后,会先将报文中的源地址192.168.1.1转换为200.10.10.1,然后转发报文到目的设备。目的设备回复的报文目的地址是200.10.10.1。当网关收到回复报文后,也会执行静态地址转换,将200.10.10.1转换成192.168.1.1,然后转发报文到主机A。和主机A在同一个网络中其他主机,如主机B,访问公网的过程也需要网关RTA做静态NAT转换。

1.3.1 静态NAT配置

image.png
image.png

1.4 动态NAT

image.png

  • 动态NAT通过使用地址池来实现。
  • 本示例中,当内部主机A和主机B需要与公网中的目的主机通信时,网关RTA会从配置的网关地址池中选择一个未使用的公网地址与之做映射。每台主机都会分配到地址池中的一个唯一地址。当不需要此连接时,对应的地址映射将会被删除,公网地址也会被恢复到地址池中待用。当网关收到回复报文后,会根据之前的映射再次进行转换之后转发给对应主机。
  • 动态NAT地址池中的地址用尽以后,只能等待被占用的公网IP被释放后,其他主机才能使用它来访问公网。

1.4.1 动态NAT配置

image.png
image.png

1.5 NAPT

image.png

  • 网络地址端口转换NAPT(Network Address Port Translation)允许多个内部地址映射到同一个公有地址的不同端口。
  • 本例中,RTA收到一个私网主机发送的报文,源IP地址是192.168.1.1,源端口号是1025,目的IP地址是100.1.1.1,目的端口是80。RTA会从配置的公网地址池中选择一个空闲的公网IP地址和端口号,并建立相应的NAPT表项。这些NAPT表项指定了报文的私网IP地址和端口号与公网IP地址和端口号的映射关系。之后,RTA将报文的源IP地址和端口号转换成公网地址200.10.10.1和端口号2843,并转发报文到公网。当网关RTA收到回复报文后,会根据之前的映射表再次进行转换之后转发给主机A。主机B同理。

1.6 Easy IP

image.png

  • Easy IP适用于小规模局域网中的主机访问Internet的场景。小规模局域网通常部署在小型的网吧或者办公室中,这些地方内部主机不多,出接口可以通过拨号方式获取一个临时公网IP地址。Easy IP可以实现内部主机使用这个临时公网IP地址访问Internet。
  • 本示例说明了Easy IP的实现过程。RTA收到一个主机A访问公网的请求报文,报文的源IP地址是192.168.1.1,源端口号是1025。RTA会建立Easy IP表项,这些表项指定了源IP地址和端口号与出接口的公网IP地址和端口号的映射关系。之后,根据匹配的Easy IP表项,将报文的源IP地址和端口号转换成出接口的IP地址和端口号,并转发报文到公网。报文的源IP地址转换成200.10.10.10/24,相应的端口号是2843。路由器收到回复报文后,会根据报文的目的IP地址和端口号,查询Easy IP表项。路由器根据匹配的Easy IP表项,将报文的目的IP地址和端口号转换成私网主机的IP地址和端口号,并转发报文给主机。

Easy IP可以利用访问控制列表来控制哪些内部地址可以进行地址转换。
image.png

1.6.1 Easy IP配置

image.png
image.png

1.7 NAT Server

image.png

  • NAT在使内网用户访问主机的同时,也屏蔽了公网用户访问私网主机的需求。当一个私网需要向公网用户提供Web和FTP服务时,私网中的服务器必须随时可供公网用户访问。
  • NAT服务器可以实现这个需求,但是需要配置服务器私网IP地址和端口号转换为公网IP地址和端口号并发布出去。路由器在收到一个公网主机的请求报文后,根据报文的目的IP地址和端口号查询地址转换表项。路由器根据匹配的地址转换表项,将报文的目的IP地址和端口号转换成私网IP地址和端口号,并转发报文到私网中的服务器。
  • 本例中,主机C需要访问私网服务器,发送报文的目的IP地址是200.10.10.1,目的端口号是80。RTA收到此报文后会查找地址转换表项,并将目的IP地址转换成192.168.1.1,目的端口号保持不变。服务器收到报文后会进行响应,RTA收到私网服务器发来的响应报文后,根据报文的源IP地址192.168.1.1和端口号80查询地址转换表项。然后,路由器根据匹配的地址转换表项,将报文的源IP地址和端口号转换成公网IP地址200.10.10.1和端口号80,并转发报文到目的公网主机。

image.png
image.png
image.png

1.8 NAT Alg

  • NAT和NAPT只能对IP报文的头部地址和TCP/UDP头部的端口信息进行转换。对于一些特殊协议,例如FTP等,它们报文的数据部分可能包括IP地址信息或者端口信息,这些内容不能被NAT有效的转换。解决这些特殊协议的NAT转换问题的方法就是在NAT实现中使用应用层网关ALG(Application Level Gateway)功能。ALG是对特定的应用层协议进行转化,在对这些特定的应用层协议进行NAT转换过程中,通过NAT的状态信息来改变封装在IP报文数据部分中的特定数据,最终使应用层协议可以跨越不同范围运行。
  • 例如,一个使用内部IP地址的FTP服务器可能在和外部网络主机建立会话的过程中需要将自己的IP地址发送给对方。而这个地址信息是放到IP报文的数据部分,NAT无法对它进行转换。当外部网络主机接收了这个私有地址并使用它,这时FTP服务器将表现为不可达。

目前支持ALG功能的协议包括:DNS、FTP、SIP、PPTP和RTSP。

应用协议 做NAT变换的字段
DNS 响应报文中的IP和Port
FTP
- Port请求报文中载荷里的IP和Port
- Passive响应报文中载荷里的IP和Port
SIP
- Request line
- From
- To
- Contact
- Via
- O
- Message body的C字段地址和M字段的端口
- record-router
PPTP 分PPTP Client在私网还是PPTP Server在私网两种场景:
- PPTP Client在私网,PPTP Server在公网时,仅对Client-Call-ID进行端口替换
- PPTP Server在私网,PPTP Client在公网时,仅对Server-Call-ID进行端口替换
RTSP setup/reply OK报文中的端口字段

1.9 DNS Mapping

  • 在某些应用中,私网用户希望通过域名访问位于同一私网的内部服务器,而DNS服务器却位于公网。由于通常DNS响应报文中携带的是内部服务器的公网IP地址,因此若NAT设备未将DNS Server解析的公网IP替换成内部服务器对应的私网IP,私网用户将无法通过域名访问到内部服务器。
  • 这个问题可以使用DNS Mapping方式来解决,通过配置“域名—公网IP地址—公网端口—协议类型”映射表,建立内部服务器的域名与其公网信息间的对应关系。

image.png
如上图所示,私网用户Host希望通过域名方式访问Web Server,Router作为NAT服务器。当Router设备收到DNS响应报文后,先根据其中携带的域名查找DNS Mapping映射表,再根据“公网IP地址—公网端口—协议类型”查找Web Server,然后将DNS响应报文中的公网IP地址替换成Web Server的私网IP地址。这样,Host收到的DNS响应报文中就携带了Web Server的私网IP地址,从而可以通过域名来访问Web Server。

1.10 两次NAT

  • 两次NAT即Twice NAT,指源IP和目的IP同时转换,该技术应用于内部网络主机地址与外部网络上主机地址重叠的情况。

image.png

  1. 内网Host A要访问地址重叠的外部网络Host B,Host A向位于外部网络的DNS服务器发送访问外网Host B的DNS请求,DNS服务器应答Host B的IP地址为1.1.1.1,DNS应答报文在经过Router时,进行DNS ALG,Router将DNS应答报文中的重叠地址1.1.1.1转换为唯一的临时地址3.3.3.1,然后再转发给Host A。
  2. Host A访问Host B,目的IP为临时地址3.3.3.1,报文在经过Router时,Router检查到目的IP是临时地址,进行目的地址转换,将报文的目的IP转换为Host B的真实地址1.1.1.1,同时进行正常的NAT Outbound转换,将报文的源IP转换为源NAT地址池地址;Router将报文转发到Host B。
  3. Host B回应Host A,目的IP为Host A的NAT Outbound地址池地址,源IP为Host B的地址1.1.1.1,报文在经过Router时,Router检查到源IP是重叠地址,进行源地址转换,将报文的源IP转换为对应的临时地址3.3.3.1,同时进行正常的目的地址转换,将报文的目的IP从源NAT地址池地址转换为Host A的内网地址1.1.1.1;Router将报文转发到Host A。

2. NAT应用

2.1 私网主机访问公网

在许多小区、学校和企业的内网规划中,由于公网地址资源有限,内网用户实际使用的都是私有地址,在这种情况下,可以使用NAT技术来实现私网用户对公网的访问。如下图所示,通过在Router上配置Easy IP,可以实现私网主机访问公网服务器。
image.png

2.2 公网主机访问私网服务器

在某些场合,私网内部有一些服务器需要向公网提供服务,比如一些位于私网内的Web服务器、FTP服务器等,NAT可以支持这样的应用。如下图所示,通过配置NAT Server,即定义“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,使位于公网的主机能够通过该映射关系访问到位于私网的服务器。
image.png

2.3 私网主机通过域名访问私网服务器

在某些场合,私网用户希望通过域名访问位于同一私网的内部服务器,而DNS服务器却位于公网,此时可通过DNS Mapping方式来实现。如下图所示,通过配置DNS Mapping映射表,即定义“域名—公网IP地址—公网端口—协议类型”间的映射关系,将DNS响应报文中携带的公网IP地址替换成内部服务器的私网IP地址,从而使私网用户可以通过域名来访问该服务器。
image.png

2.4 NAT多实例

当分属不同MPLS VPN的主机使用相同的私网地址,并通过同一个出口设备访问Internet时,NAT多实例可实现这些地址重叠的主机同时访问公网服务器。如下图所示,尽管HostA和HostB具有相同的私网地址,但由于其分属不同的VPN,通过使用NAT关联VPN技术,可以使NAT能够区分属于不同VPN的主机,允许二者同时访问公网服务器。
image.png