雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3536|回复: 5

[转]关于NAT中route-map.ACL顺序关系

[复制链接]
发表于 2007-4-19 23:01:57 | 显示全部楼层 |阅读模式
今天作了BSCI第一章实验2之任务4之后,突然想到验证下在NAT过程中route-map acl路由器到底是先根据谁来找谁来决定最终如何转换的.
就利用任务4的结果了,在任务4里R1路由器配置是这样的:

任务的要求是源IP是10.1.1.0/24网络的目标到10.254.0.0/24网络的都转换成BBR池中的地址即192开头.
其他的都要转成POD池中地址即10开头的

ip nat pool bbr 192.168.1.1 192.168.1.254 prefix-length 24
ip nat pool pod 10.1.0.64 10.1.0.95 netmask 255.255.255.0
ip nat inside source route-map to-bbr pool bbr
ip nat inside source route-map to-pod pool pod
ip http server
ip classless
ip route 10.0.0.0 255.0.0.0 172.31.1.5
!         
!         
access-list 100 permit ip 10.1.1.0 0.0.0.255 10.254.0.0 0.0.0.255
access-list 101 permit ip 10.1.1.0 0.0.0.255 any
!         
route-map to-bbr permit 10
match ip address 100
!         
route-map to-pod permit 10
match ip address 101
先分析这个:
上面这个配置没有错误,路由器工作正常.
本来我的想法是路由器是先根据ACL找到ROUTE-MAP然后根据ROUTE-MAP所在的IP NAT INSIDE这样语句里指定的POOL池来转换的.
于是我改了下配置如下:
ip nat pool bbr 192.168.1.1 192.168.1.254 prefix-length 24
ip nat pool pod 10.1.0.64 10.1.0.95 netmask 255.255.255.0
ip nat inside source route-map to-bbr pool bbr
ip nat inside source route-map to-pod pool pod
ip http server
ip classless
ip route 10.0.0.0 255.0.0.0 172.31.1.5
!         
!  
access-list 101 permit ip 10.1.1.0 0.0.0.255 any      
access-list 100 permit ip 10.1.1.0 0.0.0.255 10.254.0.0 0.0.0.255
!         
route-map to-bbr permit 10
match ip address 100
!         
route-map to-pod permit 10
match ip address 101
注意上面的蓝色部分,我将ACL顺序调了下,如果按照我原先的理解(acl--route-map--pool)那么,此时不管是目的网络是什么,路由器都会按照101的acl找到route-map即to-pod,也就是都会转成pod池里的.但是实际实验结果却不是如同我想的,看来路由器不是先找ACL,难道是根据IP NAT INSIDE这个语句的排列顺序?可是不管我先写哪个,路由器最终都是认为ip nat inside source route-map to-bbr pool bbr这条语句在先.于是开始晕了,到群里和人讨论,网友☆诺メ言☆起初想法也和我一样,它也提出了ACL顺序问题,然后它提出no掉
ip nat inside source route-map to-bbr pool bbr这个语句,看路由器是否能正常转到POD地址池里,因为如果是先由ip nat inside语句来找route-map最后看是否匹配acl这个顺序的话,那么no 掉ip nat inside source route-map to-bbr pool bbr 这个语句后,路由器应该转成POD里的地址池,但是实际测试结果不是这样,路由器给出了找不到BBR地址池,数据被丢弃这样的提示.看来路由器不是按照IP NAT INSIDE来先找的,现在能怀疑的就是ROUTE-MAP了,于是NO 掉route-map to-bbr permit 10 这个语句,此时数据来的时候,路由器只能根据route-map to-pod permit 10来匹配了,最终地址应该被转成pod池里的也就是10开头的,实际结果证明了我们的猜想.看来路由器是先根据ROUTE-MAP顺序来执行的,路由器先根据route-map找匹配的ACL,根据ACL检查数据是否符合要求,最后根据ROUTE-MAP所在的ip nat inside语句来转换.

