• HCNP Routing&Switching之BGP路由宣告


      前文我们了解了BGP报文结构、类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html;今天我们来聊一聊BGP路由宣告相关话题;

      BGP路由宣告和IGP路由宣告区别

      我们知道IGP路由协议,在宣告路由时,不同IGP路由协议,对应宣告路由的方式都各有不同;比如RIP宣告路由,只需要宣告对应网络主类地址即可;ospf宣告网络,只需要对应宣告的网络能够包含对应网络即可;只有宣告了网络,对应邻居关系才会建立,然后自动学习对端宣告和学习到的网络;对于BGP来说,它和IGP不一样;首先BGP的邻居关系建立和宣告网络是手动分开实现的,它不像IGP那么智能;IGP只要邻居关系正常建立,对应网络就会自动从对方那里学习到;而BGP只有明确、精确宣告了以后,对端才能学习到对应网络;其次BGP不同类型的邻居,对应路由传递规则也有所不同;再其次BGP宣告网络,后面直接跟子网掩码或者掩码位数;而IGP里ospf宣告网络,对应后面是跟的反掩码;RIP不需要跟掩码,直接宣告对应主类地址;

      BGP数据库

      BGP路由信息处理过程

      提示:BGP路由处理过程如上图所示,首先当BGP从邻居收到一条新的更新,首先会将对应路由存入Adj-RIB-in(未经处理的路由信息)这个数据库中,然后再将对应信息传入输入策略引擎中进行匹配,看看是否有入站策略,只有满足对应入站策略的路由才会被存入LOC-RIB(本地路由路由信息)表中,然后再通过计算将对应路由最终存入ip路由表中;如果本端要将一条路由发送给邻居,首先会看对应ip路由表是否存在对应路由,如果有,就把对应路由与出站策略进行匹配,只有满足出站策略的路由才会被放置到adj-RIB-Out(即将要发出去的RIB信息)这张表中,然后在发送给邻居;总的处理流程是先进adj-rib-in,这张表类似缓冲区,它会存放邻居发送到所有更新,然后根据入站策略进行过滤,把满足入站策略的路由存入Loc-RIB表中,这张表类似缓存表,然后根据loc-RIB中的内容进行计算,最终将路由存入ip路由表;对于发送给邻居的更新,首先它会从loc-RIB这张表中检索对应路由信息,通过出站策略过滤,将符合出站策略的路由存入adj-RIB-out表中,这张表类似缓存表,即这种表中的所有路由都是满足出站策略的路由,都是即将可以发送给邻居的路由;

      BGP路由宣告规则

      1、只有明确宣告的网络才会发送给邻居;

      2、宣告的网络必须能精确地在路由表中找到;

      3、多条路径时,只选最优的给自己使用;

      4、只把自己使用的最优路由宣告给邻居;

      5、从EBGP学习到的路由会宣告给所有邻居;

      6、从IBGP学习到的路由只传一跳;

      7、从IBGP学习到的路由会宣告给EBGP;

      实验:如下拓扑,分别使用回环口建立邻居

      分析:使用回环口建立BGP邻居,首先对应回环口的路由必须可达;在同一个AS内部,我们可以使用IGP路由协议,对应不再同一AS我们只能使用静态路由,让对应回环接口的路由互通;其次IBGP需要更改更新源为对应回环接口;EBGP除了要更改更新源以外,对应还要修改TTL值,原因是EBGP之间建立邻居,对应数据包的TTL值为1,所以为了能够正常建立邻居,我们需要将对应数据包的TTL值;

      ·R1的配置

    sys
    sys R1
    int g0/0/0
    ip add 12.0.0.1 24
    int lo 1
    ip add 1.1.1.1 32
    
    ospf 1 router-id 1.1.1.1
    area 0
    net 12.0.0.1 0.0.0.0
    net 1.1.1.1 0.0.0.0
    
    bgp 123
    router-id 1.1.1.1
    peer 2.2.2.2 as 123
    peer 2.2.2.2 con lo 1
    View Code

      R2的配置

    sys
    sys R2
    int g0/0/0
    ip add 12.0.0.2 24
    int lo 2
    ip add 2.2.2.2 32
    int g0/0/1
    ip add 23.0.0.2 24
    
    ospf 1 router-id 2.2.2.2
    area 0
    net 12.0.0.2 0.0.0.0
    net 2.2.2.2 0.0.0.0
    net 23.0.0.2 0.0.0.0
    
    bgp 123
    router-id 2.2.2.2
    peer 1.1.1.1 as 123
    peer 1.1.1.1 con lo 2
    peer 3.3.3.3 as 123
    peer 3.3.3.3 con lo 2
    View Code

      R3的配置

    sys
    sys R3
    int g0/0/0
    ip add 23.0.0.3 24
    int lo 3
    ip add 3.3.3.3 32
    int g0/0/1
    ip add 34.0.0.3 24
    
    ospf 1 router-id 3.3.3.3
    area 0
    net 23.0.0.3 0.0.0.0
    net 3.3.3.3 0.0.0.0
    
    ip route-s 4.4.4.4 32 34.0.0.4
    
    bgp 123
    router-id 3.3.3.3
    peer 2.2.2.2 as 123
    peer 2.2.2.2 con lo 3
    peer 4.4.4.4 as 4
    peer 4.4.4.4 con lo 3
    peer 4.4.4.4 ebgp-max-hop
    View Code

      R4的配置

    sys
    sys R4
    int g0/0/0
    ip add 34.0.0.4 24
    int lo 4
    ip add 4.4.4.4 32
    
    ip route-s 3.3.3.3 32 34.0.0.3
    
    bgp 4
    router-id 4.4.4.4
    peer 3.3.3.3 as 123
    peer 3.3.3.3 con lo 4
    peer 3.3.3.3 ebgp-max-hop
    View Code

      验证:查看所有路由器,看看是否是两两建立起BGP邻居?

      提示:可以看到对应邻居关系都established,邻居关系正常;

      BGP路由宣告--->本地宣告

      在R1上宣告8.8.8.8 32的网络,看看是否能够正常宣告?

      提示:BGP宣告网络的方式有两种,一种是network本地宣告,另外一种是引入宣告,即引入外部路由进bgp;从上面的实验可以看到,我们本地没有8.8.8.8/32网络的路由,对应在bgp里也是无法正常宣告;即在bgp里宣告网络,首先对应网络要存在自己的ip路由表;

      在R1上添加Lo 2 接口,并配置ip地址为8.8.8.8/32

      在bgp里宣告8.8.8.8网络

      提示:可以看到对应宣告网络,默认不跟掩码,它会按对应网络的主类掩码进行宣告;但它会提示我们对应网络不存在;如果后面的掩码和路由表中的掩码不匹配,也会提示我们对应网络不存在;这也意味着bgp宣告网络不能像ospf那样,只要宣告的网络能够包含对应网络即可;在bgp里必须精确宣告;所谓精确宣告就是指路由表中的路由掩码是多少对应在bgp里宣告时掩码就必须是对应的掩码;其次bgp的掩码是正掩码或者掩码的位数;这是和ospf不一样的地方;

      查看R2是否能够正常学习到R1宣告的网络呢?

      提示:可以看到只要R1精确宣告对应网络以后,R2是能够正常学习到对应路由;

      验证:查看R3是否能够正常学习到R1发布的路由呢?

      提示:可以看到R3并没有通过BGP学习到任何路由;说明R1宣告的路由R3没有学习到;这是因为R1和R2建立的是IBGP类型邻居,IBGP路由只传一跳;

      在R1上查看宣告的8.8.8.8路由传递给那些路由器学习过?

      提示:可以看到R1只把8.8.8.8宣告给R2,并没有宣告给R3,所以对应R3是肯定收不到对应R1的宣告;解决办法是R1和R3建立邻居;

      在R2上新建lo22接口,并配置ip地址为192.168.22.22/24 ,然后宣告进bgp,看看对应那些路由器能够正常学习到?

      在R2查看192.168.22.22/24的路由宣告给那些路由器了呢?

      提示:可以看到对应R2宣告的网络,对应R1和R3都能正常学习到;

      验证:查看R1和R3是否学习到R2宣告的网络?

      提示:可以看到对应R2宣告的网络,R1和R3都能正常学习到,对应下一跳都是2.2.2.2;这是因为R2和R1和R3建立的是IBGP类型邻居,对应路由只传一跳;

      验证:查看R4的路由,看看是否能够正常学习到R2发布的路由呢?

      提示:可以看到在R4上能够正常学习到R2发布的路由,对应路由的下一跳为3.3.3.3;这是因为R2发布的路由被R3学习到;而R3和R4建立的是EBGP类型邻居;在BGP里EBGP类型邻居,它是可以互传路由的;并且也会自动修改下一跳地址;所有R4能够正常学习到R2发布的路由,对应下一跳为R3;

      验证:在R4上新建lo44 ,并将接口地址配置为44.44.44.44/32,在bgp里宣告

      验证:在R3上查看是否学习到R4发布的路由呢?

      提示:在R3上查看bgp路由表,对应R3能够正常学习到R4发布的路由;其下一跳为4.4.4.4;

      验证:在R2上查看bgp路由表,看看是否能够学习到R4发布的路由呢?

      提示:可以看到虽然R2能够正常学习到R4发布的路由,但是对应路由是不可用的(没有星号,表示路由不可用);R2之所以能够学习到R4发布的路由,是因为R4发布的路由被R3学习到(EBGP间路由可以互传);而R2和R3由属于IBGP邻居(IBGP邻居关系,路由只传一跳),所以R2能够学习到R4发布的路由;在R2上看到R4发布的路由之所以不可用,原因是IBGP类型邻居,传递路由时不会自动修改下一跳地址为自己;所以在R3上学习到的路由下一跳是多少,对应R2学习到的下一跳地址就是多少;不可用的原因是R2没有去往4.4.4.4的路由;所以它不知道怎么去往下一跳,当然对应路由也就无法正常使用;解决办法,在R3上强制更改下一跳为自己;

      在R3上修改传递给2.2.2.2的路由,下一跳修改为自己

      验证:再次在R2上查看对应bgp路由表,看看44.44.44.44/32的路由是否可用了?

      提示:可以看到现在R2学习到的路由,其下一条为R3,对应路由也从原来的不可用变为可用(有星号了);

      总结:通过上述实验我们可以看到bgp宣告路由,首先宣告的路由在本地路由表中可以查看到,即对于宣告者来说,宣告的路由必须是最优的路由(存放在ip路由表中的路由对于本地路由器来说就是最优路由),其次默认情况下BGP建立起邻居不会宣告任何网络,只有宣告者手动明确、精确宣告以后,对应路由才会被邻居学习到;邻居类型为IBGP,对应路由只传一跳(为了防止环路);EBGP邻居类型,是可以正常互相传递路由;EBGP类型邻居,在互传路由时会自动修改路由为自己,然后再宣告给对端邻居;而IBGP类型邻居,不会自动修改下一跳为自己,只有手动使用命令强制将对应路由修改为自己,然后传递给邻居;

      BGP路由宣告--->引入宣告

      引入宣告其实就是将外部路由引入只BGP,其命令为import-route

      示例:在R1上新建静态路由,然后将对应静态路由引入至bgp

      提示:引入路由通常结合路由策略使用;

      查看R1引入的5.5.5.5的路由

      提示:引入路由至BGP对应在bgp路由表中表现的为OGN为问号,表示引入的路由;其下一跳为0.0.0.0表示下一跳为自己;

      验证:查看R2是否学习到R1引入宣告的5.5.5.5的路由呢?

      提示:可以看到对应R2能够正常学习到R1引入的路由;其下一跳为1.1.1.1;引入宣告和本地宣告只是宣告的方式不同,两者都遵循上述的路由宣告规则和传递规则;

      BGP宣告缺省路由

      BGP和ospf一样,默认情况下都不会引入缺省路由,只有手动使用命令允许

      示例:在R2上新建一条缺省路由,然后在bgp里发布

      提示:上述命令只是表示允许将缺省路由引入至BGP;默认是不允许引入缺省路由;

      在R2上引入静态至bgp

      验证:在R1或R3上查看,是否学习到R2发布的缺省路由呢?

      提示:可以看到R1和R3都能正常学习到R2发布的缺省路由;其实R4也能正常学习到R2的缺省路由;是因为R3学习到的路由会传递给R4(EBGP),并且还会将下一跳修改为自己再传递给R4;如下

      除了上述通过命令允许引入缺省路由的方式发布缺省路由,还可以直接向邻居宣告一条缺省路由,不管本地是否存在缺省路由

      验证:在R2上取消缺省路由发布,删除缺省路由,然后直接使用命令向R3发布一条缺省路由

      验证:查看R3是否学习到一条缺省路由?

      提示:可以看到R3学习到一条缺省路由,其学习到的方式是通过IGP内部学习到的;和上面引入的方式不同;这条命令是向指定路由发送缺省路由,不管本地是否有缺省路由,对应邻居收到都会生成一条缺省路由,将下一跳指向对端;

    作者:Linux-1874
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)
    [Canvas]计时表/秒表
    [Canvas]新版箴言钟表
    [Canvas]用透明PNG图在背景上画前景能不遮挡背景
    [Canvas]动态背景
    [Canvas]更多的球
    [Canvas]碰撞球 增加小球间碰撞检测
    [Canvas]碰撞球
    [Canvas]越来越近的女孩
    [Canvas]走近的女孩
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/15440860.html
Copyright © 2020-2023  润新知