NAT(Network Address Traslation)

Functions:
为了缓解IPv4地址的匮乏。
可以应用于:更换ISP或两个企业内部网络合并而需要修改内部地址方案的时。

Integrate Static and Dynamic NAT:
以下为需要结合使用动态和静态NAT的情况:
1>有多个地址空间重叠的网络
2>修改了方案(更换了ISP)
3>网络服务器(DNS或WEB服务器)的地址不能变


NAT Teminology and Conception:
NAT的实现是通过修改IP分组的报头,更换其中的源地址/目标地址,或全部。
内部/外部:IP主机相对于NAT设备的物理位置。
本地/全局:用户相对于NAT设备的位置或视角。

内部本地IP地址:私有的IP地址。分配给内部网络的IP地址。
内部全局IP地址:合法的IP地址。将内部IP地址转换成的目标地址,代表内部主机访问外部网络。
外部全局IP地址:合法的IP地址。另一网络的主机使用的相对于它的全局地址,代表它访问外部网络。
外部本地IP地址:私有的IP地址。本地网络看到的外部网络的IP地址,有NAT设备转换成形成的。

Static Translation:转换规则是静态指定的,此条目既可以从内部也可以从外部发起连接,因为转换后的地址总是保留在转换表中。(不论是使用inside-source-list或是outside-source-list)
Dynamic Translation:转换规则是动态的指定,IP地址动态的从特定的地址池中取出来。此条目只能从内部或外部发起连接,取决于配置。
如果使用命令:ip nat inside source list配置只能从内部到外部的动态NAT,即只能从内部发起连接。
如果使用命令:ip nat outside source list配置只能从外部到内部的动态NAT,即只能从外部发起连接。

Character:
优点:
1>企业网可以使用私有IP地址在内部,节省了IP地址。
2>可减少编址方案的重叠情况。使有相同编址方案的网络可以共存。
3>更换ISP时不需要改变编址方案。

缺点:
1>NAT会增加延迟,因为CPU要检查每个分组。此时默认,处理第一次转换时,转换被存储到高速缓存中,对于随后的分组将进行快速交换。
2>NAT导致无法进行端到端的IP跟踪,但同时增加了安全性。
3>NAT使某些在有效负载中使用IP地址的应用无法运行,这是因为要转换有效负载中的IP地址,NAT必须地知道从哪里开始。所以部署NAT时,应核实NAT是否支持已有的应用。


Configuration Command Reference:
1> ip nat {inside|outside}
2> ip nat inside source static {tcp|udp local-ip local-port global-ip global-port}
3> ip nat outside source static {tcp|udp local-ip local-port global-ip global-port}
4> ip nat pool pool-name start-ip end-ip {netmask netmask|prefix-length prefix-length} [type rotary]
5> ip nat inside source list access-list-number pool pool-name
6> ip nat outside source list access-list-number pool pool-name


Case Study:转换内部源地址
Static NAT Translation:
R1(config)#ip nat inside source static 10.1.1.1 192.168.2.2
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside

Static PAT Translation:
R1(config)#ip nat inside source static tcp 10.1.1.1 80 192.168.2.2 80
R1(config)#ip nat inside source static tcp 10.1.1.2 25 192.168.2.2 25
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside

Dynamic NAT Translation:
R1(config)#ip nat pool sense-nat-list 192.168.2.1 192.168.2.254 netmask 255.255.255.0
R1(config)#ip nat inside source list 1 pool sense-nat-list
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside
R1(config)#access-list 1 10.1.1.0 0.0.0.255


Case Study:转换外部源地址
Static NAT Translation:
R1(config)#ip nat outside source static 172.20.7.3 192.168.2.4
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside

Static PAT Translation:
R1(config)#ip nat outside source static tcp 172.20.7.3 80 192.168.2.4 80
R1(config)#ip nat outside source static tcp 172.20.7.4 25 192.168.2.4 25
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside

Dynamic NAT Translation:
R1(config)#ip nat pool sense-nat-list 192.168.2.1 192.168.2.254 netmask 255.255.255.0
R1(config)#ip nat outside source list 1 pool sense-nat-list
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside
R1(config)#access-list 1 172.20.7.0 0.0.0.255


Case Study:重载内部全局地址
Dynamic PAT Translation:
R1(config)#ip nat pool sense-pat-list 192.168.2.1 192.168.2.2 netmask 255.255.255.0
R1(config)#ip nat inside source list 1 pool sense-nat-list overload
R1(config)#int e0
R1(config-if)#ip add 10.1.1.10 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip add 172.16.2.1 255.255.255.0
R1(config-if)#ip nat outside
R1(config)#access-list 1 10.1.1.0 0.0.0.255


