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

#CCNA的NAT和PAT的基本实验
#背景
  我们在玩virtualBox和Vmware这样的虚拟机的时候，在设置虚拟机的网卡配置的时候，虚拟机会让我们选择NAT或者说是桥接(Bridge)。我们通常选择NAT的话，如果不出意外，虚拟机里面的操作系统就会自动连上网络了。如下图所示。
![スクリーンショット 2018-01-27 22.56.20.png](https://qiita-image-store.s3.amazonaws.com/0/191439/56561481-c29c-39a6-47bb-02c8727208a3.png)
图1

##需求
  那么这里的NAT是指什么意思呢。 
  我们先提一个需求，如下图所示
![スクリーンショット 2018-01-27 23.23.10.png](https://qiita-image-store.s3.amazonaws.com/0/191439/61de5b68-bd19-e645-985d-3edb8bdd0b66.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](https://qiita-image-store.s3.amazonaws.com/0/191439/cafb8c2e-69da-aeeb-7608-8fff61d9018a.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](https://qiita-image-store.s3.amazonaws.com/0/191439/685fd67b-0f3e-eb46-6fb9-c429181acfb6.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](https://qiita-image-store.s3.amazonaws.com/0/191439/c02549c0-3a43-1fb3-7c2a-b9a0864b2d73.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](https://qiita-image-store.s3.amazonaws.com/0/191439/0c9d1c40-c7da-4a6a-ffdc-5556b8967fc6.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的路由陪好就行了，但是没人那么干吧。
  祝大家生活愉快。