CCNA的NAT和PAT的基本实验
背景
我们在玩virtualBox和Vmware这样的虚拟机的时候,在设置虚拟机的网卡配置的时候,虚拟机会让我们选择NAT或者说是桥接(Bridge)。我们通常选择NAT的话,如果不出意外,虚拟机里面的操作系统就会自动连上网络了。如下图所示。
图1
需求
那么这里的NAT是指什么意思呢。
我们先提一个需求,如下图所示
图2
PCA和PCB要完成通信,需要跨过属于它们的路由RT1和RT2,所以需要在路由器RT1和RT2上做路由分配。这样当然可以实现通信,PCA的IP地址也同样被暴露。当PCB想pingPCA的时候,他需要指明PCA在路由RT1管理下的具体的IP地址。
那么有没有一直方式能够在不用暴露PCA的IP的情况下,能够在PCA上ping通PCB呢,答案就是NAT。
需求解决方案
如上图所示,通过在路由器RT1上设置NAT,从而实现了PCA的ping包里面的源IP地址得到了更换,ping包在从RT1出来以后,ping包就一10.1.1.1而不是192.168.10.1的身份去寻找PCB了。
图4
如上图所示,当PCB拿到源目的地址为10.1.1.1的ping包而不是源目的地址为192.168.10.1的ping包的时候,为了给源目的地址返回“我已经收到ping包的信息”,PCB会下意识的去寻找源目的地址10.1.1.1即路由器RT1.这是第一步
然后第二步,在路由器RT1上,路由器RT1会告诉ping的返回包:其实目的地址10.1.1.1是我管辖下的192.168.10.1哦。然后将ping的返回包的目的ip换为192.168.10.1然后再决定要通过F0口,然后再发送给PCA。
这里可以看出,和一般的单纯靠路由通信的最大的不同时,NAT将源地址换掉了。
这里讲一下专业术语
192.168.10.1 local IP address
10.1.1.1 local global IP address
172.16.10.1 outside local IP address
***** outside global IP address
实验
实验需求
图5
如上图所示,还是那五个人,只是liugongpeng充当了server。现在要求其余四个人pingserver的时候能够在通过RT1后以2.2.2.0/24的ip的身份对server进行ping访问,同时server在对其余四个人返回ping信息的时候是通过找2.2.2.0/24的方式去寻找的。
这里需要用到的是动态nat,除了需要在RT1,RT2上做路由表设置以外,还需要做的是在RT1上做动态NAT设置。这里因为篇幅有限,咱就贴出如何陪路由的IP的代码了。
实验场景
实验步骤
1.在RT1上配置默认路由。配完以后RT1可以ping通liugongpeng
RT1(config)#ip route 0.0.0.0 0.0.0.0 s2/0
RT1(config)#do ping 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/2 ms
2.在RT1上配置access-list,允许192.168.10.0/24,192.168.20.0/24这两个网段通过。
RT1(config)#ip access-list standard 1
RT1(config-std-nacl)#permit 192.168.10.0 0.0.0.255
RT1(config-std-nacl)#permit 192.168.20.0 0.0.0.255
RT1(config)#do show access-list
Standard IP access list 1
10 permit 192.168.10.0 0.0.0.255
20 permit 192.168.20.0 0.0.0.255
3.在RT1上建立名字为syoui的NAT pool,范围为2.2.2.1~2.2.2.254
RT1(config)#ip nat pool syoui 2.2.2.1 2.2.2.254 netmask 255.255.255.0
RT1(config)#do show running-config | begin ip nat pool
ip nat pool syoui 2.2.2.1 2.2.2.254 netmask 255.255.255.0
4.在RT1上指定F0, F1端口为NAT inside,同时指明S2/0为NAT outside.
RT1(config)#int f0/0
RT1(config-if)#ip nat inside
RT1(config-if)#int f1/0
RT1(config-if)#ip nat inside
RT1(config)#int s2/0
RT1(config-if)#ip nat outside
5.在RT1上将NATpool和accesslist 1赋给RT1上所有的inside
RT1(config)#ip nat inside source list 1 pool syoui
6.在RT2上,配置去往2.2.2.0/24的路由表
RT2(config)#ip route 2.2.2.0 255.255.255.0 s2/0
7.分别在panjiahong,xuzhongwei,zhangyang,zhengquan上ping liugongpeng
C:\>ipconfig
FastEthernet0 Connection:(default port)
Link-local IPv6 Address.........: FE80::202:17FF:FE1A:D3B9
IP Address......................: 192.168.10.1
Subnet Mask.....................: 255.255.255.0
Default Gateway.................: 192.168.10.254
C:\>ping 172.16.10.1
Pinging 172.16.10.1 with 32 bytes of data:
Reply from 172.16.10.1: bytes=32 time=1ms TTL=126
Reply from 172.16.10.1: bytes=32 time=1ms TTL=126
Reply from 172.16.10.1: bytes=32 time=2ms TTL=126
Reply from 172.16.10.1: bytes=32 time=1ms TTL=126
Ping statistics for 172.16.10.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 2ms, Average = 1ms
C:\>ipconfig
FastEthernet0 Connection:(default port)
Link-local IPv6 Address.........: FE80::2E0:F7FF:FED8:A290
IP Address......................: 192.168.20.4
Subnet Mask.....................: 255.255.255.0
Default Gateway.................: 192.168.20.254
C:\>
C:\>
C:\>ping 172.16.10.1
Pinging 172.16.10.1 with 32 bytes of data:
Reply from 172.16.10.1: bytes=32 time=28ms TTL=126
Reply from 172.16.10.1: bytes=32 time=1ms TTL=126
Reply from 172.16.10.1: bytes=32 time=1ms TTL=126
Reply from 172.16.10.1: bytes=32 time=10ms TTL=126
Ping statistics for 172.16.10.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 28ms, Average = 10ms
成功
7.在RT1上查看NAT转换记录
RT1#
RT1#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 2.2.2.4:13 192.168.10.1:13 172.16.10.1:13 172.16.10.1:13
icmp 2.2.2.4:14 192.168.10.1:14 172.16.10.1:14 172.16.10.1:14
icmp 2.2.2.4:15 192.168.10.1:15 172.16.10.1:15 172.16.10.1:15
icmp 2.2.2.4:16 192.168.10.1:16 172.16.10.1:16 172.16.10.1:16
icmp 2.2.2.5:5 192.168.20.4:5 172.16.10.1:5 172.16.10.1:5
icmp 2.2.2.5:6 192.168.20.4:6 172.16.10.1:6 172.16.10.1:6
icmp 2.2.2.5:7 192.168.20.4:7 172.16.10.1:7 172.16.10.1:7
icmp 2.2.2.5:8 192.168.20.4:8 172.16.10.1:8 172.16.10.1:8
我们可以看到192.168.10.1上ping了四次,这里记录了192.168.10.1的四次转换记录,均换为2.2.2.4的local global IP地址。
我们也在192.168.20.4上ping了四次,同样的道理,这里记录了192.168.20.4转换为2.2.2.5的四次记录。
至此动态NAT的实验成功
接下来我们进行PAT的实验,PAT的实验和动态NAT实验的区别主要在两个地方
1.pool里面只需要指定一个ip就可以了
2.给RT1上的inside赋予access-list和pool的时候最后要加上overload,指明端口超载
下面我们继续
8.取消对inside的赋值,取消pool,重新生成pool,重新对inside赋值,清空nat转换表
RT1(config)#no ip nat inside source list 1 pool syoui
RT1(config)#no ip nat pool syoui
RT1(config)#ip nat pool syoui 2.2.2.2 2.2.2.2 netmask 255.255.255.255
RT1(config)#ip nat inside source list 1 pool syoui overload
RT1(config)#exit
RT1#clear ip nat translation *
9.重新ping,发现也能ping通liugongpeng,然后在RT1上查看NAT转换记录。
RT1#show ip nat translation
Pro Inside global Inside local Outside local Outside global
icmp 2.2.2.2:1024 192.168.20.4:9 172.16.10.1:9 172.16.10.1:1024
icmp 2.2.2.2:1025 192.168.20.4:10 172.16.10.1:10 172.16.10.1:1025
icmp 2.2.2.2:1026 192.168.20.4:11 172.16.10.1:11 172.16.10.1:1026
icmp 2.2.2.2:1027 192.168.20.4:12 172.16.10.1:12 172.16.10.1:1027
icmp 2.2.2.2:10 192.168.10.2:10 172.16.10.1:10 172.16.10.1:10
icmp 2.2.2.2:11 192.168.10.2:11 172.16.10.1:11 172.16.10.1:11
icmp 2.2.2.2:12 192.168.10.2:12 172.16.10.1:12 172.16.10.1:12
icmp 2.2.2.2:5 192.168.20.3:5 172.16.10.1:5 172.16.10.1:5
icmp 2.2.2.2:6 192.168.20.3:6 172.16.10.1:6 172.16.10.1:6
icmp 2.2.2.2:7 192.168.20.3:7 172.16.10.1:7 172.16.10.1:7
icmp 2.2.2.2:8 192.168.20.3:8 172.16.10.1:8 172.16.10.1:8
icmp 2.2.2.2:9 192.168.10.2:9 172.16.10.1:9 172.16.10.1:9
这里可以看到,192.168.10.2,192.168.20.3,192.168.20.4在对liugongpengping的时候,都转换成了唯一的2.2.2.2.
这就是PAT的特点
用一个local global IP解决所有的local IP的出行问题
这里补充说命的是,一般的PAT都是指定端口的,也就是说没有必要建立pool了。如下面的写法
RT1(config)#ip nat inside source list 1 interface s2/0
这样在查看NAT转换表的时候出来的结果是这样的
RT1#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 10.1.1.1:13 192.168.20.4:13 172.16.10.1:13 172.16.10.1:13
icmp 10.1.1.1:14 192.168.20.4:14 172.16.10.1:14 172.16.10.1:14
icmp 10.1.1.1:15 192.168.20.4:15 172.16.10.1:15 172.16.10.1:15
icmp 10.1.1.1:16 192.168.20.4:16 172.16.10.1:16 172.16.10.1:16
icmp 10.1.1.1:21 192.168.10.1:21 172.16.10.1:21 172.16.10.1:21
icmp 10.1.1.1:22 192.168.10.1:22 172.16.10.1:22 172.16.10.1:22
icmp 10.1.1.1:23 192.168.10.1:23 172.16.10.1:23 172.16.10.1:23
icmp 10.1.1.1:24 192.168.10.1:24 172.16.10.1:24 172.16.10.1:24
可以看到,NAT转换后的local global的IP就自动转换为乐s2/0的IP了。
结尾
NAT,PAT的作用除了隐蔽IP外,还有一个重要的作用就是解决IP不足的问题。当然不用NAT似乎也可以,只要在ISP上把针对内网IP的路由陪好就行了,但是没人那么干吧。
祝大家生活愉快。