Case Study:处理地址空间重叠的网络
注:处理地址空间重叠的网络时,NAT结合使用了内部源地址转换和外部源地址的转换,即双向NAT。配置了外部源地址转换后,NAT路由器自动接收来自外部网络的DNS应答,以确保将正确的内部全局地址返回给发出请求的内部主机。

R1(config)#ip nat pool sense-nat-in-out 192.2.2.1 192.2.2.250 prefix-length 24
R1(config)#ip nat pool sense-nat-out-in 192.3.3.3. 192.3.3.254 prefix-length 24
R1(config)#ip nat inside source list 1 pool sense-nat-in-out
R1(config)#ip nat outside source list 1 pool sense-nat-out-in
R1(config)#int s0
R1(config-if)#ip add 192.2.2.251 255.255.255.0
R1(config-if)#ip nat outside
R1(config)#int e0
R1(config-if)#ip add 10.1.1.254 255.255.255.0
R1(config-if)#ip nat inside
R1(config)#access-list 1 permit 10.1.1.0 0.0.0.255


Case Study:TCP负载分配
这是NAT对static translation的一种扩展,可以将一个全局的地址映射到多个内部地址,以便在多个服务器之间的会话分配。例如:WEB/FTP/DNS服务器负载均衡。此时,NAT设备就可以被称为虚拟主机。

R1(config)#ip nat pool sense-webserver 171.70.2.3 171.70.2.4 netmask 255.255.255.0 type rotary
R1(config)#access-list 46 permit host 171.70.2.10
R1(config)#ip nat inside destination list 46 pool sense-webserver
R1(config)#int e0
R1(config-if)#ip nat inside
R1(config)#int s0
R1(config-if)#ip nat outside

注:
1>type rotary指定NAT设备在转换时,轮流使用地址池中的servers,以实现TCP负载均衡。
2>ACL 46指定只是对虚拟主机地址时行转换。


Case Study:Troubleshooting NAT
1>show ip nat translations [verbose]       显示活动的转换条目,verbose参数显示更详细的信息

rta(config)#do sh ip nat tr
Pro Inside global      Inside local       Outside local      Outside global
--- 192.168.2.2        10.1.1.1           ---                ---
tcp 192.168.2.2:80     10.1.1.1:80        ---                ---
--- ---                ---                192.168.2.4        172.20.7.3

rta(config)#do sh ip nat tr ve
Pro Inside global      Inside local       Outside local      Outside global
--- 192.168.2.2        10.1.1.1           ---                ---
    create 00:01:06, use 00:01:06,
    flags:
static, use_count: 0
tcp 192.168.2.2:80     10.1.1.1:80        ---                ---
    create 00:00:39, use 00:00:39,
    flags:
static, extended, extendable, use_count: 0
--- ---                ---                192.168.2.4        172.20.7.3
    create 00:01:42, use 00:01:42,
    flags:
static, outside, use_count: 0


2>show ip nat statistics       显示有关转换的统计信息
rta(config)#do sh ip nat st
Total active translations: 3 (3 static, 0 dynamic; 1 extended)
Outside interfaces:
Inside interfaces:
Hits: 0  Misses: 0
Expired translations: 0
Dynamic mappings:


3>debug ip nat [access-list-number|detailed]



Case Study:删除NAT转换条目
clear ip nat translation *              删除所有转换条目
clear ip nat translation inside global-ip local-ip [outside local-ip global-ip]
删除一个进行内部转换或内部和外部转换的简单转换条目
clear ip nat translation outside local-ip global-ip
删除一个进行外部转换的简单转换条目
clear ip nat translation inside global-ip global-port local-ip local-port [outside local-ip local-port global-ip global-port]
删除一个扩展的转换条目



Support:
Cisco IOS NAT支持以下数据流类型:
1>不在应用数据中携带源/目标IP地址的TCP/UDP数据流
2>HTTP
3>TFTP
4>Telnet
5>Archie
6>Finger
7>NTP
8>NFS
9>rlogin,rsh,rcp

虽然下述数据流类型在应用数据中携带IP地址,但Cisco IOS NAT支持它们:
1>ICMP
2>FTP(包括命令PORT和PASV)
3>NetBIOS over TCP/IP(数据报,名称和会话服务)
4>Progressive Networks的RealAudio
5>White Pines的CuSeeMe
6>Xing Technologies的Streamworks
7>DNS "A"和"PTR"查询
8>H.323/NetMeeting (12.0(1)/12.0(1)T及更高版本)
9>VDOLive(11.3(4)/11.3(4)T及更高版本)
10>Vxtreme(11.3(4)/11.3(4)T及更高版本)
11>IP多播(12.0(1)T,只转换源地址)

Cisco IOS不支持下述数据流类型:
1>路由选择表更新
2>DNS区域(zone)传输
3>BOOTP
4>talk,ntalk
5>SNMP
6>NetShow
7>×××