BGP常见问题

清除BGP路由条目

  1. 为了查看新路由是否被正确添加到路由表中,可以使用execute router clear bgp命令来清除所有或一些BGP邻居的BGP连接(会话)。

  2. 例如,如果你在BGP路由表中有10个路由,并且想要清除邻居为10.10.10.1的特定路由,使用如下CLI实现。

    execute router clear bgp ip 10.10.10.1
    
  3. 要移除AS号为65001的所有路由,使用如下CLI实现。

    execute router clear bgp as 65001
    
  4. 注意,如果BGP的邻居配置中开启了soft-reconfiguration,则在执行execute router clear bgp时可以在后边加入soft命令进行软重配,不需要重新与对端重新建立BGP邻居,仅重新学习路由。

    exe router clear bgp all soft
    

路由震荡

产生原因

  1. 当一条线路上的路由器频繁下线并重新上线,导致其他路由成员频繁的学习和删除相关路由,这被称为路由震荡(Flapping)。在BGP中,路由振荡是一个很大的问题,每当BGP邻居下线时,连接到该邻居的所有路由器都会在其路由表中发生对应变化。这会在网络上产生大量的BGP管理流量。当该路由器重新上线时,相同的流量会再次出现。如果是由于网络线路故障,比如每隔10秒就会交替在线和离线,就可能发送大量非必要的路由更新。
  2. 另一个可能导致路由振荡的原因是在HA模式下有多个FortiGate设备。当HA的主设备切换到另一个成员时,网络上的其他路由器可能会将HA集群视为离线,导致路由振荡。虽然这不经常发生,但仍可能导致网络用户的服务中断。解决此问题的简单方法是增加HA集群上的route-ttl,以确保从原主设备上同步的BGP路由在故障切换后不会立即过期。另外,配置HA集群上的Graceful Restart有助于实现平滑故障切换。

处理方法

  1. 处理路由振荡的首先应该检查硬件。如果线缆松动或损坏,可以更换并消除问题。如果是路由器上的接口有问题,要么避免使用该接口,要么更换一个正常的路由器。如果路由器上的电源有问题,要么更换电源,要么使用备用电源。这些快速简单的修复方法可以避免配置更复杂的BGP选项。
  2. 如果路由振荡是由于其他原因,配置BGP以处理中断将确保网络用户获得不间断的服务。一些缓解BGP路由振荡的方法包括:
    • 调整Holdtime计时器
    • Dampening
    • Graceful Restart
    • BFD

调整Holdtime计时器

在排查路由振荡问题时应先考虑调整Holdtime计时器,此计时器可以降低路由器下线导致路由更新的频率。

一旦Holdtime计时器激活,其将在持续时间内禁止FortiGate接受对该邻居的任何更改。例如在Holdtime计时器期间对端路由器振荡5次,FortiGate只会识别到第1次中断。在后续Holdtime计时器持续时间内,不会发生任何变化,FortiGate在Holdtime期间内都将这个路由器视为离线。如果路由器在Holdtime计时器到期后仍在振荡,将重新启动计时器。

如果对端路由器没有振荡(例如下线后重新上线,并保持在线),计时器仍然会倒计时,并在计时器持续时间内忽略该路由器的上线。在这种情况下,路由被视为下线的时间比实际时间长。在实际使用中,这不会引起严重问题,因为更新不是频繁的。而且当一个在线的路由器被视为离线时,可以看作是一种BGP的健壮性功能。通常情况下,我们不希望大部分流量通过一个不稳定的路由,这由Holdtime计时器来实现。

以下3种不同的路由振荡情况,都可以使用 holdtime 计时器来处理:

  • 路由频繁上下波动。
  • 路由在很长一段时间内下线再上线一次。
  • 或者路由在很长一段时间内下线并保持下线。

例如,你的网络有两个路由邻居需要设置计时器:

  • 一个是主路由邻居(101.103.1.1),所有的互联网流量都经过这个路由,如果它下线时间过长则会引起较大影响,主要路由的Holdtime计时器应该相对较短,如60s。
  • 另一个是很少使用的邻居(202.103.1.1)。主要路由的计时器应该相对较短(例如,60秒)。次要路由邻居的Holdtime计时器可以较长,如默认值180s。
config router bgp
    config neighbor
        edit 101.103.1.1
            set holdtime-timer 60
            set keepalive-timer 60
        next
        edit 202.103.1.1
            set holdtime-timer 180
            set keepalive-timer 60
        next
    end
end

Dampening

