本篇Blog与如下实验需求完全相同,但是抓路由时采取了不同的做法,即对路由进行打属性,抓属性即可
实验详解BGP的选路规则(华为设备)
之前的做法是,使用前缀列表抓取路由,然后使用路由策略匹配更改属性;这种做法是可以完成实验需求的,但是对于真实项目中的后其扩展很不利,所以既然用的是BGP,那就使用其团体属性,即对路由进行标记,制作策略时直接抓取标记的即可;
如实验拓扑所示,AS1的路由团体属性为1:1;AS2的路由团体属性为2:2;AS3的路由团体属性为3:3
如何对路由进行标记?
1、每个路由器开启传播团体属性的开关
2、使用route-policy,对抓取的路由进行团体值的设定
3、对邻居进行出向的调用
为什么这里也进行了抓取?那不是跟之前的做法相同了?
注意,这种抓取路由是为了更好了实施策略是进行的更具扩展性,比如奇偶分开、AS分开等
关于IBGP、EBGP建邻本编不做过多赘述,本篇最开始的连接有详细的说明
AS1
[R1]dis ip ip-prefix comm
Prefix-list comm
Permitted 14
Denied 49
index: 10 permit 100.1.1.1/32
index: 20 permit 100.1.2.2/32
[R1-route-policy]di th
#
route-policy comm permit node 10
if-match ip-prefix comm
apply community 1:1
#
route-policy comm permit node 20
#
return
AS2
[R3]dis ip ip-prefix comm
Prefix-list comm
Permitted 11
Denied 31
index: 10 permit 100.2.3.3/32
index: 20 permit 100.2.4.4/32
[R3-route-policy]di th
#
route-policy comm permit node 10
if-match ip-prefix comm
apply community 2:2
#
route-policy comm permit node 20
#
return
AS3
[R5]dis ip ip-prefix comm
Prefix-list comm
Permitted 0
Denied 0
index: 10 permit 100.3.5.5/32
index: 20 permit 100.3.6.6/32
index: 30 permit 100.3.7.7/32
[R5-route-policy]di th
#
route-policy comm permit node 10
if-match ip-prefix comm
apply community 3:3
#
route-policy comm permit node 20
#
return
对邻居的出向调用,如下为效果展示,可见团体值的设置与传递与预期相符
现在有了团体值,其进行了全网的传递,那么如何使用团体值呢,即如何抓取团体值并进行选路的修改呢
1.抓取团体值
ip community-filter 1 permit 1:1
2.策略中匹配
if-match community-filter 1
有了以上的基础下面开始进行选路调整
本实验作为BGP选路的练习实验,即所用到的选路规则不能重复
默认是走R3的,因为BGP选路规则中的第7条,即优选EBGP邻居发来的路由
解决:对R2这个IBGP邻居的入向增大Pref_val;三步走,抓属性,做策略,调用之
[R1]dis ip community-filte
Community filter Number: 2
permit 2:2
[R1-route-policy]di th
#
route-policy upPV permit node 10
if-match community-filter 2
apply preferred-value 100
#
route-policy upPV permit node 20
#
return
[R1-bgp]peer 10.1.2.2 route-policy upPV import
验证查看
默认是走R1的,因为BGP选路规则中的第7条,即优选EBGP邻居发来的路由
解决:对R4这个IBGP邻居的入向增大Loc_Pref;三步走,抓属性,做策略,调用之
[R3]dis ip community-filter
Community filter Number: 1
permit 1:1
[R3-route-policy]di th
#
route-policy upLP permit node 10
if-match community-filter 1
apply local-preference 200
#
route-policy upLP permit node 20
#
return
[R3-bgp]peer 10.2.4.4 route-policy upLP import
AS1的路由也会从R7进入AS3,因为R7会从EBGP学习AS1的路由
解决:对R2这个EBGP邻居的入向增多As_Path;当然也可以在R2的出向调用;之所以使用入向是因为在传递团体属性时用的都是出向,所以在为了避免冲突,写成入向,当然也可以在出现的策略上继续进行匹配;
三步走,抓属性,做策略,调用之
[R7]dis ip community-filter
Community filter Number: 1
permit 1:1
[R7-route-policy]di th
#
route-policy addAP permit node 10
if-match community-filter 1
apply as-path 1 1 1 1 additive
#
route-policy addAP permit node 20
#
return
[R7-bgp]peer 10.0.27.1 route-policy addAP import
验证查看
AS2的路由也会从R6进入AS3,因为R6会从EBGP学习AS2的路由
解决:对R4这个EBGP邻居的入向增大MED;当然最好在R4的出向调用;因为MED是我去修改你对我的选路,对于AS2的路由传递进AS3时,我们不想让其从R6进入,即增大从R6进入的MED,即我在自己的身上修改你对我的选路;之所以使用入向是因为在传递团体属性时用的都是出向,所以在为了避免冲突,写成入向,当然也可以在出现的策略上继续进行匹配;
三步走,抓属性,做策略,调用之
[R6]dis ip com
Community filter Number: 2
permit 2:2
[R6-route-policy]di th
#
route-policy upMED permit node 10
if-match community-filter 2
apply cost 77
#
route-policy upMED permit node 20
#
return
[R6-bgp]peer 10.0.46.1 route-policy upMED import
验证查看
由于前面的选路中AS1去AS3更改了R7上的As_Path,则AS3去AS1将会原路返回
在R4上对EBGP邻居R6更改其Origin_id为? 因为i>e>?
[R4]dis ip community-filter
Community filter Number: 3
permit 3:3
[R4-route-policy]di th
#
route-policy chOG permit node 10
if-match community-filter 3
apply origin incomplete
#
route-policy chOG permit node 20
#
return
[R4-bgp]peer 10.0.46.2 route-policy chOG import
验证查看
至此,需求全部完成