BGP路由刷新

功能介绍

默认的BGP配置下,当BGP邻居配置中引用的路由策略(如route-map、distribute-list等)修改了属性或过滤的路由条目时,BGP路由表并不会立即更新,需要执行路由刷新来重新获取BGP路由,并进行路由过滤/修改。

FortiGate路由刷新的方法有以下3种:

  • 方法1-使用BGP route-refresh
  • 方法2-使用soft-reconfiguration
  • 方法3-重置BGP邻居

网络拓扑

image-20240411113142729

  1. FW1与FW2建立iBGP邻居。
  2. 初始状态下,FW1发布自己的路由10.10.1.0/24、10.10.2.0/24、10.10.3.0/24给FW2,FW1与FW2都不开启soft-reconfiguration功能。
  3. 初始状态下,FW2的BGP入方向引用route-map,只允许学习FW1发送的路由10.10.1.0/24、10.10.2.0/24。

配置步骤

  1. 基础网络配置(略)。

  2. 配置FW1的BGP,与FW2建立iBGP邻居,并发布自己的路由10.10.1.0/24、10.10.2.0/24给FW2。

    config router bgp
        set as 10086
        set router-id 192.168.12.1
        config neighbor
            edit "192.168.12.2"
                set remote-as 10086
            next
        end
        config network
            edit 1
                set prefix 10.10.1.0 255.255.255.0
            next
            edit 2
                set prefix 10.10.2.0 255.255.255.0
            next
            edit 3
                set prefix 10.10.3.0 255.255.255.0
        end
    end
    
  3. 在FW2上配置prefix-list,内容为FW1的发布的BGP路由10.10.1.0/24、10.10.2.0/24。

    config router prefix-list
        edit "Prefix_FW1"
            config rule
                edit 1
                    set prefix 10.10.1.0 255.255.255.0
                    unset ge
                    unset le
                next
                edit 2
                    set prefix 10.10.2.0 255.255.255.0
                    unset ge
                    unset le
                next
            end
        next
    end
    
  4. 在FW2上配置route-map,允许Prefix Prefix_FW1中的BGP路由,拒绝其他路由。

    config router route-map
        edit "RMP_from_FW1"
            config rule
                edit 1
                    set match-ip-address "Prefix_FW1"
                next
                edit 2
                    set action deny
                next
            end
        next
    end
    
  5. 在FW2上配置BGP,与FW2建立iBGP邻居,并发布自己的路由10.10.4.0/24给FW2。在入方向引用步骤4配置的route-map,只允许接收FW1发布的BGP路由10.10.1.0/24、10.10.2.0/24。

    config router bgp
        set as 10086
        set router-id 192.168.12.2
        config neighbor
            edit "192.168.12.1"
                set remote-as 10086
                set route-map-in "RMP_from_FW1"
            next
        end
        config network
            edit 1
                set prefix 10.10.4.0 255.255.255.0
            next
        end
    end
    
  6. 在FW1上查看BGP路由学习情况,可以正确学习到FW2宣告的路由10.10.4.0/24。

    FW1 # get router info bgp summary 
    
    VRF 0 BGP router identifier 192.168.12.1, local AS number 10086
    BGP table version is 2
    1 BGP AS-PATH entries
    0 BGP community entries
    
    Neighbor     V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
    192.168.12.2 4      10086      22      23        1    0    0 00:17:28        1
    Total number of neighbors 1
    
    FW1 # get router info routing-table bgp 
    Routing table for VRF=0
    B       10.10.4.0/24 [200/0] via 192.168.12.2 (recursive is directly connected, port2), 00:17:13, [1/0]
    
  7. 在FW1上查看通告给FW2的BGP路由,与配置一致。

    FW1 # get router info bgp neighbors 192.168.12.2 advertised-routes
    VRF 0 BGP table version is 6, local router ID is 192.168.12.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
    Origin codes: i - IGP, e - EGP, ? - incomplete
    
       Network          Next Hop            Metric     LocPrf Weight RouteTag Path
    *>i10.10.1.0/24     192.168.12.1                  100  32768        0 i <-/->
    *>i10.10.2.0/24     192.168.12.1                  100  32768        0 i <-/->
    *>i10.10.3.0/24     192.168.12.1                  100  32768        0 i <-/->
    
    Total number of prefixes 3
    
  8. 在FW2上查看BGP路由学习情况,可以正确学习到FW1发布的BGP路由10.10.1.0/24、10.10.2.0/24,而10.10.3.0/24被route-map过滤掉。

    FW2 # get router info bgp summary
    
    VRF 0 BGP router identifier 192.168.12.2, local AS number 10086
    BGP table version is 1
    1 BGP AS-PATH entries
    0 BGP community entries
    
    Neighbor     V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
    192.168.12.1 4      10086       3       4        1    0    0 00:00:30        2
    Total number of neighbors 1
    
    FW2 # get router info routing-table bgp
    Routing table for VRF=0
    B       10.10.1.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:00:07, [1/0]
    B       10.10.2.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:00:07, [1/0]
    
  9. 在FW2的route-map引用的prefix中增加10.10.3.0/24的路由,这样route-map就开始允许接收10.10.3.0/24的BGP路由。

    config router prefix-list
        edit "Prefix_FW1"
            config rule
                edit 3
                    set prefix 10.10.3.0 255.255.255.0
                    unset ge
                    unset le
                next
            end
        next
    end
    
  10. 在FW2上查看学习到的BGP路由,仍然只有之前学习到的BGP路由10.10.1.0/24、10.10.2.0/24,没有FW1发布的10.10.3.0/24路由。

    FW2 # get router info routing-table bgp 
    Routing table for VRF=0
    B       10.10.1.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 02:37:10, [1/0]
    B       10.10.2.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 02:37:10, [1/0]
    
  11. 随后可以使用如下3种方法进行路由刷新。

