前文我们了解了BGP的路由属性和优选规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15489497.html;今天我们来聊一聊BGP路由控制相关话题;
BGP路由控制
BGP可以结合几乎所有的策略工具,并利用BGP路径属性,来影响BGP选路;我们知道BGP的优选规则,它是依次比较首选值、本地优先级、聚合方式、AS_Path、起源属性优先级、med、邻居类型、内部IGP开销、router-id、IP地址这些属性;所以我们要影响BGP选路就可以通过修改这些属性即可;当然不是所有的属性都可以手动修改,比如起源属性,这个属性就是宣告网络时就决定了;再比如邻居类型,这个也是无法修改的,这个属性和网络拓扑密切相关;一般常修改,优选值、本地优先级、as_path长度、MED;
实验:如下拓扑,按照要求配置BGP
R1的配置
sys sys R1 int g0/0/0 ip ad 12.0.0.1 24 int g0/0/1 ip add 13.0.0.1 24 int lo 1 ip add 1.1.1.1 32 int lo 7 ip add 7.7.7.7 32 int lo 8 ip add 8.8.8.8 32 bgp 11 router-id 1.1.1.1 peer 12.0.0.2 as 234 peer 13.0.0.3 as 234
R2的配置
sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int eth1/0/0 ip add 24.0.0.2 24 int lo 2 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 area 0 net 2.2.2.2 0.0.0.0 net 24.0.0.2 0.0.0.0 net 12.0.0.2 0.0.0.0 bgp 234 router-id 2.2.2.2 peer 12.0.0.1 as 11 peer 4.4.4.4 as 234 peer 4.4.4.4 con lo 2
R3的配置
sys sys R3 int g0/0/0 ip add 13.0.0.3 24 int g0/0/1 ip add 34.0.0.3 24 int lo 3 ip add 3.3.3.3 32 ospf 1 router-id 3.3.3.3 area 0 net 3.3.3.3 0.0.0.0 net 34.0.0.3 0.0.0.0 net 13.0.0.3 0.0.0.0 bgp 234 router-id 3.3.3.3 peer 13.0.0.1 as 11 peer 4.4.4.4 as 234 peer 4.4.4.4 con lo 3
R4的配置
sys sys R4 int eth1/0/0 ip add 24.0.0.4 24 int g0/0/0 ip add 34.0.0.4 24 int g0/0/1 ip add 45.0.0.4 24 int lo 4 ip add 4.4.4.4 32 ospf 1 router-id 4.4.4.4 area 0 net 4.4.4.4 0.0.0.0 net 34.0.0.4 0.0.0.0 net 24.0.0.4 0.0.0.0 bgp 234 router-id 4.4.4.4 peer 2.2.2.2 as 234 peer 2.2.2.2 con lo 4 peer 3.3.3.3 as 234 peer 3.3.3.3 con lo4 peer 45.0.0.5 as 55
R5的配置
sys sys R5 int g0/0/0 ip add 45.0.0.5 24 int lo 5 ip add 5.5.5.5 32 int lo 6 ip add 6.6.6.6 32 int lo 9 ip add 9.9.9.9 32 bgp 55 router-id 5.5.5.5 peer 45.0.0.4 as 234
验证各路由器bgp邻居是否正常建立?
提示:可以看到5个路由器的BGP邻居都成功建立;
在R1上使用network本地宣告lo接口网络至BGP
验证:在R4上查看bgp路由表,看看对应是否能够学习到R1宣告的网络?
提示:可以看到R4能够学习到R1宣告的网络,并且每个网络都有两个下一跳;最优的路由是通过R2到达R1;
在R4上使用命令将对应R3发送的路由修改其优选值为33,看看对应R4学习到的路由有什么变化?
提示:可以看到在R4上修改R3发送的路由的优选值以后,对应R3发送的路由就变为了最优路由;这是因为BGP优选规则里在路由下一跳可用的情况下,首先比较优选值,数字越大越优先;所以此时R3发送到更新就成为了最优路由;优选值这个属性生效范围是本地有效,一般不修改此属性来影响BGP选路;
在R4上删除R3发送的更新修改优选值
提示:删除修改优选值命令以后,对应R2发送到路由更新变为了最优路由;这是因为R2的Router-id小于R3;
在R3上修改本地优先级,看看对应对R4收到的路由会有什么变化?
提示:本地优先级这个属性只会在IBGP邻居间传递,不会在EBGP间传递,其次本地优先级是属于公认可选属性,所以在R3上配置本地优先级属性以后,在本地BGP路由表中是看不到的,原因是本地bgp路由是通过R1学习过来的(EBGP邻居不会携带本地优先级属性),但是R3再项R4传递路由时就会携带本地优先级(因为本地优先级只会在IBGP邻居间传递,默认是100);
验证:在R4上查看bgp路由表,看看对应从R3学习过来的路由,对应本地优先级是否被更改为133了呢?
提示:可以看到R4此时学习到R3发送到路由更新,对应路由的本地优先级就为我们更改后的优先级;对应路由也变为了最优路由;这是因为优选规则中,如果优选值一样的情况下,会比较本地优先级,数字越大越优先;
在R5上使用引入宣告lo接口网络至BGP
提示:可以看到在R5的bgp路由表中,对应lo接口网络都被引入至BGP里;
验证:在R1上查看bgp路由表,看看对应路由是否学习到?
提示:可以看到R1并没有学习到R5发布的更新;
验证:在R2或R3上查看是否学习到R5发布的更新?
提示:可以看到R2和R3是正常学习到R5发布的更新,但是对应路由不可用;原因是R2和R3没有去往45.0.0.5的路由;解决办法,在R4上强制修改更新源为自己;
在R4上修改发送给R2和R3的路由更新源为自己
提示:以上命令表示R4向R2和R3发布路由更新时,会将对应更新源修改为自己;即R2,R3学习通过R4学习到的路由,对应下一跳为R4;
验证:在R2和R3上查看对应路由是否更改了更新源?是否可用?
提示:可以看到现在R4修改了更新源以后,对应R2和R3学习到的路由就可用了;
验证:再次在R1上查看bgp路由表,看看是否能够正常学习到R5发布的路由更新呢?
提示:可以看到R1现在能够学习到R5发布的路由更新;
在R3上修改med值为1000
在R1上查看BGP路由表,看看对应从R3学习到的路由med是否修改为1000了呢?
提示:可以看到R1上bgp路由表,对应从R3学习到的路由并没有修改MED值;对应MED值都没有;这是因为MED属性只在EBGP邻居间传递,且只有始发的路由器才会发送MED;还有一点default med 1000这个命令只对引入的路由有效,本地宣告,或从其他邻居学习过来的路由无效,所以我们在R3上修改通过default med 1000命令修改med值其实是不生效的;
在R3和R2上新建接口lo10 并添加ip地址为10.10.10.10 32,并将lo10网络路由引入宣告至BGP
验证:在R1上查看bgp路由表,看看对应是否从R2和R3上学习到10.10.10.10/32的路由呢?
提示:可以看到此时R1学习到R2和R3发送的路由更新,对应R3发送的路由更新,对应路由的med值为1000;这是因为R3上修改了med值为1000;
验证:在R2上修改med值为2000,看看对应R1上最有路由是否发生变化?
验证:再次查看R1的bgp路由表,看看对应路由有什么变化?
提示:可以看到R1此时学习到R2发送的路由更新中10.10.10.10/32的路由,对应med值为2000,并且最优路由从原来下一跳为12.0.0.2变为了13.0.0.3;这说明med值越小越优先被优选;
在R4上查看bgp路由,看看对应路由的med值是否会有变化呢?
提示:可以看到对应R4上bgp路由表中对应路由的med值并没有发生变哈;这是因为MED值只在EBGP间传递;对于IBGP间不会传递med值;所以在R4上我们看到的med还是默认值0;
在R1上配置重复本地as号3次
提示:上述命令表示把邻居R3的as号重复3次;
在R1上查看bgp路由表看看对应as是否重复了3次?
提示:在R1上看对应as号并没有重复3次;这是模拟器bug;通常情况下我们也不会使用这个命令来重复as号;
通过上述实验,可以看到我们使用命令修改BGP属性,都是修改所有的,比如我们修改本地优先级,即打了命令以后,对应路由传递的路由都会把对应本地优先级修改为对应数字;在一定程度上这种做法是不严谨,为了更加精准的修改BGP属性,我们可以使用路由策略,精准匹配路由,精准修改对应路由属性;
如上实验要求,使用策略修改BGP路由属性,从而达到影响BGP路由选路
还原实验环境
在R1上删除重复as配置
在R2上删除med修改和路由导入配置
在R3删除本地优先级配置、med配置和路由导入配置
在R1上配置PreVal策略,确保R1通过R3到达5.5.5.5
提示:上述策略主要利用ip前缀列表把5.5.5.5的路由先匹配出来,然后通过路由策略将符合前缀列表的路由进行首选值属性修改为200;然后在R1和R3邻居的的入方向调用路由策略;
验证:在R1上查看bgp路由表,看看对应路由的优选值是否发生了变化?
提示:可以看到此时R1的bgp路由表中,对于5.5.5.5/32这个路由来说,最优的下一跳为13.0.0.3,因为对应路由的优选值为200,高于下一跳为12.0.0.2;即在ip路由表中对于5.5.5.5/32的路由,对应下一跳就为13.0.0.3;所以R1访问5.5.5.5会经过R3到达5.5.5.5;
在R1上配置AS_Path策略,确保R1通过R3到达9.9.9.9
提示:根据要求,我们要确保9.9.9.9/32的路由要经过R3,说明对应路由的下一跳为R3,即在BGP路由表中,9.9.9.9的下一跳为R3;所以我们在调用策略时,需要对应邻居R2发送的路由更新加长as-path;
验证:在R1上查看BGP路由表,看看对应9.9.9.9/32 最优下一跳是不是R3?
提示:可以看到R1的bgp路由表中,对应R2发送过来的更新中,对应as-path被策略重复了三次;对应as-path也就变长了;所以相比R3发送到更新中,as-path要略短于R2,所以此时9.9.9.9/32的路由下一跳最优为R3;
在R2和R3上配置MED策略,确保R1通过R3到达6.6.6.6
在R2上的med策略配置
提示:因为6.6.6.6/32的路由是有R2传递给R1,所以我们在R2上调用策略应该是出方向调用;需要注意的是策略里没有直接修改bgp med的命令,只有修改cost;其实MED和cost都是同样的作用;只是叫法不同;这里还需要说明一点,如果我们使用策略修改med时,R2在发出路由更新时会自动携带med属性;不管R2学习到达路由是否携带med;只要经过策略修改以后,对应传递出去都会携带对应修改的属性;
R3上的med策略配置
提示:注意策略最后需要跟空语句,表示允许放行其他未被策略匹配的路由;同样的道理R3上策略的调用也是在出方向调用;
验证:查看R1的bgp路由表,看看对应6.6.6.6/32的路由,对应med值是否被修改?对应路由下一跳最优是否是R3呢?
提示:可以看到R2发送的更新对应路由的med为1000,R3发送的是500;因为med属性在优选比较时是越小越优先,所以R3传递的更新被优选为最优路由;即ip路由表中存放6.6.6.6/32的路由,下一跳为R3的地址;
在R2上配置local Preference策略,确保R4通过R2到达1.1.1.1
提示:因为1.1.1.1/32路由是有R1发布更新,所以对于R2向R4传递是R2的出方向,所以在R2上调用策略是在R2的出方向调用;
验证:在R4上查看bgp路由表,看看对应去往1.1.1.1的路由是否下一跳为R2最优?
提示:可以看到R4对应1.1.1.1/32路由,R2传递时,对应路由的本地优先级为101,略高R3传递对应路由的本地优先级,所以此时R2传递的路由被优选;
在R4上配置local Preference策略,确保R4通过R2到达8.8.8.8
提示:对于R4来讲8.8.8.8是从R2和R3传递过来的,所以在策略调用上相对于R4就是入方向;
验证:查看R4的bgp路由表,看看对应路由的本地优先级是否被修改?
提示:可以看到此时R4BGP路由表从R2传递过来的8.8.8.8/32的路由,对应本地优先级属性为200;