暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一个由路由汇总和重分布导致的OSPF选路的问题

非资深老网工 2021-07-01
1629

最近遇到一个 Case,大致是下面的场景



R4 直连 99.10.0.0/24,然后将其重分布到 BGP,再通告给 eBGP 邻居 R2 和 R3。


    R4 Configurations
    !
    interface GigabitEthernet5
    ip address 99.10.0.1 255.255.255.0
    !
    router bgp 200
    bgp router-id 10.0.0.6
    bgp log-neighbor-changes
    network 99.10.0.0 mask 255.255.255.0
    redistribute connected
    neighbor 10.2.6.2 remote-as 100
    neighbor 10.2.6.2 fall-over bfd
    neighbor 10.2.6.2 soft-reconfiguration inbound
    neighbor 10.3.6.3 remote-as 100
    neighbor 10.3.6.3 fall-over bfd
    neighbor 10.3.6.3 soft-reconfiguration inbound


    R2 和 R3 向 R4 通告默认路由。同时,它们在 BGP 里面将 99.10.0.0/24 汇总成 /16 的 prefix。


      R2 Configurations
      !
      router bgp 100
      bgp router-id 10.0.0.2
      bgp log-neighbor-changes
      aggregate-address 99.10.0.0 255.255.0.0 summary-only
      neighbor 10.2.6.6 remote-as 200
      neighbor 10.2.6.6 fall-over bfd
      neighbor 10.2.6.6 default-originate
      neighbor 10.2.6.6 soft-reconfiguration inbound


      然后 R2 和 R3 再把 BGP 汇总路由重分布到 OSPF。


        # R2 Configurations
        !
        ip prefix-list BGP-OSPF seq 5 permit 99.10.0.0/16
        !
        route-map BGP-OSPF permit 10
        match ip address prefix-list BGP-OSPF
        !
        router ospf 1
        router-id 10.0.0.2
        redistribute bgp 100 metric-type 1 route-map BGP-OSPF



        问题:出现次优和绕行路由


        预期 R1 去往 99.10.0.0/16 应该有 2 条 OSPF ECMP 路径,但实际上只有 1 条路径。


          CSR1# show ip route ospf
          (snip)... 
          99.0.0.0/16 is subnetted, 1 subnets
          O E1 99.10.0.0 [110/2] via 10.1.2.2, 01:27:32, GigabitEthernet1


          下面分析原因和解法。


          检查 R2 的路由表,发现同时存在 24 的明细路由和 16 的汇总路由。其中 16 汇总路由下一跳是 Null0,管理距离为 200,说明 BGP 在对明细路由进行汇总之后,其路由条目就变成了 iBGP。


            CSR2# show ip route | include 99.10.0.0
            B 99.10.0.0/16 [200/0], 01:31:04, Null0
            B 99.10.0.0/24 [20/0] via 10.2.6.6, 01:31:24


            再检查 R3 的路由表,同样存在 24 的明细路由和 16 的汇总路由。其中 24 明细路由是从 R4 学到的,而 16 汇总路由则是通过 OSPF 从 R2 学到的,所以其管理距离为 110。


              CSR3# show ip route | include 99.10.0.0
              O E1 99.10.0.0/16 [110/2] via 10.2.3.2, 01:31:12, GigabitEthernet3
              B 99.10.0.0/24 [20/0] via 10.3.6.6, 01:45:13
              CSR3# show ip route bgp | i 99.10.0.0
              B 99.10.0.0/24 [20/0] via 10.3.6.6, 01:57:55
              CSR3# show ip bgp | i 99.10.0.0
              s> 99.10.0.0/24 10.3.6.6 0 0 200 i
              r> 99.10.0.0/16 0.0.0.0 32768 i


              因为 OSPF AD 110 优先于 iBGP AD 200,所以 R3 本地 BGP 汇总的 99.10.0.0/16 无法被安装进 RIB,自然也无法重分布到 OSPF。导致了 R1 去往 99.10.0.0/16 只有 1 条 OSPF 路径。



              解法 1:distance ospf external


              让 OSPF External 路由的管理距离大于 iBGP AD 200。这样 R3 在收到 R2 通告的 OSPF External 路由的时候,就会将其忽略,而优选本地的 BGP 汇总路由。


              R2 更改配置之后的路由表:


                CSR2# show run | s r o
                router ospf 1
                router-id 10.0.0.2
                redistribute bgp 100 metric-type 1 route-map BGP-OSPF
                distance ospf external 201
                CSR2#
                CSR2# show ip route | i 99.10.0.0
                B 99.10.0.0/16 [200/0], 01:51:37, Null0
                B 99.10.0.0/24 [20/0] via 10.2.6.6, 01:51:57


                R3 更改配置之后的路由表:


                  CSR3# show run | s r o
                  router ospf 1
                  router-id 10.0.0.3
                  redistribute bgp 100 metric-type 1 route-map BGP-OSPF
                  distance ospf external 201
                  CSR3#
                  CSR3# show ip route | i 99.10.0.0
                  B 99.10.0.0/16 [200/0], 00:03:58, Null0
                  B 99.10.0.0/24 [20/0] via 10.3.6.6, 02:08:18



                  可以看到 2 台 Border 路由器都优选了 BGP 本地汇总的 AD 200 的 16 Prefix,所以它们都可以成功地被重分布到 OSPF,这样 R1 就可以学习到 2 条 ECMP 路径了。


                    CSR1# show ip route ospf
                    (snip)...
                    99.0.0.0/16 is subnetted, 1 subnets
                    O E1 99.10.0.0 [110/2] via 10.1.3.3, 00:08:13, GigabitEthernet2
                    [110/2] via 10.1.2.2, 01:58:33, GigabitEthernet1



                    解法 2:distribute-list


                    如果不想全局更改 AD,还可以利用 prefix-list 和 route-map 给 prefix 标记 tag,然后用 distribute-list 对 tag 进行过滤。


                    distribute-list 的作用是限制 进/出 路由器的路由条目。


                    先来看看 R1 收到的 99.10.0.0/16 的 Tag,都是 0。


                      CSR1# show ip ospf database external 99.10.0.0 | include Tag
                      External Route Tag: 0
                      External Route Tag: 0


                      然后在 R2 和 R3 上把 distance ospf external 201 的配置删掉,配置 distribute-list。以 R2 为例,配置如下:


                        # R2 Configurations
                        !
                        ip prefix-list BGP-OSPF seq 5 permit 99.10.0.0/16
                        !
                        route-map BGP-OSPF permit 10
                        match ip address prefix-list BGP-OSPF
                        set tag 9910
                        !
                        route-map DIST deny 10
                        match ip address prefix-list BGP-OSPF
                        match tag 9910
                        !
                        route-map DIST permit 20
                        !
                        router ospf 1
                        router-id 10.0.0.2
                        redistribute bgp 100 metric-type 1 route-map BGP-OSPF
                        distribute-list route-map DIST in


                        在调用 route-map BGP-OSPF 将路由重分布到 OSPF 的同时,为其标记 Tag 9910。然后在 OSPF 下面配置 distribute-list,调用 route-map DIST,方向为 in,把携带 Tag 9910 并且符合 prefix-list BGP-OSPF 的路由都 deny 掉,允许其他。


                        同一条 route-map 里面的多行 match,它们是 and 的逻辑关系。


                        配置 distribute-list 之后,R1 就可以学习到 2 条目的为 99.10.0.0/16 的 ECMP 路由了。2 条路由的 Tag 都是 9910。


                          CSR1# show ip route ospf
                          (snip)...
                          99.0.0.0/16 is subnetted, 1 subnets
                          O E1 99.10.0.0 [110/2] via 10.1.3.3, 00:00:06, GigabitEthernet2
                                             [110/2] via 10.1.2.2, 00:00:27, GigabitEthernet1
                          CSR1#
                          CSR1#show ip ospf database external 99.10.0.0


                          OSPF Router with ID (10.0.0.1) (Process ID 1)


                          Type-5 AS External Link States


                          LS age: 40
                          Options: (No TOS-capability, DC, Upward)
                          LS Type: AS External Link
                          Link State ID: 99.10.0.0 (External Network Number )
                          Advertising Router: 10.0.0.2
                          LS Seq Number: 80000001
                          Checksum: 0x1CC1
                          Length: 36
                          Network Mask: 16
                          Metric Type: 1 (Comparable directly to link state metric)
                          MTID: 0
                          Metric: 1
                          Forward Address: 0.0.0.0
                          External Route Tag: 9910


                          LS age: 20
                          Options: (No TOS-capability, DC, Upward)
                          LS Type: AS External Link
                          Link State ID: 99.10.0.0 (External Network Number )
                          Advertising Router: 10.0.0.3
                          LS Seq Number: 80000001
                          Checksum: 0x16C6
                          Length: 36
                          Network Mask: 16
                          Metric Type: 1 (Comparable directly to link state metric)
                          MTID: 0
                          Metric: 1
                          Forward Address: 0.0.0.0
                          External Route Tag: 9910



                          解法 3:OSPF summary-address


                          这个 OSPF 选路的根本原因是在 BGP 里面做了路由汇总,然后才重分布到 OSPF,导致相关路由的管理距离变成了 200,进而出现了次优和绕行的路径。所以根本的解决办法把汇总路由的位置从 BGP 改为 OSPF。使用的命令为 summary-address,它的作用就是在 OSPF Border 路由器上对外部路由进行汇总,然后再将汇总路由通告给区域内的 OSPF 邻居。


                          以 R2 为例,配置如下:


                            router ospf 1
                            router-id 10.0.0.2
                            summary-address 99.10.0.0 255.255.0.0
                            redistribute bgp 100 metric-type 1 route-map PERMITALL
                            !
                            router bgp 100
                            bgp router-id 10.0.0.2
                            bgp log-neighbor-changes
                            neighbor 10.2.6.6 remote-as 200
                            neighbor 10.2.6.6 fall-over bfd
                            neighbor 10.2.6.6 default-originate
                             neighbor 10.2.6.6 soft-reconfiguration inbound
                            !
                            route-map PERMITALL permit 10


                            修改配置之后,R2 的路由表为:


                              CSR2# show ip route     
                              (snip)...
                              99.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
                              O 99.10.0.0/16 is a summary, 00:05:12, Null0
                              B 99.10.0.0/24 [20/0] via 10.2.6.6, 00:06:17


                              R3 的路由表为:


                                CSR3# show ip route              
                                (snip)...
                                99.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
                                O 99.10.0.0/16 is a summary, 00:02:09, Null0
                                B 99.10.0.0/24 [20/0] via 10.3.6.6, 00:03:13


                                R1 可以学习到 2 条 ECMP 路由:


                                  CSR1# show ip route
                                  (snip)...
                                  99.0.0.0/16 is subnetted, 1 subnets
                                  O E1 99.10.0.0 [110/2] via 10.1.3.3, 00:07:03, GigabitEthernet2
                                  [110/2] via 10.1.2.2, 00:07:14, GigabitEthernet1


                                  文章转载自非资深老网工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论