以上是BGP路由走向的每种选择方法了。在路由传播时它会从上到下一条一条去匹配。
今天结合这10条我们来具体分析。上拓扑吧!
OK按照拓扑我们建立互相的BGP邻居。
建立好之后我们在R2上宣告一条环回口2.2.2.2的路由。我们试分析,在R3上收到此路由是通过R几学到的呢?它会匹配图一的那一项呢?
先看前四项,我们并没有去改这些属性默认情况下都是一样的所以忽略。
当然567也都是一样所以我们来看8.它说从最近的IBGP邻居那里学习到。OK那么一眼就能看出R3最近的IBGP邻居只有R4了.因为R4这边是以太口所以COST小于串口的。我们拦验证一下。
R3#sh ip bgp
BGP table version is 3, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i2.2.2.2/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
还可以在R3上来查看2.2.2.2这条路由的明细:
R3#sh ip bgp 2.2.2.2/32
BGP routing table entry for 2.2.2.2/32, version 3
Paths: (2 available, best #1, table Default-IP-Routing-Table)
Not advertised to any peer
2
4.4.4.4 (metric 11) from 4.4.4.4 (4.4.4.4)
Origin IGP, metric 0, localpref 100, valid, internal, best
2
1.1.1.1 (metric 1563) from 1.1.1.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, internal
好了 这是正常情况下的路由走向,下面我们来通过图一一步一步来更改属性,实现认为选路,我们现在让R3的2.2.2.2这条路由从R1走。
一、我们来修改权重即weight值来影响路由
首先先来看看一些默认值:
R1#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.2/32 12.1.1.2 0 0 2 i
R2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.2/32 0.0.0.0 0 32768 i
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i2.2.2.2/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
R4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.2/32 24.1.1.2 0 0 2 i
要想在R3上达到去R2从R1走的效果我们只需要将R3从R1学到的路由权重调大点就行。
步骤:
R3(config-router)#nei 1.1.1.1 weight 1
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 i
*>i 1.1.1.1 0 100 1 2 i
为了能看的更清楚修改每项所影响的效果我们在R2上在启动一个环回口地址为:
22.22.22.22/32 我们把它也宣告进入BGP中。再来查看R3的BGP路由。
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 i
*>i 1.1.1.1 0 100 1 2 i
* i22.22.22.22/32 4.4.4.4 0 100 0 2 i
*>i 1.1.1.1 0 100 1 2 i
我们发现修改权重之后它会影响所有从R1学到的路由。所以一般情况下我们不这么做。
如果我们现在让2.2.2.2从R1走22.22.22.22从R4走。通过修改权重怎么做呢?想想~
步骤:
1.先还原到默认情况下。即都是从R4走。
2.R3上ip prefix-list 2 seq 5 permit 2.2.2.2/32
route-map weight permit 10
match ip address prefix-list 2
set weight 1
route-map weight permit 20
3.neighbor 1.1.1.1 route-map weight in
来看看效果:
R3#clear ip bgp * s
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 i
*>i 1.1.1.1 0 100 1 2 i
*>i22.22.22.22/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
需要注意的是weight是cisco私有的,排在第一位所以要慎用!
二、接下来我们来看看local preference(本地优先级)
他只能发送给IBGP在同一个AS内 默认值100 越大越好
我们来做一下,首先将配置恢复初始状态
为了达到让2.2.2.2从R1走我们只需将这条路由的优先级调高点就可以了。
步骤(在R1上):
1.ip prefix-list 2 seq 5 permit 2.2.2.2/32
2 route-map local permit 10
match ip address prefix-list 2
set local-preference 123
route-map local permit 20
3.neighbor 3.3.3.3 route-map local out
我们到R3上来看效果:
R3#sh ip b
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 i
*>i 1.1.1.1 0 123 0 2 i
*>i22.22.22.22/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
三、它说是优先于起源本地的路由
怎么理解呢?也就是说我们的next-hop。
现在R1通告R3时next-hop是0.0.0.0(也就是自己)
如有还有一条路也学到了那么指定next-hop为12.1.1.2(假如)那么当然就会选择这条了
实验就不做了~还得改拓扑!懒嘿嘿!
四、优选于最短的AS path
有两种做法一种是进方向一种是出方向。基于以上的要求我们分别来做。
首先是OUT的做法:我们将R4传给R3的as-path改的大一点 那么2.2.2.2路由将会从R1走向R3。来看具体步骤:
在R2上:ip prefix-list 2 seq 5 permit 2.2.2.2/32
route-map AS permit 10
match ip address prefix-list 2
set as-path prepend 3 4 5
route-map AS permit 20
来R3上看看BGP路由:
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 3 4 5 i
*>i 1.1.1.1 0 100 0 2 i
*>i22.22.22.22/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
再来做IN方向的
在R4上做:
ip prefix-list 2 seq 5 permit 2.2.2.2/32
route-map AS permit 10
match ip address prefix-list 2
set as-path prepend 5 6 7
route-map AS permit 20
来R3上看看
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 5 6 7 2 i
*>i 1.1.1.1 0 100 0 2 i
*>i22.22.22.22/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2
由以上我们通过修改as-path人为的可以进行选路,但是这样修改会有很多的弊端,如果真实的环境中在R3右边如果恰好有一个AS是7,那么R3去往2.2.2.2肯定会先发给AS7但是由于BGP的水平分割AS7中的路由并不会收这条路由直接丢弃。那么R3就永远不能把这条路由送往AS2了。所以为了解决这种问题我们通常都是在修改AS-PATH时多加几个目的区域的区域号。比如上拓扑中我们这样做:set as-path prepend 2 2 2
这样答到的选路效果是一样的。
五、通过控制起源地址来实现选路在上篇文章就涉及到了。
同样我们晴空刚才配置,回复初始状态。
我们在R2上做:
ip prefix-list 2 seq 5 permit 2.2.2.2/32
route-map origin permit 10
match ip address prefix-list 2
set origin egp 1
route-map origin permit 20
然后去R3上看效果:
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* i2.2.2.2/32 4.4.4.4 0 100 0 2 e
*>i 1.1.1.1 0 100 0 2 i
*>i22.22.22.22/32 4.4.4.4 0 100 0 2 i
* i 1.1.1.1 0 100 0 2 i
我们说它的选路依据是:IGP<EBGP<INCOMPLETE
六、MED值
首先是值越小越好,首先我们在R3上在开启一个环回口33.33.33.33/32并发布到BGP中
R2上去往33.33.33.33肯定是从R1走因为R1的route-id比R4的小。
R2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.2/32 0.0.0.0 0 32768 i
*> 22.22.22.22/32 0.0.0.0 0 32768 i
* 33.33.33.33/32 24.1.1.4 0 1 i
*> 12.1.1.1 0 1 i
我们现在通过修改MED值让他从R4走。
我们在R1上做:
ip prefix-list 3 seq 5 permit 33.33.33.33/32
route-map med permit 10
match ip address prefix-list 3
set metric 3
route-map med permit 20
我们去R2上看看效果:
R2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.2/32 0.0.0.0 0 32768 i
*> 22.22.22.22/32 0.0.0.0 0 32768 i
*> 33.33.33.33/32 24.1.1.4 0 1 i
* 12.1.1.1
3 0 1 i