NAT (Network AddressTranslation)

NAT的本意是通过利用较少的公有IP地址来表示大量私有IP地址的方式来降低IP地址空间的耗用速度。

wKiom1XZO6yQhTN5AAD9uczygV4765.jpg

NAT术语:

CiscoNAT设备将NAT世界划分为内部inside和外部outside两部分,内部网络通常是私有企业或isp,外部网络是公共internet或面向internet的服务提供商。

本地地址是内部网络中设备看见的地址,全局地址则是外部网络设备所看见的地址。

 

内部本地inside local:转换之前内部源地址的名字;分配给内部设备的地址,这些地址不会被宣告到外部网络。

外部本地outside global:转换之前目标主机的名字;分配给外部设备的地址,这些地址不会被宣告到内部网络中。

内部全局inside global:转换之后内部主机的名字;内部设备被外部网络所知晓的地址。

外部全局outside local:转换之后外部目标主机的名字;外部设备被内部网络所知晓地址。

IG地址被映射到IL地址,OL地址被映射到OG地址,Nat设备在地址转换表中跟踪地址映射情况。

 

Eg:

Router#showip nat translations

Pro  Inside global     Inside local       Outside local      Outside global

icmp203.10.5.23:86    192.168.2.23:86    192.31.7.130:86    172.16.80.91:86

icmp203.10.5.23:87    192.168.2.23:87    192.31.7.130:87    172.16.80.91:87

icmp203.10.5.23:88    192.168.2.23:88    192.31.7.130:88    172.16.80.91:88

 

NAT 与IP地址保护:

当内部设备向internet发送数据包时,NAT设备会从内部全局地址池中动态地选择一个公有ip地址,并将其映射到该设备的内部本地地址,该映射操作将被记录在nat表中。

当表项第一次进入NAT表时,同时启动了一个定时器,该定时器的周期被称为转换超时时间。每当该表项被用于转换数据包的源地址和目的地址后,该定时器就被重置,如果定时器到期,则将从NAT表中删除该表项,而动态分配的地址也将回到地址池中,cisco默认超时时间为86400,可以利用ip nat translationtimeout来更改默认时间。一定要确保NAT地址池足够大且装换超时时间足够小,从而保证动态地址池永远不会被耗尽。

 

对多对一应用来说,没有严格的本地地址空间与地址池大小的比例限制。

 

几乎所有的企业都拥有邮件,web及ftp服务器等需要从外部可以发访问,而这些地址需保持不变,这些系统不能使用动态NAT,必须将他们的IL地址静态映射到IG地址上,而这些静态映射的地址不能进入动态地址池。

 

NAT与ISP迁移:

CIDR的一个缺陷是会增加用户更改ISP时的难度。如果用户已经从ips1处分配到了地址块,但又希望将internet服务提供商更换为isp2,则只能将isp1的地址归还给isp1,并从isp2处重新换取ip地址。

 

假设ISP1为其用户分配一个地址空间:205.113.50.0/23,当用户迁移到ISP2 ISP2又为用户分配一个地址空间207.36.76.0/23此时用户无需为其内部系统重新分配IP地址,只要使用NAT即可。用户可以使用ISP1地址空间作为IL地址,将来自ISP2地址空间207.36.76.0/23作为IG地址,并将IL地址映射到这些IG地址上即可。

改NAT方案风险是内部本地地址可能被泄露到公众internet上,那么被泄露地址将于合法改地址的ISP1相冲突,如果ISP2S使用了严格路由过滤机制,那么这种错误将不会泄露到internet上。

另一个问题是ISP1很可能将该地址分配给用户B那么A将无法访问用户B,上述案例可以降低NAT迁移难度,但用户最终应该将内部网络重新编址为私有地址。

wKioL1XZPd6x_BNLAADERGAvl9o345.jpg

NAT与多归属自治系统:

CIDR的另一个不足之处是很难实现多归属到不同的服务提供商。

wKiom1XZO-jz79BpAADWgVP3hh4464.jpg

为了与internet建立正确的通信关系,ISP1和ISP2都需要宣告该用户的地址空间205.113.50.0/23,如果ISP2不宣告该地址,那么该用户的所有入站流量都经过ISP1;如果ISP2宣告了205.113.50.0/23而ISP1仅宣告自己的CIDR地址块那么该用户入站流量将匹配精确路由 ,从而全部选择ISP2,这样将产生如下问题:

  1. 1.    ISP1必须在其CIDR地址块中打孔,这就意味着可能需要在很多路由器上修改相应的过来路由和路由策略。

  2. 2.    ISP2必须宣告其竞争对手的部分地址空间。

  3. 3.    宣告用户的精确地址空间,那么意味着会弱化CIDR在控制internet路由表规模方面的效率。

  4. 4.    某些全国性的服务提供商不收受长于/19的前缀,也意味着internet上的某些地方无法知道该用户经过ISP2的路由。

 

