实验目的:
理解NAT地址转换的原理,熟悉NAT转换的配置过程。进一步理解NAT在扩展IP地址方面的巨大功效。理解NAT如何将内部地址转换成外部地址的过程。
实验拓扑:

17_8WwN1I68zk7D.jpg
实验内容:
1.静态NAT
首先在R1上起2个环回接口loop0和loop1,为每一个loop口分配一个IP地址,模拟2台内部PC机,R1的S1看成到外网的接口。而R3这里看成外部一台服务器。PC机想要与R3通信,不许利用NAT来将内部PC地址转换成R1上S0的地址实现。
路由器的基本配置
   R1#show ip int b
Interface                  IP-Address      OK? Method Status                Prot
ocol
Ethernet0                  unassigned      YES unset  administratively down down
Loopback0                  192.168.2.1     YES manual up                    up
Loopback1                  192.168.3.1     YES manual up                    up
Serial0                    61.32.34.6      YES manual up                    up
Serial1                    unassigned      YES unset  administratively down dow
R2#show ip int b
Serial0                    unassigned      YES TFTP   up                    up
Serial1                    61.32.34.5      YES manual up                    up
此时用扩展PING以192.168.2.1 和192.168.3.1为源以61.32.34.5为目的PING
R1#ping
Protocol [ip]:
Target IP address:
% Bad IP address
Target IP address: 61.32.34.5
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 192.168.2.1
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 61.32.34.5, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
Source address or interface: 192.168.3.1
显然无法ping通,即内部地址无法直接与外部地址通信,于是我们启用NAT转换。
◎启动NAT静态转换。
R1(config)#int loop0
R1(config-if)#ip nat inside 定义内部接口
R1(config-if)#int loop1
R1(config-if)#ip nat inside定义内部接口
R1(config-if)#int s0
R1(config-if)#ip nat outside定义外部接口
R1(config)#ip nat inside source static 192.168.2.1 61.32.34.6
定义将内部的接口地址静态的的一对一的转换为61.32.34.6
R1(config)#ip nat inside source static 192.168.3.1 61.32.34.7
定义将内部的接口地址静态的的一对一的转换为61.32.34.7
此时用扩展Ping以192.168.2.1 和192.168.3.1为源以61.32.34.5为目的PING
R1#debug ip nat 开放debug进行ping包时候的抓包转换测试。
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/36 ms
00:36:36: NAT: s=192.168.2.1->61.32.34.6, d=61.32.34.5 [20]
看到我们的源已经进行了转换,转换后的地址才可以与目的地址进行通信
00:36:36: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.1 [20]
00:36:36: NAT: s=192.168.2.1->61.32.34.6, d=61.32.34.5 [21]
00:36:36: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.1 [21]
00:36:36: NAT: s=192.168.2.1->61.32.34.6, d=61.32.34.5 [22]
00:36:36: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.1 [22]
00:36:36: NAT: s=192.168.2.1->61.32.34.6, d=61.32.34.5 [23]
00:36:36: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.1 [23]
00:36:36: NAT: s=192.168.2.1->61.32.34.6, d=61.32.34.5 [24]
00:36:36: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.1 [24]
00:37:40: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [25]
00:37:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [25]
00:37:40: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [26]
00:37:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [26]
00:37:40: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [27]
00:37:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [27]
00:37:40: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [28]
00:37:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [28]
00:37:40: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [29]
00:37:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [29]
有PING的结果可以看出,现在内部PC已经可以和外部通信了,并且通过debug信息可以看到NAT转换已经开始运行。但这种转换是NAT里最简单的转换,下面我们学习其他几种NAT转换方式。
2.动态NAT
1.启动动态NAT
为loop0接口定义多个地址
R1(config-if)#ip add 192.168.2.1 255.255.255.0
R1(config-if)#ip add 192.168.2.2 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.3 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.4 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.5 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.6 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.7 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.8 255.255.255.0 sec
R1(config-if)#ip add 192.168.2.9 255.255.255.0 sec
  定义外部地址池
  R1(config)#ip nat pool outpool 61.32.34.6 61.32.34.7 netmask 255.255.255.0 定义了一个转换池的名字叫做outpool,也就是说,你转换后的地址是从这个池子里面出的。
  定义允许的转换的内部地址
  R1(config)#access-list 10 permit host 192.168.2.1
  R1(config)#access-list 10 permit host 192.168.3.1
  定义转换
  R1(config)#ip nat inside source list 10 pool outpool 定义了内部需要转换的是有access-list来控制的10,而转后后的地址是从outpool里面来提取的。
◎此时用扩展PING以192.168.2.2 和192.168.2.3为源以61.32.34.5为目的PING
   观察转换效果
  R1#debug ip nat
   R1#ping