Dampening是一种通过限制对端学习的路由而限制路由振荡的方法。使用Dampening时,虽然路由仍然会振荡,但对该对端路由的关注会逐渐减少。第一次振荡不会启动Dampening,但第二次振荡将启动一个计时器,FortiGate在计时器持续时间内将无视该路由器发送的路由。如果在Dampening计时器到期之前对端路由器再次振荡,计时器将继续增加。有一个称为dampening-reachability-half-life的时间,之后路由振荡将被抑制Dampening计时器一半的时间。当一个路由已经稳定一段时间,但尚未完全清除所有Dampening时,这个half-life就会生效。想要再次将振荡的路由加入路由表中,必须等待Dampening计时器到期。

如果路由振荡是暂时的,可以通过使用execute router clear bgp CLI从FortiGate设备的缓存中清除Dampening:

# execute router clear bgp dampening {<ip_address> | <ip_address/netmask>}
或
# execute router clear bgp flap-statistics {<ip_address> | <ip_address/netmask>}

例如,要删除10.10.1.0/24子网的路由Dampening信息,请输入以下CLI命令:

# execute router clear bgp dampening 10.10.1.0/24

配置Dampening:

config router bgp
    set dampening {enable | disable}
    set dampening-max-suppress-time <minutes_integer>
    set dampening-reachability-half-life <minutes_integer>
    set dampening-reuse <reuse_integer>
    set dampening-route-map <routemap-name_str>
    set dampening-suppress <limit_integer>
    set dampening-unreachability-half-life <minutes_integer>
end

Graceful Restart

在某些情况下,路由振荡是由BGP邻居中断但硬件部分(控制平面)仍然可以正常运行的情况引起的。例如当BGP进程重新启动,但硬件仍然可以正常运行和转发流量。Graceful Restart适用于这种情况,GR期间路由不会中断,但路由器对路由更新是不响应的。需要网络中的其他BGP路由器也支持优雅重启。

FortiGate HA也可以从Graceful Restart中受益。当发生HA切换时,HA集群会广播它即将下线,其他路由器不会视其为路由振荡。例如,FortiGate是四个相互发送更新的BGP路由器之一。其中任何一个路由器都支持GR。当FortiGate(GR Restarter)发生HA切换后,GR Restarter向其邻居发送一条消息,通知它正在重新启动。BGP邻居(GR Helper)将所有正在重新启动的路由器的路由标记为Stale,但它们继续使用这些路由。在重新启动完成后,将检查其路由并在需要时对其进行处理。对等方还知道在路由器重新启动期间可以维护哪些服务。在路由器完成重新启动后,路由器向其对等方发送一条消息,通知它已完成重新启动。

FortiGate设备支持其自己的BGP GR和作为邻居BGP路由器的GR Helper,配置请参考路由→动态路由→BGP→BGP GR章节。

BFD

Bidirectional Forwarding Detection(BFD)是一种用于快速定位网络中硬件故障的协议。运行BFD的路由器相互通信,如果检测计时器超时,那么该路由器将被宣告为下线。然后,BFD将此信息通知给路由协议,路由信息将得到更新。

BFD的原理和相关配置请参考:https://fortinet-public.s3.cn-north-1.amazonaws.com.cn/Fortinet_TAC_Doc/FortiGate+BFD%E5%8E%9F%E7%90%86%E4%B8%8E%E9%85%8D%E7%BD%AE.pdf

使用Loopback接口建立BGP

当使用Loopback接口建立BGP邻居时,注意两端FortiGate的Loopback接口必须使用32位掩码的IP地址,否则BGP邻居将无法建立。

