CCNP-BGP选路实验route-map修改MED值:BGP-metric

by-小世界 http://redcisco.blog.163.com
实验拓扑图:
 实验需求:
1.  AS65001发往AS65005:到达R7-7.7.7.0/24 经过R3;R7-70.70.70.0/24 经过R2和R4;
2. 不允许在R1上做策略,本实验请通过修改med值达到需求。
根据需求可以知道,这属于“修改出路由,影响入数据”的例子。
实验配置:在原实验的基础上: http://redcisco.blog.163.com/blog/static/23105006220141240563185/
R5(config)#router bgp 65005
R5(config-router)# no  neighbor 35.1.1.3 route-map as-path out
R5(config-router)#exit
R5(config)# no access-list 10
R5(config)# no route-map as-path
  R5(config)#access-list 10 permit 70.70.70.0 0.0.0.255
R5(config)#route-map med permit 10 
R5(config-route-map)#match ip address 10
R5(config-route-map) #set metric 100// 默认是0,将该值改大,应该说通告出去的将会是次优的了。
R5(config)#route-map med permit 20//不要忘了deny any
R5(config-route-map)#router bgp 65005 
R5(config-router)# neighbor 35.1.1.3 route-map med out
 
// 可以发现,R3上有R5通告的关于70.70.70.0/24的路由的metric值变成了100;但是R1看来,7.7.7.0/24和 70.70.70.0/24都依然选择R3。
//要想通过修改MED值来实现,因为MED值在BGP选路原则里面比较靠后,所以要首先确保as-path一致;
R5参考配置:
access-list 10 permit 70.70.70.0 0.0.0.255
access-list 20 permit 7.7.7.0 0.0.0.255
access-list 30 permit 70.70.70.0 0.0.0.255
!
route-map as-path-med permit 10
 match ip address 20 30
 set as-path prepend 65005       
route-map as-path-med permit 20
 match ip address 10
 set metric 100
route-map as-path-med permit 30
R5(config)#router bgp 65005        
R5(config-router)# neighbor 35.1.1.3 route-map as-path-med out 
 
 //可以发现这样的策略没有生效。
R5#show run | s ro
router eigrp 100
 network 56.0.0.0
 network 57.0.0.0
 no auto-summary
router bgp 65005
 no synchronization
 bgp log-neighbor-changes
 neighbor 35.1.1.3 remote-as 65003
 neighbor 35.1.1.3 route-map as-path-med out
 neighbor 56.1.1.6 remote-as 65005
 neighbor 56.1.1.6 update-source Ethernet0/1
 neighbor 56.1.1.6 next-hop-self
 neighbor 57.1.1.7 remote-as 65005
 neighbor 57.1.1.7 update-source Ethernet0/2
 neighbor 57.1.1.7 next-hop-self
//修改成这样的语法:
route-map as-path-med permit 10
 match ip address 10
 set metric 100
route-map as-path-med permit 20
 match ip address 20 30
 set as-path prepend 65005
route-map as-path-med permit 30
 
 //可以发现策略对7.7.7.0/24生效,而且对于70.70.70.0/24的metric值也生效,但是对于as-path却没有改变;
这样也不对了。
// 当一个 match 语句有多个条件的时候只要匹配其中的一个条件则整句 match 语句就算匹配成功 
//再修改策略
R5(config)#no route-map as-path-med
R5(config)# route-map as-path-med permit 10
R5(config-route-map)# match ip address 10
R5(config-route-map)# set metric 100 
R5(config-route-map)# set as-path prepend 65005
R5(config-route-map)# route-map as-path-med permit 20
R5(config-route-map)# match ip address 20
R5(config-route-map)# set as-path prepend 65005
R5(config-route-map)# route-map as-path-med permit 30
R5(config-route-map)#exit
R5(config)# no access-list 30 permit 70.70.70.0 0.0.0.255
 
显然,R3通过R5学到的关于70.70.70.0/24的路由的metric和as-path都发生改变,但是R1到达 70.70.70.0/24的metric值依然没变,而且在as-path都一致的情况下,继续向下比较选路原则,最终选择了R2(走右边)。那又是什么原因呢?又该怎么做呢?
需要强调的是,MED值的作用范围是两个AS之间有效,所以R3通告给R1是metric值仍然是0,不会改变,这一点不同于AS-path的全局性,所以在R3上抓取 70.70.70.0/24,修改metric,并告知R1,才能实现。
R3(config)#access-list 10 permit 70.70.70.0 0.0.0.255
R3(config)#route-map med permit 10
R3(config-route-map)#match ip address 10
R3(config-route-map)#set metric 200
R3(config-route-map)#route-map med permit 20
R3(config)#router bgp 65003
R3(config-router)#no neighbor 35.1.1.5 route-map med out
R3(config-router)#neighbor 13.1.1.1 route-map med out

现在我明白了,我被绕进去了,其实这个题目是无解的,在我们不做关于metric值之前,R1选择了R2(应该比较到了router-id),人家R2本来的metric值就是0,无论你怎么改左边部分的metric,都不会影响选路的。
(想认真学的话,就仔细看看路由表,路由表是我按编号处理的,不会出错的)
route-map注意事项: 
1 在编写语句的时候我们不写编号则编号默认为 10 
2 在编写语句的时候我们不写 deny 或 permit 则默认为 permit
3 当有多个match语句时候,仅当所有match语句都匹配的时候该 Route-map 语句才算匹配成功
4 当一个match语句有多个条件的时候只要匹配其中的一个条件则整句match语句就算匹配成功 
5 当我们之前没写编号的语句,之后我们有写了编号为 10 的语句则覆盖之前的语句 
6 我们在删除 Route-map 语句的时候,没写编号则删除整个 Route-map 语句   
7 执行的时候自上而写下执行 
8 如果一条语句没有 match 则意味着匹配所有条目
route-map节点中至少应该有一个permit,如果某路由信息没有通过任一节点,则认为该路由信息没有通过该路由策略;如果都是deny,则没有路由信息通过该路由策略,这也不是route-map存在的意义。

感谢这么多的路由条目,哇咔咔。 朋友喜欢就推荐 http://redcisco.blog.163.com

你可能感兴趣的:(思科网络实践)