Source address or interface: 192.168.2.3
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/41/44 ms
01:06:35: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [65]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [65]
01:06:35: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [66]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [66]
01:06:35: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [67]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [67]
01:06:35: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [68]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [68]
01:06:35: NAT: s=192.168.3.1->61.32.34.7, d=61.32.34.5 [69]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.3.1 [69]
Source address or interface: 192.168.2.2
01:13:28: NAT: s=192.168.2.2->61.32.34.6, d=61.32.34.5 [85]
01:13:28: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.2 [85]
01:13:28: NAT: s=192.168.2.2->61.32.34.6, d=61.32.34.5 [86]
01:13:28: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.2 [86]
01:13:29: NAT: s=192.168.2.2->61.32.34.6, d=61.32.34.5 [87]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.2 [87]
01:13:29: NAT: s=192.168.2.2->61.32.34.6, d=61.32.34.5 [88]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.2 [88]
01:13:29: NAT: s=192.168.2.2->61.32.34.6, d=61.32.34.5 [89]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.6->192.168.2.2 [89]
当我们清楚所有的NAT会话以后,再次PING的时候的转换则有
01:06:35: NAT: s=192.168.2.3->61.32.34.6, d=61.32.34.5 [65]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.6->192.168. 2.3 [65]
01:06:35: NAT: s=192.168.2.3->61.32.34.6, d=61.32.34.5 [66]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.6->192.168. 2.3 [66]
01:06:35: NAT: s=192.168. 2.3->61.32.34.6, d=61.32.34.5 [67]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.6->192.168. 2.3 [67]
01:06:35: NAT: s=192.168. 2.3->61.32.34.6, d=61.32.34.5 [68]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.6->192.1682.3 [68]
01:06:35: NAT: s=192.168. 2.3->61.32.34.6, d=61.32.34.5 [69]
01:06:35: NAT*: s=61.32.34.5, d=61.32.34.6->192.168. 2.3 [69]
01:13:28: NAT: s=192.168.2.2->61.32.34.7, d=61.32.34.5 [85]
01:13:28: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.2 [85]
01:13:28: NAT: s=192.168.2.2->61.32.34.7, d=61.32.34.5 [86]
01:13:28: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.2 [86]
01:13:29: NAT: s=192.168.2.2->61.32.34.7, d=61.32.34.5 [87]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.2 [87]
01:13:29: NAT: s=192.168.2.2->61.32.34.7, d=61.32.34.5 [88]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.2 [88]
01:13:29: NAT: s=192.168.2.2->61.32.34.7, d=61.32.34.5 [89]
01:13:29: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.2 [89]
显然2次转换的地址不同,即转换是动态的。
Source address or interface: 192.168.2.4
01:19:38: NAT: translation failed (E), dropping packet s=192.168.2.4 d=61.32.34.
5.
01:19:40: NAT: translation failed (E), dropping packet s=192.168.2.4 d=61.32.34
01:19:42: NAT: translation failed (E), dropping packet s=192.168.2.4 d=61.32.34.
01:19:44: NAT: translation failed (E), dropping packet s=192.168.2.4 d=61.32.34.
01:19:46: NAT: translation failed (E), dropping packet s=192.168.2.4 d=61.32.34.
重点*:当我们第2次PING的时候提示转换错误,NAT放弃转换,是因为外部地址只有2个,所以只能转换2个内部地址,如果想转换第3个地址,必须前面2个转换中有一个转换停止。可见这种转换有很大的局限性,为了能够实现多个地址转换成一个地址,我们需要新的转换方法。即NAT超载。
3.NAT超载
NAT超载配置很简单只需添加一个overload参数即可:
R1(config)#ip nat inside source list 10 pool outpool overload 用overload是用于反复的提取地址池中的地址,其实是一种pat的技术。也就是利用一个逻辑地址的多个端口来进行转换。
此时用扩展ping命令来测试NAT转换。
01:28:10: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [95]
01:28:10: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [95]
01:28:10: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [96]
01:28:10: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [96]
01:28:10: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [97]
01:28:10: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [97]
01:28:10: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [98]
01:28:11: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [98]
01:28:11: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [99]
01:28:11: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [99]
01:29:03: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [105]
01:29:03: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [105]
01:29:03: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [106]
01:29:03: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [106]
01:29:03: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [107]
01:29:03: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [107]
01:29:03: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [108]
01:29:03: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [108]
01:29:03: NAT: s=192.168.2.1->61.32.34.7, d=61.32.34.5 [109]
01:29:03: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.1 [109]
1:30:40: NAT: s=192.168.2.3->61.32.34.7, d=61.32.34.5 [115]
01:30:40: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.3 [115]
01:30:40: NAT: s=192.168.2.3->61.32.34.7, d=61.32.34.5 [116]
01:30:41: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.3 [116]
01:30:41: NAT: s=192.168.2.3->61.32.34.7, d=61.32.34.5 [117]
01:30:41: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.3 [117]
01:30:41: NAT: s=192.168.2.3->61.32.34.7, d=61.32.34.5 [118]
01:30:41: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.3 [118]
01:30:41: NAT: s=192.168.2.3->61.32.34.7, d=61.32.34.5 [119]
01:30:41: NAT*: s=61.32.34.5, d=61.32.34.7->192.168.2.3 [119]
观察3次转换的地址,发现都是转换成61.32.34.7,即允许多个地址转换成一个地址,这就是所谓的NAT超载,这种NAT转换能够扩展IP地址的数量,是最长用的一种NAT转换方式。
实验总结:
NAT技术是现在网络中应用的比较广泛的技术,但是其实它的核心还是很简单的,对于它的变化,我们只能告诉大家多多掌握,因为这样的话对你理解包的交换原理是很有用的。