路由刷新方法

方法1-使用BGP route-refresh

  1. 在FW2上查看在内存中保存的从FW1收到的BGP路由,由于没有开启软重配(soft-reconfiguration)功能,内存中不会保存从FW1收到的所有路由。

    FW2 # get router info bgp neighbors 192.168.12.1 received-routes 
    % Inbound soft reconfiguration not enabled
    % No prefix for neighbor 192.168.12.1
    
  2. 确保FW1和FW2的BGP邻居配置中都开启了capability-route-refresh功能(默认开启)。

    capability-route-refresh用于手动路由刷新时向邻居发送route-refresh请求。

    该功能符合RFC 2918,如果BGP邻居设备不是FortiGate,需要也支持RFC 2918才行。

    config router bgp
            edit "192.168.12.1"
                set capability-route-refresh enable
            next
        end
    end
    
  3. 在FW2上使用execute router clear bgp ip 192.168.12.1 in命令进行BGP邻居路由入方向的刷新,向FW1请求BGP Update,并重新匹配route-map接收路由。等待若干秒后,再次查看FW2的BGP路由表,可以看到10.10.3.0/24已经入表。

    如果BGP邻居配置中没有开启soft-reconfiguration,使用execute router clear bgp ip 192.168.12.1 soft in,将会与此步命令(execute router clear bgp ip 192.168.12.1 soft in)执行相同的操作。

    FW2 # execute router clear bgp ip 192.168.12.1 in
    
    FW2 # get router info routing-table bgp
    Routing table for VRF=0
    B       10.10.1.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 03:08:47, [1/0]
    B       10.10.2.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 03:08:47, [1/0]
    B       10.10.3.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:10:43, [1/0]
    
  4. FW2上的BGP Debug信息,显示FW2向FW1发送了NLRI(Route-Refresh)的更新请求(RFC 2918),收到FW1的BGP Update后,从中取出10.10.1.0/24、10.10.2.0/24、10.10.3.0/24路由条目,10.10.3.0/24被放入路由表,10.10.1.0/24和10.10.2.0/24由于路由表中已存在而忽略。

    FW2 # diagnose ip router bgp level info
    FW2 # diagnose ip router bgp all enable
    FW2 # diagnose debug console time enable
    FW2 # diagnose debug enable
    
    2024-04-11 14:46:27 BGP: 192.168.12.1-Outgoing [ENCODE] Route-Refresh: RR-Type New MsgSize 23
    2024-04-11 14:46:27 BGP: 192.168.12.1-Outgoing [ENCODE] Msg-Hdr: Type 5
    2024-04-11 14:46:27 BGP: 192.168.12.1-Outgoing [ENCODE] Route-Refresh: RR-Type New MsgSize 23
    2024-04-11 14:46:27 BGP: 192.168.12.1-Outgoing [ENCODE] Msg-Hdr: Type 5
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [DECODE] Update: Starting UPDATE decoding... Bytes To Read (37), msg_size (37)
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [DECODE] Update: NLRI Len(12)
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [FSM] State: Established Event: 27
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.1.0/24 path_id 0
    2024-04-11 14:46:33 BGP: [DAMP] bgp_rfd_rt_update(): Route State: NONE, ret=0
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [RIB] Update: ...duplicate route ignored
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.3.0/24 path_id 0
    2024-04-11 14:46:33 BGP: VRF 0 NSM announce: 10.10.3.0/24
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.2.0/24 path_id 0
    2024-04-11 14:46:33 BGP: [DAMP] bgp_rfd_rt_update(): Route State: NONE, ret=0
    2024-04-11 14:46:33 BGP: 192.168.12.1-Outgoing [RIB] Update: ...duplicate route ignored
    
  5. FW1上的BGP Debug信息,显示FW1收到了FW2的BGP NLRI更新请求(Route-Refresh),并向FW2发送了BGP Update。

    FW1 # diagnose ip router bgp level info
    FW1 # diagnose ip router bgp all enable
    FW1 # diagnose debug console time enable
    FW1 # diagnose debug enable
    
    2024-04-11 14:46:27 BGP: 192.168.12.2-Outgoing [FSM] State: Established Event: 29
    2024-04-11 14:46:27 BGP: 192.168.12.2-Outgoing [DECODE] Msg-Hdr: type 5, length 23
    2024-04-11 14:46:27 BGP: 192.168.12.2-Outgoing [DECODE] R-Refresh: AFI/SAFI (1/1)
    2024-04-11 14:46:27 BGP: 192.168.12.2-Outgoing [DECODE] PEER_STATUS_ORF_NOT_WAIT_REFRESH set!
    
    2024-04-11 14:46:33 BGP: 192.168.12.2-Outgoing [ENCODE] Msg-Hdr: Type 2
    2024-04-11 14:46:33 BGP: 192.168.12.2-Outgoing [ENCODE] Attr IP-Unicast: Tot-attr-len 21
    2024-04-11 14:46:33 BGP: 192.168.12.2-Outgoing [ENCODE] Update: Msg #9 Size 56
    
  6. FW2发出的BGP Route-Rfresh请求报文的格式如下。

    image-20240411165137642

  7. FW1返回的BGP Update报文如下,包含自己宣告的3条路由,抓包文件请参考bgp_route_refresh.pcap

    image-20240411165309727

  8. FW2上查看BGP capability-route-refresh功能的开启状态,如下所示,在BGP邻居配置中开启capability-route-refresh的状态下,FW2即有Route refresh的通告功能,也有Route refresh的接受功能。

    FW2 # get router info bgp neighbors 192.168.12.1 | grep refresh
        Route refresh: advertised and received (old and new)
      Route refresh request: received 0, sent 0
    
  9. 期间相关BGP邻居不会中断,路由表中原有的BGP路由没有消失。