通过NAT可以解决CIDR在多归属环境中的问题:在连接isp2的路由器上配置nat,将IG地址池设置为isp2分配的CIDR地址块,这样isp2就不用在宣告isp1的地址空间,isp1也无需再宣告用户的精确路由。

wKioL1XZPhnTFFzGAADchEHK6M8255.jpg

更有效的设计方案:在两台边缘路由器上都实施NAT,来自每个isp的CIDR地址块都设置为各自的NAT中的IG地址池,IL地址来自私有地址10.0.0.0。

wKiom1XZPCaCkph8AAETrnpZHp0053.jpg

端口地址转换:

NAT有有一种特定功能,可以将多个地址同时映射到单个地址,cisco将这种功能称为PAT(port address translation).

TCP/IP会话并不是2个IP地址之间的的包交换,而是2个ip套接字之间的包交换。套接字就是(地址,端口)二元组,PAT会同时转换IP地址和端口号,来自不同地址的数据包可以被转换为同一个地址,但对应的端口号不相同,这样就可以共享同一个地址了。

 

PAT工作原理:

wKiom1XZPEXzyNknAAE1Al-DS8k520.jpg

NAT与TCP负载分发:

利用NAT可以将多台相同的服务器表示为单个地址 Eg:

wKiom1XZPGaj7mBcAADxl9jQV5s239.jpg

外部网络设备到达的服务器地址都是206.35.91.10 但实际是内网存在4台镜像服务器,nat路由器采用轮询方式在这4台服务器之间分发会话。4台服务器必须提供相同的可访问内容。

 

该应用方案与基于DNS的负载查询共享方式类似,基于NAT的负载均衡也不很稳定,因为路由器并不感知服务器的故障,任然会将数据包转换发到该故障服务器,这样一来故障服务器会出现路由黑洞。

 

NAT与虚拟服务器:

NAT技术不仅可以让外部通过同一个地址访问所有服务,还可以将多种服务分发到不同的地址。

wKioL1XZPpXQbripAAE4XCzsf1o320.jpg

当外部主机向内部网络发送数据包时NAT路由器除了要检查目的地址之外,还要检查目的端口号。如果目的端口号是25 NAT路由器将该数据包目的地址转换为邮件服务器地址 192.168.50.1;同一台主机发送目的端口为80的数据包,则被路由器将数据包的目的地址转换成web服务器地址 192.168.50.2.

 

NAT存在的问题:

NAT底层功能

  1. 1.     头部检验

  2. 2.     分段

  3. 3.     加密:NAT路由器需放置在安全侧,而不能将其放置在被加密路径上

  4. 4.     安全:NAT不能阻止拒绝服务或会话劫持等常见***

  5. 5.     协议相关问题:cisco NAT所支持的IP流量和应用程序

http://www.cisco.com/en/US/technologies/tk648/tk361/tk438/technologies_white_paper09186a00801af2b9.html

 

 

 

Configuring Static Translation

 

Step 1 Router(config)# ip nat inside source static  local-ip  global-ip

Step 2 Router(config)# interface type number

Step 3 Router(config-if)# ip nat inside

Step 4 Router(config)# interface type number

Step 5 Router(config-if)# ip nat outside

 

 

 

Configuring Dynamic Translation with an Access List

 

Step 1 Router(config)# ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length}

Step 2 Router(config)# access-list access-list-number permit source [source-wildcard]

Step 3 Router(config)# ip nat inside source list  access-list-number pool name

Step 4 Router(config)# interface type number

Step 5 Router(config-if)# ip nat inside

Step 6 Router(config)# interface type number

Step 7 Router(config-if)# ip nat outside

 

 

 

Configuring Dynamic Translation with a Route Map

 

Step 1 Router(config)# ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length}

Step 2 Router(config)# route-map name permit sequence

Step 3 Router(config)# ip nat inside source route-map name pool name

Step 4 Router(config)# interface type number

Step 5 Router(config-if)# ip nat inside

Step 6 Router(config)# interface type number

Step 7 Router(config-if)# ip nat outside

 

 

Overloading an Inside Global Address
Step 1
Router(config)# ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length}

Step 2 Router(config)# access-list access-list-number permit source [source-wildcard]

Step 3 Router(config)# ip nat inside source list access-list-number pool name overload

Step 4 Router(config)# interface type number

Step 5 Router(config-if)# ip nat inside

Step 6 Router(config)# interface type number

Step 7 Router(config-if)# ip nat outside

 

 

 

Changing Translation Timeouts

Router(config)#ip nat translationtimeout seconds……………………not use overloading.  默认超时时间24H

Router(config)#ip nat translationudp-timeout seconds

Router(config)#ip nat translationdns-timeout seconds

Router(config)#ip nat translationtcp-timeout seconds

Router(config)#ip nat translationfinrst-timeout seconds

Router(config)#ip nat translationicmp-timeout seconds

Router(config)#ip nat translationsyn-timeout seconds