06-BGP高级配置
本章节下载: 06-BGP高级配置 (949.83 KB)
1.1 配置建立BGP TCP连接时使用的TCP最大报文段长度
1.6.3 禁止与指定对等体/对等体组建立会话(IPv4对等体)
1.6.4 禁止与指定对等体/对等体组建立会话(IPv6对等体)
1.7.2 通过Route-refresh功能实现BGP软复位(IPv4对等体)
1.7.3 通过Route-refresh功能实现BGP软复位(IPv6对等体)
1.7.4 通过将所有路由更新信息保存在本地实现BGP软复位(IPv4单播)
1.7.5 通过将所有路由更新信息保存在本地实现BGP软复位(IPv6单播)
1.12 配置BGP路由根据路由策略来过滤迭代到的下一跳路由
1.14 配置系统进入二级内存门限告警状态后不断开EBGP对等体
3.4.2 通过引用路由策略的方式开启BGP快速重路由功能(IPv4单播)
3.4.3 通过引用路由策略的方式开启BGP快速重路由功能(IPv6单播)
3.4.4 通过pic命令开启BGP快速重路由(IPv4单播)
3.4.5 通过pic命令开启BGP快速重路由(IPv6单播)
3.4.6 配置BGP快速重路由通过BFD会话检测主路由的下一跳是否可达
4.2.4 配置BGP LS信息的AS号和Router ID
4.2.6 配置BGP路由根据路由策略来过滤迭代到的下一跳路由
BGP对等体之间往往需要经过多跳建立TCP连接。由于源端到目的端不同设备的MTU不同,中间节点转发BGP报文时可能需要重新进行分片,导致频繁封装解封装数据包,降低了转发效率。为了避免上述情况,可通过本功能配置本地设备与指定对等体/对等体组建立TCP连接时所使用的TCP MSS值,以达到TCP报文在源端分段后,不再被中间节点分片的目的,进而提高网络性能。有关TCP最大报文段长度(Max Segment Size,MSS)的详细介绍,请参见“三层技术-IP业务配置指导”中的“IP性能优化”。
配置本功能后,设备与指定对等体/对等体组建立BGP TCP连接时,TCP最大报文段长度为以下MSS中的最小值:
· 与BGP对等体建立TCP连接的接口上,通过接口上发送IPv4报文的MTU值(由ip mtu命令配置)计算得到的MSS值。
· 与BGP对等体建立TCP连接的接口上,通过tcp mss命令配置的接口MSS值。
· 配置tcp path-mtu-discovery命令开启TCP连接的Path MTU探测功能后,根据探测机制确定的Path MTU计算得到的MSS值。
· 本功能配置的设备与指定对等体/对等体组之间建立BGP TCP连接时所使用的MSS值。(如果未配置本功能,则TCP MSS值为上述几项中的最小值)
根据MTU值(接口MTU或Path MTU)计算MSS值的方法为:MSS=MTU值-IP头部长度-TCP头部长度。有关MTU和MSS的详细介绍,请参见“三层技术-IP业务配置指导”中的“IP性能优化”。
配置本功能可能会导致已经建立的BGP会话断开后重新建立,请谨慎配置本命令。
(1) 进入系统视图。
system-view
(1) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(2) 配置设备与指定对等体/对等体组之间建立BGP TCP连接时所使用的TCP最大报文段长度。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } tcp-mss mss-value
缺省情况下,未指定设备与指定对等体/对等体组建立TCP连接时所使用的TCP最大报文段长度。
当前路由器要与另外一个路由器建立EBGP会话,它们之间必须具有直连的物理链路,且必须使用直连接口建立会话。如果不满足这一要求,则必须使用peer ebgp-max-hop命令允许它们经过多跳建立EBGP会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置允许本地路由器同非直连网络上的邻居建立EBGP会话,同时指定允许的最大跳数。
peer { group-name | ipv4-address [ mask-length ] } ebgp-max-hop [ hop-count ]
缺省情况下,不允许同非直连网络上的邻居建立EBGP会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置允许本地路由器同非直连网络上的邻居建立EBGP会话,同时指定允许的最大跳数。
peer { group-name | ipv6-address [ prefix-length ] } ebgp-max-hop [ hop-count ]
缺省情况下,不允许同非直连网络上的邻居建立EBGP会话。
未使能直连EBGP会话快速复位功能时,连接直连EBGP对等体的链路down后,本地路由器不会立即断开与EBGP对等体的会话,而是等待会话保持时间(Holdtime)超时后,才断开该会话。此时链路震荡不会影响EBGP会话的状态。
使能直连EBGP会话快速复位功能后,连接直连EBGP对等体的链路down时,本地路由器会立即断开与EBGP对等体的会话,并重新与该对等体建立EBGP会话,从而实现快速发现链路故障并重建会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 使能直连EBGP会话快速复位功能。
ebgp-interface-sensitive
缺省情况下,直连EBGP会话快速复位功能处于使能状态。
BGP ORF(Outbound Route Filtering,输出路由过滤)功能是指将ORF信息(本地的路由接收策略信息)通过Route-refresh消息发送给对等体,当对等体需要向本地发送Update更新消息时,不仅要利用对等体上的路由策略对路由进行过滤,还需要利用接收到的路由接收策略对路由进行过滤,只有通过策略过滤的路由信息才会发给本地,以达到减少BGP邻居间Update更新消息的交互,节省网络资源的目的。
使能BGP ORF能力后,本地和BGP对等体会通过Open消息协商ORF能力(即收发的消息里是否允许携带ORF信息,如果允许携带,是否可以携带非标准的ORF信息),当协商完毕并成功建立BGP会话后,可以通过特殊的Route-refresh消息交互ORF信息。
本地和BGP对等体都需要执行本配置,且需要保证一端能够发送携带ORF信息的Route-refresh报文,另一端能够接收携带ORF信息的Route-refresh报文,才能保证ORF能力协商成功。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 开启BGP邻居协商的ORF能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise orf prefix-list { both | receive | send }
缺省情况下,BGP邻居协商的ORF能力处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 开启BGP邻居协商的ORF能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise orf prefix-list { both | receive | send }
缺省情况下,BGP邻居协商的ORF能力处于关闭状态。
和采用非标准ORF的友商设备互通时需要执行本配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP邻居协商的非标准ORF能力。
peer { group-name | ip-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise orf non-standard
缺省情况下,BGP邻居协商的非标准ORF能力处于关闭状态。
可在任意视图下执行以下命令:
· 显示邻居收到的ORF消息中的前缀信息(IPv4单播)。
display bgp [ instance instance-name ] peer ipv4 [ unicast ] ipv4-address received prefix-list
· 显示邻居收到的ORF消息中的前缀信息(IPv6单播)。
display bgp [ instance instance-name ] peer ipv6 [ unicast ] ipv6-address received prefix-list
display bgp [ instance instance-name ] peer ipv6 [ unicast ] ipv4-address received prefix-list
设备支持4字节的AS号,即AS号取值占用4字节,取值范围为1~4294967295。缺省情况下,设备在与对端设备建立BGP会话时,通过Open消息通告对端设备本端支持4字节的AS号。如果对端设备不支持4字节AS号(只支持2字节AS号),则会导致会话协商失败。此时,在本端与对端设备之间使能4字节AS号抑制功能,可以使得本端设备通过Open消息向对端设备谎称自己不支持4字节的AS号,从而确保本端和对端设备之间可以成功建立BGP会话。
如果对端设备支持4字节AS号,请不要使能4字节AS号抑制功能,否则会导致BGP会话无法建立。
(1) 进入系统视图。
system-view
(2) 使能4字节AS号抑制功能。
peer { group-name | ipv4-address [ mask-length ] } capability-advertise suppress-4-byte-as
缺省情况下, 4字节AS号抑制功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 使能4字节AS号抑制功能。
peer { group-name | ipv6-address [ prefix-length ] } capability-advertise suppress-4-byte-as
缺省情况下,4字节AS号抑制功能处于关闭状态。
由于网络升级维护等原因,需要暂时断开与某个对等体/对等体组的BGP会话时,可以通过本配置禁止与对等体/对等体组建立会话。当网络恢复后,通过执行undo peer ignore命令以恢复与对等体/对等体组的会话。这样,网络管理员无需删除并重新进行对等体/对等体组相关配置,减少了网络维护的工作量。
设备可以通过以下两种方式禁止与对等体/对等体组建立会话:
· 仅禁止与指定对等体/对等体组建立会话。
· 禁止与所有对等体建立会话。
执行本配置时,如果可以指定了graceful参数,则设备会启动等待邻居关系断开定时器,并重新发布路由信息。不同方式下,发布的路由信息有所不同:
· 仅禁止与指定对等体/对等体组建立会话:
¡ 向指定的对等体/对等体组发送本设备上全部的路由。
¡ 向其他的IBGP对等体/对等体组发送来自指定对等体/对等体组的路由。
· 禁止与所有对等体建立会话:向所有对等体/对等体组重新发送本设备上全部的路由。
等待邻居关系断开定时器超时后:
· 如果仅禁止与指定对等体/对等体组建立会话,则设备断开与指定等体/对等体组的会话。
· 如果禁止与所有对等体建立会话,则设备断开与所有对等体的会话。
执行本配置还可以配置这些路由的属性,以降低重新发布路由的优先级,使得邻居路由器优选从其他邻居学到的路由,从而避免当定时器超时、邻居关系断开时造成流量的中断。如果用户只希望设备发送低优先级的路由,而不断开BGP会话,可以在配置本功能时指定graceful graceful-time参数的值为0。
如果同时配置ignore all-peers和peer ignore命令,则针对同一对等体/对等体组,以peer ignore命令的配置为准。
(1) 进入系统视图。
system-view
(2) 禁止与对等体/对等体组建立会话。
peer { group-name | ipv4-address [ mask-length ] } ignore [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ]
缺省情况下,允许与BGP对等体/对等体组建立会话。
如果本设备和对等体的会话已经建立,则执行本命令后,会停止该会话,并且清除所有相关路由信息;如果本设备和对等体组的会话已经建立,则执行本命令后,会终止与对等体组内所有对等体之间的会话,并且清除所有相关路由信息。
(1) 进入系统视图。
system-view
(2) 禁止与IPv6 BGP对等体/对等体组建立会话。
peer { group-name | ipv6-address [ prefix-length ] } ignore [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ]
缺省情况下,允许与BGP对等体/对等体组建立会话。
如果本设备和对等体的会话已经建立,则执行本命令后,会停止该会话,并且清除所有相关路由信息;如果本设备和对等体组的会话已经建立,则执行本命令后,会终止与对等体组内所有对等体之间的会话,并且清除所有相关路由信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 禁止与所有对等体/对等体组建立会话。
ignore all-peers [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ]
缺省情况下,允许与BGP对等体/对等体组建立会话。
如果本设备和对等体/对等体组的会话已经建立,则执行本命令后,会断开本设备和对等体/对等体组的会话,并且清除所有路由信息。
BGP的选路策略改变,即影响BGP路由选择的配置(如路由首选值等)发生变化后,为了使新的策略生效,必须复位BGP会话,即删除并重新建立BGP会话,以便重新发布路由信息,并应用新的策略对路由信息进行过滤。复位BGP会话时,会造成短暂的BGP会话中断。
通过BGP软复位,可以实现在不中断BGP会话的情况下,对BGP路由表进行更新,并应用新的选路策略。
BGP软复位的方法有以下三种:
· 通过Route-refresh功能实现BGP软复位:如果BGP的选路策略发生了变化,则本地路由器会向BGP对等体发送Route-refresh消息,收到此消息的对等体将其路由信息重新发给本地路由器,本地路由器根据新的路由策略对接收到的路由信息进行过滤。采用这种方式时,要求当前路由器和对等体都支持Route-refresh功能。
· 通过将所有路由更新信息保存在本地的方式实现BGP软复位:将从对等体接收的所有原始路由更新信息保存在本地,当选路策略发生改变后,对保存在本地的所有路由使用新的路由策略重新进行过滤。采用这种方式时,不要求当前路由器和对等体都支持Route-refresh功能,但是保存路由更新需要占用较多的内存资源。
· 手工软复位BGP会话:执行refresh bgp命令手工触发本地路由器将本地路由信息发送给BGP对等体或向BGP对等体发送Route-refresh消息,收到Route-refresh消息的对等体将其路由信息重新发给本地路由器,以便本地路由器根据新的路由策略对接收到的路由信息进行过滤。采用这种方式时,要求当前路由器和对等体都支持Route-refresh功能。
(1) 进入系统视图。
system-view
(2) 通过Route-refresh功能实现BGP软复位。请选择其中一项进行配置。
¡ 使能本地路由器与指定对等体/对等体组的BGP路由刷新功能。
peer { group-name | ipv4-address [ mask-length ] } capability-advertise route-refresh
¡ 使能本地路由器与指定BGP对等体/对等体组的BGP路由刷新、多协议扩展和4字节AS号功能。
undo peer { group-name | ipv4-address [ mask-length ] } capability-advertise conventional
缺省情况下,BGP路由刷新、多协议扩展和4字节AS号功能处于使能状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 通过Route-refresh功能实现BGP软复位。请选择其中一项进行配置。
¡ 使能本地路由器与指定IPv6 BGP对等体/对等体组的BGP路由刷新功能。
peer { group-name | ipv6-address [ prefix-length ] } capability-advertise route-refresh
¡ 使能本地路由器与指定IPv6 BGP对等体/对等体组的BGP路由刷新、多协议扩展和4字节AS号功能。
undo peer { group-name | ipv6-address [ prefix-length ] } capability-advertise conventional
缺省情况下,BGP路由刷新、多协议扩展和4字节AS号功能处于使能状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 保存所有来自指定对等体/对等体组的原始路由更新信息。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } keep-all-routes
缺省情况下,不保存来自对等体/对等体组的原始路由更新信息。
本命令只对执行该命令后接收到的路由生效。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 保存所有来自指定对等体/对等体组的原始路由更新信息。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } keep-all-routes
缺省情况下,不保存来自对等体/对等体组的原始路由更新信息。
本命令只对执行该命令后接收到的路由生效。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置Route-refresh功能。请选择其中一项进行配置。
¡ 使能本地路由器与指定对等体/对等体组的BGP路由刷新功能。
peer { group-name | ipv4-address [ mask-length ] } capability-advertise route-refresh
¡ 使能本地路由器与指定BGP对等体/对等体组的BGP路由刷新、多协议扩展和4字节AS号功能。
undo peer { group-name | ipv4-address [ mask-length ] } capability-advertise conventional
缺省情况下,BGP路由刷新、多协议扩展和4字节AS号功能处于使能状态。
(4) 依次执行以下命令退回用户视图。
a. quit
b. quit
(5) 手工对BGP会话进行软复位。请选择其中一项进行配置。
a. 手工软复位IPv4地址族下的BGP IPv4会话。
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | all | external | group group-name | internal } { export | import } ipv4 [ unicast ]
¡ 手工软复位IPv4地址族下的BGP IPv6会话。
refresh bgp [ instance instance-name ] { ipv6-address [ prefix-length ] | all | external | group group-name | internal } { export | import } ipv4 [ unicast ]
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置Route-refresh功能。请选择其中一项进行配置。
¡ 使能本地路由器与IPv6 BGP指定对等体/对等体组的BGP路由刷新功能。
peer { group-name | ipv6-address [ prefix-length ] } capability-advertise route-refresh
¡ 使能本地路由器与指定IPv6 BGP对等体/对等体组的BGP路由刷新、多协议扩展和4字节AS号功能。
undo peer { group-name | ipv6-address [ prefix-length ] } capability-advertise conventional
缺省情况下,BGP路由刷新、多协议扩展和4字节AS号功能处于使能状态。
(4) 依次执行以下命令退回用户视图。
a. quit
b. quit
(5) 手工对BGP会话进行软复位。请选择其中一项进行配置。
a. 手工软复位IPv6地址族下的BGP IPv6会话。
refresh bgp [ instance instance-name ] { ipv6-address [ prefix-length ] | all | external | group group-name | internal } { export | import } ipv6 [ unicast ]
¡ 手工软复位IPv6地址族下的BGP IPv4会话。
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | all | external | group group-name | internal } { export | import } ipv6 [ unicast ]
通过改变BGP选路规则实现负载分担时,设备根据balance命令配置的进行BGP负载分担的路由条数,选择指定数目的路由进行负载分担,以提高链路利用率。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) (可选)配置BGP在选择最优路由时忽略IGP Metric的比较。
bestroute igp-metric-ignore
缺省情况下,BGP在选择最优路由时会比较这些路由下一跳的IGP路由的Metric值,并优选IGP Metric值最小的路由。
下一跳IGP Metric不相同的BGP路由之间无法形成负载分担。配置本命令使得不同路由的下一跳IGP Metric不同时能够形成BGP负载分担。
(4) 退回系统视图。
¡ 在BGP实例视图下退回系统视图。
quit
¡ 在BGP-VPN实例视图下请依次执行以下命令退回系统视图。
quit
quit
(5) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(6) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(7) 配置进行BGP负载分担的路由条数。
balance [ ebgp | eibgp | ibgp ] number
缺省情况下,不会进行BGP负载分担。
(8) (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-neglect
缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担。
(9) (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-relax [ ebgp | ibgp ]
缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) (可选)配置BGP在选择最优路由时忽略IGP Metric的比较。
bestroute igp-metric-ignore
缺省情况下,BGP在选择最优路由时会比较这些路由下一跳的IGP路由的Metric值,并优选IGP Metric值最小的路由。
下一跳IGP Metric不相同的BGP路由之间无法形成负载分担。配置本命令使得不同路由的下一跳IGP Metric不同时能够形成BGP负载分担。
(4) 退回系统视图。
¡ 在BGP实例视图下退回系统视图。
quit
¡ 在BGP-VPN实例视图下请依次执行以下命令退回系统视图。
quit
quit
(5) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(6) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(7) 配置进行BGP负载分担的路由条数。
balance [ ebgp | eibgp | ibgp ] number
缺省情况下,不会进行BGP负载分担。
(8) (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-neglect
缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担。
(9) (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-relax [ ebgp | ibgp ]
缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担。
缺省情况下,BGP只发布一条最优路由。如果最优路由所在路径出现网络故障,数据流量将会被中断,直到BGP根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。
配置了Add-Path(Additional Paths)功能后,BGP可以向邻居发送本地前缀相同下一跳不同的多条路由。网络出现故障后,次优路由可以成为新的最优路由,这样就缩短了流量中断时间。
Add-Path能力包括接收和发送两种。为了让对等体间的Add-Path能力协商成功,必须一端使能接收能力,另一端使能发送能力。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置Add-Path功能。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } additional-paths { receive | send } *
缺省情况下,未配置Add-Path功能。
(5) 配置向指定对等体/对等体组发送的Add-Path优选路由的最大条数。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise additional-paths best number
缺省情况下,向指定对等体/对等体组发送的Add-Path优选路由的最大条数为1。
(6) 配置Add-Path优选路由的最大条数。
additional-paths select-best best-number
缺省情况下,Add-Path优选路由的最大条数为1。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置Add-Path功能。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } additional-paths { receive | send } *
缺省情况下,未配置Add-Path功能。
(5) 配置向指定对等体/对等体组发送的Add-Path优选路由的最大条数。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise additional-paths best number
缺省情况下,向指定对等体/对等体组发送的Add-Path优选路由的最大条数为1。
(6) 配置Add-Path优选路由的最大条数。
additional-paths select-best best-number
缺省情况下,Add-Path优选路由的最大条数为1。
如图1-1所示,设备之间均通过BGP协议互通,Device A与Device D之间存在两条路径,当Device D和Device B之间的链路不通时,流量切换到备份路径上转发,之后若主用路径恢复正常,流量将切回主用路径。这种情况下,当主用链路恢复正常时,Device B会向Device A发送Update消息更新路由,Device A收到路由后触发路由优选,将流量切换到主用路径上进行转发,此时Device B可能未完成FIB转发表项的刷新,导致流量丢失。通过在Device A上开启延迟路由优选功能可以在触发路由优选时延迟一段时间再进行重新选路,避免切换路径时由于表项未完成刷新导致的流量丢失现象。
配置本功能时,需要注意:
· 仅路由变化后存在多条相同前缀的有效路由时路由优选才会延迟。
· 将路由优选延迟时间修改为非0值时,正在等待延迟路由优选时间的路由不受影响,仍采用延迟开始时的时间;将路由优选延迟时间修改为0时,正在等待延迟路由优选时间的路由会立即进行优选。
以下情况需要进行路由优选时不受路由优选延迟时间影响,仍会立即进行路由优选:
· 本地的配置发生变化引起路由变化。
· 撤销路由引起路由变化。
· 路由变化后去往某一目的只有一条路由。
· BGP发生主备进程倒换时。
· 存在多条等价路由的情况下,选中路由发生变化。
· 配置了FRR情况下仅存在最优路由和次优路由。
· 引入的路由触发路由优选。
· 最优路由下一跳发生变化且存在正在等待延迟优选时间的相同前缀路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP路由延迟优选时间。
route-select delay delay-value
缺省情况下,延迟时间为0秒,即路由优选不延迟。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP路由延迟优选时间。
route-select delay delay-value
缺省情况下,延迟时间为0秒,即路由优选不延迟。
路由迭代变化可以分为以下两种:
· 紧急路由迭代变化:路由迭代变化后路由是否可达也发生变化,如由于网络故障,BGP路由无法正确迭代出下一跳路由,导致流量中断。
· 非紧急路由迭代变化:迭代路由或依赖路由发生变化,但路由是否可达未变化,如BGP路由迭代出的接口发生了变化,但流量仍可以正确转发。
当BGP路由的迭代路由或依赖路由频繁变化时,开启本功能为下一跳路由的变化配置延迟响应时间,可以减少不必要的重新选路和Update消息的发送,从而避免路由变化时流量大量丢失的问题。
本功能仅适用于到达同一目的地有多条链路的场景。当去往某一目的地的链路唯一时,如果配置本功能,则在链路故障后会造成更大的流量损失。
请根据实际组网配置适当的延迟响应时间。配置时间过短可能由于路由未收敛完成,导致BGP依然进行了不必要的重新选路和Update消息的发送;配置时间过长可能造成不必要的流量损失。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 开启下一跳路由迭代变化延迟响应功能。
nexthop recursive-lookup [ non-critical-event ] delay [ delay-value ]
缺省情况下,下一跳路由迭代变化延迟响应功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 开启下一跳路由迭代变化延迟响应功能。
nexthop recursive-lookup [ non-critical-event ] delay [ delay-value ]
缺省情况下,下一跳路由迭代变化延迟响应功能处于关闭状态。
BGP如果在路由迭代的过程中不对迭代的结果路由进行任何限制,则可能会将路由迭代到一个错误的转发路径上。可以通过配置本功能,使得用户可以通过路由策略灵活的匹配条件,有选择性地影响BGP路由的迭代结果,从而保证BGP路由的下一跳能够迭代到用户期望的路径上。
配置本功能后,BGP路由的下一跳只能迭代到能通过路由策略过滤的路由上,如果BGP路由迭代到的下一跳路由均无法通过路由策略的过滤,则该路由将被标识为不可达,无法生效。路由通过路由策略过滤的判断条件是:路由能够通过本命令指定的路由策略中允许模式节点的过滤。
在某些组网环境中,如果不希望来自特定对等体的路由受迭代策略控制,可以配置peer nexthop-recursive-policy disable命令,使得本功能以及protocol nexthop recursive-lookup命令对于从指定对等体/对等体组学习到的BGP路由不生效。
nexthop recursive-lookup route-policy命令对从直连EBGP对等体学习到的路由不生效。
如果在某个BGP地址族视图下配置了nexthop recursive-lookup route-policy命令,并同时在RIB IPv4地址族视图(或RIB IPv6地址族视图)下配置了protocol nexthop recursive-lookup命令,则对于该BGP地址族中的BGP路由,采用该地址族视图下配置的nexthop recursive-lookup route-policy命令。如果某个BGP地址族视图下未配置nexthop recursive-lookup route-policy命令,仅在RIB IPv4地址族视图(或RIB IPv6地址族视图)下配置了protocol nexthop recursive-lookup命令,则该地址族中的BGP路由根据下一跳的地址类型,使用RIB IPv4地址族视图(或RIB IPv6地址族视图)下protocol nexthop recursive-lookup命令的配置来进行下一跳迭代查找。
protocol nexthop recursive-lookup命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“IP路由基础”。
· 配置BGP路由根据路由策略来过滤迭代到的下一跳路由(IPv4单播)
· 配置BGP路由根据路由策略来过滤迭代到的下一跳路由(IPv6单播)
· (可选)配置从对等体/对等体组学到的路由不受迭代策略控制
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP路由根据路由策略来过滤迭代到的下一跳路由。
nexthop recursive-lookup route-policy route-policy-name
缺省情况下,BGP不根据路由策略来过滤迭代到的下一跳路由。
配置本命令后,如果地址族中的所有BGP路由迭代到的下一跳路由均无法通过路由策略的过滤,该地址族下的所有BGP路由将全部成为不可达路由。请用户在配置本命令前,提前规划期望迭代到的下一跳路由,使其能够通过指定路由策略中允许模式节点的过滤。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP路由根据路由策略来过滤迭代到的下一跳路由。
nexthop recursive-lookup route-policy route-policy-name
缺省情况下,BGP不根据路由策略来过滤迭代到的下一跳路由。
为了防止指定地址族中的所有BGP路由迭代到的下一跳路由均无法通过路由策略的过滤,导致该地址族下的所有BGP路由均成为不可达路由,请在配置本命令前,确保用户期望迭代到的下一跳路由能够通过指定路由策略中允许模式节点的过滤。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置从对等体/对等体组学到的路由不受迭代策略控制。
peer { group-name | ip-address [ mask-length ] | ipv6-address [ prefix-length ] } nexthop-recursive-policy disable
缺省情况下,从对等体/对等体组学到的路由受迭代策略控制。
配置本命令后,对于从指定对等体/对等体组学习到的BGP路由,nexthop recursive-lookup route-policy命令和protocol nexthop recursive-lookup命令均不生效。
通过配置本功能,可以抑制BGP邻居状态频繁切换,减少BGP报文的发送和CPU及带宽资源的占用,降低设备负担。
配置本功能后,如果BGP会话在短时间内反复up/down,则每次BGP会话启动时保持在Idle状态的时间都将被延长,达到所配置的Idle状态最长保持时间后该时间不再继续增长;当此BGP会话保持Established状态时间大于等于配置的抑制回退时间时,下次BGP会话启动的Idle保持时间将重置为初始值。
请根据实际组网配置适当的Idle状态最长保持时间和抑制回退时间,Idle状态最长保持时间过短可能起不到抑制作用,过长可能导致BGP邻居长时间不能建立连接。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置邻居震荡抑制功能。
peer { group-name | ipv4-address | ipv6-address } flap-dampen [ max-idle-time max-time | min-established-time min-time ]*
缺省情况下,对等体/对等体组的邻居震荡抑制功能处于关闭状态。
当系统进入二级内存门限告警状态后,BGP会周期性地选择一个EBGP对等体,断开与该对等体之间的BGP会话,直到系统内存恢复为止。用户可以通过本配置来避免在二级内存门限告警状态下,断开与指定EBGP对等体/对等体组之间的BGP会话,以达到对特定EBGP对等体/对等体组进行保护的目的。
内存告警门限的详细介绍,请参见“设备管理配置指导”中的“硬件资源管理”。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置系统进入二级内存门限告警状态后,不断开与指定EBGP对等体/对等体组之间的会话。
peer { group-name | ipv4-address [ mask-length ] } low-memory-exempt
缺省情况下,系统在二级内存门限告警状态下,会周期性地选择一个EBGP对等体,并断开与该对等体之间的BGP会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置系统进入二级内存门限告警状态后,不断开与指定EBGP对等体/对等体组之间的会话。
peer { group-name | ipv6-address [ prefix-length ] } low-memory-exempt
缺省情况下,系统在二级内存门限告警状态下,会周期性地选择一个EBGP对等体,并断开与该对等体之间的BGP会话。
DSCP(Differentiated Services Code Point,差分服务编码点)携带在IP报文中的ToS字段,用来体现报文自身的优先等级,决定报文传输的优先程度。通过配置本功能,可以对BGP发送协议报文的DSCP优先级进行设置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP发送协议报文的DSCP优先级。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } dscp dscp-value
缺省情况下,BGP发送协议报文的DSCP优先级为48。
开启BGP次优路由下刷RIB功能后,当BGP路由表中最优路由为通过network命令生成或import-route命令引入的路由,次优路由为从BGP对等体收到的路由时,次优路由会下刷到RIB表项中。在某些组网情况下,执行本命令下刷到达同一目的网络次优路由到RIB后,当最优路由发生故障时,系统可以快速切换到次优路由。例如,设备有一条到达1.1.1.0/24网络的静态路由,其优先级高于BGP路由,BGP本地引入该静态路由同时从对等体收到到达该网段的路由,执行本命令BGP将从对等体收到的路由作为次优路由下刷到RIB,这时如果开启协议间的FRR功能,当静态路由发生故障时,本地引入的静态路由不可达,系统可以快速切换到BGP次优路由,从而大大缩短了流量中断时间。
协议间FRR功能的详细介绍,请参见“三层技术-IP路由配置指导”中的“IP路由基础”。
(1) 进入系统视图。
system-view
(2) 进入BGP视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP次优路由下刷RIB功能。
flush suboptimal-route
缺省情况下,BGP次优路由下刷RIB功能处于关闭状态,即只有BGP最优路由可以下刷到RIB。
当BGP路由策略或协议发生变化后,可以通过复位BGP会话使新的配置生效。执行复位BGP相关命令后,设备会断开并重新建立BGP邻居关系,以便更新BGP路由信息。
复位BGP会话时,会造成短暂的BGP会话中断。
本节所有命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“BGP基础命令”。
请在用户视图下执行以下命令:
· 复位IPv4单播地址族下的BGP会话。
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | all | external | group group-name | internal } ipv4 [ unicast ]
reset bgp [ instance instance-name ] ipv6-address [ prefix-length ] ipv4 [ unicast ]
· 复位IPv6单播地址族下的BGP会话。
reset bgp [ instance instance-name ] { as-number | ipv6-address [ prefix-length ] | all | external | group group-name | internal } ipv6 [ unicast ]
reset bgp ipv4-address [ mask-length ] ipv6 [ unicast ]
· 复位所有BGP会话。
reset bgp [ instance instance-name ] all
所有交换机都配置BGP,Switch A在AS 65008中,Switch B和Switch C在AS 65009中。
Switch A与Switch B、Switch C之间运行EBGP,Switch B和Switch C之间运行IBGP。
在Switch A上配置负载分担的路由条数为2,以提高链路利用率。
图1-2 BGP负载分担配置组网图
(1) 配置各接口的IP地址(略)
(2) 配置BGP连接
¡ 在Switch A上与Switch B、Switch C分别建立EBGP连接,并将8.1.1.0/24网段的路由通告给Switch B和Switch C,以便Switch B和Switch C能够访问Switch A的内部网络。
¡ 在Switch B上与Switch A建立EBGP连接,与Switch C建立IBGP连接,并将9.1.1.0/24网段的路由通告给Switch A,以便Switch A能够通过Switch B访问内部网络。同时,在Switch B上配置一条到Switch C Loopback0接口的静态路由(也可以用OSPF等协议来实现),以便使用Loopback接口建立IBGP连接。
¡ 在Switch C上与Switch A建立EBGP连接,与Switch B建立IBGP连接,并将9.1.1.0/24网段的路由通告给Switch A,以便Switch A能够通过Switch C访问内部网络。同时,在Switch C上配置一条到Switch B Loopback0接口的静态路由(也可以用OSPF等协议来实现),以便使用Loopback接口建立IBGP连接。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] peer 3.1.1.1 as-number 65009
[SwitchA-bgp-default] peer 3.1.2.1 as-number 65009
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 3.1.1.1 enable
[SwitchA-bgp-default-ipv4] peer 3.1.2.1 enable
[SwitchA-bgp-default-ipv4] network 8.1.1.0 24
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 3.1.1.2 as-number 65008
[SwitchB-bgp-default] peer 3.3.3.3 as-number 65009
[SwitchB-bgp-default] peer 3.3.3.3 connect-interface loopback 0
[SwitchB-bgp-default] address-family ipv4 unicast
[SwitchB-bgp-default-ipv4] peer 3.1.1.2 enable
[SwitchB-bgp-default-ipv4] peer 3.3.3.3 enable
[SwitchB-bgp-default-ipv4] network 9.1.1.0 24
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
[SwitchB] ip route-static 3.3.3.3 32 9.1.1.2
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 3.1.2.2 as-number 65008
[SwitchC-bgp-default] peer 2.2.2.2 as-number 65009
[SwitchC-bgp-default] peer 2.2.2.2 connect-interface loopback 0
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 3.1.2.2 enable
[SwitchC-bgp-default-ipv4] peer 2.2.2.2 enable
[SwitchC-bgp-default-ipv4] network 9.1.1.0 24
[SwitchC-bgp-default-ipv4] quit
[SwitchC-bgp-default] quit
[SwitchC] ip route-static 2.2.2.2 32 9.1.1.1
# 查看Switch A的路由表。
[SwitchA] display bgp routing-table ipv4
Total number of routes: 3
BGP local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a – additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* > 8.1.1.0/24 8.1.1.1 0 32768 i
* >e 9.1.1.0/24 3.1.1.1 0 0 65009i
* e 3.1.2.1 0 0 65009i
¡ 从BGP路由表中可以看出,到目的地址9.1.1.0/24有两条有效路由,其中下一跳为3.1.1.1的路由前有标志“>”,表示它是当前有效的最优路由(因为Switch B的路由器ID要小一些);而下一跳为3.1.2.1的路由前有标志“*”,表示它是当前有效的路由,但不是最优的。
¡ 使用display ip routing-table命令查看IP路由表项,可以看出到达目的地址9.1.1.0/24的路由只有一条,下一跳地址为3.1.1.1,出接口为Vlan200。
(3) 配置负载分担
因为Switch A有两条路径到达AS 65009的内部网络,所以,可以在Switch A配置负载分担的路由条数为2,以提高链路利用率。
# 配置Switch A。
[SwitchA] bgp 65008
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] balance 2
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 查看Switch A的BGP路由表。
[SwitchA] display bgp routing-table ipv4
Total number of routes: 3
BGP local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a – additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* > 8.1.1.0/24 8.1.1.1 0 32768 i
* >e 9.1.1.0/24 3.1.1.1 0 0 65009i
* >e 3.1.2.1 0 0 65009i
· 从BGP路由表中可以看到,BGP路由9.1.1.0/24存在两个下一跳,分别是3.1.1.1和3.1.2.1,两条路由前都有标志“>”,表明它们都是当前有效的最优路由。
· 使用display ip routing-table命令查看IP路由表项,可以看出到达目的地址9.1.1.0/24的路由有两条,其中一条的下一跳地址为3.1.1.1,出接口为Vlan200;另一条的下一跳地址为3.1.2.1,出接口为Vlan300。
所有路由器运行BGP协议,Switch A与Switch B和Switch C建立EBGP连接,Switch B、Switch C和Switch D之间建立IBGP连接,Route D与Route E建立IBGP连接。
Switch D作为路由反射器,Switch E为Switch D的客户机。
配置Add-Path功能,使Switch E通过Switch D学到Switch B和Switch C转发的前缀相同下一跳不同的路由信息。
图1-3 BGP Add-Path配置组网图
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Switch A |
Vlan-int100 |
10.1.1.1/24 |
Switch D |
Vlan-int300 |
30.1.1.1/24 |
|
Vlan-int200 |
20.1.1.1/24 |
|
Vlan-int400 |
40.1.1.1/24 |
Switch B |
Vlan-int100 |
10.1.1.2/24 |
|
Vlan-int500 |
50.1.1.1/24 |
|
Vlan-int300 |
30.1.1.2/24 |
Switch E |
Vlan-int500 |
50.1.1.2/24 |
Switch C |
Vlan-int200 |
20.1.1.2/24 |
|
|
|
|
Vlan-int400 |
40.1.1.2/24 |
|
|
|
(1) 配置各接口的IP地址。
(2) 配置BGP连接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 10
[SwitchA-bgp-default] peer 10.1.1.2 as-number 20
[SwitchA-bgp-default] peer 20.1.1.2 as-number 20
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 enable
[SwitchA-bgp-default-ipv4] peer 20.1.1.2 enable
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 20
[SwitchB-bgp-default] peer 10.1.1.1 as-number 10
[SwitchB-bgp-default] peer 30.1.1.1 as-number 20
[SwitchB-bgp-default] address-family ipv4 unicast
[SwitchB-bgp-default-ipv4] peer 10.1.1.1 enable
[SwitchB-bgp-default-ipv4] peer 30.1.1.1 enable
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 20
[SwitchC-bgp-default] peer 20.1.1.1 as-number 10
[SwitchC-bgp-default] peer 40.1.1.1 as-number 20
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 20.1.1.1 enable
[SwitchC-bgp-default-ipv4] peer 40.1.1.1 enable
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 20
[SwitchD-bgp-default] peer 30.1.1.2 as-number 20
[SwitchD-bgp-default] peer 40.1.1.2 as-number 20
[SwitchD-bgp-default] peer 50.1.1.2 as-number 20
[SwitchD-bgp-default] address-family ipv4 unicast
[SwitchD-bgp-default-ipv4] peer 30.1.1.2 enable
[SwitchD-bgp-default-ipv4] peer 40.1.1.2 enable
[SwitchD-bgp-default-ipv4] peer 50.1.1.2 enable
# 配置Switch E。
<SwitchE> system-view
[SwitchE] bgp 20
[SwitchE-bgp-default] peer 50.1.1.1 as-number 20
[SwitchE-bgp-default] address-family ipv4 unicast
[SwitchE-bgp-default-ipv4] peer 50.1.1.1 enable
(3) 配置发布本地路由
# 配置Switch A发布本地10.1.1.0 24 的路由信息
[SwitchA-bgp-default-ipv4] network 10.1.1.0 24
(4) 将下一跳的属性修改成自身的地址
# 配置Switch B。
[SwitchB-bgp-default-ipv4] peer 30.1.1.1 next-hop-local
# 配置Switch C。
[SwitchC-bgp-default-ipv4] peer 40.1.1.1 next-hop-local
(5) 配置路由反射器
# 配置Switch D。
[SwitchD-bgp-default-ipv4] peer 50.1.1.2 reflect-client
(6) 配置Add-Path
# 配置Switch D使能Add-Path发送能力,配置Add-Path优选路由的最大条数为2,配置向对等体50.1.1.2发送Add-Path优选路由的最大条数为2。
[SwitchD-bgp-default-ipv4] peer 50.1.1.2 additional-paths send
[SwitchD-bgp-default-ipv4] additional-paths select-best 2
[SwitchD-bgp-default-ipv4] peer 50.1.1.2 advertise additional-paths best 2
# 配置Switch E使能Add-Path接收能力。
[SwitchE-bgp-default-ipv4] peer 50.1.1.1 additional-paths receive
# 查看Switch E的BGP路由信息。
[Switch E] display bgp routing-table ipv4
Total number of routes: 2
BGP local Switch ID is 50.1.1.2
Status codes: * - valid, > - best, d - dampened, h - history
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 10.1.1.0/24 30.1.1.2 0 100 0 10i
i 40.1.1.2 0 100 0 10i
可以看到从Switch D学到的两条前缀相同下一跳不同的路由信息。
BGP安全功能配置任务如下:
通过为BGP对等体配置BGP的MD5认证,可以在以下两方面提高BGP的安全性:
· 为BGP建立TCP连接时进行MD5认证,只有两台路由器配置的密钥相同时,才能建立TCP连接,从而避免与非法的BGP路由器建立TCP连接。
· 传递BGP报文时,对封装BGP报文的TCP报文段进行MD5运算,从而保证BGP报文不会被篡改。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP的MD5认证。
peer { group-name | ipv4-address [ mask-length ] } password { cipher | simple } password
缺省情况下,不进行BGP的MD5认证。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP的MD5认证。
peer { group-name | ipv6-address [ prefix-length ] } password { cipher | simple } password
缺省情况下,不进行BGP的MD5认证。
提高BGP网络的可靠性配置任务如下:
· 配置BGP GR
BGP GR(Graceful Restart,平滑重启)是一种在主备倒换或BGP协议重启时保证转发业务不中断的机制。GR有两个角色:
· GR Restarter:发生主备倒换或协议重启,且具有GR能力的设备。
· GR Helper:和GR Restarter具有邻居关系,协助完成GR流程的设备。GR Helper也具有GR能力。
设备既可以作为GR Restarter,又可以作为GR Helper。设备的角色由该设备在BGP GR过程中的作用决定。
BGP GR的工作过程为:
(1) GR Restarter和GR Helper通过Open消息交互GR能力。只有双方都具有GR能力时,建立起的BGP会话才具备GR能力。GR Restarter还会通过Open消息,将本端通过graceful-restart timer restart命令配置的对端等待重建BGP会话时间通告给GR Helper。
(2) 建立具备GR能力的BGP会话后,GR Restarter进行主备倒换或BGP协议重启时,GR Restarter不会删除RIB(Routing Information Base,路由信息库)和FIB(Forwarding Information Base,转发信息库)表项,仍然按照原有的转发表项转发报文,并启动RIB路由老化定时器(定时器的值由graceful-restart timer purge-time命令配置)。GR Helper发现GR Restarter进行主备倒换或BGP协议重启后,GR Helper不会删除从该GR Restarter学习到的路由,而是将这些路由标记为失效路由,仍按照这些路由转发报文,从而确保在GR Restarter进行主备倒换或BGP协议重启的过程中,报文转发不会中断。
(3) GR Restarter主备倒换或BGP协议重启完成后,它会重新与GR Helper建立BGP会话。如果在GR Restarter通告的BGP会话重建时间加上GR Helper上配置的等待重建额外时间(额外时间通过peer graceful-restart timer restart extra命令配置)内没有成功建立BGP会话,则GR Helper会删除标记为失效的路由。
(4) 如果在GR Restarter通告的BGP会话重建时间内成功建立BGP会话,则GR Restarter和GR Helper在建立的BGP会话上进行路由信息交互,以便GR Restarter恢复路由信息、GR Helper根据学习到的路由删除路由的失效标记。
(5) BGP会话建立后,在GR Restarter和GR Helper上都会启动End-Of-RIB(路由信息库结束)标记等待定时器(定时器的值通过graceful-restart timer wait-for-rib命令配置),该定时器用来控制路由信息收敛的速度。如果定时器超时时没有完成路由信息的交互,则GR Restarter不再接收新的路由,根据已经学习到的BGP路由信息更新RIB表项,删除老化的RIB表项;GR Helper则删除标记为失效的路由。
(6) 如果在RIB路由老化定时器超时时没有完成路由信息的交互,则GR Restarter会强制退出GR过程,根据已经学习到的BGP路由信息更新RIB表项,删除老化的RIB表项。
在TCP连接断开、保持时间超时或BGP会话允许交换路由的地址族发生变化时,BGP会话需要断开并重新建立,造成业务流量转发中断。开启设备通过GR方式复位BGP会话功能后,在TCP连接断开、保持时间超时和BGP会话允许交换路由的地址族发生变化时,设备采用BGP GR方式进行BGP会话重建,仍按照已有的路由信息转发报文,从而避免对流量转发造成影响。
End-Of-RIB标记用来标识路由更新发送的结束。
本端配置的等待End-Of-RIB标记的时间不会通告给对端,只用来控制本端路由信息交互的时间,即GR Restarter上配置的时间只用来控制GR Restarter从GR Helper接收路由更新的时间,GR Helper上配置的时间只用来控制GR Helper从GR Restarter接收路由更新的时间。当路由信息的数量较多时,建议将本端等待End-Of-RIB标记的时间调大,以保证完成所有路由信息的交互。
由于设备在GR过程中的角色不可预知,建议在作为GR Restarter和GR Helper的设备上均进行本配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 使能BGP协议的GR能力。
graceful-restart
缺省情况下,BGP协议的GR能力处于关闭状态。
(4) 配置对端等待重建BGP会话的时间。
graceful-restart timer restart timer
缺省情况下,对端等待重建BGP会话的时间为150秒。
对端等待重建BGP会话的时间应小于Open消息中的Holdtime时间。
(5) (可选)配置BGP GR过程中本端作为GR Helper时等待对等体/对等体组重建BGP会话的额外时间。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } graceful-restart timer restart extra { time | no-limit }
缺省情况下,本端作为GR Helper时等待对等体/对等体组重建BGP会话的额外时间为0秒。
(6) 配置本端等待End-Of-RIB标记的时间。
graceful-restart timer wait-for-rib timer
缺省情况下,本端等待End-Of-RIB标记的时间为600秒。
(7) 配置BGP GR过程中等待通知RIB老化失效表项的时间。
graceful-restart timer purge-time timer
缺省情况下,BGP GR过程中等待通知RIB老化失效表项的时间为480秒。
(8) (可选)开启设备通过GR方式复位BGP会话功能。
graceful-restart peer-reset [ all ]
缺省情况下,设备以GR方式复位BGP会话功能处于关闭状态。
(9) (可选)配置BGP GR完成后等待其他协议完成GR的最长时间。
bgp update-delay wait-other-protocol seconds
缺省情况下,BGP GR完成后等待周边其他协议完成GR的最长时间为300秒。
BGP协议通过存活时间(Keepalive)定时器和保持时间(Holdtime)定时器来维护邻居关系。但这些定时器都是秒级的,而且根据协议规定,设置的保持时间应该至少为存活时间间隔的三倍。这样使得BGP邻居关系的检测比较慢,对于报文收发速度快的接口会导致大量报文丢失。通过配置BGP与BFD联动,可以使用BFD来检测本地路由器和BGP对等体之间的链路。当本地路由器和BGP对等体之间的链路出现故障时,BFD可以快速检测到该故障,从而加快BGP协议的收敛速度。有关BFD的介绍和详细配置,请参见“可靠性配置指导”中的“BFD”。
配置通过BFD检测本地路由器和指定BGP对等体/对等体组之间的链路之前,需要先在本地路由器和指定BGP对等体/对等体组之间建立BGP会话。
通过本功能配置echo报文方式的BFD检测时,需要注意:
· echo报文方式的BFD会话只能用于检测与直连对等体之间的链路状态。
· 通过LoopBack接口建立的BGP会话无法通过echo报文方式检测对等体之间的链路。
· 需要配置bfd echo-source-ip或bfd echo-source-ipv6命令为echo报文指定源地址,否则本端无法建立BFD会话。
通过链路本地地址建立的BGP会话只能通过控制报文方式的单跳BFD会话检测对等体之间的链路。
采用控制报文方式的BFD会话检测链路时,本地路由器和BGP对等体采用的BFD检测方式(单跳或多跳)必须相同,否则无法建立BFD会话。
配置BGP GR功能后,请慎用BGP与BFD联动功能。因为当链路故障时,系统可能还没来得及启用GR处理流程,BFD已经检测到链路故障了,从而导致GR失败。如果设备上同时配置了BGP GR和BGP BFD,则在BGP GR期间请勿去使能BGP BFD,否则可能导致GR失败。
为指定对等体/对等体组配置BFD检测参数(BFD检测时间倍数、接收/发送BFD控制报文的时间间隔)时,需要注意:
· 对等体在加入对等体组时将同步所加入对等体组的BFD检测参数配置。
· 配置对等体组的BFD检测参数时,相应配置将同步给组内所有的对等体。
· 如果对同一个对等体/对等体组的某项BFD检测参数多次进行配置,则以最后一次的配置为准。
对于一个对等体的一项BFD检测参数而言,总是以最后一次的配置为准,无论该配置是通过直接配置获得还是同步对等体组的配置获得。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置通过BFD检测本地路由器和指定BGP对等体/对等体组之间的链路。
peer { group-name | ipv4-address [ mask-length ] } bfd [ echo | multi-hop | single-hop ]
缺省情况下,不使用BFD检测本地路由器和BGP对等体/对等体组之间的链路。
(4) (可选)配置指定对等体/对等体组的BFD检测参数。
peer { group-name | ipv4-address [ mask-length ] } bfd parameters { detect-multiplier detect-multiplier | min-receive-interval min-receive-interval | min-transmit-interval min-transmit-interval } *
缺省情况下,未配置对等体/对等体组的BFD检测参数。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置通过BFD检测本地路由器和指定IPv6 BGP对等体/对等体组之间的链路。
peer { group-name | ipv6-address [ prefix-length ] } bfd [ echo | multi-hop | single-hop ]
缺省情况下,不使用BFD检测本地路由器和IPv6 BGP对等体/对等体组之间的链路。
(4) (可选)配置指定对等体/对等体组的BFD检测参数。
peer { group-name | ipv6-address [ prefix-length ] } bfd parameters { detect-multiplier detect-multiplier | min-receive-interval min-receive-interval | min-transmit-interval min-transmit-interval } *
缺省情况下,未配置对等体/对等体组的BFD检测参数。
当BGP网络中的链路或某台路由器发生故障时,需要通过故障链路或故障路由器传输才能到达目的地的报文将会丢失或产生路由环路,数据流量将会被中断。直到BGP根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。
为了尽可能缩短网络故障导致的流量中断时间,网络管理员可以开启BGP快速重路由功能。
图3-1 BGP快速重路由功能示意图
如图3-1所示,在Router B上开启快速重路由功能后,BGP将为主路由生成备份下一跳。IPv4组网中BGP通过ARP或Echo方式的BFD会话检测主路由的下一跳是否可达,IPv6组网中BGP通过ND(Neighbor Discovery,邻居发现)协议检测主路由的下一跳是否可达。当Router B检测到主路由的下一跳不可达后,BGP会使用备份下一跳替换失效下一跳,通过备份下一跳来指导报文的转发,从而大大缩短了流量中断时间。在使用备份下一跳指导报文转发的同时,BGP会重新进行路由优选,优选完毕后,使用新的最优路由来指导报文转发。
开启BGP快速重路由功能的方法有如下两种:
· 在BGP地址族视图下执行pic命令开启当前地址族的BGP快速重路由功能。采用这种方法时,BGP会为当前地址族的所有BGP路由自动计算备份下一跳,即只要从不同BGP对等体学习到了到达同一目的网络的路由,且这些路由不等价,就会生成主备两条路由。
· 在BGP地址族视图下执行fast-reroute route-policy命令指定快速重路由引用的路由策略,并在引用的路由策略中,通过apply [ ipv6 ] fast-reroute backup-nexthop命令指定备份下一跳的地址。采用这种方式时,只有为主路由计算出的备份下一跳地址与指定的地址相同时,才会为其生成备份下一跳;否则,不会为主路由生成备份下一跳。在引用的路由策略中,还可以配置if-match子句,用来决定哪些路由可以进行快速重路由保护,BGP只会为通过if-match子句过滤的路由生成备份下一跳。
引用路由策略方式的优先级高于通过pic命令开启BGP快速重路由方式。
(1) 进入系统视图。
system-view
(2) 配置echo报文的源IP地址。
bfd echo-source-ip ipv4-address
缺省情况下,未配置echo报文的源IP地址。
通过Echo方式的BFD会话检测主路由的下一跳是否可达时,必须执行本配置。
echo报文的源IP地址用户可以任意指定。建议配置echo报文的源IP地址不属于该设备任何一个接口所在网段。
本命令的详细介绍,请参见“可靠性命令参考”中的“BFD”。
(3) 创建路由策略,并进入路由策略视图。
route-policy route-policy-name permit node node-number
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(4) 配置快速重路由的备份下一跳地址。
apply fast-reroute backup-nexthop ipv4-address
缺省情况下,未指定快速重路由的备份下一跳地址。
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(5) 退回系统视图。
quit
(6) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(7) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(8) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(9) 在当前地址族视图下指定BGP快速重路由引用的路由策略。
fast-reroute route-policy route-policy-name
缺省情况下,BGP快速重路由未引用任何路由策略。
引用的路由策略中,只有apply fast-reroute backup-nexthop和apply ipv6 fast-reroute backup-nexthop命令生效,其他apply子句不会生效。
(1) 进入系统视图。
system-view
(2) 创建路由策略,并进入路由策略视图。
route-policy route-policy-name permit node node-number
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(3) 配置快速重路由的备份下一跳地址。
apply ipv6 fast-reroute backup-nexthop ipv6-address
缺省情况下,未指定快速重路由的备份下一跳地址。
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(4) 退回系统视图。
quit
(5) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(6) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(7) 在当前地址族视图下指定BGP快速重路由引用的路由策略。
fast-reroute route-policy route-policy-name
缺省情况下,BGP快速重路由未引用任何路由策略。
引用的路由策略中,只有apply fast-reroute backup-nexthop和apply ipv6 fast-reroute backup-nexthop命令生效,其他apply子句不会生效。
在某些组网情况下,执行pic命令为所有BGP路由生成备份下一跳后,可能会导致路由环路,请谨慎使用本功能。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 开启BGP快速重路由功能。
pic
缺省情况下,BGP快速重路由功能处于关闭状态。
在某些组网情况下,执行pic命令为所有BGP路由生成备份下一跳后,可能会导致路由环路,请谨慎使用本功能。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 开启BGP快速重路由功能。
pic
缺省情况下,BGP快速重路由功能处于关闭状态.
在某些组网情况下,执行pic命令为所有BGP路由生成备份下一跳后,可能会导致路由环路,请谨慎使用本命令。
缺省情况下,BGP快速重路由通过ARP检测主路由的下一跳是否可达,该方式对于快速重路由的主链路失效检测较慢,业务流量可能无法及时切换到备用路径上,导致流量丢失。配置本功能后,设备会自动创建一个协议类型为IPFRR的BFD会话,通过该BFD会话对主路由的下一跳检测,以提高主路由下一跳失效时,流量切换到备路由下一跳上的收敛速度。
只有存在已经生成了备份下一跳的主路由时,本功能才会生效并自动创建BFD会话。
由于BGP暂不支持为负载分担路由计算备份下一跳,本功能无法为等价路由作为主路由的场景提供通过BFD会话检测功能。如需通过BFD会话检测BGP等价路由的下一跳可达性,请配置primary-path-detect bfd protocol-ecmp bgp或primary-path-detect bfd protocol-ecmp bgp4+命令。有关上述两条命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“IP路由基础”。
通过控制报文方式的BFD会话检测主路由的下一跳是否可达时,由于控制报文方式的BFD会话需要两端进行协商才能成功建立,如需设备成功使用控制报文方式的BFD会话来检测主链路的下一跳,可以通过以下两种方式进行配置:
· 在主链路的对端设备上也执行primary-path-detect bfd命令。此方式适用于主链路两端设备均配置快速重路由功能的场景。
· 在主链路的对端设备上手工创建一个静态BFD会话,该静态BFD会话指定的会话源IP地址为本端自动创建的BFD会话的会话目的IP地址、会话目的IP地址为本端自动创建的BFD会话的源IP地址、远端标识符为本端自动创建的BFD会话的本地标识符。
使用echo方式的BFD会话检测主路由的下一跳是否可达时,仅需要在本地路由器上配置本功能。
其他业务模块在通过BFD会话检测主路由的下一跳是否可达时,也会自动创建BFD会话(如RIB、OSPF、IS-IS等)。如果其他协议创建的自动BFD会话检测的链路与BGP主路由下一跳所在的链路相同,则BGP不会重复自动创建同类型的BFD会话,而是复用其他协议的BFD会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP快速重路由通过BFD会话检测主路由的下一跳是否可达。
primary-path-detect bfd { ctrl | echo }
缺省情况下,BGP快速重路由通过ARP检测主路由的下一跳是否可达。
当用户需要对某台设备上的BGP进程进行调试或升级等维护操作时,可以使用BGP isolate功能或BGP shutdown功能,将该设备上的BGP进程从当前网络中移除。网络中的其他设备重新计算路由,不会再通过该设备转发流量,从而降低设备维护对网络的影响,提高网络的可靠性。
BGP isolate功能和BGP shutdown功能使得网络管理员在进行网络设备维护时,无需删除并重新进行对等体/对等体组相关配置,减少了网络维护的工作量。完成设备维护后,网络管理员可以关闭BGP isolate功能和BGP shutdown功能,以使该设备重新投入使用。
本功能可以将BGP进程从网络中隔离出来,具体工作机制如下:
(1) 开启BGP isolate功能的设备撤销发布给邻居的BGP路由(本设备直连路由除外),同时保留所有从邻居学习到的BGP路由。
(2) 远端邻居收到路由撤销消息后,重新进行路由优选并更新FIB表。在此期间,远端邻居仍然可以通过BGP isolate设备发布的BGP路由转发流量。
(3) 远端邻居删除所有BGP isolate设备发布的BGP路由并完成FIB表项更新后,除目的地为BGP isolate设备的流量外,其他流量不再经过BGP isolate设备。此时,BGP isolate设备完全从当前组网中隔离出来,可以对该设备上的BGP协议进行升级等处理。
(4) 对BGP isolate设备的维护结束后,关闭BGP isolate功能可让该设备重新加入网络。设备重新加入网络后,BGP路由的发布和学习机制如下:
¡ 设备重新向邻居发布路由。
¡ 设备隔离前保留了从邻居学习到的路由。如果设备隔离后没有对BGP协议进行重启等操作,则无需重新进行路由学习;否则,设备重新加入网络后需要重新进行路由学习。
设备进行GR期间,建议用户不要使用BGP isolate功能,否则无法保证执行操作后的结果与预期结果一致。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP isolate功能,将设备的BGP协议从当前组网中隔离出来。
isolate enable
缺省情况下,未配置BGP协议隔离功能。
(4) 完成设备维护后,使设备的BGP重新加入网络。
undo isolate enable
本功能通过暂时断开与所有对等体/对等体组的BGP会话,来实现BGP进程的移除。完成设备维护后,通过取消本功能可以恢复与所有对等体/对等体组的BGP会话。
如果本设备和对等体/对等体组的会话已经建立,则配置本功能后,会断开本设备和对等体/对等体组的会话,并清除所有路由信息。
同时配置本功能和禁止与对等体/对等体组建立会话功能时,若任一功能禁止了与对等体/对等体组建立会话,则设备不能与相应的对等体/对等体组建立BGP会话。禁止与对等体/对等体组建立会话功能的详细介绍,请参见“1.6 禁止与对等体/对等体组建立会话”。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP shutdown功能,禁止与所有对等体/对等体组建立会话。
shutdown process
缺省情况下,设备允许与所有BGP对等体/对等体组建立会话。
(4) 完成设备维护后,使设备的BGP重新加入网络。
undo shutdown process
如图3-2所示,所有交换机均运行BGP协议,Switch A和Switch B之间建立EBGP连接,Switch B和Switch C之间建立IBGP连接。现要求实现即便Switch B发生主备倒换,也不会影响Switch A和Switch C之间正在进行的数据传输。
图3-2 BGP GR配置组网图
(1) Switch A的配置
# 配置各接口的IP地址(略)。
# 配置Switch A与Switch B的EBGP连接。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] peer 200.1.1.1 as-number 65009
# 使能BGP GR功能。
[SwitchA-bgp-default] graceful-restart
# 将8.0.0.0/8网段路由通告到BGP路由表中。
[SwitchA-bgp-default] address-family ipv4
[SwitchA-bgp-default-ipv4] network 8.0.0.0
# 使能与Switch B交换BGP IPv4单播路由的能力。
[SwitchA-bgp-default-ipv4] peer 200.1.1.1 enable
(2) Switch B的配置
# 配置各接口的IP地址(略)。
# 配置Switch B与Switch A的EBGP连接。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 200.1.1.2 as-number 65008
# 配置Switch B与Switch C的IBGP连接。
[SwitchB-bgp-default] peer 9.1.1.2 as-number 65009
# 使能BGP GR功能。
[SwitchB-bgp-default] graceful-restart
# 将200.1.1.0/24和9.1.1.0/24网段路由通告到BGP路由表中。
[SwitchB-bgp-default] address-family ipv4
[SwitchB-bgp-default-ipv4] network 200.1.1.0 24
[SwitchB-bgp-default-ipv4] network 9.1.1.0 24
# 使能与Switch A、Switch C交换BGP IPv4单播路由的能力。
[SwitchB-bgp-default-ipv4] peer 200.1.1.2 enable
[SwitchB-bgp-default-ipv4] peer 9.1.1.2 enable
(3) Switch C的配置
# 配置各接口的IP地址(略)。
# 配置Switch C与Switch B的IBGP连接。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 9.1.1.1 as-number 65009
# 使能BGP GR功能。
[SwitchC-bgp-default] graceful-restart
# 使能与Switch B交换BGP IPv4单播路由的能力。
[SwitchC-bgp-default-ipv4] peer 9.1.1.1 enable
在Switch A上ping Switch C,同时在Switch B上触发主备倒换,可以发现在整个倒换过程中Switch A都可以ping通Switch C。
· 在AS 200内使用OSPF作为IGP协议,实现AS内的互通。
· Switch A与Switch C之间建立两条IBGP连接。当Switch A与Switch C之间的两条路径均连通时,Switch C与1.1.1.0/24之间的报文使用Switch A<->Switch B<->Switch C这条路径转发;当Switch A<->Switch B<->Switch C这条路径发生故障时,BFD能够快速检测并通告BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
图3-3 配置BGP与BFD联动组网图
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Switch A |
Vlan-int100 |
3.0.1.1/24 |
Switch C |
Vlan-int101 |
3.0.2.2/24 |
|
Vlan-int200 |
2.0.1.1/24 |
|
Vlan-int201 |
2.0.2.2/24 |
Switch B |
Vlan-int100 |
3.0.1.2/24 |
Switch D |
Vlan-int200 |
2.0.1.2/24 |
|
Vlan-int101 |
3.0.2.1/24 |
|
Vlan-int201 |
2.0.2.1/24 |
(1) 配置各接口的IP地址(略)
(2) 配置OSPF,保证Switch A和Switch C之间路由可达(略)
(3) Switch A上的BGP配置
# 配置Switch A和Switch C建立两条IBGP连接。
<SwitchA> system-view
[SwitchA] bgp 200
[SwitchA-bgp-default] peer 3.0.2.2 as-number 200
[SwitchA-bgp-default] peer 2.0.2.2 as-number 200
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 3.0.2.2 enable
[SwitchA-bgp-default-ipv4] peer 2.0.2.2 enable
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置当Switch A与Switch C之间的两条路径均连通时,Switch C与1.1.1.0/24之间的报文使用Switch A<->Switch B<->Switch C这条路径转发。(在Switch A上对发布给对等体2.0.2.2的1.1.1.0/24路由配置较高的MED属性值)
¡ 定义编号为2000的IPv4基本ACL,允许路由1.1.1.0/24通过。
[SwitchA] acl basic 2000
[SwitchA-acl-ipv4-basic-2000] rule permit source 1.1.1.0 0.0.0.255
[SwitchA-acl-ipv4-basic-2000] quit
¡ 定义两个Route-policy,一个名为apply_med_50,为路由1.1.1.0/24设置MED属性值为50;另一个名为apply_med_100,为路由1.1.1.0/24设置MED属性值为100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy-apply_med_50-10] if-match ip address acl 2000
[SwitchA-route-policy-apply_med_50-10] apply cost 50
[SwitchA-route-policy-apply_med_50-10] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy-apply_med_100-10] if-match ip address acl 2000
[SwitchA-route-policy-apply_med_100-10] apply cost 100
[SwitchA-route-policy-apply_med_100-10] quit
¡ 对发布给对等体3.0.2.2的路由应用名为apply_med_50的Route-policy,对发布给对等体2.0.2.2的路由应用名为apply_med_100的Route-policy。
[SwitchA] bgp 200
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 3.0.2.2 route-policy apply_med_50 export
[SwitchA-bgp-default-ipv4] peer 2.0.2.2 route-policy apply_med_100 export
[SwitchA-bgp-default-ipv4] quit
# 配置当Switch A<->Switch B<->Switch C这条路径发生故障时,BFD能够快速检测并通告BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
[SwitchA-bgp-default] peer 3.0.2.2 bfd
[SwitchA-bgp-default] quit
(4) Switch C上的BGP配置。
# 配置Switch A和Switch C建立两条IBGP连接。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC-bgp-default] peer 3.0.1.1 as-number 200
[SwitchC-bgp-default] peer 2.0.1.1 as-number 200
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 3.0.1.1 enable
[SwitchC-bgp-default-ipv4] peer 2.0.1.1 enable
[SwitchC-bgp-default-ipv4] quit
# 配置当Switch A<->Switch B<->Switch C这条路径发生故障时,BFD能够快速检测并通告BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
[SwitchC-bgp-default] peer 3.0.1.1 bfd
[SwitchC-bgp-default] quit
[SwitchC] quit
下面以Switch C为例,Switch A和Switch C类似,不再赘述。
# 显示Switch C的BFD信息。
<SwitchC> display bfd session verbose
Total Session Num: 1 Up Session Num: 1 Init Mode: Active
IPv4 Session Working in control packet mode:
Local Discr: 513 Remote Discr: 513
Source IP: 3.0.2.2 Destination IP: 3.0.1.1
Session State: Up Interface: N/A
Min Tx Inter: 500ms Act Tx Inter: 500ms
Min Rx Inter: 500ms Detect Inter: 2500ms
Rx Count: 135 Tx Count: 135
Connect Type: Indirect Running Up for: 00:00:58
Hold Time: 2457ms Auth mode: None
Detect Mode: Async Slot: 0
Protocol: BGP
Version:1
Diag Info: No Diagnostic
以上显示信息表明:Switch A和Switch C之间已经建立了BFD连接,而且BFD协议运行正常。
# 在Switch C上查看BGP邻居信息,可以看出Switch A和Switch C之间建立两条BGP连接,且均处于Established状态。
<SwitchC> display bgp peer ipv4
BGP local router ID: 3.3.3.3
Local AS number: 200
Total number of peers: 2 Peers in established state: 2
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.0.1.1 200 4 5 0 0 00:01:55 Established
3.0.1.1 200 4 5 0 0 00:01:52 Established
# 在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch C通过Switch A<->Switch B<->Switch C这条路径与1.1.1.0/24网段通信。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Summary count : 1
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
SubProtID: 0x1 Age: 00h00m09s
Cost: 50 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x1 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 0
NibID: 0x15000001 LastAs: 0
AttrID: 0x1 Neighbor: 3.0.1.1
Flags: 0x10060 OrigNextHop: 3.0.1.1
Label: NULL RealNextHop: 3.0.2.1
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: Vlan-interface101
BkSRLabel: NULL BkInterface: Invalid
Tunnel ID: Invalid IPInterface: Vlan-interface101
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
# Switch A和Switch B之间的链路发生故障后,在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch C通过Switch A<->Switch D<->Switch C这条路径与1.1.1.0/24网段通信。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Summary count : 1
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
SubProtID: 0x1 Age: 00h03m08s
Cost: 100 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x1 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 0
NibID: 0x15000000 LastAs: 0
AttrID: 0x0 Neighbor: 2.0.1.1
Flags: 0x10060 OrigNextHop: 2.0.1.1
Label: NULL RealNextHop: 2.0.2.1
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: Vlan-interface201
BkSRLabel: NULL BkInterface: Invalid
Tunnel ID: Invalid IPInterface: Vlan-interface201
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
如图3-4所示,Switch A、Switch B、Switch C和Switch D通过BGP协议实现网络互连。要求链路B正常时,Switch A和Switch D之间的流量通过链路B转发;链路B出现故障时,流量可以快速切换到链路A上。
图3-4 配置BGP快速重路由组网图
(1) 配置各接口的IP地址(略)
(2) 在AS 200内配置OSPF,发布接口地址所在网段的路由(包括Loopback接口),确保Switch B、Switch C和Switch D之间路由可达(略)
(3) 配置BGP连接
# 配置Switch A分别与Switch B和Switch C建立EBGP会话,并配置通过BGP发布路由1.1.1.1/32。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] peer 10.1.1.2 as-number 200
[SwitchA-bgp-default] peer 30.1.1.3 as-number 200
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 enable
[SwitchA-bgp-default-ipv4] peer 30.1.1.3 enable
[SwitchA-bgp-default-ipv4] network 1.1.1.1 32
# 配置Switch B与Switch A建立EBGP会话,与Switch D建立IBGP会话。
<SwitchB> system-view
[SwitchB] bgp 200
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 10.1.1.1 as-number 100
[SwitchB-bgp-default] peer 4.4.4.4 as-number 200
[SwitchB-bgp-default] peer 4.4.4.4 connect-interface loopback 0
[SwitchB-bgp-default] address-family ipv4 unicast
[SwitchB-bgp-default-ipv4] peer 10.1.1.1 enable
[SwitchB-bgp-default-ipv4] peer 4.4.4.4 enable
[SwitchB-bgp-default-ipv4] peer 4.4.4.4 next-hop-local
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
# 配置Switch C与Switch A建立EBGP会话,与Switch D建立IBGP会话。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 30.1.1.1 as-number 100
[SwitchC-bgp-default] peer 4.4.4.4 as-number 200
[SwitchC-bgp-default] peer 4.4.4.4 connect-interface loopback 0
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 30.1.1.1 enable
[SwitchC-bgp-default-ipv4] peer 4.4.4.4 enable
[SwitchC-bgp-default-ipv4] peer 4.4.4.4 next-hop-local
[SwitchC-bgp-default-ipv4] quit
[SwitchC-bgp-default] quit
# 配置Switch D分别与Switch B和Switch C建立IBGP会话,并配置BGP发布路由4.4.4.4/32。
<SwitchD> system-view
[SwitchD] bgp 200
[SwitchD-bgp-default] router-id 4.4.4.4
[SwitchD-bgp-default] peer 2.2.2.2 as-number 200
[SwitchD-bgp-default] peer 2.2.2.2 connect-interface loopback 0
[SwitchD-bgp-default] peer 3.3.3.3 as-number 200
[SwitchD-bgp-default] peer 3.3.3.3 connect-interface loopback 0
[SwitchD-bgp-default] address-family ipv4 unicast
[SwitchD-bgp-default-ipv4] peer 2.2.2.2 enable
[SwitchD-bgp-default-ipv4] peer 3.3.3.3 enable
[SwitchD-bgp-default-ipv4] network 4.4.4.4 32
(4) 修改路由的首选值,使得Switch A和Switch D之间的流量优先通过链路B转发
# 在Switch A上配置从Switch B接收到的路由的首选值为100。
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 preferred-value 100
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 在Switch D上配置从Switch B接收到的路由的首选值为100。
[SwitchD-bgp-default-ipv4] peer 2.2.2.2 preferred-value 100
[SwitchD-bgp-default-ipv4] quit
[SwitchD-bgp-default] quit
(5) 配置BGP快速重路由
# 配置Switch A:配置通过Echo方式的BFD会话检测主路由的下一跳是否可达,并配置BFD echo报文的源IP地址为11.1.1.1;创建路由策略frr,为路由4.4.4.4/32指定备份下一跳的地址为30.1.1.3(对等体Switch C的地址);在BGP IPv4单播地址族下应用该路由策略。
[SwitchA] bfd echo-source-ip 11.1.1.1
[SwitchA] ip prefix-list abc index 10 permit 4.4.4.4 32
[SwitchA] route-policy frr permit node 10
[SwitchA-route-policy] if-match ip address prefix-list abc
[SwitchA-route-policy] apply fast-reroute backup-nexthop 30.1.1.3
[SwitchA-route-policy] quit
[SwitchA] bgp 100
[SwitchA-bgp-default] primary-path-detect bfd echo
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] fast-reroute route-policy frr
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置Switch D:配置通过Echo方式的BFD会话检测主路由的下一跳是否可达,并配置BFD echo报文的源IP地址为44.1.1.1;创建路由策略frr,为路由1.1.1.1/32指定备份下一跳的地址为3.3.3.3(对等体Switch C的地址);在BGP IPv4单播地址族下应用该路由策略。
[SwitchD] bfd echo-source-ip 44.1.1.1
[SwitchD] ip prefix-list abc index 10 permit 1.1.1.1 32
[SwitchD] route-policy frr permit node 10
[SwitchD-route-policy] if-match ip address prefix-list abc
[SwitchD-route-policy] apply fast-reroute backup-nexthop 3.3.3.3
[SwitchD-route-policy] quit
[SwitchD] bgp 200
[SwitchD-bgp-default] primary-path-detect bfd echo
[SwitchD-bgp-default] address-family ipv4 unicast
[SwitchD-bgp-default-ipv4] fast-reroute route-policy frr
[SwitchD-bgp-default-ipv4] quit
[SwitchD-bgp-default] quit
# 在Switch A上查看4.4.4.4/32路由,可以看到备份下一跳信息。
[SwitchA] display ip routing-table 4.4.4.4 32 verbose
Summary count : 1
Destination: 4.4.4.4/32
Protocol: BGP Process ID: 0
SubProtID: 0x2 Age: 00h01m52s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 200
NibID: 0x15000003 LastAs: 200
AttrID: 0x5 Neighbor: 10.1.1.2
Flags: 0x10060 OrigNextHop: 10.1.1.2
Label: NULL RealNextHop: 10.1.1.2
BkLabel: NULL BkNextHop: 30.1.1.3
SRLabel: NULL Interface: Vlan-interface 100
BkSRLabel: NULL BkInterface: Vlan-interface 200
Tunnel ID: Invalid IPInterface: Vlan-interface 100
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
# 在Switch D上查看1.1.1.1/32路由,可以看到备份下一跳信息。
[SwitchD] display ip routing-table 1.1.1.1 32 verbose
Summary count : 1
Destination: 1.1.1.1/32
Protocol: BGP Process ID: 0
SubProtID: 0x1 Age: 00h00m36s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 100
NibID: 0x15000003 LastAs: 100
AttrID: 0x1 Neighbor: 2.2.2.2
Flags: 0x10060 OrigNextHop: 2.2.2.2
Label: NULL RealNextHop: 20.1.1.2
BkLabel: NULL BkNextHop: 40.1.1.3
SRLabel: NULL Interface: Vlan-interface 101
BkSRLabel: NULL BkInterface: Vlan-interface 201
Tunnel ID: Invalid IPInterface: Vlan-interface 101
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
· 在AS 200内使用OSPFv3作为IGP协议,实现AS内的互通。
· Switch A与Switch C之间建立两条IBGP连接。当Switch A与Switch C之间的两条路径均连通时,Switch C与1200::0/64之间的报文使用Switch A<->Switch B<->Switch C这条路径转发;当Switch A<->Switch B<->Switch C这条路径发生故障时,BFD能够快速检测并通告IPv6 BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
图3-5 IPv6 BGP与BFD联动配置组网图
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Switch A |
Vlan-int100 |
3000::1/64 |
Switch C |
Vlan-int101 |
3001::3/64 |
|
Vlan-int200 |
2000::1/64 |
|
Vlan-int201 |
2001::3/64 |
Switch B |
Vlan-int100 |
3000::2/64 |
Switch D |
Vlan-int200 |
2000::2/64 |
|
Vlan-int101 |
3001::2/64 |
|
Vlan-int201 |
2001::2/64 |
(1) 配置各接口的IPv6地址(略)
(2) 配置OSPFv3,保证Switch A和Switch C之间路由可达(略)
(3) Switch A上的IPv6 BGP配置
# 配置Switch A和Switch C建立两条IBGP连接。
<SwitchA> system-view
[SwitchA] bgp 200
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] peer 3001::3 as-number 200
[SwitchA-bgp-default] peer 2001::3 as-number 200
[SwitchA-bgp-default] address-family ipv6
[SwitchA-bgp-default-ipv6] peer 3001::3 enable
[SwitchA-bgp-default-ipv6] peer 2001::3 enable
[SwitchA-bgp-default-ipv6] quit
# 配置当Switch A与Switch C之间的两条路径均连通时,Switch C与1200::0/64之间的报文使用Switch A<->Switch B<->Switch C这条路径转发。(在Switch A上对发布给对等体2001::3的1200::0/64路由配置较高的MED属性值)
¡ 定义编号为2000的IPv6基本ACL,允许路由1200::0/64通过。
[SwitchA] acl ipv6 basic 2000
[SwitchA-acl-ipv6-basic-2000] rule permit source 1200:: 64
[SwitchA-acl-ipv6-basic-2000] quit
¡ 定义两个Route-policy,一个名为apply_med_50,为路由1200::0/64设置MED属性值为50;另一个名为apply_med_100,为路由1200::0/64设置MED属性值为100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy-apply_med_50-10] if-match ipv6 address acl 2000
[SwitchA-route-policy-apply_med_50-10] apply cost 50
[SwitchA-route-policy-apply_med_50-10] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy-apply_med_100-10] if-match ipv6 address acl 2000
[SwitchA-route-policy-apply_med_100-10] apply cost 100
[SwitchA-route-policy-apply_med_100-10] quit
¡ 对发布给对等体3001::3的路由应用名为apply_med_50的Route-policy,对发布给对等体2001::3的路由应用名为apply_med_100的Route-policy。
[SwitchA] bgp 200
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] peer 3001::3 route-policy apply_med_50 export
[SwitchA-bgp-default-ipv6] peer 2001::3 route-policy apply_med_100 export
[SwitchA-bgp-default-ipv6] quit
# 配置通过BFD检测Switch A<->Switch B<->Switch C这条路径,当该路径出现故障时,BFD能够快速检测到并通告IPv6 BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
[SwitchA-bgp-default] peer 3001::3 bfd
[SwitchA-bgp-default] quit
(4) Switch C上的IPv6 BGP配置。
# 配置Switch A和Switch C建立两条IBGP连接。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 3000::1 as-number 200
[SwitchC-bgp-default] peer 2000::1 as-number 200
[SwitchC-bgp-default] address-family ipv6
[SwitchC-bgp-default-ipv6] peer 3000::1 enable
[SwitchC-bgp-default-ipv6] peer 2000::1 enable
[SwitchC-bgp-default-ipv6] quit
# 配置通过BFD检测Switch A<->Switch B<->Switch C这条路径,当该路径出现故障时,BFD能够快速检测到并通告IPv6 BGP协议,使得Switch A<->Switch D<->Switch C这条路径能够迅速生效。
[SwitchC-bgp-default] peer 3000::1 bfd
[SwitchC-bgp-default] quit
[SwitchC] quit
下面以Switch C为例,Switch A与此类似,不再赘述。
# 显示Switch C的BFD信息。可以看出,Switch A和Switch C之间已经建立了BFD会话,而且BFD协议运行正常。
<SwitchC> display bfd session verbose
Total Session Num: 1 Up Session Num: 1 Init Mode: Active
IPv6 Session Working in control packet mode:
Local Discr: 513 Remote Discr: 513
Source IP: 3001::3
Destination IP: 3000::1
Session State: Up Interface: N/A
Min Tx Inter: 500ms Act Tx Inter: 500ms
Min Rx Inter: 500ms Detect Inter: 2500ms
Rx Count: 13 Tx Count: 14
Connect Type: Indirect Running Up for: 00:00:05
Hold Time: 2243ms Auth mode: None
Detect Mode: Async Slot: 0
Protocol: BGP4+
Version:1
Diag Info: No Diagnostic
# 在Switch C上查看BGP邻居信息。可以看出,Switch A和Switch C之间建立两条BGP连接,且均处于Established状态。
<SwitchC> display bgp peer ipv6
BGP local router ID: 3.3.3.3
Local AS number: 200
Total number of peers: 2 Peers in established state: 2
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2000::1 200 8 8 0 0 00:04:45 Established
3000::1 200 5 4 0 0 00:01:53 Established
# 在Switch C上查看1200::0/64的路由信息,可以看出Switch C通过Switch A<->Switch B<->Switch C这条路径与1200::0/64网段通信。
<SwitchC> display ipv6 routing-table 1200::0 64 verbose
Summary count : 1
Destination: 1200::/64
Protocol: BGP4+ Process ID: 0
SubProtID: 0x1 Age: 00h01m07s
Cost: 50 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x1 OrigVrf: default-vrf
TableID: 0xa OrigAs: 0
NibID: 0x25000001 LastAs: 0
AttrID: 0x1 Neighbor: 3000::1
Flags: 0x10060 OrigNextHop: 3000::1
Label: NULL RealNextHop: FE80::20C:29FF:FE4A:3873
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: Vlan-interface101
BkSRLabel: NULL BkInterface: N/A
Tunnel ID: Invalid IPInterface: Vlan-interface101
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
# Switch A<->Switch B<->Switch C这条路径出现故障后,在Switch C上查看1200::0/64的路由信息,可以看出Switch C通过Switch A<->Switch D<->Switch C这条路径转发报文。
<SwitchC> display ipv6 routing-table 1200::0 64 verbose
Summary count : 1
Destination: 1200::/64
Protocol: BGP4+ Process ID: 0
SubProtID: 0x1 Age: 00h00m57s
Cost: 100 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x1 OrigVrf: default-vrf
TableID: 0xa OrigAs: 0
NibID: 0x25000000 LastAs: 0
AttrID: 0x0 Neighbor: 2000::1
Flags: 0x10060 OrigNextHop: 2000::1
Label: NULL RealNextHop: FE80::20C:29FF:FE40:715
BkLabel: NULL BkNextHop: N/A
SRLabel: NULL Interface: Vlan-interface201
BkSRLabel: NULL BkInterface: N/A
Tunnel ID: Invalid IPInterface: Vlan-interface201
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
如图3-6所示,Switch A、Switch B、Switch C和Switch D通过BGP协议实现网络互连。要求链路B正常时,Switch A和Switch D之间的流量通过链路B转发;链路B出现故障时,流量可以快速切换到链路A上。
图3-6 配置BGP快速重路由
(1) 配置各接口的IP地址(略)
(2) 在AS 200内配置OSPFv3,发布接口地址所在网段的路由,确保Switch B、Switch C和Switch D之间IPv6路由可达(略)
(3) 配置BGP连接
# 配置Switch A分别与Switch B和Switch C建立EBGP会话,并配置通过BGP发布路由::/64。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA] router-id 1.1.1.1
[SwitchA-bgp-default] peer 3001::2 as-number 200
[SwitchA-bgp-default] peer 2001::2 as-number 200
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] peer 3001::2 enable
[SwitchA-bgp-default-ipv6] peer 2001::2 enable
[SwitchA-bgp-default-ipv6] network 1:: 64
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 配置Switch B与Switch A建立EBGP会话,与Switch D建立IBGP会话。
<SwitchB> system-view
[SwitchB] bgp 200
[SwitchB] router-id 2.2.2.2
[SwitchB-bgp-default] peer 3001::1 as-number 100
[SwitchB-bgp-default] peer 3002::2 as-number 200
[SwitchB-bgp-default] address-family ipv6 unicast
[SwitchB-bgp-default-ipv6] peer 3001::1 enable
[SwitchB-bgp-default-ipv6] peer 3002::2 enable
[SwitchB-bgp-default-ipv6] peer 3002::2 next-hop-local
[SwitchB-bgp-default-ipv6] quit
[SwitchB-bgp-default] quit
# 配置Switch C与Switch A建立EBGP会话,与Switch D建立IBGP会话。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC] router-id 3.3.3.3
[SwitchC-bgp-default] peer 2001::1 as-number 100
[SwitchC-bgp-default] peer 2002::2 as-number 200
[SwitchC-bgp-default] address-family ipv6 unicast
[SwitchC-bgp-default-ipv6] peer 2001::1 enable
[SwitchC-bgp-default-ipv6] peer 2002::2 enable
[SwitchC-bgp-default-ipv6] peer 2002::2 next-hop-local
[SwitchC-bgp-default-ipv6] quit
[SwitchC-bgp-default] quit
# 配置Switch D分别与Switch B和Switch C建立IBGP会话,并配置BGP发布路由4::/64。
<SwitchD> system-view
[SwitchD] bgp 200
[SwitchD-bgp-default] peer 3002::1 as-number 200
[SwitchD-bgp-default] peer 2002::1 as-number 200
[SwitchD-bgp-default] address-family ipv6 unicast
[SwitchD-bgp-default-ipv6] peer 3002::1 enable
[SwitchD-bgp-default-ipv6] peer 2002::1 enable
[SwitchD-bgp-default-ipv6] network 4:: 64
[SwitchD-bgp-default-ipv6] quit
[SwitchD-bgp-default] quit
(4) 修改路由的首选值,使得Switch A和Switch D之间的流量优先通过链路B转发
# 在Switch A上配置从Switch B接收到的路由的首选值为100。
[SwitchA-bgp-default-ipv6] peer 3001::2 preferred-value 100
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 在Switch D上配置从Switch B接收到的路由的首选值为100。
[SwitchD-bgp-default-ipv6] peer 3002::1 preferred-value 100
[SwitchD-bgp-default-ipv6] quit
[SwitchD-bgp-default] quit
(5) 配置BGP快速重路由
# 配置Switch A:创建路由策略frr,为路由4::/64指定备份下一跳的地址为2001::2(邻居Switch C的地址);在BGP IPv6单播地址族下应用该路由策略。
<SwitchA> system-view
[SwitchA] ipv6 prefix-list abc index 10 permit 4:: 64
[SwitchA] route-policy frr permit node 10
[SwitchA-route-policy] if-match ipv6 address prefix-list abc
[SwitchA-route-policy] apply ipv6 fast-reroute backup-nexthop 2001::2
[SwitchA-route-policy] quit
[SwitchA] bgp 100
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] fast-reroute route-policy frr
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 配置Switch D:创建路由策略frr,为路由1::/64指定备份下一跳的地址为2002::1(邻居Switch C的地址);在BGP IPv6单播地址族下应用该路由策略。
<SwitchD> system-view
[SwitchD] ipv6 prefix-list abc index 10 permit 1:: 64
[SwitchD] route-policy frr permit node 10
[SwitchD-route-policy] if-match ipv6 address prefix-list abc
[SwitchD-route-policy] apply ipv6 fast-reroute backup-nexthop 2002::1
[SwitchD-route-policy] quit
[SwitchD] bgp 200
[SwitchD-bgp-default] address-family ipv6 unicast
[SwitchD-bgp-default-ipv6] fast-reroute route-policy frr
[SwitchD-bgp-default-ipv6] quit
[SwitchD-bgp-default] quit
# 在Switch A上查看4::/64路由,可以看到备份下一跳信息。
[SwitchA] display ipv6 routing-table 4:: 64 verbose
Summary count : 1
Destination: 4::/64
Protocol: BGP4+ Process ID: 0
SubProtID: 0x2 Age: 00h00m58s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0xa OrigAs: 200
NibID: 0x25000003 LastAs: 200
AttrID: 0x3 Neighbor: 3001::2
Flags: 0x10060 OrigNextHop: 3001::2
Label: NULL RealNextHop: 3001::2
BkLabel: NULL BkNextHop: 2001::2
SRLabel: NULL Interface: Vlan-interface 100
BkSRLabel: NULL BkInterface: Vlan-interface 200
Tunnel ID: Invalid IPInterface: Vlan-interface 100
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
# 在Switch D上查看1::/64路由,可以看到备份下一跳信息。
[SwitchD] display ipv6 routing-table 1:: 64 verbose
Summary count : 1
Destination: 1::/64
Protocol: BGP4+ Process ID: 0
SubProtID: 0x1 Age: 00h03m24s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x0 OrigVrf: default-vrf
TableID: 0xa OrigAs: 100
NibID: 0x25000003 LastAs: 100
AttrID: 0x4 Neighbor: 3002::1
Flags: 0x10060 OrigNextHop: 3002::1
Label: NULL RealNextHop: 3002::1
BkLabel: NULL BkNextHop: 2002::1
SRLabel: NULL Interface: Vlan-interface 101
BkSRLabel: NULL BkInterface: Vlan-interface 201
Tunnel ID: Invalid IPInterface: Vlan-interface 101
BkTunnel ID: Invalid BKIPInterface: N/A
InLabel: NULL ColorInterface: N/A
SIDIndex: NULL BKColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BKTunnelInterface: N/A
Connector: N/A PathID: 0x0
SRTunnelID: Invalid
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
Exp: N/A
VpnPeerId: N/A Dscp: N/A
SID: N/A OrigLinkID: 0x0
BkSID: N/A RealLinkID: 0x0
CommBlockLen: 0
BGP扩展功能配置任务如下:
· 配置BGP LS
¡ (可选)配置BGP LS路由反射功能
¡ (可选)配置BGP LS信息的AS号和Router ID
¡ (可选)配置不修改BGP LS路由的下一跳属性
¡ (可选)配置BGP路由根据路由策略来过滤迭代到的下一跳路由
¡ (可选)手工软复位LS地址族下的BGP会话
BGP LS(Link State,链路状态)功能可以进行跨域和跨AS的LSDB(Link State DataBase,链路状态数据库)、TEDB(TE DataBase,流量工程数据库)信息发布。设备把收集到的链路状态信息发送给控制器,实现了业务与流量的端到端管理和调度,还可以满足需要链路状态信息的各种应用需求。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定LS对等体/对等体组的AS号。
peer { { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } | group-name } as-number as-number
缺省情况下,未指定LS对等体/对等体组的AS号。
(4) 创建BGP LS地址族,并进入LS地址族视图。
address-family link-state
(5) 使能本地路由器与对等体/对等体组交换LS信息的能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } enable
缺省情况下,本地路由器不能与对等体/对等体组交换LS信息。
通常在同一个AS内,为了减少IBGP连接数,可以把几个BGP路由器划分为一个集群,将其中的一台路由器配置为路由反射器,其它路由器作为客户机,通过路由反射器在客户机之间反射路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP LS地址族视图。
address-family link-state
(4) 配置BGP LS路由反射功能。
¡ 配置本机作为路由反射器,对等体/对等体组作为路由反射器的客户机。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } reflect-client
缺省情况下,未配置路由反射器及其客户机。
¡ (可选)允许路由反射器在客户机之间反射路由。
reflect between-clients
缺省情况下,允许路由反射器在客户机之间反射路由。
配置本命令后,可减少同一AS内IBGP的连接数。
¡ (可选)配置路由反射器的集群ID。
reflector cluster-id { cluster-id | ipv4-address }
缺省情况下,每个路由反射器都使用自己的Router ID作为集群ID。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP LS地址族视图。
address-family link-state
(4) 配置BGP LS信息的AS号和Router ID。
domain-distinguisher as-number:router-id
缺省情况下,使用本BGP进程的AS号和Router ID。
在一个AS内,当两台设备把相同的LS信息发送到同一个EBGP邻居时,由于Router ID标识的不同,会被认为是不同的LS信息。通过配置本功能,可以解决这个问题。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP LS地址族视图。
address-family link-state
(4) 配置向指定对等体/对等体组发布BGP LS路由时,不修改路由的下一跳属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } next-hop-invariable
缺省情况下,设备向EBGP对等体/对等体组发布路由时,将下一跳属性修改为自身的地址;向IBGP对等体/对等体组发布路由时,不修改下一跳属性。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP LS地址族视图。
address-family link-state
(4) 配置BGP路由根据路由策略来过滤迭代到的下一跳路由。
nexthop recursive-lookup route-policy route-policy-name
缺省情况下,BGP不根据路由策略来过滤迭代到的下一跳路由。
为了防止当前地址族中的所有BGP路由迭代到的下一跳路由均无法通过路由策略的过滤,导致该地址族下的所有BGP路由均成为不可达路由,请在配置本命令前,确保指定的路由策略中创建的匹配条件能够匹配到用户期望迭代到的下一跳路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图
bgp as-number [ instance instance-name ]
(3) 配置Route-refresh功能。请选择其中一项进行配置。
¡ 使能本地路由器与指定对等体/对等体组的BGP路由刷新功能。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise route-refresh
¡ 使能本地路由器与指定BGP对等体/对等体组的BGP路由刷新、多协议扩展和4字节AS号功能。
undo peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise conventional
缺省情况下,BGP路由刷新、多协议扩展和4字节AS号功能处于使能状态。
(4) 手工对LS地址族下的BGP会话进行软复位。
a. 退回系统视图。
quit
b. 退回用户视图。
quit
c. 手工对LS地址族下的BGP会话进行软复位。
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } { export | import } link-state
可在任意视图执行以下命令:
· 显示BGP LS对等体组的信息。
display bgp [ instance instance-name ] group link-state [ group-name group-name ]
· 显示BGP LS对等体或对等体组的信息。
display bgp [ instance instance-name ] peer link-state [ ipv4-address mask-length | ipv6-address prefix-length | { ipv4-address | ipv6-address | group-name group-name } log-info | [ ipv4-address | ipv6-address ] verbose ]
· 显示BGP LS地址族信息。
display bgp [ instance instance-name ] link-state [ ls-prefix [ advertise-info | as-path | cluster-list ] | peer { ipv4-address | ipv6-address } { advertised | received } [ statistics ] | statistics ]
display bgp [ instance instance-name ] link-state [ color color-value end-point { ipv4 ipv4-address | ipv6 ipv6-address } ]
· 显示BGP LS地址族的打包组信息。
display bgp [ instance instance-name ] update-group link-state [ ipv4-address | ipv6-address ]
请在用户视图下执行以下命令,复位LS地址族下的BGP会话:
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } link-state
· 所有路由器运行BGP协议,Switch A与Switch B建立IBGP连接,Switch B分别与Switch C和Switch D建立IBGP连接。
· Switch B作为路由反射器,Switch A为Switch B的客户机。
· Switch A能够通过Switch B学到Switch C和Switch D发布的LS信息。
图4-1 BGP LS配置组网图
(1) 配置各接口的IP地址,在Switch C和Switch D上配置OSPF
(2) 配置BGP连接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp-default] peer 192.1.1.2 as-number 100
[SwitchA-bgp-default] address-family link-state
[SwitchA-bgp-default-ls] peer 192.1.1.2 enable
[SwitchA-bgp-default-ls] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 100
[SwitchB-bgp-default] peer 192.1.1.1 as-number 100
[SwitchB-bgp-default] peer 193.1.1.1 as-number 100
[SwitchB-bgp-default] peer 194.1.1.1 as-number 100
[SwitchB-bgp-default] address-family link-state
[SwitchB-bgp-default-ls] peer 192.1.1.1 enable
[SwitchB-bgp-default-ls] peer 193.1.1.1 enable
[SwitchB-bgp-default-ls] peer 194.1.1.1 enable
[SwitchB-bgp-default-ls] quit
[SwitchB-bgp-default] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 100
[SwitchC-bgp-default] peer 193.1.1.2 as-number 100
[SwitchC-bgp-default] address-family link-state
[SwitchC-bgp-default-ls] peer 193.1.1.2 enable
[SwitchC-bgp-default-ls] quit
[SwitchC-bgp-default] quit
[SwitchC] ospf
[SwitchC-ospf-1] distribute bgp-ls
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 0.0.0.0 0.0.0.0
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 100
[SwitchD-bgp-default] peer 194.1.1.2 as-number 100
[SwitchD-bgp-default] address-family link-state
[SwitchD-bgp-default-ls] peer 194.1.1.2 enable
[SwitchD-bgp-default-ls] quit
[SwitchD-bgp-default] quit
[SwitchD] ospf
[SwitchD-ospf-1] distribute bgp-ls
[SwitchD-ospf-1] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 0.0.0.0 0.0.0.0
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) 配置路由反射器
# 配置Switch B。
[SwitchB] bgp 100
[SwitchB-bgp-default] address-family link-state
[SwitchB-bgp-default-ls] peer 192.1.1.1 reflect-client
[SwitchB-bgp-default-ls] quit
[SwitchB-bgp-default] quit
# 查看Switch A的LS信息。
[SwitchA] display bgp link-state
Total number of routes: 4
BGP local Switch ID is 192.1.1.1
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a – additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Prefix codes: E link, V node, T4 IPv4 route, T6 IPv6 route, SD SRv6 SID desc
u/U unknown,
I Identifier, N local node, R remote node, L link, P prefix,
L1/L2 ISIS level-1/level-2, O OSPF, O3 OSPFv3,
D direct, S static, B BGP, SS SRv6 SID,
a area-ID, l link-ID, t topology-ID, s ISO-ID,
c confed-ID/ASN, b bgp-identifier, r router-ID,
i if-address, n peer-address, o OSPF Route-type, p IP-prefix
d designated router address/interface ID
i Network : [V][O][I0x0][N[c100][b193.1.1.1][a0.0.0.0][r193.1.1.1]]/376
NextHop : 193.1.1.1 LocPrf : 100
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: i
i Network : [V][O][I0x0][N[c100][b194.1.1.1][a0.0.0.0][r194.1.1.1]]/376
NextHop : 194.1.1.1 LocPrf : 100
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: i
i Network : [T4][O][I0x0][N[c100][b193.1.1.1][a0.0.0.0][r193.1.1.1]][P[o0x1][p193.1.1.0/24]]/480
NextHop : 193.1.1.1 LocPrf : 100
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: i
i Network : [T4][O][I0x0][N[c100][b194.1.1.1][a0.0.0.0][r194.1.1.1]][P[o0x1][p194.1.1.0/24]]/480
NextHop : 194.1.1.1 LocPrf : 100
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: i
可以看出,Switch A从Switch C和Switch D 学到了LS信息。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!