一切看起来似乎已经解决了,但有一个疑问一直存在,我刚才改ip nat inside 不管先写哪个路由器最终的排的顺序为什么都不变呢,难道是根据字母顺序排列的?
ip nat inside source route-map to-bbr pool bbr
ip nat inside source route-map to-pod pool pod
看 前面单词都一样 不同的就是to-bbr 和to-pod这里了 b在p前面,于是我将to-bbr改成to-xbr ,路由器顺序果然也变了,于是同样更改route-map 顺序也变了,看来路由器真的是按照字母顺序排的,本任务第一个配置 之所以能始终正常而不管ACL的顺序是否符合正常的理论要求,就是因为ROUTE-MAP这个顺序始终没变.

最终修改的配置为:
ip nat pool pod 10.1.0.64 10.1.0.95 netmask 255.255.255.0
ip nat pool xbr 192.168.1.1 192.168.1.254 netmask 255.255.255.0
ip nat inside source route-map to-pod pool pod
ip nat inside source route-map to-xbr pool xbr
ip http server
ip classless
ip route 10.0.0.0 255.0.0.0 172.31.1.5
!         
!         
access-list 100 permit ip 10.1.1.0 0.0.0.255 any
access-list 101 permit ip 10.1.1.0 0.0.0.255 10.254.0.0 0.0.0.255
!         
route-map to-pod permit 10
match ip address 100
!         
route-map to-xbr permit 10
match ip address 101

在这个配置下,根据route-map 路由器会先调用acl100来检查数据是否符合,这个时候不管目的网络是什么都符合要求,路由器认为第一个route-map始终被匹配.所以始终会被转成POD池里的地址.下面是实际实验调试结果:
*Mar  1 03:34:01.423: NAT: s=10.1.1.3->10.1.0.67, d=10.254.0.5 [105]
r1-2514>
*Mar  1 03:34:03.415: NAT*: s=10.1.1.3->10.1.0.67, d=10.254.0.5 [106]
r1-2514>
*Mar  1 03:34:05.415: NAT*: s=10.1.1.3->10.1.0.67, d=10.254.0.5 [107]
r1-2514>
*Mar  1 03:34:07.419: NAT*: s=10.1.1.3->10.1.0.67, d=10.254.0.5 [108]
r1-2514>
*Mar  1 03:34:09.415: NAT*: s=10.1.1.3->10.1.0.67, d=10.254.0.5 [109]
------------------------
*Mar  1 03:34:24.139: NAT: s=10.1.1.3->10.1.0.67, d=10.1.0.2 [110]
*Mar  1 03:34:24.167: NAT*: s=10.1.0.2, d=10.1.0.67->10.1.1.3 [110]
*Mar  1 03:34:24.179: NAT*: s=10.1.1.3->10.1.0.67, d=10.1.0.2 [111]
*Mar  1 03:34:24.203: NAT*: s=10.1.0.2, d=10.1.0.67->10.1.1.3 [111]
*Mar  1 03:34:24.211: NAT*: s=10.1.1.3->10.1.0.67, d=10.1.0.2 [112]
*Mar  1 03:34:24.235: NAT*: s=10.1.0.2, d=10.1.0.67->10.1.1.3 [112]
*Mar  1 03:34:24.251: NAT*: s=10.1.1.3->10.1.0.67, d=10.1.0.2 [113]
*Mar  1 03:34:24.275: NAT*: s=10.1.0.2, d=10.1.0.67->10.1.1.3 [113]
*Mar  1 03:34:24.287: NAT*: s=10.1.1.3->10.1.0.67, d=10.1.0.2 [114]
*Mar  1 03:34:24.311: NAT*: s=10.1.0.2, d=10.1.0.67->10.1.1.3 [114]
可以看出不管目的地址是10.1.0.2 还是10.254.0.5都转成10.1.0.6*这样的地址了.
发表于 2008-2-23 01:03:10 | 显示全部楼层
不错,写的非常好,多看2遍就明白了
发表于 2008-3-3 20:47:50 | 显示全部楼层
很好,不错,受教中……
发表于 2010-4-27 20:50:53 | 显示全部楼层
果然好样的 做完实验……继续努力
" g! J* V9 l$ t! J' P3 m态度决定一切啊
发表于 2010-6-2 22:30:19 | 显示全部楼层
很值得学习
发表于 2010-7-23 13:28:11 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-5-18 11:49 , Processed in 0.073746 second(s), 17 queries , Gzip On.

快速回复 返回顶部 返回列表