方法2-使用soft-reconfiguration

  1. 在FW2上的BGP中开启soft-reconfiguration功能(对于BGP IPv6路由,该功能为soft-reconfiguration6)。

    config router bgp
        config neighbor
            edit "192.168.12.1"
                set soft-reconfiguration enable
            next
        end
    end
    
  2. 在FW2上查看在内存中保存的从FW1收到的BGP路由,由于开启了软重配(soft-reconfiguration)功能,内存中会保存从FW1收到的所有BGP路由(被route-map过滤前的路由)。

    FW2 # get router info bgp neighbors 192.168.12.1 received-routes
    VRF 0 BGP table version is 2, local router ID is 192.168.12.2
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
    Origin codes: i - IGP, e - EGP, ? - incomplete
    
       Network          Next Hop            Metric     LocPrf Weight RouteTag Path
    *>i10.10.1.0/24     192.168.12.1                  100      0        0 i <-/->
    *>i10.10.2.0/24     192.168.12.1                  100      0        0 i <-/->
    *>i10.10.3.0/24     192.168.12.1                  100      0        0 i <-/->
    
    Total number of prefixes 3
    
  3. 在FW2上使用execute router clear bgp ip 192.168.12.1 soft in命令进行BGP邻居路由入方向的刷新,不需要向FW1请求BGP Update,直接从内存中保存的BGP路由遍历,并重新匹配route-map接收路由。再次查看FW2的BGP路由表,可以看到10.10.3.0/24直接入表(不需要像“方法1-使用BGP route-refresh”等待若干秒)。

    FW2 # execute router clear bgp ip 192.168.12.1 soft in
    
    FW2 # get router info routing-table bgp 
    Routing table for VRF=0
    B       10.10.1.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:08:26, [1/0]
    B       10.10.2.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:08:26, [1/0]
    B       10.10.3.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:03:02, [1/0]
    
  4. FW2上的BGP Debug信息,显示BGP从内存中读取从FW1收到的所有BGP路由,从中取出10.10.1.0/24、10.10.2.0/24、10.10.3.0/24路由条目,10.10.3.0/24被放入路由表,10.10.1.0/24和10.10.2.0/24由于路由表中已存在而忽略。

    不需要向FW1发送BGP Route-Refresh请求报文。

    FW2 # diagnose ip router bgp level info
    FW2 # diagnose ip router bgp all enable
    FW2 # diagnose debug console time enable
    FW2 # diagnose debug enable
    
    2024-04-11 17:22:54 BGP: [RIB] Scanning BGP RIB for VRF 0...
    2024-04-11 17:22:54 BGP: [NSM] Verified NH 192.168.12.1 with NSM
    2024-04-11 17:22:58 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.1.0/24 path_id 0
    2024-04-11 17:22:58 BGP: [DAMP] bgp_rfd_rt_update(): Route State: NONE, ret=0
    2024-04-11 17:22:58 BGP: 192.168.12.1-Outgoing [RIB] Update: ...duplicate route ignored
    2024-04-11 17:22:58 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.2.0/24 path_id 0
    2024-04-11 17:22:58 BGP: [DAMP] bgp_rfd_rt_update(): Route State: NONE, ret=0
    2024-04-11 17:22:58 BGP: 192.168.12.1-Outgoing [RIB] Update: ...duplicate route ignored
    2024-04-11 17:22:58 BGP: 192.168.12.1-Outgoing [RIB] Update: Received Prefix 10.10.3.0/24 path_id 0
    2024-04-11 17:22:58 BGP: VRF 0 NSM announce: 10.10.3.0/24
    
  5. 期间相关BGP邻居不会中断,路由表中原有的BGP路由没有消失。

