在这个拓扑里我把R1、R3、R5模拟为PC 网关配置为2.2.2.1,
R2的F0/0口设置为inside,F0/1口设置为outside,(怎样,这里就和平常的设置不一样了拔,哈哈)。
R2上的关键配置如下:
ip nat pool kk 1.1.1.4 1.1.1.10 netmask 255.255.255.0
ip nat outside source list 10 pool kk
access-list 10 permit 2.2.2.0 0.0.0.255
开启所有设备的debug ip icmp ,还要开启R2上面的debug ip nat ,然后看看ping效果怎样。
第一步:R4、R5 上 ping R2保证网关正常通信:
第二步:R4、R5 上 ping R1测试是否正常通信:
这里我们发现ping不通了,那就先看看R2的工作情况:
这里可以看到其实R2是正常进行了NAT转换的,那为什么R4、R5不能ping通R1呢,我们去看看R1的工作情况:
可以看到R1也正常的进行了ICMP回包,而且看到是以R4、R6经过NAT之后的地址作为目标IP回复的,那就奇怪了,为什么这些回包没有被R4和R5收到呢。那我们仔细看看刚刚R2上显示的信息,R2也收到了R1的回包,但是SRC、 DST也是正确的,难道是R2不能把回包正确的通过F0/1发送回R4、R5?这里我们先做一个有趣的尝试,在R2上ping 1.1.1.4 、1.1.1.6这两个ip地址看看有什么事情发生:
显示的都是正常连通的,看起来一切正常,但是如果我们去看看R2上的ARP表呢,或许会有收获。
注意看一下1.1.1.4和1.1.1.6对应的MAC地址,全部一样 而且都是R2的F0/0接口记录的。那我们可以想想R1回复的ICMP包目标IP地址是1.1.1.4或者1.1.1.6的时候会发生什么,R2会把从F0/1上送出去吗,肯定不会。(但是会怎样处理我也不知道,求指教)。
------------------------我是可恶的分割线------------------------
通过上面查看的一些信息可以肯定之前的配置有错误,可以看出ip nat outside source与 ip nat inside source的配置是有区别的。后面我参考了http://hi.baidu.com/bystander1983/item/1a0272cdd1e15e22e80f2e44(超链接做出来会flash崩溃)博客里面的观点,具体请阅读原文:
ip nat inside source
Translates the source of IP packets that are traveling inside to outside.
功能1:将从内到外的IP包的源地址进行转换(将内部局部地址转换为内部全局地址)
Translates the destination of the IP packets that are traveling outside to inside.
功能2:将从外回包到内的IP包的目的地址进行转换(将内部全局地址转换为内部局部地址)
ip nat outside source
Translates the source of the IP packets that are traveling outside to inside.
功能1:将从外到内的IP包的源地址进行转换(将外部全局地址转换为外部局部地址)
Translates the destination of the IP packets that are traveling inside to outside.
ip nat poo kk 2.2.2.10 2.2.2.15 net 255.255.255.0,修改完毕之后我们再去R4、R5上看看能不能ping通R1
可以看到R4、R5能ping通R1了,同时注意ICMP回包的目的IP地址。那我们再看看R2上的ARP表发生了什么变化
可以看到由现在NAT之后的IP地址所学习到的MAC地址是F0/1接口上的(为什么修改NAT地址池之后会这样改变呢?现在我也不清楚,求指教),其实我们还可以去看一下修改NAT地址前后R1上pingR4的情况:
可以看出虽然都是可以从R1上ping通R4(同理R5也可以),而且ICMP包回复的地址也都是经过NAT转换了的,但是我们可以想一下,从R1上发起ping的时候ICMP的目标IP是2.2.2.4,对于R2来说他收到这样的ICMP包时是按照路由表去从F0/1口转发的,R4的回包虽然经过NAT之后的地址,但依然是可以到达R1的,所以R1认为ICMP是得到了响应的。但是如果ping是从R4发起的,R1的回包却是不可能回到R4的,所以出现仅能'单向发起通信。
对于其中的一些问题还是不能找到准确的解释比如为何NAT地址池的地址不同时ARP里记录的学习接口不同,为何ICMP 回复地址与查询地址不一样依然会认为测试成功。求指教!!!!