BGP与静态路由的优先顺序

  1. 在路由表中,如果存在2条相同目的地址、AD(distance)的BGP路由和静态路由,那么静态路由会被放入路由表,而BGP路由不会被放入路由表。

    config router static
        edit 5
            set dst 192.168.123.0 255.255.255.0
            set distance 20
            set device "to_SH_WAN1"
        next
    end
    
    FW4_FGT61F_Left # get router info routing-table database    //查看路由数据库//
    Routing table for VRF=0
    ...
    S    *> 192.168.123.0/24 [20/0] via to_SH_WAN1 tunnel 10.0.0.1, [1/0]
    B       192.168.123.0/24 [20/0] via 10.10.10.3 (recursive via to_SH_WAN1 tunnel 10.0.0.1), 5d04h46m, [1/0]
    //BGP路由和静态路由均存在于路由数据库中,distance均为20//
    ...
    
    FW4_FGT61F_Left # get router info routing-table all    //查看路由表//
    Routing table for VRF=0
    ...
    S       192.168.123.0/24 [20/0] via to_SH_WAN1 tunnel 10.0.0.1, [1/0]
    //只有静态路由会被放入路由表//
    ...
    
  2. 如果想让BGP路由进路由表,而静态路由不进路由表(作为BGP路由失效时的备份路由),可以通过Router Map改大BGP学习到的路由的Weight(默认是0,与静态路由一致)。

    config router prefix-list
        edit "acl-weight"
            config rule
                edit 1
                    set prefix 192.168.123.0 255.255.255.0
                    unset ge
                    unset le
                next
            end
        next
    end
    
    config router route-map
        edit "weight-in"
            config rule
                edit 1
                    set match-ip-address "acl-weight"
                    set set-weight 40000
                next
                edit 2
                next
            end
        next
    end
    
    config router bgp
        config neighbor
            edit "10.10.10.3"
                set route-map-in "weight-in"
            next
        end
    end
    
  3. 此时BGP路由入表,而静态路由只存在于路由database中,当BGP路由异常消失时,静态路由可以作为备用路由生效。

    FW4_FGT61F_Left # get router info routing-table database    //查看路由数据库//
    ...
    B    *> 192.168.123.0/24 [20/0] via 10.10.10.3 (recursive via to_Home_WAN1 tunnel 10.0.0.1), 00:03:41, [1/0]
    S       192.168.123.0/24 [20/0] via to_Home_WAN1 tunnel 10.0.0.1, [1/0]
    ...
    
    FW4_FGT61F_Left # get router info routing-table all    //查看路由表//
    ...
    B       192.168.123.0/24 [20/0] via 10.10.10.3 (recursive via to_Home_WAN1 tunnel 10.0.0.1), 00:03:46, [1/0]
    ...
    

如何关闭Leftmost AS检查

  1. 默认情况下,FortiGate会检查学习到的BGP路由的AS Path属性,要求AS Path最左侧的AS(Leftmost AS,最近的AS)要和本地AS一致,当收到的BGP路由的AS Path属性的Leftmost AS与本地AS不一致时,会拒绝接收BGP Update,并在BGP Debug信息中显示类似Attr ASPATH: Incorrect leftmost AS number, should be 65001信息。

    diagnose ip router bgp all enable
    diagnose ip router bgp level info
    diagnose debug enable
    
    BGP: 10.10.10.2-Outgoing [DECODE] Update: Starting UPDATE decoding... Bytes To Read (4005), msg_size (86)
    BGP: 10.10.10.2-Outgoing [DECODE] Attr ASPATH: Incorrect leftmost AS number, should be 65001
    BGP: 10.10.10.2-Outgoing [FSM] State: Established Event: 28
    BGP: 10.10.10.2-Outgoing [ENCODE] Msg-Hdr: Type 3
    BGP: %BGP-3-NOTIFICATION: sending to 10.10.10.2 3/11 (UPDATE Message Error/Malformed AS_PATH.) 13 data-bytes [40 02 0a 02 02 00 00 4f f9 00 00 f4 73]
    id=20300 logdesc="BGP neighbor status changed" msg="BGP: %BGP-5-ADJCHANGE: VRF 0 neighbor 10.10.10.2 Down BGP Notification FSM-ERR"
    
  2. 通过如下CLI可以关闭对BGP路由AS Path的Leftmost AS的检查。

    config router bgp
        set enforce-first-as disable
    end
    

BGP选路原则

  1. 优先选择具有最高的Weight的路由(Weight仅本地生效)。

  2. 优先选择具有最高的Local Preference的路由(仅在本AS内生效)。

  3. 优先选择本地路由器产生的路由(下一跳为0.0.0.0)。

  4. 优先选择具有最短的AS-Path的路由。

  5. IGP路由 > EGP路由 > incomplete路由。

  6. 优先选择具有最低MED(可在AS之间交换)的路由。

  7. eBGP路径优先于iBGP路由。

  8. iBGP路由优先选择更近的iBGP邻居学习到的路由。

  9. eBGP路由优先选择更早学习到的eBGP路由。

  10. 优先选择具有最小邻居Router ID的路由。

  11. 优先选择具有最小邻居IP的路由。

BGP Debug

  1. BGP Debug过滤器:

    diagnose ip router bgp set-filter vrf <vrf-id>|neighbor <neighbor-ip>|reset
    diagnose ip router bgp filters enable
    
  2. 例如过滤BGP邻居202.103.1.1的Debug信息:

    diagnose ip router bgp set-filter neighbor 202.103.1.1
    diagnose ip router bgp filters enable
    
  3. 开启BGP Debug:

    diagnose ip router bgp level info
    diagnose ip router bgp all enable
    diagnose debug console time enable
    

Copyright © 2024 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2024-02-28 17:51:13

results matching ""

    No results matching ""