方法3-重置BGP邻居

  1. 在FW2上使用execute router clear bgp ip 192.168.12.1命令进行BGP邻居重置,重新建立与FW1的BGP邻居并学习BGP路由。

    不推荐使用此方法,BGP邻居需要重新建立,流量中断时间长。

    使用execute router clear bgp all可以重置所有的BGP邻居,请谨慎使用。

    FW2 # execute router clear bgp ip 192.168.12.1
    
  2. 随后FW2与FW1的BGP邻居被重置,并重新建立BGP邻居。

    FW2 # get router info bgp summary
    
    VRF 0 BGP router identifier 192.168.12.2, local AS number 10086
    BGP table version is 2
    1 BGP AS-PATH entries
    0 BGP community entries
    
    Neighbor     V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
    192.168.12.1 4      10086      17      20        0    0    0    never Idle       
    Total number of neighbors 1
    
  3. 等待BGP邻居建立完成并重新学习BGP路由后,10.10.3.0/24被放入路由表。

    FW2 # get router info bgp summary 
    
    VRF 0 BGP router identifier 192.168.12.2, local AS number 10086
    BGP table version is 2
    1 BGP AS-PATH entries
    0 BGP community entries
    
    Neighbor     V         AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
    192.168.12.1 4      10086      30      33        2    0    0 00:09:03        3
    Total number of neighbors 1
    
    FW2 # get router info routing-table bgp
    Routing table for VRF=0
    B       10.10.1.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:08:45, [1/0]
    B       10.10.2.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:08:45, [1/0]
    B       10.10.3.0/24 [200/0] via 192.168.12.1 (recursive is directly connected, port2), 00:08:45, [1/0]
    
  4. FW2上的BGP Debug信息,显示FW2主动重置了BGP邻居,并通知了FW1。

    不需要向FW1发送BGP Route-Refresh请求报文。

    FW2 # diagnose ip router bgp level info
    FW2 # diagnose ip router bgp all enable
    FW2 # diagnose debug console time enable
    FW2 # diagnose debug enable
    
    2024-04-11 17:28:23 id=20300 msg="BGP: %BGP-5-ADJCHANGE: VRF 0 neighbor 192.168.12.1 Down BGP Notification CEASE"
    2024-04-11 17:28:23 id=20300 msg="BGP: %BGP-5-ADJCHANGE: VRF 0 neighbor 192.168.12.1 Down User reset"
    
  5. 期间相关BGP中断,路由表中原有的BGP路由消失。

