前言
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。BGP强大的选路规则正是BGP最大的亮点。BGP选路原则共有13条,今天通过思科实验给大家讲解一下前7条选路原则。 01首先,给大家列一下BGP的前7条选路原则:
优选weight值大的路由优选local-preference值大的路由优选本地起源的路由优选as-path长度小的路由比较起源属性 ( i优先 ?)优选med值小的路由Ebgp优于Ibgp需要注意的是,BGP选路原则是有前提的,那就是路由要打上*>。
02接下来,我们通过实验来了解这七条选路原则。
实验拓扑如下:
11.Weight值特点:
a、比大 b、ciscos私有 c、本地有效 d、只能在in方向 e、默认值0/32768(本地)此时R1能够从R7和R2两个方向学习到R7的环回口77.1.1.1路由,R1优选从R7过来的路由,这是比较到第七条选路原则(Ebgp优于IBGP)
所以我们可以通过修改weight值来让R1优选R2过来的路由。
做法:修改weight值的方法有两个
A、使用neighbor X.X.X.X weight y
R1: router bgp 100
neighbor 22.1.1.1 weight 22
此时在R1上会优选R2过来的路由,因为从R2过来的路由weight值为22,大于R7过来的路由weight值0。
注意:此方法会影响所有从R2过来的路由,让其weight值都变成22。
B、Route-map
R1: access-list 1 permit 77.1.1.1
route-map W
match ip add 1
set weight 111
route-map W permit 999
router bgp 100
neighbor 17.1.1.7 route-map W in
此时R1又会优选R7过来的路由,因为R7过来的weight值变为了111。
注意:使用route-map的时候一定不要忘记写一条大号放行,防止影响其他路由的学习。
2Local-Preference特点:
a、比大 b、默认值100 c、一个AS内有效 d、in/out将有关weight值的修改配置删除,恢复原状,R1优选从R7过来的路由,这是比较到第七条选路原则。
这时候有个问题,local-preference只会在一个AS内有效,并且我们发现从R7过来的路由为空,那么这个空值又是什么意思呢?我们可以通过show ip bgp X.X.X.X来查看某一条路由的具体信息。
我们发现从R7学习的路由LP值也是100,那么这个数值是怎么来的呢?R7在将77.1.1.1这条路由传递给R1时并不会携带LP值,R1自动打上本地的LP值(默认是100)。
所以我们可以通过修改LP值来让R1优选R2过来的路由。
做法:修改Local-preference值的方法有两个
A.使用bgp default local-preference y
R1: router bgp 100
bgp default local-preference 77
此时在R1上会优选R2过来的路由,因为从R2过来的路由LP值为100,大于R1给R7过来的路由添加的本地LP值77。
注意:此方法会影响所有从EBGP邻居过来的路由,让其LP值都变成77。
B、Route-map
R1: access-list 1 permit 77.1.1.1
route-map LP
match ip add 1
set local-preference 22
route-map LP permit 999
router bgp 100
neighbor 22.1.1.1 route-map LP in
此时R1又会优选R7过来的路由。
注意:使用route-map修改LP值时可以在R1针对R2邻居的in方向做,也可以在R2针对R1的out方向做。但千万不要在R1针对R7邻居的in方向改大LP值(超过默认值100),这会导致R1只能从R7收到路由,此时R2学到77的路由也是从R1学到的。
3起源本地(下一条为0.0.0.0,始发路由)起源本地时指这条路由是自己产生的,下一条为0.0.0.0的始发路由。
将修改配置删除,恢复原状,R1优选从R7过来的路由,这是比较到第七条选路原则。
R1上77.1.1.1这条路由的下一跳都是0.0.0.0,都不是始发路由。我们可以在R1上伪造一条77.1.1.1的路由,并宣告进bgp中,让其成为始发路由。
R1: ip route 77.1.1.1 255.255.255.255 null 0
router bgp 100
network 77.1.1.1 mask 255.255.255.255
我们发现R1上77.1.1.1的路由优选的是本地始发路由,另外并没有从R2学习到77.1.1.1的路由,那是因为此时R2上学到77.1.1.1的路由是从R1过来的,这是比较到第四条AS-Path长度小的。
我们可以发现此时R1虽然是优选本地始发路由,但是本地始发路由的weight值也变成了32768,所以此时是依据第一条选路原则选取的。所以在思科路由器上第三条基本比较不到,因为第一条就可以比出来了,但是也可以修改R7过来的weight值为32768,那么就会比较第三条了。
所以我们可以通过修改LP值来让R1优选R2过来的路由。
做法:修改Local-preference值的方法有两个
A.使用bgp default local-preference y
R1: router bgp 100
bgp default local-preference 77
此时在R1上会优选R2过来的路由,因为从R2过来的路由LP值为100,大于R1给R7过来的路由添加的本地LP值77。
注意:此方法会影响所有从EBGP邻居过来的路由,让其LP值都变成77。
B、Route-map
R1: access-list 1 permit 77.1.1.1
route-map LP
match ip add 1
set local-preference 22
route-map LP permit 999
router bgp 100
neighbor 22.1.1.1 route-map LP in
此时R1又会优选R7过来的路由。
注意:使用route-map修改LP值时可以在R1针对R2邻居的in方向做,也可以在R2针对R1的out方向做。但千万不要在R1针对R7邻居的in方向改大LP值(超过默认值100),这会导致R1只能从R7收到路由,此时R2学到77的路由也是从R1学到的。
4AS-Path特点:
a、比长度短
b、AS之间传递
c、bgp bestpath as-path ignore 忽略这条选路原则
将有关修改配置删除,恢复原状,R7能够从R1和R2两个方向学习到R1环回口11.1.1.1这条路由,此时R7选择的是从R1学习这条路由,这是比较到第十条选择原则,最稳定的EBGP邻居,第8条以后的选路原则我们下篇再讲。
AS-path属性是公认必遵的,其最大的用途就是用来做EBGP的防环,另外它也能用来当作选路原则。路由每经过一个AS都会把经过的AS号增加在路由属性里传递。所以AS-path只能在EBGP邻居修改才有效。
我们通过修改AS-path来让R7从R2学习11.1.1.1的路由,在R7针对R1邻居进来的时候增加3个AS-path,分别为AS1,AS2,AS3,让R7针对R2邻居进来的时候增加2个AS-path,分别是,AS4,AS5。修改As-path用route-map。
R7: access-list 1 permit 11.1.1.1
route-map AS-1 permit 10
match ip address 1
set as-path prepend 1 2 3
route-map AS-1 permit 999
route-map AS-2 permit 10
match ip address 1
set as-path prepend 4 5
route-map AS-2 permit 999
router bgp 200
neighbor 17.1.1.1 route-map AS-1 in
neighbor 27.1.1.2 route-map AS-2 in
此时R7会优选R2过来的路由,因为从R1过来的路由AS-path长度是1 2 3 100,而从R2过来的路由AS-path长度是4 5 100,也就是R1过来的路由经过了4个AS,而R2过来的路由只经过了3个AS,优选长度短的路由,所以优选R2。
注意:可以使用 bgp bestpath as-path ignore
来忽略这条选路原则,这句命令是隐藏命令,无法通过tab键补全,只能自己敲全。
R7:bgp bestpath as-path ignore此时,哪怕R2过来的AS-path更短,R7依旧会经过第十条选路原则选择R1。
AS-path属性既是选路属性,也同样是防环属性,所以在增加AS号的时候不能增加R7的AS号200,否则R7因为EBGP防环而不收路由。我们可以通过 set as-path prepend last-as y ,这句命令是重复最后一个as号几次,从而避免添加一个后续可能已经有的AS号。
R7: route-map AS-1 permit 10
match ip address 1
set as-path prepend 1 2 3
set as-path prepend last-as 2
至于这个AS如何增加的,可以自己通过实验论证。
5起源属性起源属性是用来标识路由是如何被放进路由表的。目前路由被放进路由表的起源属性只有两种,一种是?,意味着路由是被重分布进来的,另外一种是i,意味着路由是被network,或者agg的。比较规则很简单,i优于?。
删除之前的修改配置,此时,R7上学习到11.1.1.1的路由是优选的R1(第十条)。
R7从R1和R2学习到的路由起源属性都是i,这是因为R1是network宣告11.1.1.1这条路由的,我们通过修改起源属性来让R7优选从R2学习到11.1.1.1路由。
R7: access-list 1 permit 11.1.1.1
route-map O
match ip add 1
set origin incomplete
route-map O permit 999
router bgp 200
neighbor 17.1.1.1 route-map O in
此时R7会优选R2过来的路由,因为从R1过来的路由起源属性是?,而从R2过来的路由起源属性是i,i优于?,所以优选R2。
6MED特点:
a、唯一仅仅控制相邻AS之间的选路属性,比小
b、默认MED只会在第一个AS(离自己最近的AS,也就是AS-path里最左边的AS)相同的情况下才会比较
c、bgp always-compare-med可以打破特点b,使得第一个AS不一样也可以比较MED
d、相邻的AS传递路由携带MED默认值为0
e、相隔AS或者IBGP传递路由携带MED为空,空MED不会比较
f、bgp bestpath med missing-as-worst能够让空值变成一个很大的值
g、从EBGP学习到的BGP条目携带的MED可以传给其他IBGP邻居
h、从IBGP传递过来的路由的MED值,在传给EBGP的时候携带的MED会被置空
将之前修改配置删除,恢复原状,此时R7优选从R1优选学习11.1.1.1的路由(第十条)
通过特点d、g和h,我们看到R7收到11.1.1.1路由,通过R1过来的MED值为0,通过R2过来的MED值为空。
我们可以通过修改MED值来让R7优选从R2学习11.1.1.1路由。将从R2过来的MED值改为50,从R1过来的改为100。
R1: access-list 1 permit 11.1.1.1
route-map MED
match ip add 1
set metric 100
route-map MED-1
match ip add 1
set metric 100
route-map MED-1 permit 999
route-map MED-2
match ip add 1
set metric 50
route-map MED-2 permit 999
router bgp 200
neighbor 17.1.1.1 route-map MED-1 in
neighbor 27.1.1.2 route-map MED-2 in
此时在R7上会优选R2过来的路由,因为从R2过来的路由MED值为50,小于R1过来的路由MED值100。
7EBGP优于IBGP这条选路原则其实就是一个定律,因为EBGP的AD值为20,而IBGP的AD值为200,小而优先。
———— / END / ————