zoukankan      html  css  js  c++  java
  • HCNP Routing&Switching之BGP路由控制

      前文我们了解了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
    View Code

      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
    View Code

      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 
    View Code

      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
    View Code

      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
    View Code

      验证各路由器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;

    作者:Linux-1874
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    利用Flot作基于时间段的曲线图
    Linux Apache使用CGI
    Windows node.js安装运行npm显示类似"ENOENT, stat 'C:UsersXXXXAppDataRoaming pm'错误
    JavaWeb返回Json格式数据JQuery Ajax无法解析的问题
    C++ 14 auto
    [原创] Jenkins slave agent 分布式构建
    [原创] Jenkins 邮件配置 (使用 Jenkins Email Extension Plugin)
    Linux 域名服务器配置
    证书管理
    Ubuntu 安装 Kubernetes
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/15495585.html
Copyright © 2011-2022 走看看