总结

  1. 三种刷新路由的方法优缺点总结:
    • 方法1-使用BGP route-refresh:
      • 优点:BGP邻居和已有路由不会中断,相比方法2,不需要在本地内存中保存未经路由策略过滤/修改的路由,节省内存。
      • 缺点:需要BGP邻居设备厂商支持RFC 2918(FortiGate支持)。
      • 配合exe router clear bgp ip 192.168.12.2 in使用。
    • 方法2-使用soft-reconfiguration:
      • 优点:BGP邻居和已有路由不会中断,不需要向BGP邻居发送Refresh-Route请求,仅本地执行。
      • 缺点:针对每个已建立的BGP邻居需要在内存中保存一份未经路由策略过滤/修改的路由列表,内存消耗较方法1稍大。
      • 配合exe router clear bgp ip 192.168.12.2 soft in使用。
    • 方法3-重置BGP邻居:
      • 优点:不需要BGP邻居设备的任何RFC支持,所有厂商原生支持。
      • 缺点:BGP邻居会重新建立并通告路由,流量中断时间长。
      • 配合exe router clear bgp ip 192.168.12.2 allexe router clear bgp all使用。
  2. FortiGate不支持路由过滤/修改条件更改后的BGP路由条目自动更新,必须使用上述三种方法手动刷新路由。
  3. 对于out方向的路由策略(路由过滤/修改),使用exe router clear bgp ip 192.168.12.2 outexe router clear bgp ip 192.168.12.2 soft out都可以触发out方向的路由更新,从而向邻居发送BGP Update更新报文,本文就不再赘述。

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

results matching ""

    No results matching ""