思科网络实验(34)——BGP的十三条选路原则
1.拓扑中含有三个AS,只有在AS10内存在三台路由器,在AS10内部运行EIGRP传路由,剩余的AS内部只有一台路由器。
2.R2和R1、R4通过直连接口建立EBGP对等体,R3和R1、R4建立IBGP对等体,和R5通过直连接口建立EBGP的对等体。
通过修改BGP路由的属性值,达到选路的效果。
实验前的预配置请看:思科网络实验(36)——BGP(自动汇总+手工汇总+重分发)这节课。
问题1:现在在R2上通告2.2.2.2/24和8.8.8.8/24的路由,当R3收到这两条路由时,他会优选R1做下一跳还是优选R4做下一跳?
解:R3会优选R1做下一跳。比权重都一样,都是0;比Local-preference都是100;都不是R3始发的;AS-Path都包含一个AS2;起源属性都是IGP;MED默认都是0;都是IGP路由,运行EIGRP链路带宽一致,去往环回口的度量值也是相同的;没有启用负载均衡;建邻居的时间也差不多;比较Router-ID,R1的ID比R4小,所以R3会优选R1做下一跳。
验证:
去往2.2.2.0/24的路由走R1,去往8.8.8.0/24的路由也走R1。
通过权重(weight)的修改实现R3去往2.2.2.0/24走R1,去往8.8.8.0/24走R4。
权重只有本地意义,只能在本地上修改,针对R4传过来的8.8.8.0/24的路由,把权重改大一点(默认0)。
R3(config)#access-list 8 permit 8.8.8.0 0.0.0.0
R3(config)#route-map w permit 10
R3(config-route-map)#match ip address 8
R3(config-route-map)#set weight 1
R3(config-route-map)#exit
R3(config)#route-map w permit 20
R3(config-route-map)#exit
R3(config)#router bgp 10
R3(config-router)#neighbor 4.4.4.4 route-map w in
R3(config-router)#end
R3#clear ip bgp * soft
使用标准ACL抓路由,起名为8,标椎的ACL只能跟原地址和源反码,用匹配原地址的部分抓路由的前缀,用匹配反码的部分匹配前缀的范围(要抓的路由只有这么一条,所以反码写全零就好了)。
标准ACL再抓取路由的时候,只能匹配路由的前缀!!不能匹配路由的掩码!!
写一个名为w的route-map,序列号为10,匹配ACL8,针对ACL8设置weight为1;
route-map和ACL一样,默认有一个隐藏的语句,他会把所有的其他的东西都给deny掉。
所以后面必须在写一条序列号为20的route-map,允许其他所有的通过。
通过上图可以发现:去往2.2.2.0/24的路由走R1,去往8.8.8.0/24的路由走R4了。R4给给我通告的8.8.8.0/24的路由的权重变为1了。
R3(config)#router bgp 10
R3(config-router)#no neighbor 4.4.4.4 route-map w in
R3(config-router)#end
R3#clear ip bgp * soft
通过Local-Preference的修改实现R3去往2.2.2.0/24走R1,去往8.8.8.0/24走R4。
①:在R1上抓取8.8.8.0/24的路由,把Local-Preference改小一些;
②:在R4上抓取8.8.8.0/24的路由,把Local-Preference改大一些;可以针对EBGP邻居,再接收路由的时候做一个入向修改,也可以针对IBGP邻居,在发送方向做一个出向修改。
在发送路由的时候,默认不会携带Local-Preference!!如下图,Local-Preference为空,R4也一样。
R4(config)#access-list 108 permit ip host 8.8.8.0 host 255.255.255.0
R4(config)#route-map local permit 10
R4(config-route-map)#match ip address 108
R4(config-route-map)#set local-preference 101
R4(config-route-map)#exit
R4(config)#route-map local permit 20
R4(config-route-map)#exit
R4(config)#router bgp 10
R4(config-router)#neighbor 24.1.1.2 route-map local in
R4(config-router)#end
R4#clear ip bgp * soft
通过一个扩展ACL抓取路由,前面匹配源地址的部分抓路由的前缀,后面匹配目的地址的部分抓路由的掩码。
R4(config)#router bgp 10
R4(config-router)#no neighbor 24.1.1.2 route-map local in
R4(config-router)#end
R4#clear ip bgp * soft
通过As-Path的修改实现R3去往2.2.2.0/24走R1,去往8.8.8.0/24走R4。
不建议在实际的操作中修改As-Path!!!
如果你要在R2上针对R1,做一个出向的修改As-Path的值,那么,你修改的优先级是要高于自身的AS号的添加的!!会先根据route-map给这些路由添加好AS号之后,再添加自身的AS号,把路由发走(2 345);如果你要在R1上针对R2,做一个入向的修改As-Path的值,那么,R1收到路由之后,他会在你添加的AS号的后方,再添加咱们的设置(345 2)。
R2(config)#ip prefix-list 8 seq 10 permit 8.8.8.0/24
R2(config)#route-map AS permit 10
R2(config-route-map)#match ip address prefix-list 8
R2(config-route-map)#set as-path prepend 2 2 2
R2(config-route-map)#exit
R2(config)#route-map AS permit 20
R2(config-route-map)#exit
R2(config)#router bgp 2
R2(config-router)#neighbor 12.1.1.1 route-map AS out
R2(config-router)#end
R2#clear ip bgp * soft
set as-path prepend 2 2 2:prepend为在...之前添加AS,在添加我的AS号之前给你加上你设置的AS号。
R2(config)#router bgp 2
R2(config-router)#no neighbor 12.1.1.1 route-map AS out
R2(config-router)#end
R2#clear ip bgp * soft
通过起源属性(origin)的修改实现R3去往2.2.2.0/24走R1,去往8.8.8.0/24走R4。
在R1上把8.8.8.0/24的路由给R3发送的时候,起源属性改成EGP或者incomplete。
R1(config)#ip prefix-list 8 seq 10 permit 8.8.8.0/24
R1(config)#route-map origin permit 10
R1(config-route-map)#match ip address prefix-list 8
R1(config-route-map)#set origin egp 10
R1(config-route-map)#exit
R1(config)#route-map origin permit 20
R1(config-route-map)#exit
R1(config)#router bgp 10
R1(config-router)#neighbor 3.3.3.3 route-map origin out
R1(config-router)#end
R1#clear ip bgp * soft
R1(config)#router bgp 10
R1(config-router)#no neighbor 3.3.3.3 route-map origin out
R1(config-router)#end
R1#clear ip bgp * soft
通过MED的修改实现R2去往3.3.3.0/24的路由优选R4。
R3(config)#router bgp 10
R3(config-router)#network 3.3.3.0 mask 255.255.255.0
R3(config-router)#end
R1(config)#access-list 3 permit 3.3.3.0 0.0.0.0
R1(config)#route-map med permit 10
R1(config-route-map)#match ip address 3
R1(config-route-map)#set metric 10
R1(config-route-map)#exit
R1(config)#route-map med permit 20
R1(config-route-map)#exit
R1(config)#router bgp 10
R1(config-router)#neighbor 12.1.1.2 route-map med out
R1(config-router)#end
R1#clear ip bgp * soft
从上图可以看出,原地址3.3.3.3,目的地址2.2.2.2,R3通过上面的接口给发走,R1通过12.1.1.1发给R2,到达2.2.2.2,R2再通过下面的接口把包给发出,通过R4的右边的接口发出。这说明咱们在访问2.2.2.2的时候走的是上面,回的是下面。
注意:
一台路由器收到多条相同的路由,比较MED的前提:
①:你的这些EBGP邻居来自于同一个邻居AS;
②:你收到的这些BGP路由他们的AS-Path要完全一致。
如果你是通过不同的邻居路由器收到相同的路由,这些路由的As-Path不一样,你可以在BGP进程中加一条bgp always-compare-med比较MED的好坏。
知识补充:
R1------R2建立邻居,在R2上针对R1发过来的路由修改一下属性。
1.使用ACL或前缀列表抓取我们想修改属性的路由
2.通过Route-map工具,调用ACL或前缀列表,针对匹配的路由进行修改
3.在BGP的进程中,针对邻居去应用route-map(in或out)