Routing
Cisco
CCNA
nat
pat

纪念我的第三个CCNA实验 NAT和PAT内外网转换

CCNA的NAT和PAT的基本实验

背景

我们在玩virtualBox和Vmware这样的虚拟机的时候,在设置虚拟机的网卡配置的时候,虚拟机会让我们选择NAT或者说是桥接(Bridge)。我们通常选择NAT的话,如果不出意外,虚拟机里面的操作系统就会自动连上网络了。如下图所示。
スクリーンショット 2018-01-27 22.56.20.png
图1

需求

那么这里的NAT是指什么意思呢。
我们先提一个需求,如下图所示
スクリーンショット 2018-01-27 23.23.10.png
图2

PCA和PCB要完成通信,需要跨过属于它们的路由RT1和RT2,所以需要在路由器RT1和RT2上做路由分配。这样当然可以实现通信,PCA的IP地址也同样被暴露。当PCB想pingPCA的时候,他需要指明PCA在路由RT1管理下的具体的IP地址。
那么有没有一直方式能够在不用暴露PCA的IP的情况下,能够在PCA上ping通PCB呢,答案就是NAT。

需求解决方案

スクリーンショット 2018-01-27 23.39.04.png
图3

如上图所示,通过在路由器RT1上设置NAT,从而实现了PCA的ping包里面的源IP地址得到了更换,ping包在从RT1出来以后,ping包就一10.1.1.1而不是192.168.10.1的身份去寻找PCB了。
スクリーンショット 2018-01-27 23.43.32.png
图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

实验

实验需求

スクリーンショット 2018-01-28 0.50.05.png

图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的代码了。

实验场景

スクリーンショット 2018-01-28 0.58.10.png

实验步骤

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的路由陪好就行了,但是没人那么干吧。
祝大家生活愉快。