07-BGP高级配置
本章节下载: 07-BGP高级配置 (2.17 MB)
调整和优化BGP网络配置任务如下:
· 调整和优化EBGP会话的建立与复位
· 配置BGP会话的特殊能力协商
¡ 开启与对等体/对等体组交互Withdraw Route-refresh消息的能力
· 配置BGP通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级
· 调整BGP会话的建立、中断与软复位
¡ 配置BGP软复位
· 配置对等体监控组
· 配置BGP会话状态与Monitor Link下行接口联动
· 调整标签分配方式和路由优选规则
¡ 配置标签申请方式
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
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置设备与指定对等体/对等体组之间建立BGP TCP连接时所使用的TCP最大报文段长度。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } tcp-mss mss-value
缺省情况下,未指定设备与指定对等体/对等体组建立TCP连接时所使用的TCP最大报文段长度。
当前路由器要与另外一个路由器建立EBGP会话,它们之间必须具有直连的物理链路,且必须使用直连接口建立会话。如果不满足这一要求,则必须使用peer ebgp-max-hop命令允许它们经过多跳建立EBGP会话。
配置BGP GTSM功能后,只要本地设备和指定的对等体通过了GTSM检查,就允许在二者之间建立EBGP会话,不管二者之间的跳数是否超过peer ebgp-max-hop命令指定的跳数范围。
建议不要指定直连EBGP对等体/对等体组配置peer ebgp-max-hop命令,否则可能导致BGP路由无法正常迭代。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置允许本地路由器同非直连网络上的邻居建立EBGP会话,同时指定允许的最大跳数。
peer { group-name | ipv4-address [ mask-length ] } ebgp-max-hop [ hop-count ]
缺省情况下,不允许同非直连网络上的邻居建立EBGP会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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路由,而路由发送方如果针对每个路由接收方都设置路由发布策略,则会增加配置量和维护复杂度。因此,路由发送方需要在无需维护路由接收方的路由接收需求的情况下,仍能够满足路由接收方的路由接收需求。
BGP ORF(Outbound Route Filtering,输出路由过滤)功能是指将本地的路由接收策略信息通过Route-refresh消息发送给对等体,当对等体需要向本地发送Update更新消息时,不仅要利用对等体上的路由策略对路由进行过滤,还需要利用接收到的路由接收策略对路由进行过滤,只有通过策略过滤的路由信息才会发给本地。通过上述机制,BGP ORF功能可以降低带宽占用,并显著减少路由发送方的配置工作量。
本功能是基于前缀的BGP ORF功能。配置本功能后,本地和BGP对等体会通过Open消息协商ORF能力(即收发的消息里是否允许携带ORF信息,如果允许携带,是否可以携带非标准的ORF信息),当协商完毕并成功建立BGP会话后,可以通过特殊的Route-refresh消息交互ORF信息。ORF信息中携带了本端用于BGP路由接收过滤的地址前缀列表信息,对端收到ORF信息后仅会向本端发送通过地址前缀列表过滤的BGP路由信息,以达到减少BGP邻居间Update更新消息的交互,节省网络资源的目的。
本地和BGP对等体都需要执行本配置,且需要保证一端能够发送携带ORF信息的Route-refresh报文,另一端能够接收携带ORF信息的Route-refresh报文,才能保证ORF能力协商成功。
在开启基于前缀的BGP ORF能力之前,请先通过peer prefix-list import命令设置基于地址前缀列表的BGP路由接收策略,BGP才会将该地址前缀列表信息发布给对等体。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图、BGP-VPN IPv4单播地址族视图或BGP IPv4组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv4组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 multicast
(3) 为对等体/对等体组设置基于地址前缀列表的BGP路由过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } prefix-list ipv4-prefix-list-name import
缺省情况下,未配置基于地址前缀列表的BGP路由过滤策略。
(4) 开启BGP邻居协商基于前缀的ORF能力。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise orf prefix-list { both | receive | send }
interface-peer interface-type interface-number capability-advertise orf prefix-list { both | receive | send }
缺省情况下,BGP邻居协商的ORF能力处于关闭状态。
BGP IPv4组播地址族视图下不支持IPv6参数和interface-peer命令。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图、BGP-VPN IPv6单播地址族视图或BGP IPv6组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv6组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 multicast
(3) 为对等体/对等体组设置基于地址前缀列表的BGP路由过滤策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } prefix-list ipv6-prefix-list-name import
缺省情况下,未配置基于地址前缀列表的BGP路由过滤策略。
(4) 开启BGP邻居协商基于前缀的ORF能力。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } capability-advertise orf prefix-list { both | receive | send }
interface-peer interface-type interface-number capability-advertise orf prefix-list { both | receive | send }
缺省情况下,BGP邻居协商的ORF能力处于关闭状态。
BGP IPv6组播地址族视图下不支持IPv4参数、link-local-address interface interface-type interface-number参数和interface-peer命令。
和采用非标准ORF的第三方设备互通时需要执行本配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 开启BGP邻居协商的非标准ORF能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise orf non-standard
缺省情况下,BGP邻居协商的非标准ORF能力处于关闭状态。
设备支持4字节的AS号,即AS号取值占用4字节,取值范围为1~4294967295。缺省情况下,设备在与对端设备建立BGP会话时,通过Open消息通告对端设备本端支持4字节的AS号。如果对端设备不支持4字节AS号(只支持2字节AS号),则会导致会话协商失败。此时,在本端与对端设备之间使能4字节AS号抑制功能,可以使得本端设备通过Open消息向对端设备谎称自己不支持4字节的AS号,从而确保本端和对端设备之间可以成功建立BGP会话。
对端设备支持4字节AS号,且对端设备的AS号大于65535时,请不要使能4字节AS号抑制功能,否则会导致BGP会话无法建立。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 使能4字节AS号抑制功能。
peer { group-name | ipv4-address [ mask-length ] } capability-advertise suppress-4-byte-as
缺省情况下, 4字节AS号抑制功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 使能4字节AS号抑制功能。
peer { group-name | ipv6-address [ prefix-length ] } capability-advertise suppress-4-byte-as
缺省情况下,4字节AS号抑制功能处于关闭状态。
如图1-1所示,在多级BGP组网场景中,上游设备的上行链路全部故障时,该设备可能无法及时完成路由的收敛,并无法及时发送撤销消息通知下游设备删除来自该设备的BGP路由。此时部分用户流量仍然被发往上行链路故障的上游设备,导致这部分流量转发失败。
图1-1 多级BGP场景组网图
如图1-2所示,通过本功能开启上游设备与下游设备之间交互Withdraw Route-refresh消息的能力后,上游设备的上行链路全部断开时,上游设备会向下游设备发送Withdraw Route-refresh消息。下游设备收到消息后,不再将流量发送给该上游设备,而是将所有流量都快速切换至链路完好的上游设备,以避免流量丢失。
图1-2 多级BGP场景交换Withdraw Route-refresh消息示意图
配置本功能后,上游BGP设备与下游BGP设备间的BGP会话会断开并重新建立,以协商Withdraw Route-refresh消息交互能力。上下游BGP设备之间通过Open消息协商交互Withdraw Route-refresh消息的能力,两端设备都指定对方配置本功能时,协商才能成功。协商成功后,如果上游BGP设备的所有AS 10的邻居均断开,则上游BGP设备会向下游BGP设备发送Withdraw Route-refresh消息,消息中携带了所有会话均断开的AS号,即AS 10。
对等体收到上游BGP设备发送的Withdraw Route-refresh消息后,在所有来自该上游BGP设备的BGP路由中,查找路由的下一跳是否包含Withdraw Route-refresh消息中携带的AS号(AS 10)。对于下一跳携带的第一个AS号为AS 10的BGP路由,下游BGP设备将该BGP路由对应的IP路由置为备份路由,不再通过这些路由指导转发,以实现快速的路径切换。可以通过display rib nib或display ipv6 rib nib命令显示信息中的“AS-path”字段,查看BGP路由的下一跳信息中包含的AS号。有关display rib nib和display ipv6 rib nib命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“IP路由基础”。
设备还会将收到的Withdraw Route-refresh消息转发出去,转发的规则为从IBGP邻居收到的Withdraw Route-refresh消息仅会被转发给EBGP邻居,从EBGP邻居收到的Withdraw Route-refresh消息仅会被转发给IBGP邻居,并且设备不会修改转发出去的Withdraw Route-refresh消息中携带的AS号。
本功能可以与邻居地址不可达检测功能配合使用,为指定邻居配置peer tracking命令后,本端设备能够快速检测与该邻居的会话状态,在邻居不可达时及时断开BGP会话,并向本端设备的下游设备发送Withdraw Route-refresh消息,以提高路径收敛的速度。
配置本命令后,本端设备与指定对等体间的BGP会话会断开并重新建立,请谨慎配置。
本功能仅适用于1. 功能简介中介绍的场景,不适用于始发Withdraw Route-refresh消息的上游设备的上行链路连接IBGP对等体的场景。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 开启与指定对等体/对等体组交互Withdraw Route-refresh消息的能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } capability-advertise withdraw-refresh
缺省情况下,设备不具有与指定对等体/对等体组交互Withdraw Route-refresh消息的能力。
本功能用于在多级BGP组网场景中实现流量的快速切换。如图1-3所示,在此组网中,上游设备的上行链路全部故障时,该设备可能无法及时完成路由的收敛,并无法及时发送撤销消息通知下游设备删除来自该设备的BGP路由。此时部分用户流量仍然被发往上行链路故障的上游设备,导致这部分流量转发失败。
图1-3 多级BGP场景组网图
为了防止上述问题的发生,可以在上游BGP设备上通过本命令使得BGP与Track联动,在上游设备的上行链路故障时实现用户流量的快速切换。
图1-4 BGP通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级
上游BGP设备需要执行以下操作:
(1) 将上行接口链路状态与Track项关联。有关Track的详细介绍,请参见“可靠性配置指导”中的“Track”
(2) 在路由策略中通过apply track命令引用与上行链路状态关联的Track项
(3) 执行peer advertise lowest-priority track-route-policy命令,指定该命令的{ group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] }参数为下游BGP设备,route-policy-name参数为第(2)步中的路由策略
完成上述操作后,上游BGP设备的上行链路Down时,其关联的Track项状态会变为Negative,此时BGP也感知到联动的Track项的变化,会立即更新向下游BGP设备发布的所有路由,并且将发布的路由的优先级调整为最低(MED调整为最大值,本地优先级调整为0),使得下游BGP设备不优选来自该上游BGP设备的路由,将用户流量切换到另一台上游BGP设备。此过程跳过了上游BGP设备的上行链路故障后,保持定时器超时、路由失效以及路由撤销的缓慢过程,大幅提高了用户流量路径切换的速度。
有关路由策略以及apply track命令的详细介绍,请参见“三层技术-IP路由配置指导”中的“路由策略”。
在peer advertise lowest-priority track-route-policy命令指定的路由策略中,仅apply track子句生效,其他子句均不生效。
peer advertise lowest-priority track-route-policy命令与peer capability-advertise withdraw-refresh命令实现的功能类似,区别在于:
· peer advertise lowest-priority track-route-policy命令实现的功能集成在设备本身,可以与其他厂商的设备共同组网。但是peer advertise lowest-priority track-route-policy命令会将发往指定对等体/对等体组的所有路由优先级都调整为最低,无法精细控制。
· peer capability-advertise withdraw-refresh命令要求下游BGP设备能够识别Withdraw Route-refresh消息,否则无法生效。但是peer capability-advertise withdraw-refresh命令能够控制仅上行链路断开的流量切换,能够实现精细控制。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置BGP通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise lowest-priority track-route-policy route-policy-name
缺省情况下,BGP不会通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置BGP通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise lowest-priority track-route-policy route-policy-name
缺省情况下,BGP不会通过与Track的联动来调整发送给对等体/对等体组的BGP路由的优先级。
由于网络升级维护等原因,需要暂时断开与对等体/对等体组的BGP会话时,可以通过本配置禁止与对等体/对等体组建立会话。当网络恢复后,取消本配置以恢复与对等体/对等体组的会话。这样,网络管理员无需删除并重新进行对等体/对等体组相关配置,减少了网络维护的工作量。
设备可以通过以下两种方式禁止与对等体/对等体组建立会话:
· 仅禁止与指定对等体/对等体组建立会话。
· 禁止与所有对等体建立会话。
执行本配置时,如果可以指定了graceful参数,则设备会启动等待邻居关系断开定时器,并重新发布路由信息。不同方式下,发布的路由信息有所不同:
· 仅禁止与指定对等体/对等体组建立会话:
¡ 向指定的对等体/对等体组发送本设备上全部的路由。
¡ 向其他的IBGP对等体/对等体组发送来自指定对等体/对等体组的路由。
· 禁止与所有对等体建立会话:向所有对等体/对等体组重新发送本设备上全部的路由。
等待邻居关系断开定时器超时后:
· 如果仅禁止与指定对等体/对等体组建立会话,则设备断开与指定等体/对等体组的会话。
· 如果禁止与所有对等体建立会话,则设备断开与所有对等体的会话。
执行本配置还可以配置这些路由的属性,以降低重新发布路由的优先级,使得邻居路由器优选从其他邻居学到的路由,从而避免当定时器超时、邻居关系断开时造成流量的中断。如果用户只希望设备发送低优先级的路由,而不断开BGP会话,可以在配置本功能时指定graceful graceful-time参数的值为0。
如果同时配置ignore all-peers和peer ignore命令,则针对同一对等体/对等体组,以peer ignore命令的配置为准。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 禁止与对等体/对等体组建立会话。
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) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 禁止与IPv6 BGP对等体/对等体组建立会话。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ignore [ graceful graceful-time { community { community-number | aa:nn } | local-preference preference | med med } * ]
interface-peer interface-type interface-number 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) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 通过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-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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 IPv4单播地址族视图、BGP-VPN IPv4单播地址族视图或BGP IPv4组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv4组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 multicast
(3) 保存所有来自指定对等体/对等体组的原始路由更新信息。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } keep-all-routes
interface-peer interface-type interface-number keep-all-routes
缺省情况下,不保存来自对等体/对等体组的原始路由更新信息。
BGP IPv4组播地址族视图下不支持IPv6参数和interface-peer命令。
本命令只对执行该命令后接收到的路由生效。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图、BGP-VPN IPv6单播地址族视图或BGP IPv6组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv6组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 multicast
(3) 保存所有来自指定IPv6 BGP对等体/对等体组的原始路由更新信息。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } keep-all-routes
interface-peer interface-type interface-number keep-all-routes
缺省情况下,不保存来自对等体/对等体组的原始路由更新信息。
本命令只对执行该命令后接收到的路由生效。
BGP IPv6组播地址族视图下不支持IPv4参数、link-local-address interface interface-type interface-number参数和interface-peer命令。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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) 退回用户视图。
return
(5) 手工对BGP会话进行软复位。请选择其中一项进行配置。
¡ 手工软复位IPv4地址族下与IPv4对等体建立的BGP会话。
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | all | external | group group-name | internal } { export | import } ipv4 [ multicast | [ unicast ] [ vpn-instance vpn-instance-name ] ]
¡ 手工软复位IPv4地址族下与IPv6对等体建立的BGP会话。
refresh bgp [ instance instance-name ] { ipv6-address [ prefix-length ] | [ link-local-address ] interface interface-type interface-number } { export | import } ipv4 [ unicast ]
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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) 退回用户视图。
return
(5) 手工对BGP会话进行软复位。请选择其中一项进行配置。
¡ 手工软复位IPv6地址族下与IPv6对等体建立的BGP会话。
refresh bgp [ instance instance-name ] { ipv6-address [ prefix-length ] | [ link-local-address ] interface interface-type interface-number | all | external | group group-name | internal } { export | import } ipv6 [ multicast | [ unicast ] [ vpn-instance vpn-instance-name ] ]
¡ 手工软复位IPv6地址族下与IPv4对等体建立的BGP会话。
refresh bgp [ instance instance-name ] ipv4-address [ mask-length ] { export | import } ipv6 [ unicast ]
通过改变BGP选路规则实现负载分担时,设备根据balance命令配置的进行BGP负载分担的路由条数,选择指定数目的路由进行负载分担,以提高链路利用率。
本功能可以通过配置ecmp-nexthop-local或ecmp-nexthop-unchanged参数,实现对BGP负载分担的路由下一跳地址进行处理。执行balance命令时,ecmp-nexthop-local和ecmp-nexthop-unchanged参数的使用说明如下。
|
参数 |
使用说明 |
|
未指定ecmp-nexthop-local和ecmp-nexthop-unchanged参数 |
· 未配置BGP Add-Path功能时,设备仅向IBGP对等体传递形成了负载分担的路由中的最优路由,并将该路由的下一跳地址修改为本地的地址 · 配置了BGP Add-Path功能时,设备按照Add-Path优选路由的最大条数向IBGP对等体传递形成了负载分担的路由,并将其中的最优路由的下一跳地址修改为本地的地址,不修改其他路由的下一跳地址 |
|
指定了ecmp-nexthop-local参数 |
对于同一目的地址的路由,将所有参与负载分担的路由的下一跳地址修改为本地的地址 |
|
指定了ecmp-nexthop-unchanged参数 |
对参与负载分担的路由的下一跳地址不做特殊处理 |
配置balance igp-metric-ignore和bestroute igp-metric-ignore中任一命令均可使BGP在选择负载分担的路由时忽略IGP Metric值。两条命令的不同点在于:
· balance igp-metric-ignore命令仅用于负载分担。BGP路由发布时的最优路由选择不受此命令的影响。BGP向外发布路由时仍会按照选路规则比较IGP Metric值,以选出最优的路由。
· bestroute igp-metric-ignore命令不仅用于负载分担,还用于BGP路由发布时的最优路由选择。执行本命令后,BGP选择负载分担路由、向外发布路由时,均会忽略路由的IGP Metric值。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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 IPv4单播地址族视图、BGP-VPN IPv4单播地址族视图或BGP IPv4组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv4组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 multicast
(6) 配置进行BGP负载分担的路由条数。
balance [ ebgp | eibgp | ibgp ] number [ ecmp-nexthop-local | ecmp-nexthop-unchanged ]
缺省情况下,不会进行BGP负载分担。
(7) (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-neglect
缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担。
(8) (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-relax [ ebgp | ibgp ]
缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担。
(9) (可选)配置到达路由下一跳的IGP路由的Metric值不同的BGP路由之间能够形成BGP负载分担。
balance igp-metric-ignore
缺省情况下,到达路由下一跳的IGP路由的Metric值不同的BGP路由之间不能形成负载分担。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-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 IPv6单播地址族视图、BGP-VPN IPv6单播地址族视图或BGP IPv6组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv6组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 multicast
(6) 配置进行BGP负载分担的路由条数。
balance [ ebgp | eibgp | ibgp ] number [ ecmp-nexthop-local | ecmp-nexthop-unchanged ]
缺省情况下,不会进行BGP负载分担。
(7) (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-neglect
缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担。
(8) (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担。
balance as-path-relax [ ebgp | ibgp ]
缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担。
(9) (可选)配置到达路由下一跳的IGP路由的Metric值不同的BGP路由之间能够形成BGP负载分担。
balance igp-metric-ignore
缺省情况下,到达路由下一跳的IGP路由的Metric值不同的BGP路由之间不能形成负载分担。
在大规模的网络中,路由反射器通常可以接收到同一前缀的多条BGP路由,但是在缺省情况下,BGP只发布一条最优路由。如果最优路由所在路径出现网络故障,数据流量将会被中断,直到BGP根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。
为了解决上述问题,可以在路由反射器上配置Add-Path(Additional Paths)功能。部署该功能后,设备可以同时发布多条相同前缀的路由给对等体。对等体接收到相同前缀的多条BGP路由后,即可为到达同一目的网络形成多条链路,这些链路之间既可以通过balance命令形成负载分担,也可以按照BGP路由的优选规则形成备份,在一条链路出现故障时将流量快速切换到其他链路上,从而提高了数据传输的可靠性。
例如图1-5所示,Device A、Device B和Device C位于AS 100内,通过RR在域内反射路由信息。Device B和Device C均与Device D建立EBGP会话,并均从Device D学习到一条前缀为10.1.1.0/24的路由。
Device B和Device C将路由10.1.1.0/24分别发布给RR,RR将学习到两条相同前缀的路由,此时RR可以通过配置BGP Add-Path功能,将多条相同前缀的路由发布给Device A。配置前后的对比如所示。
表1-1 路由发布情况以及链路故障收敛情况
|
是否配置BGP Add-Path |
路由发布情况 |
单条链路故障时的收敛情况 |
|
未配置BGP Add-Path |
RR仅将学习到的两条10.1.1.0/24路由中的最优路由发布给Device A |
Device A需要对路由进行重新收敛 |
|
已配置BGP Add-Path |
RR将学习到的两条10.1.1.0/24路由均发布给Device A,两条路由的下一跳地址分别为12.1.1.1以及13.1.1.1 |
Device A将学习到的两条路由形成FRR时,去往10.1.1.0/24网段的主路径如果故障,Device A可以将流量快速切换到备路径 Device A将学习到的两条路由形成负载分担时,去往10.1.1.0/24网段的一条路径如果故障,流量将全部转移到另一条路径 |
Add-Path能力包括接收和发送两种。为了让对等体间的Add-Path能力协商成功,必须一端使能接收能力,另一端使能发送能力。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置Add-Path功能。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } additional-paths { receive | send } *
interface-peer interface-type interface-number additional-paths { receive | send } *
缺省情况下,未配置Add-Path功能。
(4) 配置向指定对等体/对等体组发送的Add-Path优选路由的最大条数。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise additional-paths best number
interface-peer interface-type interface-number advertise additional-paths best number
缺省情况下,向指定对等体/对等体组发送的Add-Path优选路由的最大条数为1。
(5) 配置Add-Path优选路由的最大条数。
additional-paths select-best best-number
缺省情况下,Add-Path优选路由的最大条数为1。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置Add-Path功能。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } additional-paths { receive | send } *
interface-peer interface-type interface-number additional-paths { receive | send } *
缺省情况下,未配置Add-Path功能。
(4) 配置向指定对等体/对等体组发送的Add-Path优选路由的最大条数。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } advertise additional-paths best number
interface-peer interface-type interface-number advertise additional-paths best number
缺省情况下,向指定对等体/对等体组发送的Add-Path优选路由的最大条数为1。
(5) 配置Add-Path优选路由的最大条数。
additional-paths select-best best-number
缺省情况下,Add-Path优选路由的最大条数为1。
当系统进入二级内存门限告警状态后,BGP会周期性地选择一个EBGP对等体,断开与该对等体之间的BGP会话,直到系统内存恢复为止。用户可以通过本配置来避免在二级内存门限告警状态下,断开与指定EBGP对等体/对等体组之间的BGP会话,以达到对特定EBGP对等体/对等体组进行保护的目的。
内存告警门限的详细介绍,请参见“基础配置指导”中的“设备管理”。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置系统进入二级内存门限告警状态后,不断开与指定EBGP对等体/对等体组之间的会话。
peer { group-name | ipv4-address [ mask-length ] } low-memory-exempt
缺省情况下,系统在二级内存门限告警状态下,会周期性地选择一个EBGP对等体,并断开与该对等体之间的BGP会话。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置系统进入二级内存门限告警状态后,不断开与指定EBGP对等体/对等体组之间的会话。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } low-memory-exempt
interface-peer interface-type interface-number low-memory-exempt
缺省情况下,系统在二级内存门限告警状态下,会周期性地选择一个EBGP对等体,并断开与该对等体之间的BGP会话。
DSCP(Differentiated Services Code Point,差分服务编码点)携带在IP报文中的ToS字段,用来体现报文自身的优先等级,决定报文传输的优先程度。通过配置本功能,可以对BGP发送协议报文的DSCP优先级进行设置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BGP发送协议报文的DSCP优先级。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } dscp dscp-value
interface-peer interface-type interface-number dscp dscp-value
缺省情况下,BGP发送协议报文的DSCP优先级为48。
通过protocol nexthop recursive-lookup命令配置BGP路由按照路由策略进行迭代下一跳查找后,可以防止路由变化时的流量丢失,从对等体学到的所有路由都会受迭代策略控制。但在某些组网环境中,不希望来自特定对等体的路由受迭代策略控制(比如直连EBGP)时,可以配置本功能。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置从对等体/对等体组学到的路由不受迭代策略控制。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } nexthop-recursive-policy disable
interface-peer interface-type interface-number nexthop-recursive-policy disable
缺省情况下,从对等体/对等体组学到的路由受迭代策略控制。
开启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。
对等体监控组主要应用于流量切换场景。例如,当一台本地设备同时从AS 10和AS 20的多个BGP对等体接收到相同目的地址的多条BGP路由时,发往该目的地址的流量可以通过AS 10和AS 20进行负载分担。如果AS 10内的多个BGP对等体与本地设备断开BGP会话,即使AS 10内仍有与本地设备成功建立的BGP会话,网络管理员可能会认为AS 10内的网络状态存在风险,因此需要将所有经过AS 10的流量全部切换到其他AS。
通过monitor-group命令创建对等体监控组后,可以通过peer monitor-group命令,将共享风险的BGP对等体加入到同一对等体监控组中。在对等体监控组中,对等体存在三种状态——UP、INIT、DOWN:
(1) 加入对等体监控组时,如果本地与BGP对等体的会话状态为Established,则该对等体在监控组中的状态为UP,否则为INIT。
(2) BGP对等体加入监控组后,INIT状态的对等体会话状态变为Established时,该对等体在监控组中的状态会转换为UP。
(3) UP状态的BGP对等体会话状态从Established异常转换为其他状态时,该对等体在监控组中的状态会转换为DOWN。例外的是,BGP配置导致的BGP会话状态变化情况:
¡ GR正常流程中导致的会话断开,不影响BGP对等体在监控组中的状态。
¡ 其他配置(例如peer ignore命令)导致的BGP会话断开时,如果监控组中状态为DOWN的BGP对等体数量未达到阈值,涉及的BGP对等体在监控组中的状态会转换为INIT;如果达到阈值,则维持DOWN状态不变。
当对等体监控组中状态为DOWN的BGP对等体数量达到设定的阈值时,本地设备会断开对等体监控组中的所有BGP会话,并将监控组内所有的BGP对等体状态置为DOWN,以避免流量通过存在风险的路径。
配置对等体监控组功能,并且监控组中处于DOWN状态的BGP对等体数量达到阈值,触发断开对等体监控组中的所有BGP会话后,该监控组的状态变为DOWN。此后本地设备不会主动与对等体监控组中的对等体重新建立BGP会话。此时需要执行reset bgp monitor-group命令。执行reset bgp monitor-group命令后,指定的对等体监控组内的所有BGP对等体的状态会转换为INIT状态。此时监控组中状态正常的BGP会话可以恢复Established状态,该会话对应的BGP对等体在监控组中的状态可以转换为UP状态。
每个BGP对等体只对应一个BGP会话,无论该对等体在多少个地址族下建立了连接。对等体组中的BGP对等体数量决定了BGP会话的数量。使用相同IP地址在不同BGP-VPN实例和BGP公网实例下建立的BGP会话,会被视为多个会话。
不允许将同一个BGP对等体/对等体组加入到不同的对等体监控组中。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建对等体监控组。
monitor-group monitor-group-name threshold number
缺省情况下,不存在对等体监控组。
(4) (可选)进入BGP-VPN实例视图。
ip vpn-instance vpn-instance-name
(5) 将指定对等体/对等体组加入指定对等体监控组。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } monitor-group monitor-group-name
缺省情况下,未将BGP对等体/对等体组加入任何对等体监控组。
(6) (可选)恢复与对等体监控组中对等体的BGP会话。
reset bgp [ instance instance-name ] monitor-group monitor-group-name
本命令需要在用户视图下执行,请先执行quit命令(可能需要多次执行)退回到用户视图。
本功能可以应用在以下场景:
· 在MPLS L3VPN组网中,PE设备的BGP路由表中会存在大量的私网路由。缺省情况下,优选后的私网路由将全部被下发到IP路由表中,但部分路由对于PE设备转发无意义,如不需要和其他Site互通的设备对应的路由。通过配置本命令,可以禁止不需要指导转发的路由下发到IP路由表,以提高转发性能。
· 在路由反射器上配置本功能,禁止路由反射器上的BGP路由下发到IP路由表,可以使得路由反射器仅用于发布和接收路由,而不进行业务流量转发,以节省路由反射器上的系统资源。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置BGP路由禁止下发到IP路由表中。
routing-table bgp-rib-only [ [ all ] [ route-policy route-policy-name ] | cross-pod-host ]
缺省情况下,BGP将最优路由下发到IP路由表中。
仅BGP IPv4单播地址族支持cross-pod-host参数。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置BGP路由禁止下发到IP路由表中。
routing-table bgp-rib-only [ [ all ] [ route-policy route-policy-name ] | cross-pod-host ]
缺省情况下,BGP将最优路由下发到IP路由表中。
仅BGP IPv6单播地址族支持cross-pod-host参数。
通过配置本功能,BGP可以通过以下三种方式为私网路由申请标签:
· 为每条路由申请一个标签:采用这种方式时,路由条目和标签一一对应;
· 为每个下一跳申请一个标签:当按照每条路由申请标签方式需要申请的标签数量大于设备支持的最大标签数目时,通过采用此方式,可以减少申请的标签数量;
· 为每个VPN实例申请一个标签:当存在大量需要申请标签的路由,并且采用下一跳申请标签的方式申请的标签数量仍然超过设备支持的最大标签数目时,可以采用此方式。
为每条路由或者每个下一跳申请标签方式可以与vpn popgo命令配合使用,以实现报文根据标签查找出接口转发报文;为每个VPN实例申请标签方式与vpn popgo命令互斥,采用该方式时,只能根据标签查找FIB转发报文
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置标签申请方式。
label-allocation-mode { per-prefix | per-vrf }
缺省情况下,BGP按照每个下一跳分配一个标签的方式申请标签。
改变标签分配方式将重新下刷所有BGP路由,会导致业务的短暂中断,请慎重使用。
通过配置本功能,带隧道信息的标签路由才能参与路由优选。不带隧道信息的标签路由不能参与路由优选,即无法成为最优路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置带隧道信息的标签路由才能参与路由优选。
labeled-route ignore-no-tunnel
缺省情况下,不带隧道信息的标签路由可以参与路由优选。
如图1-6所示,图中设备之间均通过BGP协议互通,Device A与Device D之间存在两条路径,当Device D和Device B之间的链路不通时,流量切换到备份路径上转发,之后若主用路径恢复正常,流量将切回主用路径。这种情况下,当主用链路恢复正常时,Device B会向Device A发送Update消息更新路由,Device A收到路由后触发路由优选,将流量切换到主用路径上进行转发,此时Device B可能未完成FIB转发表项的刷新,导致流量丢失。通过在Device A上开启延迟路由优选功能可以在触发路由优选时延迟一段时间再进行重新选路,避免切换路径时由于表项未完成刷新导致的流量丢失现象。
配置本功能时,可以通过route-select delay命令配置在一个地址族下所有的路由变化时均延迟优选;也可以通过route-select suppress on-peer-up命令配置在邻居状态由Down变为Up后,设备仅对来自该邻居的BGP路由延迟优选。以上二者同时配置时,二者中较长的路由优选延迟时间生效。
配置本功能时,需要注意:
· 仅路由变化后存在多条相同前缀的有效路由时路由优选才会延迟。
· 将路由优选延迟时间修改为非0值时,正在等待延迟路由优选时间的路由不受影响,仍采用延迟开始时的时间;将路由优选延迟时间修改为0时,正在等待延迟路由优选时间的路由会立即进行优选。
· 如果对于同一地址族多次执行本命令,最后一次执行的命令生效。
以下情况需要进行路由优选时不受路由优选延迟时间影响,仍会立即进行路由优选:
· 通过配置命令或路由被撤销引起路由变化时。
· 路由变化后去往某一目的只有一条路由时。
· BGP发生主备进程倒换时。
· 存在多条等价路由的情况下,当选中路由发生变化时。
· 配置了FRR情况下仅存在最优路由和次优路由时。
· 引入的路由触发路由优选时。
如需即刻对正在延迟优选的路由进行优选,可以通过如下方式配置:
· 执行undo route-select suppress on-peer-up命令。该命令仅对通过route-select suppress on-peer-up命令进行延迟优选的路由生效。
· 执行undo route-select delay命令。该命令同时对通过route-select suppress on-peer-up命令以及route-select delay命令进行延迟优选的路由生效。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图、BGP-VPN IPv4单播地址族视图或BGP IPv4组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv4组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 multicast
(3) 配置BGP路由延迟优选,请至少选择其中的一项进行配置。
¡ 配置对地址族下的所有BGP路由延迟优选。
route-select delay delay-value
¡ 配置邻居状态由Down变为Up后,在指定的持续时间内仅对来自该邻居的BGP路由延迟优选。
route-select suppress on-peer-up milliseconds
缺省情况下,路由优选不延迟。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图、BGP-VPN IPv6单播地址族视图或BGP IPv6组播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP IPv6组播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 multicast
(3) 配置BGP路由延迟优选,请至少选择其中的一项进行配置。
¡ 配置对地址族下的所有BGP路由延迟优选。
route-select delay delay-value
¡ 配置邻居状态由Down变为Up后,在指定的持续时间内仅对来自该邻居的BGP路由延迟优选。
route-select suppress on-peer-up milliseconds
缺省情况下,路由优选不延迟。
在图1-7所示的组网中,Device A与Device B、Device C建立BGP会话,Device B和Device C均同时与Device D、Devcie E建立BGP会话。Device D和Device E接入的用户通过Device A下发的BGP路由信息与外部网络进行通信,正常情况下,用户访问外部网络的流量在Device B和Device C上进行负载分担。
在此组网场景下,如果Devcie A和Device B之间的链路发生了故障,导致Device A和Device B的BGP会话中断,则Device A发送的BGP路由无法通过Device B转发给Device D和Device E,用户访问外部网络的流量也不会经过Device B进行转发。此时Device B与Device D、Device E的BGP会话已经没有必要建立,可以断开这些BGP会话,以节省系统资源。
图1-7 BGP会话状态与Monitor Link下行接口联动需求组网图
可以通过本功能,使得Device A和Device B之间的BGP会话中断时,Device B和Device D、Device E的BGP会话也自动中断;Device A和Device B之间的BGP会话恢复时,Device B和Device D、Device E的BGP会话也自动恢复。
配置本功能后,本端设备与指定的对等体/对等体组之间的BGP会话状态将作为指定Monitor Link组中的其中一类上行接口,Monitor Link的上行接口与下行接口进行联动的具体工作机制为:
· 上行接口的定义:
¡ 在Monitor Link组内,每一个通过port uplink或port monitor-link group uplink命令指定的接口被视为一个上行接口。
¡ 在Monitor Link组内,每一个通过monitor bgp命令指定的BGP进程被视为一个上行接口。
¡ 在Monitor Link组内,每一个通过peer monitor-link group命令指定的BGP会话亦被视为一个上行接口。
需要注意的是,如果通过peer monitor-link group命令指定的BGP会话建立在通过monitor bgp命令指定的BGP进程之中,且BGP会话中至少有一个处于Established状态,则该BGP进程不被视为上行接口。如果通过peer monitor-link group命令指定的BGP会话建立在通过monitor bgp命令指定的BGP进程之中,但指定的BGP会话均不处于Established状态,则这些BGP会话不被视为上行接口,仅BGP进程被视为上行接口。
例如,在Monitor Link组中通过monitor bgp命令指定BGP实例aaa和bbb为两个上行接口,并在其中的aaa实例中通过peer monitor-link group命令指定了两个BGP会话作为上行接口,未在bbb实例中通过peer monitor-link group命令指定上行接口。则指定的两个BGP会话中至少有一个处于Established状态时,该Monitor Link组总共存在三个上行接口(两个BGP会话加一个未指定BGP会话的BGP进程);指定的两个BGP会话均不处于Established状态时,该Monitor Link组总共存在两个上行接口(一个指定了BGP会话但BGP会话均不处于Established状态的BGP进程,加一个未指定BGP会话的BGP进程)。
· 下行接口的定义:在Monitor Link组内,每一个通过port downlink或port monitor-link group downlink命令指定的接口被视为一个下行接口。
· 上行接口与下行接口的联动方式:
¡ 当Monitor Link组中处于up状态的上行接口数量低于uplink up-port-threshold命令配置的阈值时,该Monitor Link组中所有下行接口的物理状态都被置为down。上行接口up/down的判断条件为:
- 通过port uplink或port monitor-link group uplink命令指定的接口:物理状态up视为上行接口up,物理状态down视为上行接口down。
- 通过monitor bgp命令指定的BGP进程:BGP实例存在且正常运行视为上行接口up,BGP实例删除且对应的进程退出视为上行接口down。
- 通过peer monitor-link group命令指定的BGP会话:BGP会话的状态为Established视为上行接口up,BGP会话的状态为其他视为上行接口down。
¡ 当Monitor Link组中处于up状态的上行接口数量大于或等于uplink up-port-threshold命令配置的阈值时,该Monitor Link组中所有下行接口的物理状态都被置为up。
如图1-8所示,以Device B为例,Monitor Link组配置为:将Device A与Device B之间的BGP会话作为Monitor Link组中的唯一上行接口,Device B连接Device D、Device E的接口作为Monitor Link组中的下行接口。当Device A和Device B之间的BGP会话断开时,Device B和Device D、Device E之间的接口物理状态也会down,从而不需要修改BGP相关的配置,Device B和Device D、Device E之间的BGP会话就能自动断开。Device A和Device B之间的BGP会话恢复Established状态时,Device B和Device D、Device E之间的接口物理状态也会恢复up,从而不需要修改BGP相关的配置,Device B和Device D、Device E之间的BGP会话就能自动恢复。
图1-8 BGP会话状态与Monitor Link下行接口联动示意图
有关Monitor Link的详细介绍,请参见“可靠性配置指导”中的“Monitor Link”。monitor bgp、monitor-link group、port和port monitor-link group命令的详细介绍,请参见“可靠性命令参考”中的“Monitor Link”。
为了避免BGP会话震荡导致下行链路频繁up/down,可以在Monitor Link组中配置downlink up-delay命令,使得下行接口延时回切为up状态。
downlink up-delay命令的详细介绍,请参见“可靠性命令参考”中的“Monitor Link”。
(1) 进入系统视图。
system-view
(2) 创建Monitor Link组,并进入Monitor Link组视图。
monitor-link group group-id
本命令的详细介绍,请参见“可靠性命令参考”中的“Monitor Link”。
(3) 配置Monitor Link组的下行接口,请选择其中一项进行配置。
¡ 在Monitor Link组视图下配置Monitor Link组的下行接口。
port interface-type { interface-number | interface-number.subnumber } downlink
¡ 请依次执行以下命令,在接口视图下配置Monitor Link组的下行接口。
quit
interface interface-type { interface-number | interface-number.subnumber }
port monitor-link group group-id downlink
缺省情况下,Monitor Link组中不存在成员接口。
本配置命令的详细介绍,请参见“可靠性命令参考”中的“Monitor Link”。
(4) (可选)配置触发Monitor Link组状态切换的上行接口阈值。
uplink up-port-threshold number-of-port
缺省情况下,触发Monitor Link组状态切换的上行接口阈值为1。
仅Monitor Link组视图支持本配置。
本命令的详细介绍,请参见“可靠性命令参考”中的“Monitor Link”。
(5) 返回系统视图。
quit
(6) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(7) 配置BGP会话状态与Monitor Link下行接口的联动。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } monitor-link group group-id
缺省情况下,BGP会话状态与Monitor Link下行接口未进行联动。
缺省情况下,从对等体接收到的BGP路由进行下一跳路由迭代时,优先在直连路由中查找依赖路由。仅未查找到匹配的直连路由时,才会在所有路由协议产生的路由中按照最长匹配方式进行查找。此机制可能会引发如下问题:设备的直连路由所在子网包含BGP路由的下一跳地址时,BGP路由会迭代下一跳至该直连路由,此时设备认为下一跳地址为本地直连,直接使用BGP路由表中的下一跳作为FIB表中的真实下一跳,导致匹配该BGP路由的报文转发失败,造成网络流量中断。
以图1-9为例,Device B与Device A和Device C分别建立IBGP会话,并作为路由反射器将Device C在BGP中发布的8.0.0.0/24路由发布给Device A。三台设备在创建BGP会话时均使用LoopBack接口作为建立TCP连接使用的源接口。Device A与Device B直连接口的IPv4地址所在网段为3.3.0.0/16。
在路由的下一跳属性未被改变的情况下,Device A上BGP路由8.0.0.0/24的下一跳为3.3.3.3。该BGP路由进行下一跳迭代时,由于查找到了包含下一跳3.3.3.3网段的直连路由3.3.0.0/16,Device A认为下一跳3.3.3.3为设备上的直连路由,将3.3.3.3直接作为FIB表中去往目的网段8.0.0.0/24的真实下一跳,导致去往8.0.0.0/24网段的三层流量转发失败。
图1-9 直连路由包含BGP路由的下一跳时路由迭代错误示意图
通过配置本功能,可以使从对等体接收到的BGP路由迭代下一跳时,直接在所有路由协议产生的路由中按照最长匹配方式查找依赖路由,以保证查找到的依赖路由可达。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置BGP路由进行下一跳路由迭代查找时采用最长匹配方式。
nexthop recursive-lookup longest-match [ route-policy route-policy-name ]
缺省情况下,未配置下一跳路由迭代查找时采用最长匹配方式。
未指定route-policy route-policy-name参数或该参数指定的路由策略不存在时,所有从对等体接收到的BGP路由进行下一跳路由迭代查找时都采用最长匹配方式。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置BGP路由进行下一跳路由迭代查找时采用最长匹配方式。
nexthop recursive-lookup longest-match [ route-policy route-policy-name ]
缺省情况下,未配置下一跳路由迭代查找时采用最长匹配方式。
未指定route-policy route-policy-name参数或该参数指定的路由策略不存在时,所有从对等体接收到的BGP路由进行下一跳路由迭代查找时都采用最长匹配方式。
如图1-10所示,Host设备频繁在无线站点AP 1和AP 2之间漫游,导致Device A和Device C上都存在Host设备主机路由。由于这些表项不会实时更新,因此可能影响数据报文的正常转发。配置本功能后,终端在不同AP间迁移时可以快速更新主机路由,从而使得主机迁移后能够快速上线。
在Device A和Device C上配置快速更新主机路由功能之后,Host在AP 1和AP 2之间的迁移过程如下:
(1) Host首次在AP 1处上线,Device A上生成对应的主机路由,并通过BGP路由经Device B通告给Device C。
(2) Host迁移至AP 2处上线,Device C上生成对应的主机路由,此时Device C上存在两条相同的主机路由,BGP优选本地新上线的主机路由,并将主机迁移序列号加一后通过BGP路由经Device B通告给Device A。
(3) Device B收到Device C发布的主机路由,至此Device B已分别从Device A和Device C收到两条相同的主机路由,优选迁移序列号更大的(从Device C收到的)路由,刷新转发表后向Device A通告。
(4) Device A从Device B收到Host的主机路由,探测本地ARP/ND表项是否存在,如果ARP/ND表项不存在,删除本地的ARP/ND表项,并删除本机直连路由,通告全网更新Host的主机路由;如果ARP/ND表项存在,则认为Host再次迁移到了本端,将以两条路由中主机迁移序列号较大的值为基础,加一后向邻居通告,重复上述迁移流程。
当Host迁移十分频繁时,各设备可能收到迁移序列号相同的主机路由,此时处理方式如下:
· 从邻居接收多条序列号相同的主机路由时(如图1-10中的Device B),BGP优选从Router ID较小的邻居收到的路由进行转发。
· 本地路由和从邻居收到的路由序列号相同时(如图1-10中的Device A与Device C),探测本地ARP/ND表项是否存在。
主机迁移序列号通过扩展团体属性进行传递。因此配置本功能后,设备将自动开启本地与所有对等体之间的支持扩展团体属性能力,即本地向所有对等体发送的路由中都允许携带扩展团体属性。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 开启主机迁移后的快速更新主机路由功能。
user-move fast-update [ detect ]
缺省情况下,快速更新主机路由功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 开启主机迁移后的快速更新主机路由功能
user-move fast-update [ detect ]
缺省情况下,快速更新主机路由功能处于关闭状态。
在接入层设备上,通常会保存大量从邻居收到的主机路由。缺省情况下,BGP从邻居收到主机路由后会生成FIB表项并下发到硬件。部分路由可能实际没有用于指导流量转发,但仍会占用设备的系统资源。配置本命令后,只有在报文转发过程中需要使用BGP路由表中的某条远端主机路由时,设备才会将其下发到硬件进行转发,以节省设备资源。
本功能仅对远端通过ARP/ND表项生成的主机路由生效,对本地主机路由和其他BGP路由不生效。本地通过ARP/ND表项生成的主机路由携带特殊标记,并通过扩展团体属性进行传递。因此配置本功能后,设备将自动开启本地与所有对等体之间的支持扩展团体属性能力,即本地向所有对等体发送的路由中都允许携带扩展团体属性。
使用本功能时必须同时配置ip forwarding-conversational-learning命令,否则本功能不能正常生效。
只有在本地存在能够包含主机路由的接口网段时,设备才能按需下发该主机路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 配置BGP远端主机路由按需下发功能。
forwarding-conversational-learning [ route-policy route-policy-name ]
缺省情况下,BGP远端主机路由按需下发功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置BGP远端主机路由按需下发功能。
forwarding-conversational-learning [ route-policy route-policy-name ]
缺省情况下,BGP远端主机路由按需下发功能处于关闭状态。
邻居地址不可达检测功能用来为BGP协议快速检测链路故障。配置本功能后,BGP会对指定对等体(或对等体组内所有对等体)的IP地址进行不可达检测。如果检测到IP地址不可达,则断开与该对等体的BGP会话,从而实现快速收敛。
以下两种情况下,BGP会认为对等体不可达:
· 在对应公网实例或VPN实例的路由表中,对等体的IP地址没有匹配的路由。
· 在对应公网实例或VPN实例的路由表中,对等体的IP地址匹配到的路由是出接口为NULL0的黑洞路由。
例如,在图1-11所示组网中,Device A、Device B和Device C之间建立了IGP邻居关系,Device A和Device C之间建立了BGP会话。Device A上开启了邻居地址不可达检测功能后,当Device A和Device B之间的链路发生故障时,IGP会快速进行收敛,导致Device A不再能够查找到去往Device C的IP路由,从而Device A可以快速断开与Device C的BGP会话,无需等待会话保持定时器超时。
配置本功能时如果未携带delay delay-time参数,则检测到IP地址不可达时,BGP会立刻断开与对等体的BGP会话。
根据实际情况,灵活配置断开会话的延迟时间,可以提高网络的稳定性:
· 网络中的流量闪断时,IGP路由将产生震荡。此时,依靠IGP路由建立的IBGP会话也会产生震荡。建议为IBGP对等体/对等体组配置的延迟时间大于IGP路由的收敛时间,以避免流量闪断造成的BGP会话震荡。
· 本地路由器作为BGP GR Helper,通过本命令检测GR Restarter的可达性时,为GR Restarter配置的延迟时间要大于GR Restarter通告的BGP会话重建时间加上GR Helper上配置的等待重建额外时间,否则会导致BGP会话断开,设备退出GR过程。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 对指定对等体/对等体组开启邻居地址不可达检测功能。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } tracking [ delay delay-time ]
缺省情况下,邻居地址不可达检测功能处于关闭状态。
执行本命令时,如果指定的IPv6地址是链路本地地址,则本命令不生效。
缺省情况下,通过显示命令查看BGP信息时,其中的4字节AS号显示为整数形式。4字节AS号的整数形式字符串较长。为了简化显示,配置本功能后,通过显示命令查看BGP信息时,其中的4字节AS号将显示为点分形式,更易于用户查看。
4字节AS号的点分形式为X.Y,与整数形式的4字节AS号的对应关系为:整数形式的4字节AS号=X×65536+Y,Y的取值范围为0~65535,点分形式AS号的取值范围为0.1~65535.65535。例如,点分形式的4字节AS号2.1,对应的整数形式为2×65536+1=131073。
配置本功能后,AS路径过滤列表将只能匹配点分形式的4字节AS号,无法再匹配整数形式的4字节AS号。此时,如果BGP、OSPF、IS-IS、RIP、OSPFv3和RIPng引用的路由过滤策略中设置了匹配整数形式AS号的AS过滤列表,则需要将AS路径过滤列表修改为匹配点分形式的AS号,以免BGP路由过滤策略失效,导致网络故障。
系统配置文件中的4字节AS号始终保持配置时的形式,不会受本功能的影响。
建议在配置本命令之前,先配置点分形式的AS路径过滤列表,以免路由过滤策略失效,导致网络故障。
(1) 进入系统视图。
system-view
(2) 配置采用点分形式显示4字节AS号。
as-notation dotted [ 4-octet-only ]
缺省情况下,设备采用整数形式显示4字节AS号。
设备需要进行版本升级时,如果新版本支持4字节AS号,为了增加配置易读性,可以执行as-notation convert asdot命令将设备生效配置中的所有大于65535的AS号转换为点分形式。
设备需要进行版本降级时,为了防止旧版本点分形式的AS号导致降级失败,可以执行as-notation convert asplain命令将设备生效配置中的所有AS号转换为整数形式。
as-notation convert命令为操作类命令,只对当前已存在的配置生效,后续新增的配置仍与输入配置命令时的AS号形式相同。可以通过重复执行as-notation convert命令多次转换生效配置中的AS号形式。
转换生效配置中的AS号形式后,建议保存当前配置。
(1) 进入系统视图。
system-view
(2) 将设备生效配置的AS号在整数形式与点分形式之间转换。
as-notation convert { asdot | asplain }
缺省情况下,设备生效配置中的AS号的形式与配置命令时输入的AS号形式相同。
IGP协议在引入外部路由时,可以为其添加Tag,该Tag可以用于路由策略等路由匹配手段。IGP协议和BGP协议进行路由引用后,即可以实现路由信息的跨域传播。如果想要跨域传播后,不同AS内的相同IGP路由通过Tag被应用同样的路由匹配手段,可以通过BGP传递原本IGP路由携带的Tag,以保障IGP路由的Tag信息不丢失。
H3C制定了一种新的私有扩展团体属性——Tag扩展团体属性,该扩展团体属性的含义与IGP路由携带的Tag相同,是为了传递IGP路由的Tag信息而设计。
配置peer advertise tag命令后,对于本地引入IGP路由形成的BGP路由,设备会为该BGP路由添加Tag扩展团体属性后发送给指定对等体/对等体组,Tag扩展团体属性的取值与import-route命令的配置有关。对于收到的BGP路由携带了Tag扩展团体属性,则设备在转发该BGP路由给指定对等体/对等体组时,可以保留Tag扩展团体属性。
如果未配置peer advertise tag命令或配置了undo peer advertise tag命令,则设备既无法为BGP路由主动添加Tag扩展团体属性后发布,也无法转发路由中的Tag扩展团体属性,而是会删除BGP路由中携带的Tag扩展团体属性后再转发。
如图1-12所示,Tag信息跨域传播的全流程为:
图1-12 Tag信息传递过程示意图
(1) 在Tag信息始发的自治域中,网络管理员将域内的IGP路由信息引用到BGP协议中,并继承Tag信息。需要注意的是,此时继承Tag信息可以通过两种方式:
¡ 执行import-route命令时指定inherit-tag参数。此方式直接继承原IGP路由携带的外部路由Tag值。
¡ 执行import-route命令时同时指定inherit-tag和route-policy route-policy-name参数,且指定的路由策略中配置了apply tag子句,则以route-policy route-policy-name参数指定的路由策略中配置的apply tag子句为准。
(2) 继承的Tag信息形成Tag扩展团体属性,通过BGP路由跨域传递给另一自治域。
(3) 网络管理员将携带Tag扩展团体属性的BGP路由引入到IGP协议中,生成的IGP路由携带的Tag值可以继承BGP路由的Tag扩展团体属性。需要注意的是,将BGP路由引入到IGP协议时,有多种方式可以设置路由的Tag,以下是各种方式的生效优先级:
a. 通过路由策略的apply tag子句设置的Tag。
b. 在IGP协议中执行import-route命令时,通过tag参数设置的Tag。
c. 从BGP路由的Tag扩展团体属性中继承的Tag。
d. 通过route-tag命令设置的Tag。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) (可选)配置Tag扩展团体属性的类型值。
extcommunity-type tag tag-type-value
缺省情况下,Tag扩展团体属性的类型值为十六进制数83cf。
(4) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(5) 将IGP路由协议的路由信息引入到BGP路由表中。
import-route { isis | ospf | rip } [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] [ inherit-tag ]
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(6) 配置向对等体/对等体组发送BGP路由时携带Tag扩展团体属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise tag
缺省情况下,设备向对等体/对等体组发送BGP路由时不携带Tag扩展团体属性。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) (可选)配置Tag扩展团体属性的类型值。
extcommunity-type tag tag-type-value
缺省情况下,Tag扩展团体属性的类型值为十六进制数83cf。
(4) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(5) 将IGP路由协议的路由信息引入到BGP路由表中。
import-route { isisv6 | ospfv3 | ripng } [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] [ inherit-tag ]
缺省情况下,BGP不会引入IGP路由协议的路由信息。
(6) 配置向对等体/对等体组发送BGP路由时携带Tag扩展团体属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise tag
缺省情况下,设备向对等体/对等体组发送BGP路由时不携带Tag扩展团体属性。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表1-2 调整和优化BGP网络配置显示(IPv4单播)
|
操作 |
命令 |
|
显示邻居收到的ORF消息中的前缀信息 |
display bgp [ instance instance-name ] peer ipv4 [ unicast ] [ vpn-instance vpn-instance-name ] ipv4-address received prefix-list display bgp [ instance instance-name ] peer ipv4 [ unicast ] ipv6-address [ interface interface-type interface-number ] received prefix-list |
|
显示对等体监控组的信息 |
display bgp [ instance instance-name ] monitor-group { all | group-name monitor-group-name } |
表1-3 调整和优化BGP网络配置显示(IPv6单播)
|
操作 |
命令 |
|
显示邻居收到的ORF消息中的前缀信息 |
display bgp [ instance instance-name ] peer ipv6 [ unicast ] [ vpn-instance vpn-instance-name ] ipv6-address received prefix-list display bgp [ instance instance-name ] peer ipv6 [ unicast ] [ vpn-instance vpn-instance-name ] { ipv4-address | [ link-local-address ] interface interface-type interface-number } received prefix-list |
|
显示对等体监控组的信息 |
display bgp [ instance instance-name ] monitor-group { all | group-name monitor-group-name } |
表1-4 调整和优化BGP网络配置显示(IPv4组播)
|
操作 |
命令 |
|
显示邻居收到的ORF消息中的前缀信息 |
display bgp [ instance instance-name ] peer ipv4 multicast ipv4-address received prefix-list |
|
显示对等体监控组的信息 |
display bgp [ instance instance-name ] monitor-group { all | group-name monitor-group-name } |
表1-5 调整和优化BGP网络配置显示(IPv6组播)
|
操作 |
命令 |
|
显示邻居收到的ORF消息中的前缀信息 |
display bgp [ instance instance-name ] peer ipv6 multicast ipv6-address received prefix-list |
|
显示对等体监控组的信息 |
display bgp [ instance instance-name ] monitor-group { all | group-name monitor-group-name } |
当BGP路由策略或协议发生变化后,如果需要通过复位BGP会话使新的配置生效,请在用户视图下进行下列配置。
复位BGP会话时,会造成短暂的BGP会话中断。
表1-6 复位BGP会话
|
操作 |
命令 |
|
复位IPv4单播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | all | external | group group-name | internal } ipv4 [ unicast ] [ vpn-instance vpn-instance-name ] reset bgp [ instance instance-name ] { ipv6-address [ prefix-length ] | interface interface-type interface-number } ipv4 [ unicast ] |
|
复位IPv4组播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | all | external | group group-name | internal } ipv4 multicast |
|
复位IPv6单播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv6-address [ prefix-length ] | [ link-local-address ] interface interface-type interface-number | all | external | group group-name | internal } ipv6 [ unicast ] [ vpn-instance vpn-instance-name ] reset bgp ipv4-address [ mask-length ] ipv6 [ unicast ] |
|
复位IPv6组播地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv6-address [ prefix-length ] | all | external | group group-name | internal } ipv6 multicast |
|
复位所有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-13 BGP负载分担配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] quit
[SwitchA] vlan 10 200 300
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface ten-gigabitethernet 1/0/3
[SwitchA-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/3] port trunk permit vlan 300
[SwitchA-Ten-GigabitEthernet1/0/3] quit
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 8.1.1.1 24
[SwitchA-Vlan-interface10] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ip address 3.1.1.2 24
[SwitchA-Vlan-interface200] quit
[SwitchA] interface vlan-interface 300
[SwitchA-Vlan-interface300] ip address 3.1.2.2 24
[SwitchA-Vlan-interface300] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] vlan 200 400
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 400
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 200
[SwitchB-Vlan-interface200] ip address 3.1.1.1 24
[SwitchB-Vlan-interface200] quit
[SwitchB] interface vlan-interface 400
[SwitchB-Vlan-interface400] ip address 9.1.1.1 24
[SwitchB-Vlan-interface400] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] vlan 300 400
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 300
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 400
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 300
[SwitchC-Vlan-interface300] ip address 3.1.2.1 24
[SwitchC-Vlan-interface300] quit
[SwitchC] interface vlan-interface 400
[SwitchC-Vlan-interface400] ip address 9.1.1.2 24
[SwitchC-Vlan-interface400] quit
(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] 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] 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] 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。
· Switch A
#
sysname SwitchA
#
vlan 10
#
vlan 200
#
vlan 300
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface10
ip address 8.1.1.1 255.255.255.0
#
interface Vlan-interface200
ip address 3.1.1.2 255.255.255.0
#
interface Vlan-interface300
ip address 3.1.2.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 300
#
bgp 65008
router-id 1.1.1.1
peer 3.1.1.1 as-number 65009
peer 3.1.2.1 as-number 65009
#
address-family ipv4 unicast
balance 2
network 8.1.1.0 255.255.255.0
peer 3.1.1.1 enable
peer 3.1.2.1 enable
#
return
· Switch B
#
sysname SwitchB
#
vlan 200
#
vlan 400
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface200
ip address 3.1.1.1 255.255.255.0
#
interface Vlan-interface400
ip address 9.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 400
#
bgp 65009
router-id 2.2.2.2
peer 3.1.1.2 as-number 65008
peer 3.3.3.3 as-number 65009
peer 3.3.3.3 connect-interface LoopBack0
#
address-family ipv4 unicast
network 9.1.1.0 255.255.255.0
peer 3.1.1.2 enable
peer 3.3.3.3 enable
#
ip route-static 3.3.3.3 32 9.1.1.2
#
return
· Switch C
#
sysname SwitchC
#
vlan 300
#
vlan 400
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface300
ip address 3.1.2.1 255.255.255.0
#
interface Vlan-interface400
ip address 9.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 300
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 400
#
bgp 65009
router-id 3.3.3.3
peer 2.2.2.2 as-number 65009
peer 2.2.2.2 connect-interface LoopBack0
peer 3.1.2.2 as-number 65008
#
address-family ipv4 unicast
network 9.1.1.0 255.255.255.0
peer 2.2.2.2 enable
peer 3.1.2.2 enable
#
ip route-static 2.2.2.2 32 9.1.1.1
#
return
所有路由器运行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-14 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地址。
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 100 200
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 10.1.1.1 24
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ip address 20.1.1.1 24
[SwitchA-Vlan-interface200] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 100 300
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 300
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 10.1.1.2 24
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 300
[SwitchB-Vlan-interface300] ip address 30.1.1.2 24
[SwitchB-Vlan-interface300] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] vlan 200 400
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 400
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 200
[SwitchC-Vlan-interface200] ip address 20.1.1.2 24
[SwitchC-Vlan-interface200] quit
[SwitchC] interface vlan-interface 400
[SwitchC-Vlan-interface400] ip address 40.1.1.2 24
[SwitchC-Vlan-interface400] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] vlan 300 400 500
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 300
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 400
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface ten-gigabitethernet 1/0/3
[SwitchD-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/3] port trunk permit vlan 500
[SwitchD-Ten-GigabitEthernet1/0/3] quit
[SwitchD] interface vlan-interface 300
[SwitchD-Vlan-interface300] ip address 30.1.1.1 24
[SwitchD-Vlan-interface300] quit
[SwitchD] interface vlan-interface 400
[SwitchD-Vlan-interface400] ip address 40.1.1.1 24
[SwitchD-Vlan-interface400] quit
[SwitchD] interface vlan-interface 500
[SwitchD-Vlan-interface500] ip address 50.1.1.1 24
[SwitchD-Vlan-interface500] quit
# 配置Switch E。
<Sysname> system-view
[Sysname] sysname SwitchE
[SwitchE] vlan 500
[SwitchE-vlan500] quit
[SwitchE] interface ten-gigabitethernet 1/0/1
[SwitchE-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/1] port trunk permit vlan 500
[SwitchE-Ten-GigabitEthernet1/0/1] quit
[SwitchE] interface vlan-interface 500
[SwitchE-Vlan-interface500] ip address 50.1.1.2 24
[SwitchE-Vlan-interface500] quit
(2) 配置BGP连接
# 配置Switch A。
[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] 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] 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] 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] 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 30.1.1.2 reflect-client
[SwitchD-bgp-default-ipv4] peer 40.1.1.2 reflect-client
[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路由信息。
[SwitchE] 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学到的两条前缀相同下一跳不同的路由信息。
· Switch A
#
sysname SwitchA
#
vlan 100
#
vlan 200
#
interface Vlan-interface100
ip address 10.1.1.1 255.255.255.0
#
interface Vlan-interface200
ip address 20.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
bgp 10
peer 10.1.1.2 as-number 20
peer 20.1.1.2 as-number 20
#
address-family ipv4 unicast
network 10.1.1.0 255.255.255.0
peer 10.1.1.2 enable
peer 20.1.1.2 enable
#
return
· Switch B
#
sysname SwitchB
#
vlan 100
#
vlan 300
#
interface Vlan-interface100
ip address 10.1.1.2 255.255.255.0
#
interface Vlan-interface300
ip address 30.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 300
#
bgp 20
peer 10.1.1.1 as-number 10
peer 30.1.1.1 as-number 20
#
address-family ipv4 unicast
peer 10.1.1.1 enable
peer 30.1.1.1 enable
peer 30.1.1.1 next-hop-local
#
return
· Switch C
#
sysname SwitchC
#
vlan 200
#
vlan 400
#
interface Vlan-interface200
ip address 20.1.1.2 255.255.255.0
#
interface Vlan-interface400
ip address 40.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 400
#
bgp 20
peer 20.1.1.1 as-number 10
peer 40.1.1.1 as-number 20
#
address-family ipv4 unicast
peer 20.1.1.1 enable
peer 40.1.1.1 enable
peer 40.1.1.1 next-hop-local
#
return
· Switch D
#
sysname SwitchD
#
vlan 300
#
vlan 400
#
vlan 500
#
interface Vlan-interface300
ip address 30.1.1.1 255.255.255.0
#
interface Vlan-interface400
ip address 40.1.1.1 255.255.255.0
#
interface Vlan-interface500
ip address 50.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 300
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 400
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 500
#
bgp 20
peer 30.1.1.2 as-number 20
peer 40.1.1.2 as-number 20
peer 50.1.1.2 as-number 20
#
address-family ipv4 unicast
additional-paths select-best 2
peer 30.1.1.2 enable
peer 30.1.1.2 reflect-client
peer 40.1.1.2 enable
peer 40.1.1.2 reflect-client
peer 50.1.1.2 enable
peer 50.1.1.2 reflect-client
peer 50.1.1.2 additional-paths send
peer 50.1.1.2 advertise additional-paths best 2
#
return
· Switch E
#
sysname SwitchE
#
vlan 500
#
interface Vlan-interface500
ip address 50.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 500
#
bgp 20
peer 50.1.1.1 as-number 20
#
address-family ipv4 unicast
peer 50.1.1.1 enable
peer 50.1.1.1 additional-paths receive
#
return
AS 100和AS 200可以交互BGP路由,但要求对发布的路由进行策略过滤,以保护网络安全、优化网络性能。由于Switch A需要的路由在不断变化,现通过部署基于路由前缀的BGP ORF功能,以实现Switch C向Switch A仅发送符合Switch A路由接收策略的路由。
图1-15 基于前缀的BGP ORF配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] quit
[SwitchA] vlan 10 20
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 20
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 10.2.1.1 24
[SwitchA-Vlan-interface10] quit
[SwitchA] interface vlan-interface 20
[SwitchA-Vlan-interface20] ip address 10.1.1.1 24
[SwitchA-Vlan-interface20] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] vlan 10
[SwitchB-vlan10] quit
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface vlan-interface 10
[SwitchB-Vlan-interface10] ip address 10.2.1.2 24
[SwitchB-Vlan-interface10] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] vlan 20 30 40
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 20
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 30
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface ten-gigabitethernet 1/0/3
[SwitchC-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/3] port trunk permit vlan 40
[SwitchC-Ten-GigabitEthernet1/0/3] quit
[SwitchC] interface vlan-interface 20
[SwitchC-Vlan-interface20] ip address 10.1.1.2 24
[SwitchC-Vlan-interface20] quit
[SwitchC] interface vlan-interface 30
[SwitchC-Vlan-interface30] ip address 10.4.1.2 24
[SwitchC-Vlan-interface30] quit
[SwitchC] interface vlan-interface 40
[SwitchC-Vlan-interface40] ip address 10.5.1.2 24
[SwitchC-Vlan-interface40] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] interface loopback 0
[SwitchD-LoopBack0] ip address 4.4.4.4 32
[SwitchD-LoopBack0] quit
[SwitchD] vlan 30
[SwitchD-vlan30] quit
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 30
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface vlan-interface 30
[SwitchD-Vlan-interface30] ip address 10.4.1.1 24
[SwitchD-Vlan-interface30] quit
# 配置Switch E。
<Sysname> system-view
[Sysname] sysname SwitchE
[SwitchE] interface loopback 0
[SwitchE-LoopBack0] ip address 5.5.5.5 32
[SwitchE-LoopBack0] quit
[SwitchE] vlan 40
[SwitchE-vlan40] quit
[SwitchE] interface ten-gigabitethernet 1/0/1
[SwitchE-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/1] port trunk permit vlan 40
[SwitchE-Ten-GigabitEthernet1/0/1] quit
[SwitchE] interface vlan-interface 40
[SwitchE-Vlan-interface40] ip address 10.5.1.1 24
[SwitchE-Vlan-interface40] quit
(2) 配置BGP连接
¡ Switch A与Switch B建立IBGP连接,Switch A和Switch C建立EBGP连接。
¡ Switch C和Switch D、Switch C和Switch E均建立IBGP连接。
# 配置Switch A。
[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 10.2.1.2 as-number 100
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 enable
[SwitchA-bgp-default-ipv4] peer 10.2.1.2 enable
[SwitchA-bgp-default-ipv4] import-route direct
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 100
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 10.2.1.1 as-number 100
[SwitchB-bgp-default] address-family ipv4 unicast
[SwitchB-bgp-default-ipv4] peer 10.2.1.1 enable
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 10.1.1.1 as-number 100
[SwitchC-bgp-default] peer 10.4.1.1 as-number 200
[SwitchC-bgp-default] peer 10.5.1.1 as-number 200
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 10.1.1.1 enable
[SwitchC-bgp-default-ipv4] peer 10.4.1.1 enable
[SwitchC-bgp-default-ipv4] peer 10.5.1.1 enable
[SwitchC-bgp-default-ipv4] import-route direct
[SwitchC-bgp-default-ipv4] quit
[SwitchC-bgp-default] quit
# 配置Switch D。
[SwitchD] bgp 200
[SwitchD-bgp-default] router-id 4.4.4.4
[SwitchD-bgp-default] peer 10.4.1.2 as-number 200
[SwitchD-bgp-default] address-family ipv4 unicast
[SwitchD-bgp-default-ipv4] peer 10.4.1.2 enable
[SwitchD-bgp-default-ipv4] quit
[SwitchD-bgp-default] quit
# 配置Switch E。
[SwitchE] bgp 200
[SwitchE-bgp-default] router-id 5.5.5.5
[SwitchE-bgp-default] peer 10.5.1.2 as-number 200
[SwitchE-bgp-default] address-family ipv4 unicast
[SwitchE-bgp-default-ipv4] peer 10.5.1.2 enable
[SwitchE-bgp-default-ipv4] quit
[SwitchE-bgp-default] quit
(3) 在Switch A上配置基于地址前缀列表的BGP路由接收策略
# 配置Switch A。
[SwitchA] ip prefix-list policy1 permit 10.4.1.0 24 less-equal 32
[SwitchA] bgp 100
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 prefix-list policy1 import
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 在Switch C上查看向Switch A发布的路由信息。
[SwitchC] display bgp routing-table ipv4 unicast peer 10.1.1.1 advertised-routes
Total number of routes: 4
BGP local router ID is 3.3.3.3
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 Path/Ogn
* > 3.3.3.3/32 127.0.0.1 0 200?
* > 10.1.1.0/24 10.1.1.2 0 200?
* > 10.4.1.0/24 10.4.1.2 0 200?
* > 10.5.1.0/24 10.5.1.2 0 200?
# 在Switch A上查看从Switch C接收的路由信息。
[SwitchA] display bgp routing-table ipv4 unicast peer 10.1.1.2 received-routes
Total number of routes: 1
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
* >e 10.4.1.0/24 10.1.1.2 0 0 ?
可以看到,Switch C发布了4条路由,而Switch A基于地址前缀列表的BGP路由接收策略,仅接收了1条路由。
(4) 配置基于前缀的BGP ORF功能。
# 在Switch A上,开启与Switch C协商基于前缀的ORF的能力。
[SwitchA] bgp 100
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 capability-advertise orf prefix-list both
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 在Switch C上,开启与Switch A协商基于前缀的ORF的能力。
[SwitchC] bgp 200
[SwitchC-bgp-default] address-family ipv4 unicast
[SwitchC-bgp-default-ipv4] peer 10.1.1.1 capability-advertise orf prefix-list both
[SwitchC-bgp-default-ipv4] quit
[SwitchC-bgp-default] quit
# 在Switch C上,查看从Switch A收到的ORF消息中的前缀信息。
[SwitchC] display bgp peer ipv4 10.1.1.1 received prefix-list
ORF prefix list entries: 1
ge: greater-equal le: less-equal
Index Rule Prefix Ge Le
10 permit 10.4.1.0/24 0 32
# 在Switch C上,查看向Switch A发布的路由信息。
[SwitchC] display bgp routing-table ipv4 unicast peer 10.1.1.1 advertised-routes
Total number of routes: 1
BGP local router ID is 3.3.3.3
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 Path/Ogn
* > 10.4.1.0/24 10.4.1.2 0 200?
可以看到,配置了基于前缀的BGP ORF能力后,Switch C按照Switch A的接收策略仅向Switch A发布了1条路由。
· Switch A
#
sysname SwitchA
#
vlan 10
#
vlan 20
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface10
ip address 10.2.1.1 255.255.255.0
#
interface Vlan-interface20
ip address 10.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 20
#
bgp 100
router-id 1.1.1.1
peer 10.1.1.2 as-number 200
peer 10.2.1.2 as-number 100
#
address-family ipv4 unicast
import-route direct
peer 10.1.1.2 enable
peer 10.1.1.2 prefix-list policy1 import
peer 10.1.1.2 capability-advertise orf prefix-list both
peer 10.2.1.2 enable
#
ip prefix-list policy1 index 10 permit 10.4.1.0 24 less-equal 32
#
return
· Switch B
#
sysname SwitchB
#
vlan 10
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface10
ip address 10.2.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
bgp 100
router-id 2.2.2.2
peer 10.2.1.1 as-number 100
#
address-family ipv4 unicast
peer 10.2.1.1 enable
#
return
· Switch C
#
sysname SwitchC
#
vlan 20
#
vlan 30
#
vlan 40
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface20
ip address 10.1.1.2 255.255.255.0
#
interface Vlan-interface30
ip address 10.4.1.2 255.255.255.0
#
interface Vlan-interface40
ip address 10.5.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 20
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 30
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 40
#
bgp 200
router-id 3.3.3.3
peer 10.1.1.1 as-number 100
peer 10.4.1.1 as-number 200
peer 10.5.1.1 as-number 200
#
address-family ipv4 unicast
import-route direct
peer 10.1.1.1 enable
peer 10.1.1.1 capability-advertise orf prefix-list both
peer 10.4.1.1 enable
peer 10.5.1.1 enable
#
return
· Switch D
#
sysname SwitchD
#
vlan 30
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
interface Vlan-interface30
ip address 10.4.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 30
#
bgp 200
router-id 4.4.4.4
peer 10.4.1.2 as-number 200
#
address-family ipv4 unicast
peer 10.4.1.2 enable
#
return
· Switch E
#
sysname SwitchE
#
vlan 40
#
interface LoopBack0
ip address 5.5.5.5 255.255.255.255
#
interface Vlan-interface40
ip address 10.5.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 40
#
bgp 200
router-id 5.5.5.5
peer 10.5.1.2 as-number 200
#
address-family ipv4 unicast
peer 10.5.1.2 enable
#
return
BGP安全功能配置任务如下:
通过为BGP对等体配置BGP的MD5认证,可以在以下两方面提高BGP的安全性:
· 为BGP建立TCP连接时进行MD5认证,只有两台路由器配置的密钥相同时,才能建立TCP连接,从而避免与非法的BGP路由器建立TCP连接。
· 传递BGP报文时,对封装BGP报文的TCP报文段进行MD5运算,从而保证BGP报文不会被篡改。
如果通过enhanced-security mode enable命令配置了强安全模式,则不能通过本配置为BGP配置MD5认证,因为MD5认证使用的算法属于弱安全算法。推荐配置peer keychain命令来为BGP连接加密,并且推荐引用的Keychain使用HMAC-SHA-256认证算法。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BGP的MD5认证。
peer { group-name | ipv4-address [ mask-length ] } password { cipher | simple } password
缺省情况下,不进行BGP的MD5认证。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BGP的MD5认证。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } password { cipher | simple } password
interface-peer interface-type interface-number password { cipher | simple } password
缺省情况下,不进行BGP的MD5认证。
GTSM(Generalized TTL Security Mechanism,通用TTL安全保护机制)是一种简单易行的、对基于IP协议的上层业务进行保护的安全机制。GTSM通过检查接收到的IP报文头中的TTL值是否在一个预先定义好的范围内,来判断IP报文是否合法,避免攻击者向网络设备发送大量有效的IP报文时对网络设备造成的CPU利用(CPU-utilization)等类型的攻击。
配置BGP GTSM功能时,用户可以指定本地设备到达某个对等体的最大跳数为hop-count,则从该对等体接收到的BGP报文的合法TTL范围为255-“hop-count”+1到255。只有来自该对等体的报文TTL值在该合法范围内时,才将报文上送CPU处理;否则,直接丢弃报文。另外,配置BGP GTSM功能后,设备会将发送报文的初始TTL设置为255。
对于直连EBGP对等体,GTSM可以提供最佳的保护效果;对于非直连EBGP或IBGP对等体,由于中间设备可能对TTL值进行篡改,GTSM的保护效果受到中间设备安全性的限制。
执行本配置后,只要本地设备和指定的对等体通过了GTSM检查,就允许在二者之间建立EBGP会话,不管二者之间的跳数是否超过peer ebgp-max-hop命令指定的跳数范围。
使用BGP GTSM功能时,要求本设备和对等体设备上同时配置本特性,指定的hop-count值可以不同,只要能够满足合法性检查即可。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 使能对等体/对等体组的BGP GTSM功能。
peer { group-name | ipv4-address [ mask-length ] } ttl-security hops hop-count
缺省情况下,BGP GTSM功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 使能对等体/对等体组的BGP GTSM功能。
peer { group-name | ipv6-address [ prefix-length ] } ttl-security hops hop-count
缺省情况下,BGP GTSM功能处于关闭状态。
配置keychain认证可以提高TCP连接的安全性。为了保证正常建立TCP连接、正常交互BGP消息,BGP对等体两端必须同时配置keychain认证,且两端使用的keychain需要满足如下条件:
· 同一时间内使用的key的标识符要相同。
· 相同标识符的key的认证算法和认证密钥必须一致。
关于keychain的介绍和配置,请参见“安全配置指导”中的“keychain”。
对于keychain认证算法和key的标识符的范围,BGP的支持情况如下:
· BGP支持HMAC-MD5、MD5、HMAC-SM3、SM3和HMAC-SHA-256认证算法,通过authentication-algorithm命令进行配置。
· BGP支持HMAC-MD5、MD5和HMAC-SHA-256认证算法,通过authentication-algorithm命令进行配置。
· BGP仅支持标识符取值范围为0~63的key,通过key命令进行配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BGP的keychain认证。
peer { group-name | ipv4-address [ mask-length ] } keychain keychain-name
缺省情况下,不进行BGP的keychain认证。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BGP的keychain认证。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } keychain keychain-name
interface-peer interface-type interface-number keychain keychain-name
缺省情况下,不进行BGP的keychain认证。
为了避免路由信息外泄或者非法者对设备进行恶意攻击,可以利用IPsec安全隧道对IPv6 BGP报文进行保护。通过IPsec提供的数据机密性、完整性、数据源认证等功能,确保IPv6 BGP报文不会被侦听或恶意篡改,并避免非法者构造IPv6 BGP报文对设备进行攻击。
在互为IPv6 BGP邻居的两台设备上都配置通过IPsec保护IPv6 BGP报文后,一端设备在发送IPv6 BGP报文时通过IPsec对报文进行加封装,另一端设备接收到报文后,通过IPsec对报文进行解封装。如果解封装成功,则接收该报文,正常建立IPv6 BGP对等体关系或学习IPv6 BGP路由;如果设备接收到不受IPsec保护的IPv6 BGP报文,或IPv6 BGP报文解封装失败,则会丢弃该报文。
(1) 进入系统视图。
system-view
(2) 配置IPsec安全提议和手工方式的IPsec安全框架。
配置方法请参见“安全配置指导”中的“IPsec”。
(3) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(4) 为IPv6 BGP对等体/对等体组应用IPsec安全框架。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ipsec-profile profile-name
interface-peer interface-type interface-number ipsec-profile profile-name
缺省情况下,IPv6 BGP对等体/对等体组没有应用IPsec安全框架。
应用的安全框架必须是手工方式的IPsec安全框架。
BGP路由中的AS_PATH属性记录了某条路由从本地到某个IP地址(网段)所要经过的所有AS号。其中,该IP地址(网段)所处的AS称为源AS。如果源AS号错误会导致无法到达指定IP地址(网段)甚至网络瘫痪。使用BGP RPKI(Resource Public Key Infrastructure,资源公钥基础设施)功能,设备在收到BGP路由的时候,会验证源AS是否合法,并根据验证结果来决定是否使用该BGP路由以及是否发布该路由。
BGP RPKI功能可以用于解决流量被窃取问题。例如,运营商向用户发布了前缀为192.168.0.0/16的合法路由,网络攻击者向用户发布了前缀为192.168.10.0/24的路由,由于攻击者发布的路由更详细,导致用户在发送流量时,会优先匹配攻击者发布的路由,将流量发往攻击者。
ROA(Route Origin Authorization,路由源认证)是一种数字证书,将路由前缀与源AS号进行绑定,从而能够通过路由的源AS号验证该路由是否合法。
例如,在图2-1所示的组网中,Device A与RPKI服务器建立连接,RPKI服务器从RPKI数据库下载ROA信息,并且将自身获得的ROA发送给Device A,Device A将收到的ROA信息保存在本地的ROA数据库中。收到路由后,Device A查找本地ROA数据库,查找是否存在与路由前缀相同的ROA,如果存在,则比较路由的源AS是否与ROA数据库中的一致,如果一致,则路由为有效路由,如果不一致,则为无效路由。因此,Device A判断来自Device B的路由10.1.1.0/24合法,是有效路由,来自Device C的路由10.1.1.0/24为无效路由。
图2-1 ROA验证过程示意图
如果设备同时与多台RPKI服务器建立了连接,则所有RPKI服务器发送给设备的ROA均可以生效,且这些ROA取并集生效,即设备收到的路由匹配任意ROA信息即认为有效。
路由器通过TCP协议与RPKI服务器建立连接。TCP连接建立后,路由器从RPKI服务器获取ROA信息。
路由器会根据刷新时间间隔检测与RPKI服务器的连接关系,如果在响应时间内没有收到服务器的回应,路由器与RPKI服务器的连接断开。
与RPKI服务器的连接断开后(不包括用户执行shutdown命令关闭接口引起的连接断开),路由器会尝试与RPKI服务器重新建立连接,并将从该服务器获得的ROA信息置为老化状态,路由器将执行如下操作:
· 如果老化时间内,路由器重新与RPKI服务器建立连接,则解除ROA信息的老化状态。
· 如果直到老化时间超时,路由器与RPKI服务器仍然无法重新建立连接,则删除该ROA信息。
ROA信息的老化时间建议大于BGP RPKI服务器的响应等待时间。
RPKI连接建立后,会一直处于通信状态,并周期更新ROA信息。如果需要暂时断开某个RPKI连接,请在BGP RPKI服务器视图下执行undo port命令。
执行undo rpki命令后,BGP RPKI视图下的所有配置都会被删除。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP RPKI功能,并进入BGP RPKI视图。
rpki
(4) 配置BGP RPKI服务器地址,并进入BGP RPKI服务器视图。
server [ vpn-instance vpn-instance-name ] tcp { ipv4-address | ipv6-address }
缺省情况下,未配置BGP RPKI的服务器地址。
(5) 配置BGP RPKI服务端口号。
port port-number
缺省情况下,未配置BGP RPKI服务端口。
只有配置与BGP RPKI服务器连接的TCP端口,才能与RPKI服务器建立连接,且本地配置的端口号必须与BGP RPKI服务器上使用的端口号保持一致。
(6) (可选)指定RPKI连接中使用的MD5认证密码。
passwords { cipher | simple } string
缺省情况下,BGP RPKI服务器不进行MD5的认证。
使用MD5认证时,认证密码必须与RPKI服务器上的认证密码保持一致。MD5认证既可以确保路由器与合法的BGP RPKI服务器建立连接,也可以确保BGP RPKI报文不会被篡改。
(7) (可选)配置RPKI连接的检测周期。
refresh-time refresh-time
缺省情况下,RPKI连接的检测周期为600秒。
本功能用于检测路由器与RPKI服务器的连接状态。
(8) (可选)配置等待BGP RPKI服务器的响应时间。
response-time response-time
缺省情况下,等待BGP RPKI服务器响应时间为30秒。
(9) (可选)配置ROA信息的老化时间。
purge-time purge-time
缺省情况下,ROA信息的老化时间为60秒。
(10) (可选)设置允许从指定RPKI服务器收到的ROA数量。
rpki-limit limit [ alert-only | discard | reconnect reconnect-time ]
缺省情况下,不限制从RPKI服务器接收的ROA数量。
配置本功能后,设备收到BGP路由时,会对IP地址(网段)和源AS号进行RPKI验证。验证结果有三种:Not-found、Valid和Invalid。同时满足以下三个条件则验证结果为Valid,不满足条件(1)则验证结果为Not-found,满足条件(1)但不满足条件(2)或(3)则验证结果为Invalid。
(1) ROA数据库中至少存在一条包含该BGP路由前缀的表项。
(2) 该BGP路由前缀的掩码长度小于或等于ROA数据库中所有表项的最大掩码长度。
(3) ROA数据库表项中的AS号和收到的路由的源AS号相同。
配置本功能后,设备将使用本地验证的结果作为RPKI验证结果;未配置本功能时,将使用BGP路由报文中的RPKI验证结果。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP RPKI视图。
rpki
(4) 开启BGP RPKI验证功能。
check-origin-validation
缺省情况下,BGP RPKI验证功能处于关闭状态。
RPKI验证结果的优先级从高到低依次为Valid、Not found、Invalid。
配置本功能后,RPKI验证结果将参与路由优选。BGP选择路由时首先丢弃下一跳不可达的路由,其次按照RPKI验证结果进行路由优选,即对于去往同一个IP地址(网段)的多条BGP路由,选择RPKI验证结果优先级最高的路由为最优路由。如果RPKI验证结果相同,则根据BGP选路规则选择路由。
无RPKI验证结果的路由在与有验证结果的路由共同参与路由优选时,按Not-found验证结果处理。
用户可以使用路由策略设置BGP RPKI验证结果的匹配条件,从而灵活控制路由的发布与接收。关于路由策略的详细介绍,请参见“三层技术-IP路由配置指导”中的“路由策略”。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置BGP RPKI验证结果参与路由优选。
bestroute origin-as-validation [ allow-invalid ]
缺省情况下,BGP RPKI验证结果不参与路由优选。
未配置allow-invalid参数时,验证结果为Invalid的路由不参与路由优选。如果希望验证结果为Invalid的路由参与路由优选,可以配置allow-invalid参数。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置BGP RPKI验证结果参与路由优选。
bestroute origin-as-validation [ allow-invalid ]
缺省情况下,BGP RPKI验证结果不参与路由优选。
未配置allow-invalid参数时,验证结果为Invalid的路由不参与路由优选。如果希望验证结果为Invalid的路由参与路由优选,可以配置allow-invalid参数。
BGP RPKI验证结果以扩展团体属性的方式传递,配置本条命令前必先配置向对等体/对等体组发布扩展团体属性且RPKI正确配置。未配置向对等体/对等体组发布扩展团体属性,此配置不生效。
目前,设备仅支持向IBGP对等体/对等体组发送BGP RPKI验证结果。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv4 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv4单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(3) 配置向对等体/对等体组发布扩展团体属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise-ext-community
缺省情况下,不向对等体/对等体组发布扩展团体属性。
(4) 配置向对等体/对等体组发送BGP RPKI验证结果。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } advertise origin-as-validation
interface-peer interface-type interface-number advertise origin-as-validation
缺省情况下,不会向对等体/对等体组发送BGP RPKI验证结果。
(1) 进入系统视图。
system-view
(2) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
¡ 请依次执行以下命令进入BGP IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
address-family ipv6 [ unicast ]
¡ 请依次执行以下命令进入BGP-VPN IPv6单播地址族视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
address-family ipv6 [ unicast ]
(3) 配置向对等体/对等体组发布扩展团体属性。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } advertise-ext-community
缺省情况下,不向对等体/对等体组发布扩展团体属性。
(4) 配置向对等体/对等体组发送BGP RPKI验证结果。请选择其中一项进行配置。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } advertise origin-as-validation
interface-peer interface-type interface-number advertise origin-as-validation
缺省情况下,不会向对等体/对等体组发送BGP RPKI验证结果。
在用户视图下执行以下命令复位BGP RPKI连接。
reset bgp [ instance instance-name ] rpki server [ vpn-instance vpn-instance-name ] tcp { ipv4 address | ipv6 address }
配置本命令后,设备将删除并重新建立指定的BGP RPKI会话,会造成BGP RPKI会话短暂中断。
SSL(Secure Socket Layer,安全套接字层)协议是一种保证通信私密性的安全协议。BGP对等体之间可以通过SSL协议建立安全连接,为BGP通信提供数据加密、身份验证以及消息完整性验证功能。
SSL的详细介绍,请参见“安全配置指导”中的“SSL”。
本端作为SSL服务器时,需要配置ssl-policy role命令指定本端的SSL角色为SSL服务器,配置peer ssl-server certificate命令开启SSL证书验证功能,并配置peer ssl-policy name命令指定本端应用的SSL服务器端策略,本端的SSL服务器功能才能生效,否则只能通过非SSL方式建立BGP邻居。
本端作为SSL客户端时,需要配置ssl-policy role命令指定本端的SSL角色为SSL客户端,并配置peer ssl-policy name命令指定本端应用的SSL客户端策略,本端的SSL客户端功能才能生效,否则只能通过非SSL方式建立BGP邻居。
指定动态邻居配置peer ssl-policy role命令时,只能将本端SSL角色设置为SSL服务器。
如果对等体属于某个对等体组,且本端针对该对等体及其所属的对等体组均执行了本配置,则本端以为对等体执行的配置为准。
在本功能引用的SSL策略中,必须验证对方的数字证书,否则SSL安全连接无法成功建立。数字证书可以在线申请、离线申请或本地导入,具体操作方法请参见“安全配置指导”中的“SSL”或“PKI”。
目前SSL模块不支持NSR功能,如果已经基于SSL安全连接建立了BGP会话,则此会话不支持BGP NSR功能。在发生主备倒换时,BGP会话将断开并需要重新建立连接。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) (可选)在与指定对等体/对等体组建立的SSL安全连接中开启服务器端的证书验证功能。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ssl-server certificate
interface-peer interface-type interface-number ssl-server certificate
缺省情况下,未开启SSL服务器端的证书验证功能。
本命令仅在本端作为SSL服务器时生效。本端作为SSL客户端时,本命令不生效。
(4) 配置与指定将对等体/对等体建立SSL安全连接时,本端的SSL角色。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ssl-policy role server
peer { group-name | ipv4-address | ipv6-address | link-local-address interface interface-type interface-number } ssl-policy role { client | server }
interface-peer interface-type interface-number ssl-policy role { client | server }
缺省情况下,未指定与对等体建立SSL安全连接时,本端的SSL角色。
(5) 配置与指定对等体/对等体组建立SSL安全连接时,本端应用的SSL服务器端策略或客户端策略。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } ssl-policy name ssl-policy-name
interface-peer interface-type interface-number ssl-policy name ssl-policy-name
缺省情况下,未配置本端应用的SSL服务器端策略或客户端策略。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表2-1 BGP安全功能配置显示(IPv4单播)
|
操作 |
命令 |
|
显示与RPKI服务器连接的相关信息 |
display bgp [ instance instance-name ] rpki server [ [ vpn-instance vpn-instance-name ] ipv4-address ] |
|
显示从RPKI服务器获得的ROA信息 |
display bgp [ instance instance-name ] rpki table ipv4 [ ipv4-address min min-length max max-length ] |
表2-2 BGP安全功能配置显示(IPv6单播)
|
操作 |
命令 |
|
显示与RPKI服务器连接的相关信息 |
display bgp [ instance instance-name ] rpki server [ [ vpn-instance vpn-instance-name ] ipv6-address ] |
|
显示从RPKI服务器获得的ROA信息 |
display bgp [ instance instance-name ] rpki table ipv6 [ ipv6-address min min-length max max-length |
· 所有路由器运行BGP协议,Switch A与RPKI服务器建立连接。Switch A与Switch B建立IBGP连接。
· Switch A将BGP RPKI验证结果发送给Switch B。
· 配置路由策略,使得Switch B对收到的BGP RPKI验证结果设置匹配条件,控制路由的接收。
图2-2 BGP RPKI配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 11 12
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ip address 1.1.1.1 24
[SwitchA-Vlan-interface11] quit
[SwitchA] interface vlan-interface 12
[SwitchA-Vlan-interface12] ip address 1.2.3.1 24
[SwitchA-Vlan-interface12] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 12
[SwitchB-vlan12] quit
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 12
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface vlan-interface 12
[SwitchB-Vlan-interface12] ip address 1.2.3.2 24
[SwitchB-Vlan-interface12] quit
(2) 在Switch A和Switch B上配置BGP,建立IBGP邻居
# 配置Switch A。
[SwitchA] bgp 100
[SwitchA-bgp-default] peer 1.2.3.2 as-number 100
[SwitchA-bgp-default] address-family ipv4
[SwitchA-bgp-default-ipv4] peer 1.2.3.2 enable
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 100
[SwitchB-bgp-default] peer 1.2.3.1 as-number 100
[SwitchB-bgp-default] address-family ipv4
[SwitchB-bgp-default-ipv4] peer 1.2.3.1 enable
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
(3) 配置Switch A与RPKI服务器建立连接
[SwitchA] bgp 100
[SwitchA-bgp-default] rpki
[SwitchA-bgp-default-rpki] server tcp 1.1.1.2
[SwitchA-bgp-default-rpki-server] port 1234
[SwitchA-bgp-default-rpki-server] quit
(4) 在Switch A上开启BGP RPKI验证
[SwitchA-bgp-default-rpki] check-origin-validation
[SwitchA-bgp-default-rpki] quit
(5) 在Switch A上配置BGP RPKI验证结果参与路由优选
[SwitchA-bgp-default] address-family ipv4
[SwitchA-bgp-default-ipv4] bestroute origin-as-validation
(6) 在Switch A上配置向对等体1.2.3.2发送BGP RPKI验证结果
[SwitchA-bgp-default-ipv4] peer 1.2.3.2 advertise-ext-community
[SwitchA-bgp-default-ipv4] peer 1.2.3.2 advertise origin-as-validation
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
(7) 在Switch B上对收到的BGP RPKI验证结果设置匹配条件,仅接收验证结果为Valid的路由
# 配置路由策略。
[SwitchB] route-policy rpki_policy permit node 0
[SwitchB-route-policy-rpki_policy-0] if-match rpki valid
[SwitchB-route-policy-rpki_policy-0] quit
# 应用路由策略。
[SwitchB] bgp 100
[SwitchB-bgp-default] address-family ipv4
[SwitchB-bgp-default-ipv4] peer 1.2.3.1 route-policy rpki_policy import
# 查看Switch A与RPKI服务器的连接信息,可以看到Switch A与RPKI服务器已经建立连接。
[SwitchA] display bgp rpki server
Server VPN-index Port State Time ROAs(IPv4/IPv6)
1.1.1.2 0 1234 Establish 00:04:43 5/4
# 查看从RPKI服务器获取的ROA信息,可以看到可以看到已经获得ROA信息。
[SwitchA] display bgp rpki table ipv4
Total number of entries: 5
Status codes: S - stale, U - used
Network Mask-range Origin-AS Server Status
1.2.3.4 8-24 100 1.1.1.2 U
2.2.3.6 8-32 100 1.1.1.2 U
2.2.3.6 10-24 4294967295 1.1.1.2 U
2.2.3.9 20-24 4294967295 1.1.1.2 U
3.2.3.5 8-26 200 1.1.1.2 U
# 查看Switch A上BGP RPKI验证结果。
[SwitchA] display bgp routing-table ipv4 1.2.3.0
BGP local router ID: 2.2.2.2
Local AS number: 100
Paths: 1 available, 1 best
BGP routing table information of 1.2.3.0/24:
Imported route.
Original nexthop: 0.0.0.0
Route age : 03h30m59s
OutLabel : NULL
RxPathID : 0x0
TxPathID : 0x0
Org-validation : Valid
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, pref-val 32768
State : valid, local, best
IP precedence : N/A
QoS local ID : N/A
Traffic index : N/A
1.2.3.0/24在ROA数据库中的Network为1.2.3.4,Mask-range为8-24的地址前缀范围内,且AS和路由的源AS相匹配,因此验证结果为Valid。
# 查看Switch B上到达目的网络1.2.3.0的BGP IPv4单播路由的详细信息。
[SwitchB] display bgp routing-table ipv4 1.2.3.0
RR-client route.
From : 1.2.3.1 (192.168.56.22)
Rely nexthop : 1.2.3.1
Original nexthop: 1.2.3.1
Route age : 03h30m59s
OutLabel : NULL
Ext-Community : <Origin Valid State: Valid >
RxPathID : 0x0
TxPathID : 0x0
Org-validation : Valid
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0
State : valid, internal, best
IP precedence : N/A
QoS local ID : N/A
Traffic index : N/A
由于Switch B仅允许BGP RPKI验证结果为Valid的路由信息通过,因此可以看到到达目的网络1.2.3.0的BGP IPv4单播路由的信息。该路由信息中的扩展团体属性包含了BGP RPKI验证结果。
· Switch A
#
sysname SwitchA
#
vlan 11 to 12
#
interface Vlan-interface11
ip address 1.1.1.1 255.255.255.0
#
interface Vlan-interface12
ip address 1.2.3.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
bgp 100
peer 1.2.3.2 as-number 100
rpki
check-origin-validation
server tcp 1.1.1.2
port 1234
#
address-family ipv4 unicast
bestroute origin-as-validation
peer 1.2.3.2 enable
peer 1.2.3.2 advertise-ext-community
peer 1.2.3.2 advertise origin-as-validation
#
return
· Switch B
#
sysname SwitchB
#
vlan 12
#
interface Vlan-interface12
ip address 1.2.3.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 12
#
bgp 100
peer 1.2.3.1 as-number 100
#
address-family ipv4 unicast
peer 1.2.3.1 enable
peer 1.2.3.1 route-policy rpki_policy import
#
route-policy rpki_policy permit node 0
if-match rpki valid
#
return
通过Keychain认证来加强Switch A与Switch B之间BGP连接的安全性。
图2-3 BGP Keychain配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 10
[SwitchB-vlan10] quit
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 10.1.1.1 24
[SwitchA-Vlan-interface10] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 10
[SwitchB-vlan10] quit
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface vlan-interface 10
[SwitchB-Vlan-interface10] ip address 10.1.1.2 24
[SwitchB-Vlan-interface10] quit
(2) 配置EBGP连接
# 配置Switch A。
[SwitchA] bgp 100
[SwitchA-bgp-default] peer 10.1.1.2 as-number 200
[SwitchA-bgp-default] address-family ipv4
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 enable
[SwitchA-bgp-default-ipv4] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp-default] peer 10.1.1.1 as-number 100
[SwitchB-bgp-default] address-family ipv4
[SwitchB-bgp-default-ipv4] peer 10.1.1.1 enable
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
(3) 配置Keychain
# 配置Switch A。
[SwitchA] keychain abc mode absolute
[SwitchA-keychain-abc] key 1
[SwitchA-keychain-abc-key-1] authentication-algorithm hmac-md5
[SwitchA-keychain-abc-key-1] key-string plain pwd123
[SwitchA-keychain-abc-key-1] send-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
[SwitchA-keychain-abc-key-1] accept-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
[SwitchA-keychain-abc-key-1] quit
[SwitchA-keychain-abc] quit
# 配置Switch B。
[SwitchB] keychain abc mode absolute
[SwitchB-keychain-abc] key 1
[SwitchB-keychain-abc-key-1] authentication-algorithm hmac-md5
[SwitchB-keychain-abc-key-1] key-string plain pwd123
[SwitchB-keychain-abc-key-1] send-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
[SwitchB-keychain-abc-key-1] accept-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
[SwitchB-keychain-abc-key-1] quit
[SwitchB-keychain-abc] quit
(4) 配置BGP的Keychain认证
# 配置Switch A。
[SwitchA] bgp 100
[SwitchA-bgp-default] peer 10.1.1.2 keychain abc
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp-default] peer 10.1.1.1 keychain abc
[SwitchB-bgp-default] quit
# 在Switch A上查看IPv4单播对等体的状态。
[SwitchA] display bgp peer ipv4 unicast
BGP local router ID: 10.1.1.1
Local AS number: 100
Total number of peers: 1 Peers in established state: 1
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
10.1.1.2 200 13 16 0 0 00:10:34 Established
可以看到,Switch A和Switch B成功通过Keychain认证建立了BGP会话。
· Switch A
#
sysname SwitchA
#
keychain abc mode absolute
key 1
key-string cipher $c$3$l+469YUHmYF8wPbDQHlgdg7kv6Q7bITaFg==
authentication-algorithm hmac-md5
send-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
accept-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
#
vlan 10
#
interface Vlan-interface10
ip address 10.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
bgp 100
peer 10.1.1.2 as-number 200
peer 10.1.1.2 keychain abc
#
address-family ipv4 unicast
peer 10.1.1.2 enable
#
return
· Switch B
#
sysname SwitchB
#
keychain abc mode absolute
key 1
key-string cipher $c$3$galEp264gf0HMjzVPLGkpQVEPs0UChoOOw==
authentication-algorithm hmac-md5
send-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
accept-lifetime utc 11:00:00 2025/01/01 to 12:00:00 2025/12/30
#
vlan 10
#
interface Vlan-interface10
ip address 10.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
bgp 200
peer 10.1.1.1 as-number 100
peer 10.1.1.1 keychain abc
#
address-family ipv4 unicast
peer 10.1.1.1 enable
#
return
Switch A位于AS 100,Switch B、Switch C和Switch D位于AS 200。在此网络中运行BGP协议,Switch A和Switch B之间建立EBGP连接,Switch B、Switch C和Switch D建立IBGP全连接。需要通过部署GTSM功能,来保障所有设备免受CPU利用类型的报文攻击。
图2-4 BGP GTSM配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] quit
[SwitchA] vlan 10
[SwitchA-vlan10] quit
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface vlan-interface 10
[SwitchA-Vlan-interface10] ip address 10.1.1.1 24
[SwitchA-Vlan-interface10] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] vlan 10 20
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 20
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 10
[SwitchB-Vlan-interface10] ip address 10.1.1.2 24
[SwitchB-Vlan-interface10] quit
[SwitchB] interface vlan-interface 20
[SwitchB-Vlan-interface20] ip address 10.2.1.1 24
[SwitchB-Vlan-interface20] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] vlan 20 30
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 20
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 30
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 20
[SwitchC-Vlan-interface20] ip address 10.2.1.2 24
[SwitchC-Vlan-interface20] quit
[SwitchC] interface vlan-interface 30
[SwitchC-Vlan-interface30] ip address 10.3.1.1 24
[SwitchC-Vlan-interface30] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] interface loopback 0
[SwitchD-LoopBack0] ip address 4.4.4.4 32
[SwitchD-LoopBack0] quit
[SwitchD] vlan 30
[SwitchD-vlan30] quit
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 30
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface vlan-interface 30
[SwitchD-Vlan-interface30] ip address 10.3.1.2 24
[SwitchD-Vlan-interface30] quit
(2) 配置OSPF协议,以保证Switch B、Switch C和Switch D的Loopback接口路由互相可达。
# 配置Switch B。
[SwitchB] ospf 1
[SwitchB-ospf-1] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 10.2.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
[SwitchC] ospf 1
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[SwitchC-ospf-1-area-0.0.0.0] network 10.2.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] network 10.3.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
[SwitchD] ospf 1
[SwitchD-ospf-1] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 4.4.4.4 0.0.0.0
[SwitchD-ospf-1-area-0.0.0.0] network 10.3.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) 配置IBGP全连接
为了防止端口状态不稳定引起路由震荡,本举例使用Loopback接口来创建IBGP对等体。
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 3.3.3.3 as-number 200
[SwitchB-bgp-default] peer 3.3.3.3 connect-interface loopback 0
[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 3.3.3.3 enable
[SwitchB-bgp-default-ipv4] peer 4.4.4.4 enable
[SwitchB-bgp-default-ipv4] peer 3.3.3.3 next-hop-local
[SwitchB-bgp-default-ipv4] peer 4.4.4.4 next-hop-local
[SwitchB-bgp-default-ipv4] quit
[SwitchB-bgp-default] quit
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] peer 2.2.2.2 as-number 200
[SwitchC-bgp-default] peer 2.2.2.2 connect-interface loopback 0
[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 2.2.2.2 enable
[SwitchC-bgp-default-ipv4] peer 4.4.4.4 enable
[SwitchC-bgp-default-ipv4] quit
[SwitchC-bgp-default] quit
# 配置Switch D。
[SwitchD] bgp 200
[SwitchD-bgp-default] router-id 4.4.4.4
[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] peer 2.2.2.2 as-number 200
[SwitchD-bgp-default] peer 2.2.2.2 connect-interface loopback 0
[SwitchD-bgp-default] address-family ipv4 unicast
[SwitchD-bgp-default-ipv4] peer 3.3.3.3 enable
[SwitchD-bgp-default-ipv4] peer 2.2.2.2 enable
[SwitchD-bgp-default-ipv4] quit
[SwitchD-bgp-default] quit
(4) 配置EBGP连接
# 配置Switch A。
[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] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 10.1.1.2 enable
[SwitchA-bgp-default-ipv4] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp-default] peer 10.1.1.1 as-number 100
[SwitchB-bgp-default] address-family ipv4 unicast
[SwitchB-bgp-default-ipv4] peer 10.1.1.1 enable
[SwitchB-bgp-default-ipv4] quit
(5) 配置BGP GTSM功能
# 配置Switch A和Switch B之间的BGP GTSM功能。由于两台设备之间直连,因此,Switch A和Switch B之间GTSM的最大跳数为1,合法报文的TTL范围是[255,255]。
[SwitchA-bgp-default] peer 10.1.1.2 ttl-security hops 1
[SwitchA-bgp-default] quit
[SwitchB-bgp-default] peer 10.1.1.1 ttl-security hops 1
# 配置Switch B和Switch C之间的BGP GTSM功能。由于两台设备之间直连,因此,Switch B和Switch C之间GTSM的最大跳数为1,合法报文的TTL范围是[255,255]。
[SwitchC] bgp 200
[SwitchC-bgp-default] peer 2.2.2.2 ttl-security hops 1
[SwitchB-bgp-default] peer 3.3.3.3 ttl-security hops 1
# 配置Switch D和Switch C之间的BGP GTSM功能。由于两台设备之间直连,因此,Switch D和Switch C之间GTSM的最大跳数为1,合法报文的TTL范围是[255,255]。
[SwitchD] bgp 200
[SwitchD-bgp-default] peer 3.3.3.3 ttl-security hops 1
[SwitchC-bgp-default] peer 4.4.4.4 ttl-security hops 1
[SwitchC-bgp-default] quit
# 配置Switch B和Switch D之间的BGP GTSM功能。由于两台设备之间相隔一跳,因此,Switch B和Switch D之间GTSM的最大跳数为2,合法报文的TTL范围是[254,255]。
[SwitchB-bgp-default] peer 4.4.4.4 ttl-security hops 2
[SwitchB-bgp-default] quit
[SwitchD-bgp-default] peer 2.2.2.2 ttl-security hops 2
[SwitchD-bgp-default] quit
# 在Switch B上查看IPv4单播对等体的状态。可以看到,Switch B和Switch A、Switch C、Switch D建立了BGP会话。
[SwitchB] display bgp peer ipv4 unicast
BGP local router ID: 2.2.2.2
Local AS number: 200
Total number of peers: 3 Peers in established state: 3
* - Dynamically created peer
^ - Peer created through link-local address
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
3.3.3.3 200 3 3 0 0 00:00:41 Established
4.4.4.4 200 3 3 0 0 00:00:26 Established
10.1.1.1 100 4 5 0 0 00:01:40 Established
· Switch A
#
sysname SwitchA
#
vlan 10
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface10
ip address 10.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
bgp 100
router-id 1.1.1.1
peer 10.1.1.2 as-number 200
peer 10.1.1.2 ttl-security hops 1
#
address-family ipv4 unicast
peer 10.1.1.2 enable
#
return
· Switch B
#
sysname SwitchB
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.2.1.0 0.0.0.255
#
vlan 10
#
vlan 20
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface10
ip address 10.1.1.2 255.255.255.0
#
interface Vlan-interface20
ip address 10.2.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 20
#
bgp 200
router-id 2.2.2.2
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 10.1.1.1 as-number 100
peer 10.1.1.1 ttl-security hops 1
#
address-family ipv4 unicast
peer 3.3.3.3 enable
peer 3.3.3.3 next-hop-local
peer 4.4.4.4 enable
peer 4.4.4.4 next-hop-local
peer 10.1.1.1 enable
#
return
· Switch C
#
sysname SwitchC
#
ospf 1
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 10.2.1.0 0.0.0.255
network 10.3.1.0 0.0.0.255
#
vlan 20
#
vlan 30
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface20
ip address 10.2.1.2 255.255.255.0
#
interface Vlan-interface30
ip address 10.3.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 20
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 30
#
bgp 200
router-id 3.3.3.3
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 2.2.2.2 ttl-security hops 1
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 4.4.4.4 ttl-security hops 1
#
address-family ipv4 unicast
peer 2.2.2.2 enable
peer 4.4.4.4 enable
#
return
· Switch D
#
sysname SwitchD
#
ospf 1
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 10.3.1.0 0.0.0.255
#
vlan 30
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
interface Vlan-interface30
ip address 10.3.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 30
#
bgp 200
router-id 4.4.4.4
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 2.2.2.2 ttl-security hops 2
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
peer 3.3.3.3 ttl-security hops 1
#
address-family ipv4 unicast
peer 2.2.2.2 enable
peer 3.3.3.3 enable
#
return
· Switch A、Switch B和Switch C三台交换机之间运行IPv6 BGP交互路由信息。Switch A和Switch B之间建立IBGP连接,Switch B和Switch C之间建立EBGP连接。
· 为了提高安全性,配置通过IPsec对IPv6 BGP报文进行保护。
图2-5 通过IPsec保护IPv6 BGP报文组网图
(1) 配置各接口的IPv6地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 100
[SwitchA-vlan100] quit
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ipv6 address 1::1 64
[SwitchA-Vlan-interface100] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 100 200
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ipv6 address 1::2 64
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 200
[SwitchB-Vlan-interface200] ipv6 address 3::1 64
[SwitchB-Vlan-interface200] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] vlan 200
[SwitchC-vlan200] quit
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface vlan-interface 200
[SwitchC-Vlan-interface200] ipv6 address 3::2 64
[SwitchC-Vlan-interface200] quit
(2) 配置IBGP连接
# 配置Switch A。
[SwitchA] bgp 65008
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] group ibgp internal
[SwitchA-bgp-default] peer 1::2 group ibgp
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] peer ibgp enable
Warning:This operation might reset the peer session in the peer group. Continue? [Y/N]:y
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 65008
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] group ibgp internal
[SwitchB-bgp-default] peer 1::1 group ibgp
[SwitchB-bgp-default] address-family ipv6 unicast
[SwitchB-bgp-default-ipv6] peer ibgp enable
Warning:This operation might reset the peer session in the peer group. Continue? [Y/N]:y
[SwitchB-bgp-default-ipv6] quit
(3) 配置EBGP连接
# 配置Switch C。
[SwitchC] bgp 65009
[SwitchC-bgp-default] router-id 3.3.3.3
[SwitchC-bgp-default] group ebgp external
[SwitchC-bgp-default] peer 3::1 as-number 65008
[SwitchC-bgp-default] peer 3::1 group ebgp
Executing this command will overwrite the configuration of the peer. Continue?[Y/N]:y
[SwitchC-bgp-default] address-family ipv6 unicast
[SwitchC-bgp-default-ipv6] peer ebgp enable
Warning:This operation might reset the peer session in the peer group. Continue? [Y/N]:y
[SwitchC-bgp-default-ipv6] quit
[SwitchC-bgp-default] quit
# 配置Switch B。
[SwitchB-bgp-default] group ebgp external
[SwitchB-bgp-default] peer 3::2 as-number 65009
[SwitchB-bgp-default] peer 3::2 group ebgp
Executing this command will overwrite the configuration of the peer. Continue?[Y/N]:y
[SwitchB-bgp-default] address-family ipv6 unicast
[SwitchB-bgp-default-ipv6] peer ebgp enable
Warning:This operation might reset the peer session in the peer group. Continue? [Y/N]:y
[SwitchB-bgp-default-ipv6] quit
[SwitchB-bgp-default] quit
(4) 配置IPsec安全提议和安全框架
# 配置Switch A。创建名为tran1的安全提议,报文封装形式采用传输模式,安全协议采用ESP协议。创建手工方式的安全框架policy001,配置SPI和密钥。
[SwitchA] ipsec transform-set tran1
[SwitchA-ipsec-transform-set-tran1] encapsulation-mode transport
[SwitchA-ipsec-transform-set-tran1] esp encryption-algorithm des-cbc
[SwitchA-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchA-ipsec-transform-set-tran1] quit
[SwitchA] ipsec profile policy001 manual
[SwitchA-ipsec-profile-policy001-manual] transform-set tran1
[SwitchA-ipsec-profile-policy001-manual] sa spi outbound esp 12345
[SwitchA-ipsec-profile-policy001-manual] sa spi inbound esp 12345
[SwitchA-ipsec-profile-policy001-manual] sa string-key outbound esp simple abcdefg
[SwitchA-ipsec-profile-policy001-manual] sa string-key inbound esp simple abcdefg
[SwitchA-ipsec-profile-policy001-manual] quit
# 配置Switch B。创建名为tran1的安全提议,报文封装形式采用传输模式,安全协议采用ESP协议;创建手工方式的安全框架policy001,配置SPI和密钥。创建名为tran2的安全提议,报文封装形式采用传输模式,安全协议采用ESP协议;创建手工方式的安全框架policy002,配置SPI和密钥。
[SwitchB] ipsec transform-set tran1
[SwitchB-ipsec-transform-set-tran1] encapsulation-mode transport
[SwitchB-ipsec-transform-set-tran1] esp encryption-algorithm des-cbc
[SwitchB-ipsec-transform-set-tran1] esp authentication-algorithm sha1
[SwitchB-ipsec-transform-set-tran1] quit
[SwitchB] ipsec profile policy001 manual
[SwitchB-ipsec-profile-policy001-manual] transform-set tran1
[SwitchB-ipsec-profile-policy001-manual] sa spi outbound esp 12345
[SwitchB-ipsec-profile-policy001-manual] sa spi inbound esp 12345
[SwitchB-ipsec-profile-policy001-manual] sa string-key outbound esp simple abcdefg
[SwitchB-ipsec-profile-policy001-manual] sa string-key inbound esp simple abcdefg
[SwitchB-ipsec-profile-policy001-manual] quit
[SwitchB] ipsec transform-set tran2
[SwitchB-ipsec-transform-set-tran2] encapsulation-mode transport
[SwitchB-ipsec-transform-set-tran2] esp encryption-algorithm des-cbc
[SwitchB-ipsec-transform-set-tran2] esp authentication-algorithm sha1
[SwitchB-ipsec-transform-set-tran2] quit
[SwitchB] ipsec profile policy002 manual
[SwitchB-ipsec-profile-policy002-manual] transform-set tran2
[SwitchB-ipsec-profile-policy002-manual] sa spi outbound esp 54321
[SwitchB-ipsec-profile-policy002-manual] sa spi inbound esp 54321
[SwitchB-ipsec-profile-policy002-manual] sa string-key outbound esp simple gfedcba
[SwitchB-ipsec-profile-policy002-manual] sa string-key inbound esp simple gfedcba
[SwitchB-ipsec-profile-policy002-manual] quit
# 配置Switch C。创建名为tran2的安全提议,报文封装形式采用传输模式,安全协议采用ESP协议。创建手工方式的安全框架policy002,配置SPI和密钥。
[SwitchC] ipsec transform-set tran2
[SwitchC-ipsec-transform-set-tran2] encapsulation-mode transport
[SwitchC-ipsec-transform-set-tran2] esp encryption-algorithm des-cbc
[SwitchC-ipsec-transform-set-tran2] esp authentication-algorithm sha1
[SwitchC-ipsec-transform-set-tran2] quit
[SwitchC] ipsec profile policy002 manual
[SwitchC-ipsec-profile-policy002-manual] transform-set tran2
[SwitchC-ipsec-profile-policy002-manual] sa spi outbound esp 54321
[SwitchC-ipsec-profile-policy002-manual] sa spi inbound esp 54321
[SwitchC-ipsec-profile-policy002-manual] sa string-key outbound esp simple gfedcba
[SwitchC-ipsec-profile-policy002-manual] sa string-key inbound esp simple gfedcba
[SwitchC-ipsec-profile-policy002-manual] quit
(5) 配置通过IPsec保护Switch A和Switch B之间的IPv6 BGP报文
# 配置Switch A。
[SwitchA] bgp 65008
[SwitchA-bgp-default] peer 1::2 ipsec-profile policy001
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 65008
[SwitchB-bgp-default] peer 1::1 ipsec-profile policy001
(6) 配置通过IPsec保护Switch B和Switch C之间的IPv6 BGP报文
# 配置Switch C。
[SwitchC] bgp 65009
[SwitchC-bgp-default] peer ebgp ipsec-profile policy002
[SwitchC-bgp-default] quit
# 配置Switch B。
[SwitchB-bgp-default] peer ebgp ipsec-profile policy002
[SwitchB-bgp-default] quit
# 在Switch B上显示IPv6 BGP对等体的详细信息。可以看出完成上述配置后IBGP、EBGP对等体能够正常建立,且发送和接收的IPv6 BGP报文都经过加密。
[SwitchB] display bgp peer ipv6 verbose
Peer: 1::1 Local: 2.2.2.2
Type: IBGP link
BGP version 4, remote router ID 1.1.1.1
BGP current state: Established, Up for 00h05m54s
BGP current event: KATimerExpired
BGP last state: OpenConfirm
Port: Local - 24896 Remote - 179
Local source address: 1::2
Configured: Min Hold Time: 0 sec
Configured: Active Hold Time: 180 sec Keepalive Time: 60 sec
Received : Active Hold Time: 180 sec
Negotiated: Active Hold Time: 180 sec Keepalive Time: 60 sec
Peer optional capabilities:
Peer supports BGP multi-protocol extension
Peer supports BGP route refresh capability
Peer supports BGP route AS4 capability
Address family IPv6 Unicast: advertised and received
InQ updates: 0, OutQ updates: 0
NLRI statistics:
Rcvd: UnReach NLRI 0, Reach NLRI 0
Sent: UnReach NLRI 0, Reach NLRI 3
Message statistics:
Msg type Last rcvd time/ Current rcvd count/ History rcvd count/
Last sent time Current sent count History sent count
Open 18:59:15-2019.4.24 1 1
18:59:15-2019.4.24 1 2
Update - 0 0
18:59:16-2019.4.24 1 1
Notification - 0 0
18:59:15-2019.4.24 0 1
Keepalive 18:59:15-2019.4.24 1 1
18:59:15-2019.4.24 1 1
RouteRefresh - 0 0
- 0 0
Total - 2 2
- 3 5
Maximum allowed prefix number: 4294967295
Threshold: 75%
Minimum time between advertisements is 15 seconds
Optional capabilities:
Multi-protocol extended capability has been enabled
Route refresh capability has been enabled
Peer preferred value: 0
IPsec profile name: policy001
Routing policy configured:
No routing policy is configured
Peer: 3::2 Local: 2.2.2.2
Type: EBGP link
BGP version 4, remote router ID 3.3.3.3
BGP current state: Established, Up for 00h05m00s
BGP current event: KATimerExpired
BGP last state: OpenConfirm
Port: Local - 24897 Remote - 179
Local source address: 3::1
Configured: Min Hold Time: 0 sec
Configured: Active Hold Time: 180 sec Keepalive Time: 60 sec
Received : Active Hold Time: 180 sec
Negotiated: Active Hold Time: 180 sec Keepalive Time: 60 sec
Peer optional capabilities:
Peer supports BGP multi-protocol extension
Peer supports BGP route refresh capability
Peer supports BGP route AS4 capability
Address family IPv6 Unicast: advertised and received
Maximum allowed prefix number: 4294967295
Threshold: 75%
Minimum time between advertisements is 30 seconds
Optional capabilities:
Multi-protocol extended capability has been enabled
Route refresh capability has been enabled
Peer preferred value: 0
IPsec profile name: policy002
Routing policy configured:
No routing policy is configured
· Switch A
#
sysname SwitchA
#
vlan 100
#
interface Vlan-interface100
ipv6 address 1::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
bgp 65008
router-id 1.1.1.1
group ibgp internal
peer 1::2 group ibgp
peer 1::2 ipsec-profile policy001
#
address-family ipv6 unicast
peer ibgp enable
#
ipsec transform-set tran1
encapsulation-mode transport
esp encryption-algorithm des-cbc
esp authentication-algorithm sha1
#
ipsec profile policy001 manual
transform-set tran1
sa spi inbound esp 12345
sa string-key inbound esp cipher $c$3$o6BPBuZQC/dLy5/dWHvl40bDFLhb3h7eUSQ=
sa spi outbound esp 12345
sa string-key outbound esp cipher $c$3$FCVRP4Juv6N8XaFr45MZZ6Ngyy3XWDfDPPk=
#
return
· Switch B
#
sysname SwitchB
#
vlan 100
#
vlan 200
#
interface Vlan-interface100
ipv6 address 1::2/64
#
interface Vlan-interface200
ipv6 address 3::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
bgp 65008
router-id 2.2.2.2
group ebgp external
peer ebgp ipsec-profile policy002
group ibgp internal
peer 1::1 group ibgp
peer 1::1 ipsec-profile policy001
peer 3::2 as-number 65009
peer 3::2 group ebgp
#
address-family ipv6 unicast
peer ebgp enable
peer ibgp enable
#
ipsec transform-set tran1
encapsulation-mode transport
esp encryption-algorithm des-cbc
esp authentication-algorithm sha1
#
ipsec transform-set tran2
encapsulation-mode transport
esp encryption-algorithm des-cbc
esp authentication-algorithm sha1
#
ipsec profile policy001 manual
transform-set tran1
sa spi inbound esp 12345
sa string-key inbound esp cipher $c$3$9/+KnlZv5h5xfyYhMqx8STThXyjgftH/LjI=
sa spi outbound esp 12345
sa string-key outbound esp cipher $c$3$ePQpXxX4VEQKRcuV0uTN+C77TPKgQ0obWRk=
#
ipsec profile policy002 manual
transform-set tran2
sa spi inbound esp 54321
sa string-key inbound esp cipher $c$3$QVsqh35Th8fFX2UowGiG49MfmHPSXWzGl38=
sa spi outbound esp 54321
sa string-key outbound esp cipher $c$3$dQhRD5gB/KzvIuX/MwoGNa5bwcLEfaZcFkA=
#
return
· Switch C
#
sysname SwitchC
#
vlan 200
#
interface Vlan-interface200
ipv6 address 3::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
bgp 65009
router-id 3.3.3.3
group ebgp external
peer ebgp ipsec-profile policy002
peer 3::1 as-number 65008
peer 3::1 group ebgp
#
address-family ipv6 unicast
peer ebgp enable
#
ipsec transform-set tran2
encapsulation-mode transport
esp encryption-algorithm des-cbc
esp authentication-algorithm sha1
#
ipsec profile policy002 manual
transform-set tran2
sa spi inbound esp 54321
sa string-key inbound esp cipher $c$3$KuEd68nwO1ttswk1Bypg6u+wjXTh4GfxD0k=
sa spi outbound esp 54321
sa string-key outbound esp cipher $c$3$juIL995QtypkdYbwaBCQJViEXQr0xFRZVAM=
#
return
· 所有路由器运行BGP协议,Switch A与RPKI服务器建立连接。Switch A与Switch B建立IBGP连接。
· Switch A将BGP RPKI验证结果发送给Switch B。
· 配置路由策略,使得Switch B对收到的BGP RPKI验证结果设置匹配条件,控制路由的接收。
图2-6 BGP RPKI配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 11 12
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ipv6 address 1::1 64
[SwitchA-Vlan-interface11] quit
[SwitchA] interface vlan-interface 12
[SwitchA-Vlan-interface12] ipv6 address 2001::1 64
[SwitchA-Vlan-interface12] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 12
[SwitchB-vlan12] quit
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 12
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface vlan-interface 12
[SwitchB-Vlan-interface12] ipv6 address 2001::2 64
[SwitchB-Vlan-interface12] quit
(2) 在Switch A和Switch B上配置BGP,建立IBGP邻居
# 配置Switch A。
[SwitchA] bgp 100
[SwitchA-bgp-default] router-id 1.1.1.1
[SwitchA-bgp-default] peer 2001::2 as-number 100
[SwitchA-bgp-default] address-family ipv6
[SwitchA-bgp-default-ipv6] peer 2001::2 enable
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 100
[SwitchB-bgp-default] router-id 2.2.2.2
[SwitchB-bgp-default] peer 2001::1 as-number 100
[SwitchB-bgp-default] address-family ipv6
[SwitchB-bgp-default-ipv6] peer 2001::1 enable
[SwitchB-bgp-default-ipv6] quit
[SwitchB-bgp-default] quit
(3) 配置Switch A与RPKI服务器建立连接
[SwitchA] bgp 100
[SwitchA-bgp-default] rpki
[SwitchA-bgp-default-rpki] server tcp 1::2
[RouterA-bgp-default-rpki-server] port 1234
[RouterA-bgp-default-rpki-server] quit
(4) 在Switch A上开启BGP RPKI验证
[SwitchA-bgp-default-rpki] check-origin-validation
[SwitchA-bgp-default-rpki] quit
(5) 在Switch A上配置BGP RPKI验证结果参与路由优选
[SwitchA-bgp-default] address-family ipv6
[SwitchA-bgp-default-ipv6] bestroute origin-as-validation
(6) 在Switch A上配置向对等体2001::2发送BGP RPKI验证结果
[SwitchA-bgp-default-ipv6] peer 2001::2 advertise-ext-community
[SwitchA-bgp-default-ipv6] peer 2001::2 advertise origin-as-validation
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
(7) 在Switch B上对收到的BGP RPKI验证结果设置匹配条件,仅接收验证结果为Valid的路由
# 配置路由策略。
[SwitchB] route-policy rpki_policy permit node 0
[SwitchB-route-policy-rpki_policy-0] if-match rpki valid
# 应用路由策略。
[SwitchB] bgp 100
[SwitchB-bgp-default] address-family ipv6
[SwitchB-bgp-default-ipv6] peer 2001::1 route-policy rpki_policy import
# 查看Switch A与RPKI服务器的连接信息,可以看到Switch A与RPKI服务器已经建立连接。
[SwitchA] display bgp rpki server
Server VPN-index Port State Time ROAs(IPv4/IPv6)
1::2 0 1234 Establish 00:04:43 5/5
# 查看从RPKI服务器获取的ROA信息,可以看到已经获得ROA信息。
[SwitchA] display bgp rpki table ipv6
Total number of entries: 5
Status codes: S - stale, U - used
Network Mask-range Origin-AS Server Status
2001:4860:: 32-32 100 1::2 U
2404:6800:: 32-32 100 1::2 U
2607:F8B0:: 28-28 4294967295 1::2 U
2A03:ACE0:: 40-40 4294967295 1::2 U
2001::1 64-64 200 1::2 U
# 查看Switch A上BGP RPKI验证结果。
[SwitchA] display bgp routing-table ipv6 2001::1 64
BGP local router ID: 2.2.2.2
Local AS number: 100
Paths: 1 available, 1 best
BGP routing table information of 2001::1/64:
Imported route.
Original nexthop: 0.0.0.0
Route age : 03h30m59s
OutLabel : NULL
RxPathID : 0x0
TxPathID : 0x0
Org-validation : Valid
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, pref-val 32768
State : valid, local, best
IP precedence : N/A
QoS local ID : N/A
2001::1/64在ROA数据库中的Network为2001::1,Mask-range为64-64的地址前缀范围内,且AS和路由的源AS号相匹配,因此验证结果为Valid。
# 查看Switch B上到达目的网络2001::1的BGP IPv6单播路由的详细信息。
[SwitchB] display bgp routing-table ipv6 2001::1 64
RR-client route.
From : 2001::1 64 (192.168.56.22)
Rely nexthop : 2001::1
Original nexthop: 2001::1
Route age : 03h30m59s
OutLabel : NULL
Ext-Community : <Origin Valid State: Valid >
RxPathID : 0x0
TxPathID : 0x0
Org-validation : Invalid
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0
State : valid, internal, best
IP precedence : N/A
QoS local ID : N/A
Traffic index : N/A
由于Switch B仅允许BGP RPKI验证结果为Valid的路由信息通过,因此可以看到到达目的网络2001::1的BGP IPv6单播路由的信息。该路由信息中的扩展团体属性包含了BGP RPKI验证结果。
· Switch A
#
sysname SwitchA
#
vlan 11 to 12
#
interface Vlan-interface11
ipv6 address 1::1/64
#
interface Vlan-interface12
ipv6 address 2001::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
bgp 100
router-id 1.1.1.1
peer 2001::2 as-number 100
rpki
check-origin-validation
server tcp 1::2
port 1234
#
address-family ipv6 unicast
bestroute origin-as-validation
peer 2001::2 enable
peer 2001::2 advertise-ext-community
peer 2001::2 advertise origin-as-validation
#
return
· Switch B
#
sysname SwitchB
#
vlan 12
#
interface Vlan-interface12
ipv6 address 2001::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 12
#
bgp 100
router-id 2.2.2.2
peer 2001::1 as-number 100
#
address-family ipv6 unicast
peer 2001::1 enable
peer 2001::1 route-policy rpki_policy import
#
route-policy rpki_policy permit node 0
if-match rpki valid
#
return
提高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命令配置),该定时器用来控制路由信息收敛的速度:
¡ 如果定时器超时前收到了对端发送的End-Of-RIB标记,则GR Restarter根据已经学习到的BGP路由信息更新RIB表项、删除老化的RIB表项,并退出GR过程;GR Helper则删除仍标记为失效的路由,并退出GR过程。
¡ 如果定时器超时时没有完成路由信息的交互,则GR Restarter根据已经学习到的BGP路由信息更新RIB表项、删除老化的RIB表项,并退出GR过程;GR Helper则删除仍标记为失效的路由,并退出GR过程。
End-Of-RIB标记是一个不包含NLRI或withdrawn NLRI的Update报文,GR Restarter和GR Helper的BGP路由发送完成后,会额外发送一个End-Of-RIB标记,用来通知对端本端的路由更新发送已经结束。
(6) 如果在RIB路由老化定时器超时时没有完成路由信息的交互,则GR Restarter会强制退出GR过程,根据已经学习到的BGP路由信息更新RIB表项,删除老化的RIB表项。
BGP GR完成后,向外发布路由信息的规则如下:
· 如果这些路由信息还依赖于其他模块(例如将OSPF路由引入到BGP路由时,BGP路由依赖于OSPF路由;标签路由依赖于MPLS等),则BGP需要收到这些周边模块发送的GR完成的通知后,才能向外发布路由,以免发布的路由错误或不可达,导致流量丢失。周边模块异常时,将无法向BGP发送GR完成的通知。BGP等待周边模块完成GR的时间具有一定的限制。在该限定时间内,如果BGP收到了周边模块发送的GR完成的通知,BGP会取消计时并发送路由;否则BGP将不再等待,立即发布路由,避免周边模块的异常导致BGP功能异常。
· 如果这些路由信息不依赖于其他模块,则BGP会立即向外发送路由。
BGP GR功能可以全局使能,也可以仅针对指定BGP对等体使能。通过graceful-restart命令,用户可以使能全局的BGP GR能力,即可以与所有对等体建立具备GR能力的BGP会话。但是使能全局BGP GR能力会使得所有BGP会话断开并重新建立,可能造成不必要的流量中断。
因此,在仅需要与部分对等体建立具有GR能力的BGP会话时,可以配置peer capability-advertise graceful-restart命令,仅使能与特定对等体进行GR协商的能力,以避免所有BGP会话都重新建立。
配置peer capability-advertise graceful-restart命令后,本端设备会与指定对等体重新建立会话,通过Open消息协商GR能力。对等体也具有GR能力时才能协商成功,建立起具有GR能力的BGP会话。
在TCP连接断开、保持时间超时或BGP会话允许交换路由的地址族发生变化时,BGP会话需要断开并重新建立,造成业务流量转发中断。开启设备通过GR方式复位BGP会话功能后,在TCP连接断开、保持时间超时和BGP会话允许交换路由的地址族发生变化时,设备采用BGP GR方式进行BGP会话重建,仍按照已有的路由信息转发报文,从而避免对流量转发造成影响。
只有BGP会话两端的设备都具有GR能力时,建立的BGP会话才具备GR能力。H3C设备与不具备GR能力的对等体建立的BGP会话不具备GR能力。该BGP会话断开时,BGP路由表项需要重新学习,导致流量中断。
本地GR功能可以解决上述问题。开启指定对等体/对等体组的本地GR能力后,本端设备与指定对等体/对等体组的BGP会话断开时,不管BGP会话是否具备GR能力,在一定时间之内,本端设备都不会删除从该对等体/对等体组学习到的路由,仍然按照原有的转发表项转发报文,以避免流量中断。
本地GR的工作机制为:
(1) 开启了本地GR能力的本端设备与对等体的BGP会话断开时,本端设备不会删除从该对等体学习到的路由,而是将这些路由标记为失效路由,不更新转发表项,仍然按照这些路由转发报文。
(2) 本端设备启动等待重建定时器(该定时器的持续时间由peer local-graceful-restart timer restart命令配置),尝试与开启了本地GR能力的对等体重建BGP会话。
¡ 如果在等待重建定时器超时前没有成功建立BGP会话,则本端设备会删除标记失效的路由,并退出本地GR过程。
¡ 如果在等待重建定时器超时前BGP会话成功建立,则本端设备启动End-Of-RIB标记等待定时器(该定时器的持续时间由peer local-graceful-restart timer wait-for-rib命令配置),并且与对端设备进行路由交互,本端设备根据学习到的路由删除路由的失效标记。如果本端设备在End-Of-RIB标记等待定时器超时前收到了对端发送的End-Of-RIB标记,则删除仍标记为失效的路由,更新转发表项,并退出本地GR过程。如果本端设备在定时器超时时没有收到对端发送的End-Of-RIB标记,则删除仍标记为失效的路由,更新转发表项,并退出本地GR过程。
本端配置的等待End-Of-RIB标记的时间不会通告给对端,只用来控制本端路由信息交互的时间,即GR Restarter上配置的时间只用来控制GR Restarter从GR Helper接收路由更新的时间,GR Helper上配置的时间只用来控制GR Helper从GR Restarter接收路由更新的时间。当路由信息的数量较多时,建议将本端等待End-Of-RIB标记的时间调大,以保证完成所有路由信息的交互。配置peer graceful-restart timer restart extra命令时如果指定了no-limit参数,则GR Helper不会启动End-Of-RIB标记等待定时器,一直等待对端发送的End-Of-RIB标记。
由于设备在GR过程中的角色不可预知,建议在作为GR Restarter和GR Helper的设备上均进行本配置。
当路由信息的数量较大且存在依赖于其他协议的路由信息,同时依赖的其他协议的GR配置正确时,如果BGP在限定时间内未收到周边模块发送的GR完成的通知,那么BGP将不再等待,立即发布路由。这种情况下建议将等待其他协议完成GR的最长时间调大,尽可能地保证BGP和其他协议都完成GR后再向其他设备发布BGP路由。
只要全局GR能力和为指定对等体使能的GR能力有一项处于使能状态,本端设备就可以和本命令指定的对等体协商GR能力。
如果设备通过peer capability-advertise graceful-restart命令的配置进入了BGP GR过程,则全局使能或关闭GR能力都会导致当前的GR过程中断,BGP会话重新建立。
如果设备通过全局GR能力的配置进入了BGP GR过程,则配置peer capability-advertise graceful-restart命令会导致设备与指定对等体的GR过程中断,BGP会话重新建立。
通过peer capability-advertise graceful-restart命令使能与指定对等体的GR能力后,本端设备与该对等体之间的BGP GR过程使用的时间参数由peer graceful-restart timer restart、peer graceful-restart timer wait-for-rib、graceful-restart timer purge-time和peer graceful-restart timer restart extra命令配置。如果同时使能了全局GR能力以及指定对等体的GR能力,则本端设备进入BGP GR过程后使用的时间参数以指定对等体使能的GR能力为准。
本端设备开启了指定对等体/对等体组的本地GR能力后,无论双方是否成功协商了BGP GR能力,本端设备与该对等体/对等体组重建BGP会话时都不会进入BGP GR过程,仅会进入本地GR过程。
如果本端设备在未开启本地GR能力时已经进入BGP GR过程,则本端设备开启本地GR能力不会影响正在进行的BGP GR过程。而当前BGP GR过程结束后,本地设备后续仅会进入本地GR过程。
如果本端设备正在进行本地GR过程,则本端设备开启/关闭BGP GR能力都会使得本地GR过程中断,BGP会话重新建立。
(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 ] | link-local-address interface interface-type interface-number } graceful-restart timer restart extra { time | no-limit }
interface-peer interface-type interface-number 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) (可选)配置BGP GR完成后等待其他协议完成GR的最长时间。
bgp update-delay wait-other-protocol seconds
缺省情况下,BGP GR完成后等待周边其他协议完成GR的最长时间为300秒。
(9) (可选)开启设备通过GR方式复位BGP会话功能。
graceful-restart peer-reset [ all ]
缺省情况下,设备以GR方式复位BGP会话功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 为指定对等体使能GR能力。
peer { group-name | ipv4-address | ipv6-address } capability-advertise graceful-restart
缺省情况下,BGP未针对任何对等体使能GR能力。
(4) 配置通知对等体等待本端重建BGP会话的最大时间。
peer { group-name | ipv4-address | ipv6-address } graceful-restart timer restart time-value
缺省情况下,通知对等体等待本端重建BGP会话的最大时间为150秒。
通知对等体等待本端重建BGP会话的时间应小于Open消息中的Holdtime时间。
(5) (可选)配置BGP GR过程中本端作为GR Helper时等待对等体/对等体组重建BGP会话的额外时间。
peer { group-name | ipv4-address | ipv6-address } graceful-restart timer restart extra { time | no-limit }
缺省情况下,本端作为GR Helper时等待对等体/对等体组重建BGP会话的额外时间为0秒。
(6) 设置本端等待来自指定对等体的End-Of-RIB标记的最大时间。
peer { group-name | ipv4-address | ipv6-address } graceful-restart timer wait-for-rib time-value
缺省情况下,本端等待来自指定对等体的End-Of-RIB标记的最大时间为600秒。
(7) 配置BGP GR过程中等待通知RIB老化失效表项的时间。
graceful-restart timer purge-time timer
缺省情况下,BGP GR过程中等待通知RIB老化失效表项的时间为480秒。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 开启指定对等体/对等体组的本地GR能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } local-graceful-restart enable
缺省情况下,没有开启任何对等体的本地GR能力。
(4) (可选)配置本地GR过程中定时器的值。
¡ 配置等待重建定时器的值。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } local-graceful-restart timer restart timer
缺省情况下,等待重建定时器的值为150秒。
¡ 配置End-Of-RIB标记等待定时器的值。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } local-graceful-restart timer wait-for-rib timer
缺省情况下,End-Of-RIB标记等待定时器的值为600秒。
BGP NSR(Nonstop Routing,不间断路由)是一种通过在BGP协议主备进程之间备份必要的协议状态和数据(如BGP邻居信息和路由信息),使得BGP协议的主进程中断时,备份进程能够无缝地接管主进程的工作,从而确保对等体感知不到BGP协议中断,保持BGP路由,并保证转发不会中断的技术。
导致BGP主进程中断的事件包括以下几种:
· BGP主进程重启
· BGP主进程所在的主控板发生故障
· BGP主进程所在的主控板进行ISSU(In-Service Software Upgrade,不中断业务升级)
BGP NSR与BGP GR具有如下区别,请根据实际情况选择合适的方式确保数据转发不中断:
· 对设备要求不同:BGP协议的主进程和备进程运行在不同的主控板或IRF成员设备上,因此要运行BGP NSR功能,必须有两个或两个以上的主控板;要运行BGP GR功能,可以只有一个主控板。
· 对BGP对等体的要求不同:使用BGP NSR功能时,BGP对等体不会感知本地设备发生了BGP进程的异常重启或主备倒换等故障,不需要BGP对等体协助恢复BGP路由信息。BGP GR要求BGP对等体具有GR能力,并且在BGP会话中断恢复时,BGP对等体能够作为GR helper协助本地设备恢复BGP路由信息。
BGP NSR完成后,向外发布路由信息的规则如下:
· 如果这些路由信息还依赖于其他模块(例如将OSPF路由引入到BGP路由时,BGP路由依赖于OSPF路由;标签路由依赖于MPLS等),则BGP需要收到这些周边模块发送的NSR完成的通知后,才能向外发布路由,以免发布的路由错误或不可达,导致流量丢失。周边模块异常时,将无法向BGP发送NSR完成的通知。BGP等待周边模块完成NSR的时间具有一定的限制。在该限定时间内,如果BGP收到了周边模块发送的NSR完成的通知,BGP会取消计时并发送路由;否则BGP将不再等待,立即发布路由,避免周边模块的异常导致BGP功能异常。
· 如果这些路由信息不依赖于其他模块,则BGP会立即向外发送路由。
如果在设备上同时配置了BGP NSR和BGP GR功能,则二者的关系如下:
· BGP NSR优先级高于BGP GR,即BGP主进程中断时通过BGP NSR确保转发不中断,设备不会作为GR Restarter启动GR过程。
· GR Helper协助GR Restarter恢复重启前状态时,如果GR Helper发生了主备进程倒换,则即便GR Helper上配置了BGP NSR,也无法保证GR过程成功。
在MPLS L3VPN组网中,使能BGP NSR功能的同时,需要使能RIB NSR功能,以确保流量转发不会中断。关于RIB NSR功能的详细介绍,请参见“三层技术-IP路由配置指导”中的“IP路由基础”。
当路由信息的数量较大且存在依赖于其他协议的路由信息,同时依赖的其他协议的NSR配置正确时,如果BGP在限定时间内未收到周边模块发送的NSR完成的通知,那么BGP将不再等待,立即发布路由。这种情况下建议将等待其他协议完成NSR的最长时间调大,尽可能地保证BGP和其他协议都完成NSR后再向其他设备发布BGP路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 使能BGP NSR功能。
non-stop-routing
缺省情况下,BGP NSR功能处于关闭状态。
(4) (可选)配置BGP NSR完成后等待其他协议完成NSR的最长时间。
bgp update-delay wait-other-protocol seconds
缺省情况下,BGP NSR完成后等待周边其他协议完成NSR的最长时间为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报文方式检测对等体之间的链路。
通过链路本地地址建立的BGP会话只能通过控制报文方式的单跳BFD会话检测对等体之间的链路。
采用控制报文方式的BFD会话检测链路时,本地路由器和BGP对等体采用的BFD检测方式(单跳或多跳)必须相同,否则无法建立BFD会话。
配置BGP GR功能后,请慎用BGP与BFD联动功能。因为当链路故障时,系统可能还没来得及启用GR处理流程,BFD已经检测到链路故障了,从而导致GR失败。如果设备上同时配置了BGP GR和BGP BFD,则在BGP GR期间请勿去使能BGP BFD,否则可能导致GR失败。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置通过BFD检测本地路由器和指定IPv4 BGP对等体/对等体组之间的链路。
peer { group-name | ipv4-address [ mask-length ] } bfd [ echo | multi-hop | single-hop ]
缺省情况下,不使用BFD检测本地路由器和BGP对等体/对等体组之间的链路。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置通过BFD检测本地路由器和指定IPv6 BGP对等体/对等体组之间的链路。请选择其中一项进行配置。
peer { group-name | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } bfd [ echo | multi-hop | single-hop ]
interface-peer interface-type interface-number bfd [ multi-hop | single-hop ]
缺省情况下,不使用BFD检测本地路由器和IPv6 BGP对等体/对等体组之间的链路。
指定link-local-address interface interface-type interface-number参数时不支持通过Echo方式的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快速重路由方式。
IPv4单播路由和IPv6单播路由支持BGP快速重路由功能;IPv4组播路由和IPv6组播路由不支持BGP快速重路由功能。
(1) 进入系统视图。
system-view
(2) 创建路由策略,并进入路由策略视图。
route-policy route-policy-name permit node node-number
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(3) 配置快速重路由的备份下一跳地址。
apply fast-reroute backup-nexthop ipv4-address
缺省情况下,未指定快速重路由的备份下一跳地址。
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(4) 退回系统视图。
quit
(5) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(6) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
¡ 进入BGP IPv4单播地址族视图。
address-family ipv4 [ unicast ]
¡ 进入BGP-VPN IPv4单播地址族视图。
ip vpn-instance vpn-instance-name
address-family ipv4 [ unicast ]
(7) 在当前地址族视图下指定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-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(6) 进入BGP IPv6单播地址族视图或BGP-VPN 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-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 进入BGP IPv4单播地址族视图或BGP-VPN IPv4单播地址族视图。
address-family ipv4 [ unicast ]
(4) 开启BGP快速重路由功能。
pic
缺省情况下,BGP快速重路由功能处于关闭状态。
在某些组网情况下,执行pic命令为所有BGP路由生成备份下一跳后,可能会导致路由环路,请谨慎使用本功能。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 进入BGP IPv6单播地址族视图或BGP-VPN IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 开启BGP快速重路由功能。
pic
缺省情况下,BGP快速重路由功能处于关闭状态。
在某些组网情况下,执行pic命令为所有BGP路由生成备份下一跳后,可能会导致路由环路,请谨慎使用本命令。
缺省情况下,BGP快速重路由通过ARP检测主路由的下一跳是否可达,该方式对于快速重路由的主链路失效检测较慢,业务流量可能无法及时切换到备用路径上,导致流量丢失。配置本功能后,设备会自动创建一个协议类型为IPFRR的BFD会话,通过该BFD会话对主路由的下一跳检测,以提高主路由下一跳失效时,流量切换到备路由下一跳上的收敛速度。
只有存在已经生成了备份下一跳的主路由时,本功能才会生效并自动创建BFD会话。
由于BGP暂不支持为负载分担路由计算备份下一跳,本功能无法为等价路由作为主路由的场景提供通过BFD会话检测功能。
通过控制报文方式的BFD会话检测主路由的下一跳是否可达时,由于控制报文方式的BFD会话需要两端进行协商才能成功建立,如需设备成功使用控制报文方式的BFD会话来检测主链路的下一跳,可以通过以下两种方式进行配置:
· 在主链路的对端设备上也执行primary-path-detect bfd命令。此方式适用于主链路两端设备均配置快速重路由功能的场景。
· 在主链路的对端设备上手工创建一个静态BFD会话,该静态BFD会话指定的会话源IP地址为本端自动创建的BFD会话的会话目的IP地址、会话目的IP地址为本端自动创建的BFD会话的源IP地址、远端标识符为本端自动创建的BFD会话的本地标识符。
使用echo方式的BFD会话检测主路由的下一跳是否可达时,仅需要在本地路由器上配置本功能。
其他业务模块在通过BFD会话检测主路由的下一跳是否可达时,也会自动创建BFD会话(如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路由。此外,开启BGP isolate功能后,设备会将发布给邻居的直连路由优先级调整为最低。具体方式是将路由的MED属性设为最大值,并将本地优先级属性设为最小值。
(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或NSR期间,建议用户不要使用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) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP shutdown功能,禁止与所有对等体/对等体组建立会话。
shutdown process
缺省情况下,设备允许与所有BGP对等体/对等体组建立会话。
(4) 完成设备维护后,使设备的BGP重新加入网络。
undo shutdown process
在传统BGP路由指导的ECMP转发场景中,BGP路由形成等价的条件较为固定,只要满足特定条件(如路由属性、最大负载分担条数等)就能形成等价。现需要对BGP路由形成等价进行更精细的控制,使得只有满足指定条件的一部分相同前缀BGP路由能指导转发,而剩余的BGP路由成为备份路径。
BGP路由的发送方和接收方均可以通过peer route-policy命令引用路由策略,并在路由策略中配置apply hash-group命令来让路由携带一类私有扩展团体属性——hash组属性。此属性的格式为Router ID:hash-group ID,其中Router ID取值为0.0.0.0,hash-group ID由apply hash-group命令配置。
设备在对路由进行优选时,判断BGP路由是否携带hash组属性。只要同一前缀的BGP路由中存在一条携带了hash组属性,设备就会将该前缀的所有BGP路由进行如下处理:
· 查找同一前缀BGP路由中携带的hash组属性中,最小的hash-group ID值。
· 在找到的hash-group ID值对应的本地ECMP hash组中,匹配出接口与ECMP hash组视图下outgoing-interface命令指定的接口相同的BGP路由。
· 匹配出接口成功的所有BGP路由成为主用路径,其余的路由成为备份路径。匹配BGP路由的报文只会在主用路径上负载分担转发,只有所有主用路径都失效后,报文才会切换到备份路径上进行负载分担转发。
例如,设备存在五条前缀均为10.1.1.0/24的BGP路由1~5,其迭代到的路由出接口分别是Interface 1~Interface 5,且这五条路由携带的hash组属性中,最小的hash-group ID值为1。则设备会在ECMP hash组1中查找outgoing-interface命令的配置与BGP路由出接口的匹配关系。假设网络管理员在ECMP hash组1中通过outgoing-interface命令配置的主用路径出接口为Interface 1和Interface 2,则路由1和路由2成为主用路径,路由3、4、5成为备份路径。匹配10.1.1.0/24的报文首先在Interface 1和Interface 2上负载分担转发,这两个接口均失效后,才在Interface 3、4、5上进行负载分担转发。
如果同一前缀下的所有BGP路由均不携带hash组属性,则不会进行ECMP hash组匹配。
ECMP hash功能生效后,生成的转发表项会与传统ECMP负载分担有细微区别。
如果在BGP路由传播路径上,有多个BGP speaker都通过apply hash-group命令为路由配置了hash组属性,则BGP路由的hash组属性以最后一次配置此命令的设备为准。
不建议在不同的ECMP hash组中配置相同的主路径出接口。
建议仅在直连BGP会话场景下配置本功能,在非直连BGP会话场景中,如果一条BGP路由可以迭代到多个路由出接口,可能导致非预期的主备路径选举结果。
BGP多个进程均配置了本功能,或IP路由表中的公私网路由互引,且引用的路由和路由表中已存在的路由均来自配置了本功能的BGP进程时,相同前缀的多个BGP路由在IP路由表中汇总可能导致该前缀的主备路径选举结果不符合配置本功能时的预期结果。
(1) 进入系统视图。
system-view
(2) (可选)创建路由策略,并进入该路由策略视图。
route-policy route-policy-name permit node node-number
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(3) (可选)配置路由策略中的if-match子句。
本配置步骤的详细配置,请参考“三层技术-IP路由配置指导”中的“路由策略”。
(4) (可选)为BGP路由携带hash组属性。
apply hash-group group-id
本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“路由策略”。
(5) (可选)退回系统视图。
quit
(6) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(7) 创建ECMP hash组,并进入ECMP hash组视图。
hash-group group-id
缺省情况下,设备未创建ECMP hash组。
(8) 为ECMP hash组配置主用路径出接口。
outgoing-interface interface-type interface-number
缺省情况下,未配置主用路径出接口。
(9) (可选)退回BGP实例视图。
quit
(10) (可选)进入BGP IPv4或IPv6单播地址族视图,通过peer route-policy命令调用路由策略,从而为BGP路由携带hash组属性。
peer route-policy命令的详细配置步骤,请参见“三层技术-IP路由配置指导”中的“搭建基本BGP网络”。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表3-1 提高BGP网络的可靠性配置显示(IPv4单播)
|
操作 |
命令 |
|
显示BGP NSR的运行状态 |
display bgp [ instance instance-name ] non-stop-routing status |
表3-2 提高BGP网络的可靠性配置显示(IPv6单播)
|
操作 |
命令 |
|
显示BGP NSR的运行状态 |
display bgp [ instance instance-name ] non-stop-routing status |
表3-3 提高BGP网络的可靠性配置显示(IPv4组播)
|
操作 |
命令 |
|
显示BGP NSR的运行状态 |
display bgp [ instance instance-name ] non-stop-routing status |
表3-4 提高BGP网络的可靠性配置显示(IPv6组播)
|
操作 |
命令 |
|
显示BGP NSR的运行状态 |
display bgp [ instance instance-name ] non-stop-routing status |
如图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地址。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] quit
[SwitchA] vlan 100 200
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 8.1.1.1 8
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ip address 200.1.1.2 24
[SwitchA-Vlan-interface200] quit
# 配置Switch A与Switch B的EBGP连接。
[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地址。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] vlan 200 400
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 400
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 200
[SwitchB-Vlan-interface200] ip address 200.1.1.1 24
[SwitchB-Vlan-interface200] quit
[SwitchB] interface vlan-interface 400
[SwitchB-Vlan-interface400] ip address 9.1.1.1 24
[SwitchB-Vlan-interface400] quit
# 配置Switch B与Switch A的EBGP连接。
[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地址。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] vlan 400
[SwitchC-vlan400] quit
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 400
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface vlan-interface 400
[SwitchC-Vlan-interface400] ip address 9.1.1.2 24
[SwitchC-Vlan-interface400] quit
# 配置Switch C与Switch B的IBGP连接。
[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] address-family ipv4
[SwitchC-bgp-default-ipv4] peer 9.1.1.1 enable
在Switch A上ping Switch C,同时在Switch B上触发主备倒换,可以发现在整个倒换过程中Switch A都可以ping通Switch C。
· Switch A
#
sysname SwitchA
#
vlan 100
#
vlan 200
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface100
ip address 8.1.1.1 255.0.0.0
#
interface Vlan-interface200
ip address 200.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
bgp 65008
graceful-restart
router-id 1.1.1.1
peer 200.1.1.1 as-number 65009
#
address-family ipv4 unicast
network 8.0.0.0 255.0.0.0
peer 200.1.1.1 enable
#
return
· Switch B
#
sysname SwitchB
#
vlan 200
#
vlan 400
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface200
ip address 200.1.1.1 255.255.255.0
#
interface Vlan-interface400
ip address 9.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 400
#
bgp 65009
graceful-restart
router-id 2.2.2.2
peer 9.1.1.2 as-number 65009
peer 200.1.1.2 as-number 65008
#
address-family ipv4 unicast
network 9.1.1.0 255.255.255.0
network 200.1.1.0 255.255.255.0
peer 9.1.1.2 enable
peer 200.1.1.2 enable
#
return
· Switch C
#
sysname SwitchC
#
vlan 400
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface400
ip address 9.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 400
#
bgp 65009
graceful-restart
router-id 3.3.3.3
peer 9.1.1.1 as-number 65009
#
address-family ipv4 unicast
peer 9.1.1.1 enable
#
return
· 在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 |
|
|
Vlan-int300 |
20.1.1.1/24 |
Switch D |
Vlan-int200 |
2.0.1.2/24 |
|
Switch B |
Vlan-int100 |
3.0.1.2/24 |
|
Vlan-int201 |
2.0.2.1/24 |
|
|
Vlan-int101 |
3.0.2.1/24 |
Switch E |
Vlan-int10 |
1.1.1.1/24 |
|
|
|
|
|
Vlan-int300 |
20.1.1.2/24 |
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 100 200 300
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface ten-gigabitethernet 1/0/3
[SwitchA-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/3] port trunk permit vlan 300
[SwitchA-Ten-GigabitEthernet1/0/3] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 3.0.1.1 24
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ip address 2.0.1.1 24
[SwitchA-Vlan-interface200] quit
[SwitchA] interface vlan-interface 300
[SwitchA-Vlan-interface300] ip address 20.1.1.1 24
[SwitchA-Vlan-interface300] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 100 101
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 101
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 3.0.1.2 24
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ip address 3.0.2.1 24
[SwitchB-Vlan-interface101] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] vlan 101 201
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 101
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 101
[SwitchC-Vlan-interface101] ip address 3.0.2.2 24
[SwitchC-Vlan-interface101] quit
[SwitchC] interface vlan-interface 201
[SwitchC-Vlan-interface201] ip address 2.0.2.2 24
[SwitchC-Vlan-interface201] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] vlan 200 201
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface vlan-interface 200
[SwitchD-Vlan-interface200] ip address 2.0.1.2 24
[SwitchD-Vlan-interface200] quit
[SwitchD] interface vlan-interface 201
[SwitchD-Vlan-interface201] ip address 2.0.2.1 24
[SwitchD-Vlan-interface201] quit
# 配置Switch E。
<Sysname> system-view
[Sysname] sysname SwitchE
[SwitchE] vlan 10 300
[SwitchE] interface ten-gigabitethernet 1/0/1
[SwitchE-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchE-Ten-GigabitEthernet1/0/1] quit
[SwitchE] interface ten-gigabitethernet 1/0/2
[SwitchE-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/2] port trunk permit vlan 300
[SwitchE-Ten-GigabitEthernet1/0/2] quit
[SwitchE] interface vlan-interface 10
[SwitchE-Vlan-interface10] ip address 1.1.1.1 24
[SwitchE-Vlan-interface10] quit
[SwitchE] interface vlan-interface 300
[SwitchE-Vlan-interface300] ip address 20.1.1.2 24
[SwitchE-Vlan-interface300] quit
(2) 配置OSPF,保证Switch A和Switch C之间路由可达
# 配置Switch A。
[SwitchA] ospf
[SwitchA-ospf] area 0
[SwitchA-ospf-1-area-0.0.0.0] network 2.0.1.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0] network 3.0.1.0 0.0.0.255
[SwitchA-ospf-1-area-0.0.0.0] quit
[SwitchA-ospf-1] quit
# 配置Switch B。
[SwitchB] ospf
[SwitchB-ospf] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 3.0.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] network 3.0.2.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
[SwitchC] ospf
[SwitchC-ospf] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 2.0.2.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] network 3.0.2.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
[SwitchD] ospf
[SwitchD-ospf] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 2.0.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] network 2.0.2.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) Switch A上的BGP配置
# 配置Switch A和Switch C建立两条IBGP连接。
[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] peer 3.0.2.2 next-hop-local
[SwitchA-bgp-default-ipv4] peer 2.0.2.2 next-hop-local
[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
# 配置Router A与Router E建立EBGP对等体。
[SwitchA-bgp-default] peer 20.1.1.2 as-number 100
[SwitchA-bgp-default] address-family ipv4 unicast
[SwitchA-bgp-default-ipv4] peer 20.1.1.2 enable
[SwitchA-bgp-default] quit
(4) Switch C上的BGP配置。
# 配置Switch A和Switch C建立两条IBGP连接。
[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] peer 3.0.1.1 connect-interface vlan-interface 101
[SwitchC-bgp-default] peer 2.0.1.1 connect-interface vlan-interface 201
[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
(5) Router E上的BGP配置。
# 配置Router E与Router A建立EBGP对等体,并发布1.1.1.0/24网段路由。
[SwitchE] bgp 100
[SwitchE-bgp-default] peer 20.1.1.1 as-number 200
[SwitchE-bgp-default] address-family ipv4 unicast
[SwitchE-bgp-default-ipv4] peer 20.1.1.1 enable
[SwitchE-bgp-default-ipv4] network 1.1.1.0 24
[SwitchE-bgp-default] quit
下面以Switch C为例,Switch A和Switch C类似,不再赘述。
# 显示Switch C的BFD信息。
<SwitchC> display bfd session verbose
Total sessions: 1 Up sessions: 1 Init mode: Active
IPv4 session working in control packet mode:
Local discr: 33793 Remote discr: 33793
Source IP: 3.0.2.2 Destination IP: 3.0.1.1
Destination port: 4784 Session state: Up
Interface: N/A
Min Tx interval: 500ms Actual Tx interval: 500ms
Min Rx interval: 500ms Detection time: 2500ms
Rx count: 85 Tx count: 86
Connection type: Indirect Up duration: 00:00:36
Hold time: 2408ms Auth mode: None
Detection mode: Async Slot: 0
Protocol: BGP
Version: 1 TTL: 64
Diag info: No Diagnostic
Hardware mode: Disable
以上显示信息表明: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 created through link-local address
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 instance default
Process ID: 0
SubProtID: 0x1 Age: 00h04m21s
Cost: 50 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x2 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 100
NibID: 0x16000000 LastAs: 200
AttrID: 0x0
BkAttrID: 0x30a084b7 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: N/A
Tunnel ID: Invalid IPInterface: Vlan-interface101
BkTunnel ID: Invalid BkIPInterface: N/A
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 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 instance default
Process ID: 0
SubProtID: 0x1 Age: 00h00m06s
Cost: 100 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x2 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 100
NibID: 0x16000001 LastAs: 200
AttrID: 0x1
BkAttrID: 0x1000000 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: N/A
Tunnel ID: Invalid IPInterface: Vlan-interface201
BkTunnel ID: Invalid BkIPInterface: N/A
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 0
· Switch A
#
sysname SwitchA
#
ospf 1
area 0.0.0.0
network 2.0.1.0 0.0.0.255
network 3.0.1.0 0.0.0.255
#
vlan 100
#
vlan 200
#
vlan 300
#
interface Vlan-interface100
ip address 3.0.1.1 255.255.255.0
#
interface Vlan-interface200
ip address 2.0.1.1 255.255.255.0
#
interface Vlan-interface300
ip address 20.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 300
#
bgp 200
peer 2.0.2.2 as-number 200
peer 3.0.2.2 as-number 200
peer 3.0.2.2 bfd
peer 20.1.1.2 as-number 100
#
address-family ipv4 unicast
peer 2.0.2.2 enable
peer 2.0.2.2 route-policy apply_med_100 export
peer 2.0.2.2 next-hop-local
peer 3.0.2.2 enable
peer 3.0.2.2 route-policy apply_med_50 export
peer 3.0.2.2 next-hop-local
peer 20.1.1.2 enable
#
route-policy apply_med_100 permit node 10
if-match ip address acl 2000
apply cost 100
#
route-policy apply_med_50 permit node 10
if-match ip address acl 2000
apply cost 50
#
acl basic 2000
rule 0 permit source 1.1.1.0 0.0.0.255
#
return
· Switch B
#
sysname SwitchB
#
ospf 1
area 0.0.0.0
network 3.0.1.0 0.0.0.255
network 3.0.2.0 0.0.0.255
#
vlan 100 to 101
#
interface Vlan-interface100
shutdown
ip address 3.0.1.2 255.255.255.0
#
interface Vlan-interface101
ip address 3.0.2.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 101
#
return
· Switch C
#
sysname SwitchC
#
ospf 1
area 0.0.0.0
network 2.0.2.0 0.0.0.255
network 3.0.2.0 0.0.0.255
#
vlan 101
#
vlan 201
#
interface Vlan-interface101
ip address 3.0.2.2 255.255.255.0
#
interface Vlan-interface201
ip address 2.0.2.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 101
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
peer 2.0.1.1 as-number 200
peer 2.0.1.1 connect-interface Vlan-interface201
peer 3.0.1.1 as-number 200
peer 3.0.1.1 connect-interface Vlan-interface101
peer 3.0.1.1 bfd
#
address-family ipv4 unicast
peer 2.0.1.1 enable
peer 3.0.1.1 enable
#
return
· Switch D
#
sysname SwitchD
#
ospf 1
area 0.0.0.0
network 2.0.1.0 0.0.0.255
network 2.0.2.0 0.0.0.255
#
vlan 200 to 201
#
interface Vlan-interface200
ip address 2.0.1.2 255.255.255.0
#
interface Vlan-interface201
ip address 2.0.2.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
return
· Switch E
#
sysname SwitchE
#
vlan 10
#
vlan 300
#
interface Vlan-interface10
ip address 1.1.1.1 255.255.255.0
#
interface Vlan-interface300
ip address 20.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 300
#
bgp 100
peer 20.1.1.1 as-number 200
#
address-family ipv4 unicast
network 1.1.1.0 255.255.255.0
peer 20.1.1.1 enable
#
return
如图3-4所示,Switch A、Switch B、Switch C和Switch D通过BGP协议实现网络互连。要求链路B正常时,Switch A和Switch D之间的流量通过链路B转发;链路B出现故障时,流量可以快速切换到链路A上。
图3-4 配置BGP快速重路由组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] quit
[SwitchA] vlan 100 200
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 10.1.1.1 24
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ip address 30.1.1.1 24
[SwitchA-Vlan-interface200] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] vlan 100 101
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 101
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 10.1.1.2 24
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ip address 20.1.1.2 24
[SwitchB-Vlan-interface101] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] vlan 200 201
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 200
[SwitchC-Vlan-interface200] ip address 30.1.1.3 24
[SwitchC-Vlan-interface200] quit
[SwitchC] interface vlan-interface 201
[SwitchC-Vlan-interface201] ip address 40.1.1.3 24
[SwitchC-Vlan-interface201] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] interface loopback 0
[SwitchD-LoopBack0] ip address 4.4.4.4 32
[SwitchD-LoopBack0] quit
[SwitchD] vlan 101 201
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 101
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface vlan-interface 101
[SwitchD-Vlan-interface101] ip address 20.1.1.4 24
[SwitchD-Vlan-interface101] quit
[SwitchD] interface vlan-interface 201
[SwitchD-Vlan-interface201] ip address 40.1.1.4 24
[SwitchD-Vlan-interface201] quit
(2) 在AS 200内配置OSPF,发布接口地址所在网段的路由(包括Loopback接口),确保Switch B、Switch C和Switch D之间路由可达
# 配置Switch B。
[SwitchB] ospf
[SwitchB-ospf] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] network 20.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
[SwitchC] ospf
[SwitchC-ospf] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[SwitchC-ospf-1-area-0.0.0.0] network 30.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] network 40.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
[SwitchD] ospf
[SwitchD-ospf] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 4.4.4.4 0.0.0.0
[SwitchD-ospf-1-area-0.0.0.0] network 20.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] network 40.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) 配置BGP连接
# 配置Switch A分别与Switch B和Switch C建立EBGP会话,并配置通过BGP发布路由1.1.1.1/32。
[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] 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] 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] 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:配置通过控制报文方式的BFD会话检测主路由的下一跳是否可达;创建路由策略frr,为路由4.4.4.4/32指定备份下一跳的地址为30.1.1.3(对等体Switch C的地址);在BGP IPv4单播地址族下应用该路由策略。
[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 ctrl
[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:配置通过控制报文方式的BFD会话检测主路由的下一跳是否可达;创建路由策略frr,为路由1.1.1.1/32指定备份下一跳的地址为3.3.3.3(对等体Switch C的地址);在BGP IPv4单播地址族下应用该路由策略。
[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 ctrl
[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 instance default
Process ID: 0
SubProtID: 0x6 Age: 00h00m12s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x2 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 200
NibID: 0x16000002 LastAs: 200
AttrID: 0x1
BkAttrID: 0x303079b7 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-interface100
BkSRLabel: NULL BkInterface: Vlan-interface200
Tunnel ID: Invalid IPInterface: Vlan-interface100
BkTunnel ID: Invalid BkIPInterface: Vlan-interface200
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 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 instance default
Process ID: 0
SubProtID: 0x1 Age: 00h01m18s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0x2 OrigVrf: default-vrf
TableID: 0x2 OrigAs: 100
NibID: 0x16000002 LastAs: 200
AttrID: 0x1
BkAttrID: 0x300072b7 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-interface101
BkSRLabel: NULL BkInterface: Vlan-interface201
Tunnel ID: Invalid IPInterface: Vlan-interface101
BkTunnel ID: Invalid BkIPInterface: Vlan-interface201
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 0
# 在Switch A上可以ping通Switch D。
[SwitchA] ping -a 1.1.1.1 4.4.4.4
Ping 4.4.4.4 (4.4.4.4) from 1.1.1.1: 56 data bytes, press CTRL+C to break
56 bytes from 4.4.4.4: icmp_seq=0 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=1 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=2 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=3 ttl=254 time=2.000 ms
56 bytes from 4.4.4.4: icmp_seq=4 ttl=254 time=1.000 ms
--- Ping statistics for 4.4.4.4 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.000/1.200/2.000/0.400 ms
# Switch A和Switch B之间的链路出现故障后,在Switch A上查看4.4.4.4/32路由,可以看到路由下一跳为30.1.1.3,即流量切换到备份路径转发。
[SwitchA] display ip routing-table 4.4.4.4 32
Summary count : 1
Destination/Mask Proto Pre Cost NextHop Interface
4.4.4.4/32 BGP 255 0 30.1.1.3 Vlan200
# 在Switch A仍然可以ping通Switch D。
[SwitchA] ping -a 1.1.1.1 4.4.4.4
Ping 4.4.4.4 (4.4.4.4) from 1.1.1.1: 56 data bytes, press CTRL+C to break
56 bytes from 4.4.4.4: icmp_seq=0 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=1 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=2 ttl=254 time=1.000 ms
56 bytes from 4.4.4.4: icmp_seq=3 ttl=254 time=2.000 ms
56 bytes from 4.4.4.4: icmp_seq=4 ttl=254 time=1.000 ms
--- Ping statistics for 4.4.4.4 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.000/1.200/2.000/0.400 ms
· Switch A
#
sysname SwitchA
#
vlan 100
#
vlan 200
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface100
ip address 10.1.1.1 255.255.255.0
#
interface Vlan-interface200
ip address 30.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
bgp 100
primary-path-detect bfd ctrl
router-id 1.1.1.1
peer 10.1.1.2 as-number 200
peer 30.1.1.3 as-number 200
#
address-family ipv4 unicast
fast-reroute route-policy frr
network 1.1.1.1 255.255.255.255
peer 10.1.1.2 enable
peer 10.1.1.2 preferred-value 100
peer 30.1.1.3 enable
#
route-policy frr permit node 10
if-match ip address prefix-list abc
apply fast-reroute backup-nexthop 30.1.1.3
#
ip prefix-list abc index 10 permit 4.4.4.4 32
#
return
· Switch B
#
sysname SwitchB
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.1.1.0 0.0.0.255
network 20.1.1.0 0.0.0.255
#
vlan 100 to 101
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface100
ip address 10.1.1.2 255.255.255.0
#
interface Vlan-interface101
ip address 20.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 101
#
bgp 200
router-id 2.2.2.2
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 10.1.1.1 as-number 100
#
address-family ipv4 unicast
peer 4.4.4.4 enable
peer 4.4.4.4 next-hop-local
peer 10.1.1.1 enable
#
return
· Switch C
#
sysname SwitchC
#
ospf 1
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 30.1.1.0 0.0.0.255
network 40.1.1.0 0.0.0.255
#
vlan 200 to 201
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface200
ip address 30.1.1.3 255.255.255.0
#
interface Vlan-interface201
ip address 40.1.1.3 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
router-id 3.3.3.3
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 30.1.1.1 as-number 100
#
address-family ipv4 unicast
peer 4.4.4.4 enable
peer 4.4.4.4 next-hop-local
peer 30.1.1.1 enable
#
return
· Switch D
#
sysname SwitchD
#
ospf 1
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 20.1.1.0 0.0.0.255
network 40.1.1.0 0.0.0.255
#
vlan 101
#
vlan 201
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
interface Vlan-interface101
ip address 20.1.1.4 255.255.255.0
#
interface Vlan-interface201
ip address 40.1.1.4 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 101
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
primary-path-detect bfd ctrl
router-id 4.4.4.4
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
#
address-family ipv4 unicast
fast-reroute route-policy frr
network 4.4.4.4 255.255.255.255
peer 2.2.2.2 enable
peer 2.2.2.2 preferred-value 100
peer 3.3.3.3 enable
#
route-policy frr permit node 10
if-match ip address prefix-list abc
apply fast-reroute backup-nexthop 3.3.3.3
#
ip prefix-list abc index 10 permit 1.1.1.1 32
#
return
· 在AS 200内使用OSPFv3作为IGP协议,实现AS内的互通。
· Switch A与Switch C之间建立两条IBGP连接。当Switch A与Switch C之间的两条路径均连通时,Switch C与100::/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 |
|
|
Vlan-int300 |
1200::1/64 |
Switch D |
Vlan-int200 |
2000::2/64 |
|
Switch B |
Vlan-int100 |
3000::2/64 |
|
Vlan-int201 |
2001::2/64 |
|
|
Vlan-int101 |
3001::2/64 |
Switch E |
Vlan-int10 |
100::1/64 |
|
|
|
|
|
Vlan-int300 |
1200::2/64 |
(1) 配置各接口的IPv6地址,并在AS 200内配置OSPFv3保证Router A和Router C之间路由可达
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] ospfv3 1
[SwitchA-ospfv3-1] router-id 1.1.1.1
[SwitchA-ospfv3-1] quit
[SwitchA] vlan 100 200 300
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface ten-gigabitethernet 1/0/3
[SwitchA-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/3] port trunk permit vlan 300
[SwitchA-Ten-GigabitEthernet1/0/3] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ipv6 address 3000::1 64
[SwitchA-Vlan-interface100] ospfv3 1 area 1
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ipv6 address 2000::1 64
[SwitchA-Vlan-interface200] ospfv3 1 area 1
[SwitchA-Vlan-interface200] quit
[SwitchA] interface vlan-interface 300
[SwitchA-Vlan-interface300] ipv6 address 1200::1 64
[SwitchA-Vlan-interface300] ospfv3 1 area 1
[SwitchA-Vlan-interface300] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] ospfv3 1
[SwitchB-ospfv3-1] router-id 2.2.2.2
[SwitchB-ospfv3-1] quit
[SwitchB] vlan 100 101
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 101
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ipv6 address 3000::2 64
[SwitchB-Vlan-interface100] ospfv3 1 area 1
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 3001::2 64
[SwitchB-Vlan-interface101] ospfv3 1 area 1
[SwitchB-Vlan-interface101] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] ospfv3 1
[SwitchC-ospfv3-1] router-id 3.3.3.3
[SwitchC-ospfv3-1] quit
[SwitchC] vlan 101 201
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 101
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 101
[SwitchC-Vlan-interface101] ipv6 address 3001::3 64
[SwitchC-Vlan-interface101] ospfv3 1 area 1
[SwitchC-Vlan-interface101] quit
[SwitchC] interface vlan-interface 201
[SwitchC-Vlan-interface201] ipv6 address 2001::3 64
[SwitchC-Vlan-interface201] ospfv3 1 area 1
[SwitchC-Vlan-interface201] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] ospfv3 1
[SwitchD-ospfv3-1] router-id 4.4.4.4
[SwitchD-ospfv3-1] quit
[SwitchD] vlan 200 201
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface vlan-interface 200
[SwitchD-Vlan-interface200] ipv6 address 2000::2 64
[SwitchD-Vlan-interface200] ospfv3 1 area 1
[SwitchD-Vlan-interface200] quit
[SwitchD] interface vlan-interface 201
[SwitchD-Vlan-interface201] ipv6 address 2001::2 64
[SwitchD-Vlan-interface201] ospfv3 1 area 1
[SwitchD-Vlan-interface201] quit
# 配置Switch E。
<Sysname> system-view
[Sysname] sysname SwitchE
[SwitchE] vlan 10 300
[SwitchE] interface ten-gigabitethernet 1/0/1
[SwitchE-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[SwitchE-Ten-GigabitEthernet1/0/1] quit
[SwitchE] interface ten-gigabitethernet 1/0/2
[SwitchE-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/2] port trunk permit vlan 300
[SwitchE-Ten-GigabitEthernet1/0/2] quit
[SwitchE] interface vlan-interface 10
[SwitchE-Vlan-interface10] ipv6 address 100::1 64
[SwitchE-Vlan-interface10] quit
[SwitchE] interface vlan-interface 300
[SwitchE-Vlan-interface300] ipv6 address 1200::2 64
[SwitchE-Vlan-interface300] quit
(2) Switch A上的IPv6 BGP配置
# 配置Switch A和Switch C建立两条IBGP连接。
[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] peer 3001::3 next-hop-local
[SwitchA-bgp-default-ipv6] peer 2001::3 next-hop-local
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 配置当Switch A与Switch C之间的两条路径均连通时,Switch C与100::/64之间的报文使用Switch A<->Switch B<->Switch C这条路径转发。(在Switch A上对发布给对等体2001::3的100::/64路由配置较高的MED属性值)
¡ 定义编号为2000的IPv6基本ACL,允许路由100::/64通过。
[SwitchA] acl ipv6 basic 2000
[SwitchA-acl-ipv6-basic-2000] rule permit source 100:: 64
[SwitchA-acl-ipv6-basic-2000] quit
¡ 定义两个Route-policy,一个名为apply_med_50,为路由100::/64设置MED属性值为50;另一个名为apply_med_100,为路由100::/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
# 配置Switch A与Switch E建立EBGP对等体。
[SwitchA-bgp-default] peer 1200::2 as-number 100
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] peer 1200::2 enable
[SwitchA-bgp-default] quit
(3) Switch C上的IPv6 BGP配置。
# 配置Switch A和Switch C建立两条IBGP连接。
[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] peer 3000::1 connect-interface vlan-interface 101
[SwitchC-bgp-default] peer 2000::1 connect-interface vlan-interface 201
[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
(4) Switch E上的BGP配置。
# 配置Switch E与Switch A建立EBGP对等体,并发布100::/64网段路由。
[SwitchE] bgp 100
[SwitchE-bgp-default] router-id 5.5.5.5
[SwitchE-bgp-default] peer 1200::1 as-number 200
[SwitchE-bgp-default] address-family ipv6 unicast
[SwitchE-bgp-default-ipv6] peer 1200::1 enable
[SwitchE-bgp-default-ipv6] network 100:: 64
[SwitchE-bgp-default] quit
下面以Switch C为例,Switch A与此类似,不再赘述。
# 显示Switch C的BFD信息。可以看出,Switch A和Switch C之间已经建立了BFD会话,而且BFD协议运行正常。
<SwitchC> display bfd session verbose
Total sessions: 1 Up sessions: 1 Init mode: Active
IPv6 session working in control packet mode:
Local discr: 33793 Remote discr: 33793
Source IP: 3001::3
Destination IP: 3000::1
Destination port: 4784 Session state: Up
Interface: N/A
Min Tx interval: 500ms Actual Tx interval: 500ms
Min Rx interval: 500ms Detection time: 2500ms
Rx count: 120 Tx count: 128
Connection type: Indirect Up duration: 00:00:53
Hold time: 2203ms Auth mode: None
Detection mode: Async Slot: 0
Protocol: BGP4+
Version: 1 TTL: 64
Diag info: No Diagnostic
Hardware mode: Disable
# 在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 created through link-local address
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上查看100::/64的路由信息,可以看出Switch C通过Switch A<->Switch B<->Switch C这条路径与100::/64网段通信。
<SwitchC> display ipv6 routing-table 100:: 64
Summary count : 1
Destination: 100::/64 Protocol : BGP4+
NextHop : 3000::1 Preference: 255
Interface : Vlan101 Cost : 50
# Switch A<->Switch B<->Switch C这条路径出现故障后,在Switch C上查看100::/64的路由信息,可以看出Switch C通过Switch A<->Switch D<->Switch C这条路径转发报文。
<SwitchC> display ipv6 routing-table 100:: 64
Summary count : 1
Destination: 100::/64 Protocol : BGP4+
NextHop : 2000::1 Preference: 255
Interface : Vlan201 Cost : 100
· Switch A
#
sysname SwitchA
#
ospfv3 1
router-id 1.1.1.1
area 0.0.0.1
#
vlan 100
#
vlan 200
#
vlan 300
#
interface Vlan-interface100
ospfv3 1 area 0.0.0.1
ipv6 address 3000::1/64
#
interface Vlan-interface200
ospfv3 1 area 0.0.0.1
ipv6 address 2000::1/64
#
interface Vlan-interface300
ospfv3 1 area 0.0.0.1
ipv6 address 1200::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 300
#
bgp 200
router-id 1.1.1.1
peer 1200::2 as-number 100
peer 2001::3 as-number 200
peer 3001::3 as-number 200
peer 3001::3 bfd
#
address-family ipv6 unicast
peer 1200::2 enable
peer 2001::3 enable
peer 2001::3 route-policy apply_med_100 export
peer 2001::3 next-hop-local
peer 3001::3 enable
peer 3001::3 route-policy apply_med_50 export
peer 3001::3 next-hop-local
#
route-policy apply_med_100 permit node 10
if-match ipv6 address acl 2000
apply cost 100
#
route-policy apply_med_50 permit node 10
if-match ipv6 address acl 2000
apply cost 50
#
acl ipv6 basic 2000
rule 0 permit source 100::/64
#
return
· Switch B
#
sysname SwitchB
#
ospfv3 1
router-id 2.2.2.2
area 0.0.0.1
#
vlan 100 to 101
#
interface Vlan-interface100
ospfv3 1 area 0.0.0.1
ipv6 address 3000::2/64
#
interface Vlan-interface101
ospfv3 1 area 0.0.0.1
ipv6 address 3001::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 101
#
return
· Switch C
#
sysname SwitchC
#
ospfv3 1
router-id 3.3.3.3
area 0.0.0.1
#
vlan 101
#
vlan 201
#
interface Vlan-interface101
ospfv3 1 area 0.0.0.1
ipv6 address 3001::3/64
#
interface Vlan-interface201
ospfv3 1 area 0.0.0.1
ipv6 address 2001::3/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 101
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
router-id 3.3.3.3
peer 2000::1 as-number 200
peer 2000::1 connect-interface Vlan-interface201
peer 3000::1 as-number 200
peer 3000::1 connect-interface Vlan-interface101
peer 3000::1 bfd
#
address-family ipv6 unicast
peer 2000::1 enable
peer 3000::1 enable
#
return
· Switch D
#
sysname SwitchD
#
ospfv3 1
router-id 4.4.4.4
area 0.0.0.1
#
vlan 200 to 201
#
interface Vlan-interface200
ospfv3 1 area 0.0.0.1
ipv6 address 2000::2/64
#
interface Vlan-interface201
ospfv3 1 area 0.0.0.1
ipv6 address 2001::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
return
· Switch E
#
sysname SwitchE
#
vlan 10
#
vlan 300
#
interface Vlan-interface10
ipv6 address 100::1/64
#
interface Vlan-interface300
ipv6 address 1200::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 300
#
bgp 100
router-id 5.5.5.5
peer 1200::1 as-number 200
#
address-family ipv6 unicast
network 100:: 64
peer 1200::1 enable
#
return
如图3-6所示,Switch A、Switch B、Switch C和Switch D通过BGP协议实现网络互连。要求链路B正常时,Switch A和Switch D之间的流量通过链路B转发;链路B出现故障时,流量可以快速切换到链路A上。
图3-6 配置BGP快速重路由
(1) 配置各接口的IP地址,并在AS 200内配置OSPFv3,确保Switch B、Switch C和Switch D之间IPv6路由可达
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] interface loopback 0
[SwitchA-LoopBack0] ip address 1.1.1.1 32
[SwitchA-LoopBack0] ipv6 address 1::1 64
[SwitchA-LoopBack0] quit
[SwitchA] vlan 100 200
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 200
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ipv6 address 301::1 64
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ipv6 address 201::1 64
[SwitchA-Vlan-interface200] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] interface loopback 0
[SwitchB-LoopBack0] ip address 2.2.2.2 32
[SwitchB-LoopBack0] quit
[SwitchB] ospfv3 1
[SwitchB-ospfv3-1] router-id 2.2.2.2
[SwitchB-ospfv3-1] quit
[SwitchB] vlan 100 101
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 100
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 101
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ipv6 address 301::2 64
[SwitchB-Vlan-interface100] ospfv3 1 area 1
[SwitchB-Vlan-interface100] quit
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 302::1 64
[SwitchB-Vlan-interface101] ospfv3 1 area 1
[SwitchB-Vlan-interface101] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] interface loopback 0
[SwitchC-LoopBack0] ip address 3.3.3.3 32
[SwitchC-LoopBack0] quit
[SwitchC] ospfv3 1
[SwitchC-ospfv3-1] router-id 3.3.3.3
[SwitchC-ospfv3-1] quit
[SwitchC] vlan 200 201
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 200
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 200
[SwitchC-Vlan-interface200] ipv6 address 201::2 64
[SwitchC-Vlan-interface200] ospfv3 1 area 1
[SwitchC-Vlan-interface200] quit
[SwitchC] interface vlan-interface 201
[SwitchC-Vlan-interface201] ipv6 address 202::1 64
[SwitchC-Vlan-interface201] ospfv3 1 area 1
[SwitchC-Vlan-interface201] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] interface loopback 0
[SwitchD-LoopBack0] ip address 4.4.4.4 32
[SwitchD-LoopBack0] ipv6 address 4::4 64
[SwitchD-LoopBack0] quit
[SwitchD] ospfv3 1
[SwitchD-ospfv3-1] router-id 4.4.4.4
[SwitchD-ospfv3-1] quit
[SwitchD] vlan 101 201
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 101
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 201
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface vlan-interface 101
[SwitchD-Vlan-interface101] ipv6 address 302::2 64
[SwitchD-Vlan-interface101] ospfv3 1 area 1
[SwitchD-Vlan-interface101] quit
[SwitchD] interface vlan-interface 201
[SwitchD-Vlan-interface201] ipv6 address 202::2 64
[SwitchD-Vlan-interface201] ospfv3 1 area 1
[SwitchD-Vlan-interface201] quit
(2) 配置BGP连接
# 配置Switch A分别与Switch B和Switch C建立EBGP会话,并配置通过BGP发布路由1::/64。
[SwitchA] bgp 100
[SwitchA] router-id 1.1.1.1
[SwitchA-bgp-default] peer 301::2 as-number 200
[SwitchA-bgp-default] peer 201::2 as-number 200
[SwitchA-bgp-default] address-family ipv6 unicast
[SwitchA-bgp-default-ipv6] peer 301::2 enable
[SwitchA-bgp-default-ipv6] peer 201::2 enable
[SwitchA-bgp-default-ipv6] network 1:: 64
# 配置Switch B与Switch A建立EBGP会话,与Switch D建立IBGP会话。
[SwitchB] bgp 200
[SwitchB] router-id 2.2.2.2
[SwitchB-bgp-default] peer 301::1 as-number 100
[SwitchB-bgp-default] peer 302::2 as-number 200
[SwitchB-bgp-default] address-family ipv6 unicast
[SwitchB-bgp-default-ipv6] peer 301::1 enable
[SwitchB-bgp-default-ipv6] peer 302::2 enable
[SwitchB-bgp-default-ipv6] peer 302::2 next-hop-local
[SwitchB-bgp-default-ipv6] quit
[SwitchB-bgp-default] quit
# 配置Switch C与Switch A建立EBGP会话,与Switch D建立IBGP会话。
[SwitchC] bgp 200
[SwitchC] router-id 3.3.3.3
[SwitchC-bgp-default] peer 201::1 as-number 100
[SwitchC-bgp-default] peer 202::2 as-number 200
[SwitchC-bgp-default] address-family ipv6 unicast
[SwitchC-bgp-default-ipv6] peer 201::1 enable
[SwitchC-bgp-default-ipv6] peer 202::2 enable
[SwitchC-bgp-default-ipv6] peer 202::2 next-hop-local
[SwitchC-bgp-default-ipv6] quit
[SwitchC-bgp-default] quit
# 配置Switch D分别与Switch B和Switch C建立IBGP会话,并配置BGP发布路由4::/64。
[SwitchD] bgp 200
[SwitchD-bgp-default] peer 302::1 as-number 200
[SwitchD-bgp-default] peer 202::1 as-number 200
[SwitchD-bgp-default] address-family ipv6 unicast
[SwitchD-bgp-default-ipv6] peer 302::1 enable
[SwitchD-bgp-default-ipv6] peer 202::1 enable
[SwitchD-bgp-default-ipv6] network 4:: 64
(3) 修改路由的首选值,使得Switch A和Switch D之间的流量优先通过链路B转发
# 在Switch A上配置从Switch B接收到的路由的首选值为100。
[SwitchA-bgp-default-ipv6] peer 301::2 preferred-value 100
[SwitchA-bgp-default-ipv6] quit
[SwitchA-bgp-default] quit
# 在Switch D上配置从Switch B接收到的路由的首选值为100。
[SwitchD-bgp-default-ipv6] peer 302::1 preferred-value 100
[SwitchD-bgp-default-ipv6] quit
[SwitchD-bgp-default] quit
(4) 配置BGP快速重路由
# 配置Switch A:创建路由策略frr,为路由4::/64指定备份下一跳的地址为201::2(邻居Switch C的地址);在BGP IPv6单播地址族下应用该路由策略。
[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 201::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指定备份下一跳的地址为202::1(邻居Switch C的地址);在BGP IPv6单播地址族下应用该路由策略。
[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 202::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+ instance default
Process ID: 0
SubProtID: 0x6 Age: 00h00m29s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0xa OrigVrf: default-vrf
TableID: 0xa OrigAs: 200
NibID: 0x26000002 LastAs: 200
AttrID: 0x1
BkAttrID: 0x30f08bb7 Neighbor: 301::2
Flags: 0x10060 OrigNextHop: 301::2
Label: NULL RealNextHop: 301::2
BkLabel: NULL BkNextHop: 201::2
SRLabel: NULL Interface: Vlan-interface100
BkSRLabel: NULL BkInterface: Vlan-interface200
Tunnel ID: Invalid IPInterface: Vlan-interface100
BkTunnel ID: Invalid BkIPInterface: Vlan-interface200
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 0
# 在Switch D上查看1::/64路由,可以看到备份下一跳信息。
[SwitchD] display ipv6 routing-table 1:: 64 verbose
Summary count : 1
Destination: 1::/64
Protocol: BGP4+ instance default
Process ID: 0
SubProtID: 0x1 Age: 00h01m32s
Cost: 0 Preference: 255
IpPre: N/A QosLocalID: N/A
Tag: 0 State: Active Adv
OrigTblID: 0xa OrigVrf: default-vrf
TableID: 0xa OrigAs: 100
NibID: 0x26000002 LastAs: 200
AttrID: 0x1
BkAttrID: 0x306087b7 Neighbor: 302::1
Flags: 0x10060 OrigNextHop: 302::1
Label: NULL RealNextHop: 302::1
BkLabel: NULL BkNextHop: 202::1
SRLabel: NULL Interface: Vlan-interface101
BkSRLabel: NULL BkInterface: Vlan-interface201
Tunnel ID: Invalid IPInterface: Vlan-interface101
BkTunnel ID: Invalid BkIPInterface: Vlan-interface201
LinkCost: 0 MicroSegID: 0
RealFIRType: Normal RealThres: 0
InLabel: 0 ColorInterface: N/A
SIDIndex: 0 BkColorInterface: N/A
FtnIndex: 0x0 TunnelInterface: N/A
TrafficIndex: N/A BkTunnelInterface: N/A
Connector: N/A PathID: 0x0
SID Type: N/A NID: Invalid
FlushNID: Invalid BkNID: Invalid
BkFlushNID: Invalid StatFlags: 0x0
SID: N/A
BkSID: N/A
CommBlockLen: 0 SRTunnelID: Invalid
MemberPort: N/A ExtFlags: 0x0
SliceID: 0 BkSliceID: 0
# 在Switch A上可以ping通Switch D。
[SwitchA] ping ipv6 -a 1::1 4::4
Ping6(56 data bytes) 1::1 --> 4::4, press CTRL+C to break
56 bytes from 4::4, icmp_seq=0 hlim=63 time=0.000 ms
56 bytes from 4::4, icmp_seq=1 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=2 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=3 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=4 hlim=63 time=1.000 ms
--- Ping6 statistics for 4::4 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/0.800/1.000/0.400 ms
# Switch A和Switch B之间的链路出现故障后,在Switch A上查看4::/64路由,可以看到路由下一跳为201::2,即流量切换到备份路径转发。
[SwitchA] display ipv6 routing-table 4:: 64
Summary count : 1
Destination: 4::/64 Protocol : BGP4+
NextHop : 201::2 Preference: 255
Interface : Vlan200 Cost : 0
# 在Switch A仍然可以ping通Switch D。
[RouterA] ping ipv6 -a 1::1 4::4
Ping6(56 data bytes) 1::1 --> 4::4, press CTRL+C to break
56 bytes from 4::4, icmp_seq=0 hlim=63 time=0.000 ms
56 bytes from 4::4, icmp_seq=1 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=2 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=3 hlim=63 time=1.000 ms
56 bytes from 4::4, icmp_seq=4 hlim=63 time=1.000 ms
--- Ping6 statistics for 4::4 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/0.800/1.000/0.400 ms
· Switch A
#
sysname SwitchA
#
vlan 100
#
vlan 200
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
ipv6 address 1::1/64
#
interface Vlan-interface100
ipv6 address 301::1/64
#
interface Vlan-interface200
ipv6 address 201::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 200
#
bgp 100
router-id 1.1.1.1
peer 201::2 as-number 200
peer 301::2 as-number 200
#
address-family ipv6 unicast
fast-reroute route-policy frr
network 1:: 64
peer 201::2 enable
peer 301::2 enable
peer 301::2 preferred-value 100
#
route-policy frr permit node 10
if-match ipv6 address prefix-list abc
apply ipv6 fast-reroute backup-nexthop 201::2
#
ipv6 prefix-list abc index 10 permit 4:: 64
#
return
· Switch B
#
sysname SwitchB
#
ospfv3 1
router-id 2.2.2.2
area 0.0.0.1
#
vlan 100 to 101
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface100
ospfv3 1 area 0.0.0.1
ipv6 address 301::2/64
#
interface Vlan-interface101
ospfv3 1 area 0.0.0.1
ipv6 address 302::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 100
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 101
#
bgp 200
router-id 2.2.2.2
peer 301::1 as-number 100
peer 302::2 as-number 200
#
address-family ipv6 unicast
peer 301::1 enable
peer 302::2 enable
peer 302::2 next-hop-local
#
return
· Switch C
#
sysname SwitchC
#
ospfv3 1
router-id 3.3.3.3
area 0.0.0.1
#
vlan 200 to 201
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface200
ospfv3 1 area 0.0.0.1
ipv6 address 201::2/64
#
interface Vlan-interface201
ospfv3 1 area 0.0.0.1
ipv6 address 202::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 200
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
router-id 3.3.3.3
peer 201::1 as-number 100
peer 202::2 as-number 200
#
address-family ipv6 unicast
peer 201::1 enable
peer 202::2 enable
peer 202::2 next-hop-local
#
return
· Switch D
#
sysname SwitchD
#
ospfv3 1
router-id 4.4.4.4
area 0.0.0.1
#
vlan 101
#
vlan 201
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
ipv6 address 4::4/64
#
interface Vlan-interface101
ospfv3 1 area 0.0.0.1
ipv6 address 302::2/64
#
interface Vlan-interface201
ospfv3 1 area 0.0.0.1
ipv6 address 202::2/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 101
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 201
#
bgp 200
peer 202::1 as-number 200
peer 302::1 as-number 200
#
address-family ipv6 unicast
fast-reroute route-policy frr
network 4:: 64
peer 202::1 enable
peer 302::1 enable
peer 302::1 preferred-value 100
#
route-policy frr permit node 10
if-match ipv6 address prefix-list abc
apply ipv6 fast-reroute backup-nexthop 202::1
#
ipv6 prefix-list abc index 10 permit 1:: 64
#
return
BGP扩展功能配置任务如下:
· 配置BGP LS
¡ (可选)配置BGP LS路由反射功能
¡ (可选)配置BGP LS信息的AS号和Router ID
¡ (可选)手工软复位LS地址族下的BGP会话
¡ (可选)配置BGP Dedicated路由反射功能
¡ (可选)复位BGP Dedicated会话
· 配置6PE
¡ (可选)控制6PE的路径选择
¡ (可选)控制6PE路由的发布与接收
¡ (可选)配置6PE路由反射功能
¡ (可选)复位BGP 6PE连接
BGP协议只能记录BGP会话和BGP路由的当前状态,无法直接收集到会话状态变化和路由更新的过程,通过配置BMP(BGP Monitoring Protocol,BGP监控协议)特性,监控服务器可以对网络中设备上BGP会话的运行状态进行实时监控,包括对等体关系的建立与解除、路由信息等,以方便网络管理员更加细致地了解BGP运行状况。
· BMP使用TCP作为其传输层协议,可靠性高。
· BMP不是路由协议,只是BGP路由协议的一个扩展功能,工作机制简单,目的明确(收集特定的信息)。
· BMP所有的配置均在作为客户端的设备上完成,部署难度低。
· BMP的协议报文仅需由客户端向监控端单向发送,客户端不需要从监控端获取任何协议报文,对现有网络影响小。
BMP中的角色分为三种:
· 客户端:配置BMP功能的设备,通过在客户端上配置监控服务器的地址和监听端口号来建立与监控服务器的TCP连接。一个客户端可以连接多个监控服务器。
· 监控端:监控服务器。
· 监控对等体:与客户端建立BGP会话的对等体。
如图4-1所示,Device A、Device B和Device C两两之间建立BGP会话,Device B上配置BMP功能对其BGP运行状态以及路由变化进行监控。在此组网中,服务器设备为监控端,Device B为客户端,与Device B建立BGP会话的Device A和Device C为监控对等体。
图4-1 BMP中的角色
BMP定义了以下消息类型:
· Initiation消息:TCP连接(BMP会话)建立以后发送的第一个消息,用于向监控服务器告知客户端设备的软件版本、制造商等信息。
· Termination消息:用于告知监控服务器TCP连接(BMP会话)断开的原因,客户端发出Termination消息后不再通过此连接向监控服务器发送任何消息,并主动断开此TCP连接(BMP会话)。
· Peer Up Notification消息:用于向监控服务器发送客户端与监控对等体间的BGP会话信息,包含每个BGP会话的Open报文中交换的信息和TCP连接信息。BMP的TCP连接建立后,BMP会为客户端与监控对等体间每一个处于Established状态的BGP会话发送一次Peer Up Notification消息。
· Peer Down Notification消息:当客户端与监控对等体间的某个BGP会话由Established状态变为其他状态时,使用Peer Down Notification消息告知监控服务器BGP会话断开以及断开的原因。
· Stats Reports消息:用于向监控服务器发送客户端运行BGP协议时的统计信息,如由于AS_PATH属性重复而被丢弃的路由数量、从邻居收到的路由数量、收到的重复Up消息的数量等。
· Route Monitoring消息:用于向监控服务器发送客户端与监控对等体交互的BGP路由信息,包括客户端上初始的BGP路由信息以及后续更新或撤销的路由信息。
监控端与客户端之间的TCP连接(BMP会话)成功建立后:
客户端首先向监控端发送Initiation消息,通告本机信息。
客户端向监控端发送Peer Up Notification消息和Route Monitoring消息,通告初始监控对等体状态与路由信息。
经过步骤(1)和(2)完成初始化后开始监控,客户端根据BGP会话状态的变化和路由的更新按需持续地向监控端发送Peer Up Notification消息、Peer Down Notification消息、Route Monitoring消息和Stats Reports消息。
当监控需要结束时,客户端向监控端发送Termination消息,并主动断开TCP连接(BMP会话)。
部署BMP功能时,需要在作为监控客户端的设备上完成以下配置:
(2) 配置监控对等体
(3) 配置向监控服务器发送路由信息
(5) 配置向监控服务器发送统计信息
(1) 进入系统视图。
system-view
(2) 创建BGP监控服务器,并进入BMP Server视图。
bmp server server-number
(3) 配置监控服务器的IP地址和端口号。
server address { ipv4-address | ipv6-address } port port-number
缺省情况下,未配置监控服务器的连接地址和端口号。
(4) (可选)配置监控服务器所属的VPN实例。
server vpn-instance vpn-instance-name
缺省情况下,未指定监控服务其所属的VPN实例,监控服务器位于公网中。
(5) (可选)配置本地设备与监控服务器之间TCP连接的源接口。
server connect-interface interface-type interface-number
缺省情况下,BGP根据监控服务器的地址类型,选择到达监控服务器的最佳路由出接口的主IPv4地址或IPv6地址建立TCP连接。
在同一个BMP Server视图下,当源接口所关联的VPN与server vpn-instance命令指定的VPN不一致时,本命令不生效。
(6) (可选)配置本地设备与监控服务器之间TCP连接的源地址。
server source-address { ipv4-address | ipv6-address }
缺省情况下,BGP根据监控服务器的地址类型,选择到达监控服务器的最佳路由出接口的主IPv4地址或IPv6地址建立TCP连接。
在同一个BMP Server视图下,同时配置本命令和server connect-interface命令时,以本命令的配置为准。
(7) (可选)配置本地设备与监控服务器建立TCP连接时使用的认证方式和认证密钥。
server password { keychain keychain-name | md5 { cipher | simple } string }
缺省情况下,本地设备与监控服务器建立TCP连接时不进行认证。
可以通过如下三种方式指定监控对等体:
· 通过peer bmp server命令指定对特定对等体/对等体组进行监控。
· 通过bmp server monitor current-instance命令指定对BGP实例下所有对等体进行监控。
· 通过bmp server monitor all-vpn-instance命令指定对所有BGP-VPN实例下的全部对等体进行监控。
以上三种方式可以同时使用,BGP为对等体/对等体组选择监控服务器的优先级顺序由高低到依次为:
(1) BGP实例视图/BGP-VPN实例视图下peer bmp server命令配置的BMP监控服务器;
(2) BGP实例视图/BGP-VPN实例视图下bmp server monitor current-instance命令配置的BMP监控服务器;
(3) BGP实例视图bmp server monitor all-vpn-instance命令配置的BMP监控服务器(仅对BGP-VPN实例中的对等体生效)。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图或BGP-VPN 实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN 实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(3) 配置BMP Server监控对等体/对等体组。请至少选择其中一项进行配置。
¡ 配置BMP Server监控指定对等体/对等体组。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | link-local-address interface interface-type interface-number } bmp server server-number-list
interface-peer interface-type interface-number bmp server server-number-list
缺省情况下,未配置BMP Server监控对等体/对等体组。
¡ 允许指定BMP Server监控当前实例中所有BGP对等体的运行状态。
bmp server server-number monitor current-instance [ route-mode { adj-rib-in { pre-policy | post-policy | both } | adj-rib-out { pre-policy | post-policy | both } } * ]
缺省情况下,禁止BMP Server监控当前实例中任何BGP对等体的运行状态。
¡ 允许指定BMP Server监控所有BGP-VPN实例中所有BGP对等体的运行状态。
bmp server server-number monitor all-vpn-instance [ route-mode { adj-rib-in { pre-policy | post-policy | both } | adj-rib-out { pre-policy | post-policy | both } } * ]
缺省情况下,禁止BMP Server监控所有BGP-VPN实例中所有BGP对等体的运行状态。
BGP-VPN实例下不支持本命令。
向监控服务器发送路由信息时,可以通过多种方式指定发送给监控服务器的路由类型。对于本地设备与每个监控对等体/对等体组交换的路由信息,BGP选择发送路由类型的优先级顺序由高低到依次为:
(1) BGP实例视图/BGP-VPN实例视图下peer route-mode命令配置的发送路由类型;
(2) BGP实例视图/BGP-VPN实例视图下bmp server monitor current-instance route-mode命令配置的发送路由类型;
(3) BGP实例视图下bmp server monitor all-vpn-instance route-mode命令配置的发送路由类型(仅对BGP-VPN实例中的对等体生效);
(4) BMP Server视图下route-mode adj-rib-in/route-mode adj-rib-out命令配置的发送路由类型。
对于本地设备的BGP路由信息,可以通过route-mode loc-rib命令向监控服务器发送BGP优选后的最优路由信息。
(1) 进入系统视图。
system-view
(2) 进入BMP Server视图。
bmp server server-number
(3) 全局配置发送给监控服务器的路由信息,请至少选择其中一项进行配置。
¡ 配置将本地设备发送给所有监控对等体/对等体组的路由信息发送给监控服务器。
route-mode adj-rib-out [ pre-policy | post-policy | both ]
缺省情况下,不会将本地设备发送给所有监控对等体/对等体组的路由信息发送给监控服务器。
¡ 配置将本地设备从所有监控对等体/对等体组接收的路由信息发送给监控服务器
route-mode adj-rib-in [ pre-policy | post-policy | both ]
缺省情况下,本地设备将从所有监控对等体/对等体组接收的路由策略过滤前的路由信息发送给监控服务器。
¡ 配置向监控服务器发送BGP优选后的路由信息。
route-mode loc-rib
缺省情况下,不向监控服务器发送BGP优选后的最优路由信息。
本功能配置后会先向监控服务器发送一次BGP所有的路由,之后路由更新时,仅向监控服务器发送BGP优选后的最优更新路由信息。
(4) 退回系统视图。
quit
(5) 进入BGP实例视图或BGP-VPN 实例视图。
¡ 进入BGP实例视图。
bgp as-number [ instance instance-name ]
¡ 请依次执行以下命令进入BGP-VPN 实例视图。
bgp as-number [ instance instance-name ]
ip vpn-instance vpn-instance-name
(6) 配置将本地设备与指定监控对等体/对等体组之间交换的路由信息发送给监控服务器。请至少选择其中一项进行配置。
¡ 配置将本地设备与指定监控对等体/对等体组之间交换的路由信息发送给监控服务器。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } route-mode { adj-rib-in { pre-policy | post-policy | both } | adj-rib-out { pre-policy | post-policy | both } } *
¡ 配置将当前实例下本地设备与监控对等体/对等体组之间交换的路由信息发送给监控服务器。
bmp server server-number monitor current-instance route-mode { adj-rib-in { pre-policy | post-policy | both } | adj-rib-out { pre-policy | post-policy | both } } *
¡ 配置将所有BGP-VPN实例下本地设备与所有监控对等体/对等体组之间交换的路由信息发送给监控服务器。
bmp server server-number monitor all-vpn-instance route-mode { adj-rib-in { pre-policy | post-policy | both } | adj-rib-out { pre-policy | post-policy | both } } *
BGP-VPN实例下不支持本命令。
缺省情况下,未配置将监控对等体/对等体组之间交换的路由信息发送给监控服务器,此时是否发送路由信息受BMP Server视图下的route-mode adj-rib-in和route-mode adj-rib-out命令控制。
配置本功能后,BMP客户端向监控服务器发送Peer Up Notification/Peer Down Notification消息时将携带Adj-RIB-In/Adj-RIB-Out标记以及pre-policy/post-policy标记。这些模式标记的含义为:
· Adj-RIB-In:表示客户端将从监控对等体接收的路由信息发送给监控服务器。
· Adj-RIB-Out:表示客户端将发往监控对等体的路由信息发送给监控服务器。
· pre-policy:表示客户端将路由策略过滤前的路由信息发送给监控服务器。
· post-policy:表示客户端将路由策略过滤后的路由信息发送给监控服务器。
配置本功能后,缺省情况下,BMP客户端向监控服务器发送从监控对等体接收的路由策略过滤前的路由信息。此时,Peer Up Notification/Peer Up Notification消息携带的标记为Adj-RIB-In和pre-policy。此时:
· 如果通过route-mode adj-rib-in、route-mode adj-rib-out或者peer route-mode命令新增了发布路由信息给监控服务器的模式,则会触发BMP客户端向监控服务器发送携带新的模式标记的Peer Up Notification消息。
· 如果通过route-mode adj-rib-in、route-mode adj-rib-out或者peer route-mode命令删除了发布路由信息给监控服务器的模式,则会触发BMP客户端向监控服务器发送携带新的模式标记的Peer Down Notification消息。
例如,执行了route-mode adj-rib-out pre-policy命令后,再执行route-mode adj-rib-out post-policy命令,此时设备发送路由策略过滤后的路由信息给监控服务器。上述过程视为删除了pre-policy模式,并新增了post-policy模式,既会触发BMP客户端向监控服务器发送携带新的模式标记的Peer Up Notification消息,又会触发发送携带新的模式标记的Peer Down Notification消息。
(1) 进入系统视图。
system-view
(2) 进入BMP Server视图。
bmp server server-number
(3) 配置BMP客户端向监控服务器发送消息时携带模式标记,请至少选择一项进行配置。
¡ 配置BMP客户端向监控服务器发送Peer Up Notification消息时携带模式标记。
pu-monitor-mode enable
¡ 配置BMP客户端向监控服务器发送Peer Down Notification消息时携带模式标记。
pd-monitor-mode enable
缺省情况下,BMP客户端向监控服务器发送Peer Up Notification/Peer Up Notification消息时不携带模式标记。
BMP对BGP运行过程中发生的各类事件进行统计,统计信息通过Stats Reports消息向监控服务器发送,本功能用于配置向监控服务器发送Stats Reports消息的周期。
(1) 进入系统视图。
system-view
(2) 创建BGP监控服务器,并进入BMP Server视图。
bmp server server-number
(3) 配置发送统计信息的周期。
statistics-interval value
缺省情况下,不向监控服务器发送统计信息。
传统的BGP协议主要关注路由信息的传播,缺乏对网络拓扑和链路状况的详细了解。BGP LS(Link State,链路状态)是一种传播和收集网络拓扑和链路状态信息并向控制器上报的功能,使得网络管理员可以更好地了解和管理网络链路。IGP协议也可以将这些信息上报给控制器,但存在如下问题:
· 控制器也需要支持IGP协议及其算法,对控制器的计算要求较高。
· IGP协议无法跨域收集信息。
· 不同的IGP协议会分别上报信息给控制器,控制器对上报信息的分析处理过程比较复杂。
支持BGP LS功能后,IGP协议收集的链路状态和拓扑信息可以均通过BGP协议上报至控制器,使得控制器不再对IGP能力有要求。并且,BGP协议支持跨域部署,通过BGP的传播,所有BGP LS设备都能够维护完整的链路状态数据库,上报给控制器的拓扑信息也将是完整的拓扑信息。
网络管理员通过BGP LS收集的链路状态和拓扑信息,可以实现以下功能:
· 拓扑维护和计算:BGP LS提供的网络拓扑和链路状态信息可以用于计算最短路径、构建网络地图等应用。
· 增强路径选择:网络管理员可以通过BGP LS提供的链路状态信息改善路径选择方式。
· 链路质量检测:网络管理员可以通过BGP LS提供的链路状态信息快速发现链路故障。
高级应用支持:BGP LS可以为流量工程、网络规划和资源分配等任务提供链路状态和网络拓扑信息支持。
BGP协议通过一系列NLRI来携带网络拓扑和链路状态信息。这种新的NLRI被包含在MP_REACH_NLRI和MP_UNREACH_NLRI属性中,通过BGP Update消息在BGP LS对等体间进行交互。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定LS对等体/对等体组的AS号。
peer { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } 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信息。
(6) (可选)配置BGP LS路由延迟优选功能,请至少选择其中的一项进行配置。
¡ 配置对地址族下的所有BGP路由延迟优选。
route-select delay delay-value
¡ 配置邻居状态由Down变为Up后,在指定的持续时间内仅对来自该邻居的BGP路由延迟优选。
route-select suppress on-peer-up milliseconds
缺省情况下,路由优选不延迟。
通常在同一个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) 配置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
如图4-2所示,各设备之间建立EBGP会话,对等体之间允许交换BGP Dedicated路由,并在Device A和Device D上开启接口绑定功能。终端设备通过AP接入到Device A或Device D后,Device A或Device D上会根据DHCP、DHCPv6或ND Snooping表项生成一条对应的IP Source Guard绑定表项。设备通过BGP Dedicated功能将本机的IP Source Guard绑定表项同步给其他对等体,对等体收到后将其保存为远端表项。当终端迁移到本机接入时,根据保存的远端表项生成本机的IP Source Guard绑定表项,从而实现终端迁移后仍可通过安全过滤并快速上线。接口绑定功能与IP Source Guard绑定表项信息的详细介绍,请参见“安全配置指导”中的“IP Source Guard”。
图4-2 BGP Dedicated应用组网图
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定对等体/对等体组的AS号。
peer { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } as-number as-number
缺省情况下,未指定对等体/对等体组的AS号。
(4) 创建BGP Dedicated地址族,并进入Dedicated地址族视图。
address-family dedicated
(5) 使能本地路由器与对等体/对等体组交换Dedicated路由的能力。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } enable
缺省情况下,本地路由器不能与对等体/对等体组交换Dedicated路由信息。
(6) (可选)配置向对等体/对等体组发布路由时,将下一跳属性修改为自身的地址。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } next-hop-local
缺省情况下,向EBGP对等体/对等体组发布路由时,将下一跳属性修改为自身的地址;向IBGP对等体/对等体组发布路由时,不修改下一跳属性。
(7) (可选)配置对于从对等体/对等体组接收的路由,允许本地AS号在接收路由的AS_PATH属性中出现,并配置允许出现的次数。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } allow-as-loop [ number ]
缺省情况下,不允许本地AS号在接收路由的AS_PATH属性中出现。
通常在同一个AS内,为了减少IBGP连接数,可以把几个BGP路由器划分为一个集群,将其中的一台路由器配置为路由反射器,其它路由器作为客户机,通过路由反射器在客户机之间反射路由。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP Dedicated地址族视图。
address-family dedicated
(4) 配置本机作为路由反射器,对等体/对等体组作为路由反射器的客户机。
peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } reflect-client
缺省情况下,未配置路由反射器及其客户机。
(5) (可选)允许路由反射器在客户机之间反射路由。
reflect between-clients
缺省情况下,允许路由反射器在客户机之间反射路由。
配置本命令后,可减少同一AS内IBGP的连接数。
(6) (可选)配置路由反射器的集群ID。
reflector cluster-id { cluster-id | ipv4-address }
缺省情况下,每个路由反射器都使用自己的Router ID作为集群ID。
在用户视图下执行以下命令复位BGP Dedicated地址族下的会话。请选择其中一项进行配置。
· 软复位指定的BGP Dedicated会话。
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } { export | import } dedicated
· 复位指定的BGP Dedicated会话。
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } dedicated
如图4-3所示,6PE(IPv6 Provider Edge,IPv6供应商边缘)是一种过渡技术,它采用MPLS(Multiprotocol Label Switching,多协议标签交换)技术实现通过IPv4骨干网连接隔离的IPv6用户网络。当ISP希望在自己原有的IPv4/MPLS骨干网的基础上,为用户网络提供IPv6流量转发能力时,可以采用6PE技术方便地达到该目的。
图4-3 6PE组网图
6PE的主要思想是:
· 6PE设备从CE(Customer Edge,用户网络边缘)设备接收到用户网络的IPv6路由信息后,为该路由信息分配标签,通过MP-BGP会话将带有标签的IPv6路由信息发布给对端的6PE设备。对端6PE设备将接收到的IPv6路由信息扩散到本地连接的用户网络。从而,实现IPv6用户网络之间的路由信息发布。
· 为了隐藏IPv6报文、使得IPv4骨干网中的设备能够转发IPv6用户网络的报文,在IPv4骨干网络中需要建立公网隧道。公网隧道可以是GRE隧道、MPLS LSP隧道等。
· 6PE设备转发IPv6报文时,先为IPv6报文封装IPv6路由信息对应的标签(内层标签),再为其封装公网隧道对应的标签(外层标签)。骨干网中的设备根据外层标签转发报文,意识不到该报文为IPv6报文。对端6PE设备接收到报文后,删除内层和外层标签,将原始的IPv6报文转发到本地连接的用户网络。
MPLS、CE设备、P(Provider,服务提供商网络)设备的详细介绍,请参见“MPLS配置指导”。GRE的详细介绍,请参见“三层技术-IP业务配置指导”中的“GRE”。
为了实现IPv6路由信息的交互,CE和6PE之间可以配置IPv6静态路由、运行IPv6 IGP协议或IPv6 BGP协议。
设备只有工作在advance模式时,才能支持6PE功能。有关设备工作模式的详细介绍,请参见“基础配置指导”中的“设备管理”。
6PE组网环境中,需要进行如下配置:
· 在IPv4骨干网上建立公网隧道。具体配置请参见“三层技术-IP业务配置指导”中的“GRE”或“MPLS配置指导”。
· 在6PE设备上配置MPLS基本能力。具体配置请参见“MPLS配置指导”中的“MPLS基础”。
· 在6PE设备上配置BGP相关功能,以便通过BGP会话发布带有标签的IPv6路由信息。本文只介绍6PE设备上的BGP相关配置。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 指定6PE对等体/对等体组的AS号。
peer { group-name | ipv4-address [ mask-length ] } as-number as-number
缺省情况下,未指定6PE对等体/对等体组的AS号。
(4) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(5) 使能本地路由器与6PE对等体/对等体组交换IPv6单播路由信息的能力。
peer { group-name | ipv4-address [ mask-length ] } enable
缺省情况下,本地路由器不能与6PE对等体/对等体组交换IPv6单播路由信息。
(6) 使能与6PE对等体/对等体组交换带标签IPv6路由的能力。
peer { group-name | ipv4-address [ mask-length ] } label-route-capability
缺省情况下,不具有与6PE对等体/对等体组交换带标签IPv6路由的能力。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置向6PE对等体/对等体组发布团体属性。
peer { group-name | ipv4-address [ mask-length ] } advertise-community
缺省情况下,不向6PE对等体/对等体组发布团体属性。
(5) 配置向6PE对等体/对等体组发布扩展团体属性。
peer { group-name | ipv4-address [ mask-length ] } advertise-ext-community
缺省情况下,不向6PE对等体/对等体组发布扩展团体属性。
(6) 配置向指定6PE对等体/对等体组发送BGP更新消息时只携带公有AS号,不携带私有AS号。
peer { group-name | ipv4-address [ mask-length ] } public-as-only [ { force | limited } [ replace ] [ include-peer-as ] ]
缺省情况下,向4PE对等体/对等体组发送BGP更新消息时,既可以携带公有AS号,又可以携带私有AS号。
(7) 为从指定6PE对等体/对等体组接收的路由分配首选值。
peer { group-name | ipv4-address [ mask-length ] } preferred-value value
缺省情况下,从6PE对等体/对等体组接收的路由的首选值为0。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置向6PE对等体/对等体组发送缺省路由。
peer { group-name | ipv4-address [ mask-length ] } default-route-advertise [ route-policy route-policy-name ]
缺省情况下,不向6PE对等体/对等体组发送缺省路由。
(5) 配置路由过滤策略。
¡ 为6PE对等体/对等体组配置基于AS路径过滤列表的路由过滤策略。
peer { group-name | ipv4-address [ mask-length ] } as-path-acl { as-path-acl-number | as-path-acl-name } { export | import }
缺省情况下,没有为6PE对等体/对等体组配置基于AS路径过滤列表的路由接收过滤策略。
¡ 为6PE对等体/对等体组配置基于IPv6 ACL的过滤策略。
peer { group-name | ipv4-address [ mask-length ] } filter-policy { ipv6-acl-number | name ipv6-acl-name } { export | import }
缺省情况下,没有为6PE对等体/对等体组配置基于IPv6 ACL的过滤策略。
¡ 为6PE对等体/对等体组配置基于IPv6地址前缀列表的路由过滤策略。
peer { group-name | ipv4-address [ mask-length ] } prefix-list ipv6-prefix-list-name { export | import }
缺省情况下,没有为6PE对等体/对等体组配置基于IPv6前缀列表的路由过滤策略。
¡ 为6PE对等体/对等体组设置基于路由策略的路由过滤策略。
peer { group-name | ipv4-address [ mask-length ] } route-policy route-policy-name { export | import }
缺省情况下,没有为6PE对等体/对等体组配置基于路由策略的路由过滤策略。
(6) 保存所有来自指定6PE对等体/对等体组的原始路由更新信息。
peer { group-name | ipv4-address [ mask-length ] } keep-all-routes
缺省情况下,不保存来自6PE对等体/对等体组的原始路由更新信息。
(7) 配置允许从6PE对等体/对等体组接收的路由的最大数量。
peer { group-name | ipv4-address [ mask-length ] } route-limit prefix-number [ { alert-only | discard | reconnect reconnect-time } | percentage-value ] *
缺省情况下,不限制从6PE对等体/对等体组接收的路由数量。
(8) 为BGP对等体/对等体组配置SoO属性。
peer { group-name | ipv4-address [ mask-length ] } soo site-of-origin
缺省情况下,没有为BGP对等体/对等体组配置SoO属性。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置对于从6PE对等体/对等体组接收的路由,允许本地AS号在接收路由的AS_PATH属性中出现,并配置允许出现的次数。
peer { group-name | ipv4-address [ mask-length ] } allow-as-loop [ number ]
缺省情况下,不允许本地AS号在接收路由的AS_PATH属性中出现。
(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 ] } reflect-client
缺省情况下,未配置路由反射器及其客户机。
在用户视图下执行以下命令复位BGP 6PE连接。请选择其中一项进行配置。
· 软复位指定的BGP 6PE连接。
refresh bgp [ instance instance-name ] ipv4-address [ mask-length ] { export | import } ipv6 [ unicast ]
· 复位指定的BGP 6PE连接。
reset bgp [ instance instance-name ] ipv4-address [ mask-length ] ipv6 [ unicast ]
复位BGP会话时,会造成短暂的BGP会话中断。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BGP的运行情况,通过查看显示信息验证配置的效果。
表4-1 BGP扩展功能配置显示(IPv4单播)
|
操作 |
命令 |
|
显示BGP监控服务器的信息 |
display bgp [ instance instance-name ] bmp server server-number |
|
显示指定BGP实例下指定BMP Server监控的BGP对等体信息 |
display bgp [ instance instance-name ] bmp server server-number monitor-peer all display bgp [ instance instance-name ] bmp server server-number monitor-peer [ vpn-instance vpn-instance-name ] ipv4 { ipv4-address | ipv6-address } |
表4-2 BGP扩展功能配置显示(IPv6单播)
|
操作 |
命令 |
|
显示指定BGP实例下指定BMP Server监控的BGP对等体信息 |
display bgp [ instance instance-name ] bmp server server-number monitor-peer all display bgp [ instance instance-name ] bmp server server-number monitor-peer [ vpn-instance vpn-instance-name ] ipv6 { ipv4-address | ipv6-address } |
表4-3 BGP扩展功能配置显示(IPv4组播)
|
操作 |
命令 |
|
显示BGP监控服务器的信息 |
display bgp [ instance instance-name ] bmp server server-number |
表4-4 BGP扩展功能配置显示(LS地址族)
|
操作 |
命令 |
|
显示BGP LS对等体组的信息 |
display bgp [ instance instance-name ] group link-state [ group-name group-name ] |
|
显示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 ] |
|
显示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 ] update-group link-state [ ipv4-address | ipv6-address ] |
表4-5 BGP扩展功能配置显示(Dedicated地址族)
|
操作 |
命令 |
|
显示BGP Dedicated对等体组的信息 |
display bgp [ instance instance-name ] group dedicated [ group-name group-name ] |
|
显示BGP Dedicated对等体或对等体组的信息 |
display bgp [ instance instance-name ] peer dedicated [ { ipv4-address mask-length | ipv6-address prefix-length } | { ipv4-address | ipv6-address | group-name group-name } log-info | [ ipv4-address | ipv6-address ] verbose ] |
|
显示BGP Dedicated地址族的打包组信息 |
display bgp [ instance instance-name ] update-group dedicated [ ipv4-address | ipv6-address ] |
表4-6 BGP扩展功能配置显示(VPNv4地址族)
|
操作 |
命令 |
|
显示指定BGP实例下指定BMP Server监控的BGP对等体信息 |
display bgp [ instance instance-name ] bmp server server-number monitor-peer all display bgp [ instance instance-name ] server server-number monitor-peer vpnv4 { ipv4-address | ipv6-address } display bgp [ instance instance-name ] bmp server server-number monitor-peer vpn-instance vpn-instance-name vpnv4 ipv4-address |
表4-7 BGP扩展功能配置显示(VPNv6地址族)
|
操作 |
命令 |
|
显示指定BGP实例下指定BMP Server监控的BGP对等体信息 |
display bgp [ instance instance-name ] bmp server server-number monitor-peer all display bgp [ instance instance-name ] bmp server server-number monitor-peer vpnv6 { ipv4-address | ipv6-address } |
当BGP路由策略或协议发生变化后,如果需要通过复位BGP会话使新的配置生效,请在用户视图下进行下列配置。
复位BGP会话时,会造成短暂的BGP会话中断。
表4-8 复位BGP会话
|
操作 |
命令 |
|
复位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 |
|
复位Dedicated地址族下的BGP会话 |
reset bgp [ instance instance-name ] { as-number | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } dedicated |
|
软复位Dedicated地址族下的BGP会话 |
refresh bgp [ instance instance-name ] { ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] | all | external | group group-name | internal } { export | import } dedicated |
在用户视图下,执行reset命令可以清除BGP相关统计信息。
表4-9 清除BGP信息
|
操作 |
命令 |
|
复位BMP server连接并清除相关统计信息 |
reset bgp [ instance instance-name ] bmp server { server-number | all } |
|
清除BMP监控服务器记录的报文统计信息 |
reset bgp [ instance instance-name ] bmp server server-number statistics |
· 所有路由器运行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-4 BGP LS配置组网图
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 11
[SwitchA-vlan11] quit
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ip address 192.1.1.1 24
[SwitchA-Vlan-interface11] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 11 12 13
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface ten-gigabitethernet 1/0/3
[SwitchB-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/3] port trunk permit vlan 13
[SwitchB-Ten-GigabitEthernet1/0/3] quit
[SwitchB] interface vlan-interface 11
[SwitchB-Vlan-interface11] ip address 192.1.1.2 24
[SwitchB-Vlan-interface11] quit
[SwitchB] interface vlan-interface 12
[SwitchB-Vlan-interface12] ip address 193.1.1.2 24
[SwitchB-Vlan-interface12] quit
[SwitchB] interface vlan-interface 13
[SwitchB-Vlan-interface13] ip address 194.1.1.2 24
[SwitchB-Vlan-interface13] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] vlan 12
[SwitchC-vlan12] quit
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 12
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface vlan-interface 12
[SwitchC-Vlan-interface12] ip address 193.1.1.1 24
[SwitchC-Vlan-interface12] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] vlan 13
[SwitchD-vlan13] quit
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 13
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface vlan-interface 13
[SwitchD-Vlan-interface13] ip address 194.1.1.1 24
[SwitchD-Vlan-interface13] quit
(2) 配置BGP连接
# 配置Switch A。
[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] 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] 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] 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 router 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, T IP reachable route, 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,
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
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[o0x01]
[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[o0x01]
[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信息。
· Switch A
#
sysname SwitchA
#
vlan 11
#
interface Vlan-interface11
ip address 192.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
bgp 100
peer 192.1.1.2 as-number 100
#
address-family link-state
peer 192.1.1.2 enable
#
return
· Switch B
#
sysname SwitchB
#
vlan 11 to 13
#
interface Vlan-interface11
ip address 192.1.1.2 255.255.255.0
#
interface Vlan-interface12
ip address 193.1.1.2 255.255.255.0
#
interface Vlan-interface13
ip address 194.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 13
#
bgp 100
peer 192.1.1.1 as-number 100
peer 193.1.1.1 as-number 100
peer 194.1.1.1 as-number 100
#
address-family link-state
peer 192.1.1.1 enable
peer 192.1.1.1 reflect-client
peer 193.1.1.1 enable
peer 194.1.1.1 enable
#
return
· Switch C
#
sysname SwitchC
#
ospf 1
distribute bgp-ls
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
vlan 12
#
interface Vlan-interface12
ip address 193.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 12
#
bgp 100
peer 193.1.1.2 as-number 100
#
address-family link-state
peer 193.1.1.2 enable
#
return
· Switch D
#
sysname SwitchD
#
ospf 1
distribute bgp-ls
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
vlan 13
#
interface Vlan-interface13
ip address 194.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 13
#
bgp 100
peer 194.1.1.2 as-number 100
#
address-family link-state
peer 194.1.1.2 enable
#
return
AS 100中的Switch A与Switch D为终端提供接入服务,并通过BGP协议实现接口绑定信息在不同接入设备上的同步,确保终端迁移到任意接入设备后都可通过安全过滤并快速上线。
具体需求为:
· 所有设备运行BGP协议,Switch A与Switch B、Switch C之间建立EBGP连接,Switch D与Switch B、Switch C之间建立EBGP连接。
· 终端通过DHCP获取到IP地址后,Switch A/Switch D生成一条对应的IP Source Guard绑定表项,通过BGP同步到Switch B和Switch C,再由Switch B和Switch C将表项同步到Switch D/Switch A。
· 终端下线,即通过DHCP释放IP地址,IP Source Guard绑定表项老化后,通过BGP Dedicate地址族撤销路由。
图4-5 BGP Dedicated配置组网图
|
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
|
Switch A |
Vlan-int11 |
11.11.11.11/24 |
Switch C |
Vlan-int12 |
22.22.22.22/24 |
|
|
Vlan-int12 |
22.22.22.11/24 |
|
Vlan-int11 |
44.44.44.11/24 |
|
|
Vlan-int13 |
192.168.1.1/24 |
|
Vlan-int13 |
192.168.2.1/24 |
|
|
Vlan-int14 |
10.1.1.1/24 |
|
Vlan-int14 |
20.1.1.1/24 |
|
Switch B |
Vlan-int11 |
11.11.11.22/24 |
Switch D |
Vlan-int11 |
44.44.44.22/24 |
|
|
Vlan-int12 |
33.33.33.11/24 |
|
Vlan-int12 |
33.33.33.22/24 |
|
Switch E |
Vlan-int14 |
10.1.1.2/24 |
Switch F |
Vlan-int14 |
20.1.1.2/24 |
(1) 配置各接口的IP地址
# 配置Switch A。
<Sysname> system-view
[Sysname] sysname SwitchA
[SwitchA] vlan 11 12 13 14
[SwitchA] interface ten-gigabitethernet 1/0/1
[SwitchA-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchA-Ten-GigabitEthernet1/0/1] quit
[SwitchA] interface ten-gigabitethernet 1/0/2
[SwitchA-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchA-Ten-GigabitEthernet1/0/2] quit
[SwitchA] interface ten-gigabitethernet 1/0/3
[SwitchA-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/3] port trunk permit vlan 13
[SwitchA-Ten-GigabitEthernet1/0/3] quit
[SwitchA] interface ten-gigabitethernet 1/0/4
[SwitchA-Ten-GigabitEthernet1/0/4] port link-type trunk
[SwitchA-Ten-GigabitEthernet1/0/4] port trunk permit vlan 14
[SwitchA-Ten-GigabitEthernet1/0/4] quit
[SwitchA] interface vlan-interface 11
[SwitchA-Vlan-interface11] ip address 11.11.11.11 24
[SwitchA-Vlan-interface11] quit
[SwitchA] interface vlan-interface 12
[SwitchA-Vlan-interface12] ip address 22.22.22.11 24
[SwitchA-Vlan-interface12] quit
[SwitchA] interface vlan-interface 13
[SwitchA-Vlan-interface13] ip address 192.168.1.1 24
[SwitchA-Vlan-interface13] quit
[SwitchA] interface vlan-interface 14
[SwitchA-Vlan-interface14] ip address 10.1.1.1 24
[SwitchA-Vlan-interface14] quit
# 配置Switch B。
<Sysname> system-view
[Sysname] sysname SwitchB
[SwitchB] vlan 11 12
[SwitchB] interface ten-gigabitethernet 1/0/1
[SwitchB-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchB-Ten-GigabitEthernet1/0/1] quit
[SwitchB] interface ten-gigabitethernet 1/0/2
[SwitchB-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchB-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchB-Ten-GigabitEthernet1/0/2] quit
[SwitchB] interface vlan-interface 11
[SwitchB-Vlan-interface11] ip address 11.11.11.22 24
[SwitchB-Vlan-interface11] quit
[SwitchB] interface vlan-interface 12
[SwitchB-Vlan-interface12] ip address 33.33.33.11 24
[SwitchB-Vlan-interface12] quit
# 配置Switch C。
<Sysname> system-view
[Sysname] sysname SwitchC
[SwitchC] vlan 11 12
[SwitchC] interface ten-gigabitethernet 1/0/1
[SwitchC-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchC-Ten-GigabitEthernet1/0/1] quit
[SwitchC] interface ten-gigabitethernet 1/0/2
[SwitchC-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchC-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchC-Ten-GigabitEthernet1/0/2] quit
[SwitchC] interface vlan-interface 11
[SwitchC-Vlan-interface11] ip address 44.44.44.11 24
[SwitchC-Vlan-interface11] quit
[SwitchC] interface vlan-interface 12
[SwitchC-Vlan-interface12] ip address 22.22.22.22 24
[SwitchC-Vlan-interface12] quit
# 配置Switch D。
<Sysname> system-view
[Sysname] sysname SwitchD
[SwitchD] vlan 11 12 13 14
[SwitchD] interface ten-gigabitethernet 1/0/1
[SwitchD-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/1] port trunk permit vlan 11
[SwitchD-Ten-GigabitEthernet1/0/1] quit
[SwitchD] interface ten-gigabitethernet 1/0/2
[SwitchD-Ten-GigabitEthernet1/0/2] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/2] port trunk permit vlan 12
[SwitchD-Ten-GigabitEthernet1/0/2] quit
[SwitchD] interface ten-gigabitethernet 1/0/3
[SwitchD-Ten-GigabitEthernet1/0/3] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/3] port trunk permit vlan 13
[SwitchD-Ten-GigabitEthernet1/0/3] quit
[SwitchD] interface ten-gigabitethernet 1/0/4
[SwitchD-Ten-GigabitEthernet1/0/4] port link-type trunk
[SwitchD-Ten-GigabitEthernet1/0/4] port trunk permit vlan 14
[SwitchD-Ten-GigabitEthernet1/0/4] quit
[SwitchD] interface vlan-interface 11
[SwitchD-Vlan-interface11] ip address 44.44.44.22 24
[SwitchD-Vlan-interface11] quit
[SwitchD] interface vlan-interface 12
[SwitchD-Vlan-interface12] ip address 33.33.33.22 24
[SwitchD-Vlan-interface12] quit
[SwitchD] interface vlan-interface 13
[SwitchD-Vlan-interface13] ip address 192.168.2.1 24
[SwitchD-Vlan-interface13] quit
[SwitchD] interface vlan-interface 14
[SwitchD-Vlan-interface14] ip address 20.1.1.1 24
[SwitchD-Vlan-interface14] quit
# 配置Switch E。
<Sysname> system-view
[Sysname] sysname SwitchE
[SwitchE] vlan 14
[SwitchE-vlan14] quit
[SwitchE] interface ten-gigabitethernet 1/0/1
[SwitchE-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchE-Ten-GigabitEthernet1/0/1] port trunk permit vlan 14
[SwitchE-Ten-GigabitEthernet1/0/1] quit
[SwitchE] interface vlan-interface 14
[SwitchE-Vlan-interface14] ip address 10.1.1.2 24
[SwitchE-Vlan-interface14] quit
# 配置Switch F。
<Sysname> system-view
[Sysname] sysname SwitchF
[SwitchF] vlan 14
[SwitchF-vlan14] quit
[SwitchF] interface ten-gigabitethernet 1/0/1
[SwitchF-Ten-GigabitEthernet1/0/1] port link-type trunk
[SwitchF-Ten-GigabitEthernet1/0/1] port trunk permit vlan 14
[SwitchF-Ten-GigabitEthernet1/0/1] quit
[SwitchF] interface vlan-interface 14
[SwitchF-Vlan-interface14] ip address 20.1.1.2 24
[SwitchF-Vlan-interface14] quit
(2) 配置BGP连接
# 配置Switch A。
[SwitchA] bgp 100
[SwitchA-bgp-default] peer 11.11.11.22 as-number 200
[SwitchA-bgp-default] peer 22.22.22.22 as-number 200
[SwitchA-bgp-default] address-family dedicated
[SwitchA-bgp-default-dedicated] peer 11.11.11.22 enable
[SwitchA-bgp-default-dedicated] peer 22.22.22.22 enable
# 允许Switch A接收来自Switch D的AS_PATH包含本地AS号的BGP路由。
[SwitchA-bgp-default-dedicated] peer 11.11.11.22 allow-as-loop 1
[SwitchA-bgp-default-dedicated] peer 22.22.22.22 allow-as-loop 1
[SwitchA-bgp-default-dedicated] quit
[SwitchA-bgp-default] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp-default] peer 11.11.11.11 as-number 100
[SwitchB-bgp-default] peer 33.33.33.22 as-number 100
[SwitchB-bgp-default] address-family dedicated
[SwitchB-bgp-default-dedicated] peer 11.11.11.11 enable
[SwitchB-bgp-default-dedicated] peer 33.33.33.22 enable
[SwitchB-bgp-default-dedicated] quit
[SwitchB-bgp-default] quit
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp-default] peer 22.22.22.11 as-number 100
[SwitchC-bgp-default] peer 44.44.44.22 as-number 100
[SwitchC-bgp-default] address-family dedicated
[SwitchC-bgp-default-dedicated] peer 22.22.22.11 enable
[SwitchC-bgp-default-dedicated] peer 44.44.44.22 enable
[SwitchC-bgp-default-dedicated] quit
[SwitchC-bgp-default] quit
# 配置Switch D。
[SwitchD] bgp 100
[SwitchD-bgp-default] peer 33.33.33.11 as-number 200
[SwitchD-bgp-default] peer 44.44.44.11 as-number 200
[SwitchD-bgp-default] address-family dedicated
[SwitchD-bgp-default-dedicated] peer 33.33.33.11 enable
[SwitchD-bgp-default-dedicated] peer 44.44.44.11 enable
# 允许Switch D接收来自Switch A的AS_PATH包含本地AS号的BGP路由。
[SwitchD-bgp-default-dedicated] peer 33.33.33.11 allow-as-loop 1
[SwitchD-bgp-default-dedicated] peer 44.44.44.11 allow-as-loop 1
[SwitchD-bgp-default-dedicated] quit
[SwitchD-bgp-default] quit
(3) 在Switch A和Switch D上配置DHCP中继功能
# 配置Switch A。
[SwitchA] dhcp enable
[SwitchA] dhcp relay client-information record
[SwitchA] interface vlan-interface 13
[SwitchA-Vlan-interface13] dhcp select relay
[SwitchA-Vlan-interface13] dhcp relay server-address 10.1.1.2
# 配置Switch D。
[SwitchD] dhcp enable
[SwitchD] dhcp relay client-information record
[SwitchD] interface vlan-interface 13
[SwitchD-Vlan-interface13] dhcp select relay
[SwitchD-Vlan-interface13] dhcp relay server-address 20.1.1.2
(4) 在Switch E和Switch F上配置DHCP服务器功能
# 配置Switch E。
[SwitchE] dhcp server ip-pool 1
[SwitchE-dhcp-pool-1] network 192.168.1.0 mask 255.255.255.0
[SwitchE-dhcp-pool-1] expired day 10 hour 12
[SwitchE-dhcp-pool-1] gateway-list 192.168.1.1
[SwitchE-dhcp-pool-1] quit
[SwitchE] dhcp enable
[SwitchE] interface vlan-interface 14
[SwitchE-Vlan-interface14] dhcp select server
[SwitchE-Vlan-interface14] quit
[SwitchE] ip route-static 192.168.1.0 24 10.1.1.1
# 配置Switch F。
[SwitchF] dhcp server ip-pool 1
[SwitchF-dhcp-pool-1] network 192.168.2.0 mask 255.255.255.0
[SwitchF-dhcp-pool-1] expired day 10 hour 12
[SwitchF-dhcp-pool-1] gateway-list 192.168.2.1
[SwitchF-dhcp-pool-1] quit
[SwitchF] dhcp enable
[SwitchF] interface vlan-interface 14
[SwitchF-Vlan-interface14] dhcp select server
[SwitchF-Vlan-interface14] quit
[SwitchF] ip route-static 192.168.2.0 24 20.1.1.1
(5) 在Switch A和Switch D上启动接口绑定功能
# 开启IPv4接口绑定功能。
[SwitchA-Vlan-interface13] ip verify source ip-address mac-address
# 开启IPv4接口绑定功能。
[SwitchD-Vlan-interface13] ip verify source ip-address mac-address
# Host A和Host B作为DHCP客户端通过DHCP获取IP地址后,查看Switch A上的IPv4接口绑定信息。可以看到,Switch A上不仅存在本地的接口绑定信息,还存在Switch D同步过来的远端接口绑定信息。Switch D上的显示信息与此类似。
[SwitchA] display ip source binding
Total entries found: 2
IP address MAC address Interface VLAN Type
192.168.1.2 5e2f-46ba-0502 Vlan13 13 DHCP relay
192.168.2.2 5e2f-494a-0602 N/A 13 Remote
# 在Switch A上查看BGP Dedicated路由信息。可以看到,Switch A通过BGP Dedicated路由学习到了远端的接口绑定信息。
[SwitchA] display bgp routing-table dedicated
Total number of routes: 3
BGP local router ID is 192.168.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 : [1][48][5e2f-46ba-0502][32][192.168.1.2][3]/120
NextHop : 0.0.0.0 LocPrf : 100
PrefVal : 32768 OutLabel : NULL
MED : 0
Path/Ogn: i
* >e Network : [1][48][5e2f-494a-0602][32][192.168.2.2][3]/120
NextHop : 22.22.22.22 LocPrf :
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: 200 100i
* e Network : [1][48][5e2f-494a-0602][32][192.168.2.2][3]/120
NextHop : 11.11.11.22 LocPrf :
PrefVal : 0 OutLabel : NULL
MED :
Path/Ogn: 200 100i
· Switch A
#
sysname SwitchA
#
dhcp enable
dhcp relay client-information record
#
vlan 11 to 14
#
interface Vlan-interface11
ip address 11.11.11.11 255.255.255.0
#
interface Vlan-interface12
ip address 22.22.22.11 255.255.255.0
#
interface Vlan-interface13
ip address 192.168.1.1 255.255.255.0
dhcp select relay
dhcp relay server-address 10.1.1.2
ip verify source ip-address mac-address
#
interface Vlan-interface14
ip address 10.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 13
#
interface Ten-GigabitEthernet1/0/4
port link-type trunk
port trunk permit vlan 1 14
#
bgp 100
peer 11.11.11.22 as-number 200
peer 22.22.22.22 as-number 200
#
address-family dedicated
peer 11.11.11.22 enable
peer 11.11.11.22 allow-as-loop 1
peer 22.22.22.22 enable
peer 22.22.22.22 allow-as-loop 1
#
return
· Switch B
#
sysname SwitchB
#
vlan 11 to 12
#
interface Vlan-interface11
ip address 11.11.11.22 255.255.255.0
#
interface Vlan-interface12
ip address 33.33.33.11 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
bgp 200
peer 11.11.11.11 as-number 100
peer 33.33.33.22 as-number 100
#
address-family dedicated
peer 11.11.11.11 enable
peer 33.33.33.22 enable
#
return
· Switch C
#
sysname SwitchC
#
vlan 11 to 12
#
interface Vlan-interface11
ip address 44.44.44.11 255.255.255.0
#
interface Vlan-interface12
ip address 22.22.22.22 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
bgp 200
peer 22.22.22.11 as-number 100
peer 44.44.44.22 as-number 100
#
address-family dedicated
peer 22.22.22.11 enable
peer 44.44.44.22 enable
#
return
· Switch D
#
sysname SwitchD
#
dhcp enable
dhcp relay client-information record
#
vlan 11 to 14
#
interface Vlan-interface11
ip address 44.44.44.22 255.255.255.0
#
interface Vlan-interface12
ip address 33.33.33.22 255.255.255.0
#
interface Vlan-interface13
ip address 192.168.2.1 255.255.255.0
dhcp select relay
dhcp relay server-address 20.1.1.2
ip verify source ip-address mac-address
#
interface Vlan-interface14
ip address 20.1.1.1 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 11
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 12
#
interface Ten-GigabitEthernet1/0/3
port link-type trunk
port trunk permit vlan 1 13
#
interface Ten-GigabitEthernet1/0/4
port link-type trunk
port trunk permit vlan 1 14
#
bgp 100
peer 33.33.33.11 as-number 200
peer 44.44.44.11 as-number 200
#
address-family dedicated
peer 33.33.33.11 enable
peer 33.33.33.11 allow-as-loop 1
peer 44.44.44.11 enable
peer 44.44.44.11 allow-as-loop 1
#
return
· Switch E
#
sysname SwitchE
#
dhcp enable
#
vlan 14
#
dhcp server ip-pool 1
gateway-list 192.168.1.1
network 192.168.1.0 mask 255.255.255.0
expired day 10 hour 12
#
interface Vlan-interface14
ip address 10.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 14
#
return
· Switch F
#
sysname SwitchF
#
dhcp enable
#
vlan 14
#
dhcp server ip-pool 1
gateway-list 192.168.2.1
network 192.168.2.0 mask 255.255.255.0
expired day 10 hour 12
#
interface Vlan-interface14
ip address 20.1.1.2 255.255.255.0
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 14
#
return
通过配置6PE实现利用MPLS技术跨越运营商的IPv4网络连接隔离的两个IPv6用户网络。其中:
· 运营商网络内部采用OSPF作为IGP路由协议。
· PE 1和PE 2为运营商网络的边缘设备,PE 1和PE 2之间建立IPv4 IBGP连接。
· CE 1和CE 2为IPv6用户网络的边缘设备,用户网络通过该设备接入运营商网络。
· CE与PE之间配置IPv6静态路由,以指导IPv6报文的转发。
图4-6 6PE配置组网图
(1) 配置PE 1
# 配置各接口的地址。
<Sysname> system-view
[Sysname] sysname PE1
[PE1] interface loopback 0
[PE1-LoopBack0] ip address 2.2.2.2 32
[PE1-LoopBack0] quit
[PE1] vlan 10 30
[PE1] interface ten-gigabitethernet 1/0/1
[PE1-Ten-GigabitEthernet1/0/1] port link-type trunk
[PE1-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[PE1-Ten-GigabitEthernet1/0/1] quit
[PE1] interface ten-gigabitethernet 1/0/2
[PE1-Ten-GigabitEthernet1/0/2] port link-type trunk
[PE1-Ten-GigabitEthernet1/0/2] port trunk permit vlan 30
[PE1-Ten-GigabitEthernet1/0/2] quit
[PE1] interface vlan-interface 10
[PE1-Vlan-interface10] ipv6 address 10::2 64
[PE1-Vlan-interface10] quit
[PE1] interface vlan-interface 30
[PE1-Vlan-interface30] ip address 1.1.1.1 16
[PE1-Vlan-interface30] quit
# 全局使能LDP能力,并配置LSP触发策略。
[PE1] mpls lsr-id 2.2.2.2
[PE1] mpls ldp
[PE1-ldp] lsp-trigger all
[PE1-ldp] quit
# 在接口Vlan-interface30上使能MPLS和LDP能力。
[PE1] interface vlan-interface 30
[PE1-Vlan-interface30] mpls enable
[PE1-Vlan-interface30] mpls ldp enable
[PE1-Vlan-interface30] quit
# 配置IBGP,使能对等体的6PE能力,并引入IPv6的直连和静态路由。
[PE1] bgp 65100
[PE1-bgp-default] router-id 2.2.2.2
[PE1-bgp-default] peer 3.3.3.3 as-number 65100
[PE1-bgp-default] peer 3.3.3.3 connect-interface loopback 0
[PE1-bgp-default] address-family ipv6
[PE1-bgp-default-ipv6] import-route direct
[PE1-bgp-default-ipv6] import-route static
[PE1-bgp-default-ipv6] peer 3.3.3.3 enable
[PE1-bgp-default-ipv6] peer 3.3.3.3 label-route-capability
[PE1-bgp-default-ipv6] quit
[PE1-bgp-default] quit
# 配置到CE 1的静态路由。
[PE1] ipv6 route-static 1::1 128 10::1
# 配置OSPF,实现运营商网络内部互通。
[PE1] ospf
[PE1-ospf-1] area 0
[PE1-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[PE1-ospf-1-area-0.0.0.0] network 1.1.0.0 0.0.255.255
[PE1-ospf-1-area-0.0.0.0] quit
[PE1-ospf-1] quit
(2) 配置PE 2
# 配置各接口的地址。
<Sysname> system-view
[Sysname] sysname PE2
[PE2] interface loopback 0
[PE2-LoopBack0] ip address 3.3.3.3 32
[PE2-LoopBack0] quit
[PE2] vlan 20 30
[PE2] interface ten-gigabitethernet 1/0/1
[PE2-Ten-GigabitEthernet1/0/1] port link-type trunk
[PE2-Ten-GigabitEthernet1/0/1] port trunk permit vlan 20
[PE2-Ten-GigabitEthernet1/0/1] quit
[PE2] interface ten-gigabitethernet 1/0/2
[PE2-Ten-GigabitEthernet1/0/2] port link-type trunk
[PE2-Ten-GigabitEthernet1/0/2] port trunk permit vlan 30
[PE2-Ten-GigabitEthernet1/0/2] quit
[PE2] interface vlan-interface 20
[PE2-Vlan-interface20] ipv6 address 20::2 64
[PE2-Vlan-interface20] quit
[PE2] interface vlan-interface 30
[PE2-Vlan-interface30] ip address 1.1.1.2 16
[PE2-Vlan-interface30] quit
# 全局使能LDP能力,并配置LSP触发策略。
[PE2] mpls lsr-id 3.3.3.3
[PE2] mpls ldp
[PE2-mpls-ldp] lsp-trigger all
[PE2-mpls-ldp] quit
# 在接口Vlan-interface30上使能MPLS和LDP能力。
[PE2] interface vlan-interface 30
[PE2-Vlan-interface30] mpls enable
[PE2-Vlan-interface30] mpls ldp enable
[PE2-Vlan-interface30] quit
# 配置IBGP,使能对等体的6PE能力,并引入IPv6的直连和静态路由。
[PE2] bgp 65100
[PE2-bgp-default] router-id 3.3.3.3
[PE2-bgp-default] peer 2.2.2.2 as-number 65100
[PE2-bgp-default] peer 2.2.2.2 connect-interface loopback 0
[PE2-bgp-default] address-family ipv6
[PE2-bgp-default-ipv6] import-route direct
[PE2-bgp-default-ipv6] import-route static
[PE2-bgp-default-ipv6] peer 2.2.2.2 enable
[PE2-bgp-default-ipv6] peer 2.2.2.2 label-route-capability
[PE2-bgp-default-ipv6] quit
[PE2-bgp-default] quit
# 配置到CE 2的静态路由。
[PE2] ipv6 route-static 4::4 128 20::1
# 配置OSPF,实现运营商内部互通。
[PE2] ospf
[PE2-ospf-1] area 0
[PE2-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[PE2-ospf-1-area-0.0.0.0] network 1.1.0.0 0.0.255.255
[PE2-ospf-1-area-0.0.0.0] quit
[PE2-ospf-1] quit
(3) 配置CE 1
# 配置各接口的地址。
<Sysname> system-view
[Sysname] sysname CE1
[CE1] interface loopback 0
[CE1-LoopBack0] ipv6 address 1::1 128
[CE1-LoopBack0] quit
[CE1] vlan 10
[CE1-vlan10] quit
[CE1] interface ten-gigabitethernet 1/0/1
[CE1-Ten-GigabitEthernet1/0/1] port link-type trunk
[CE1-Ten-GigabitEthernet1/0/1] port trunk permit vlan 10
[CE1-Ten-GigabitEthernet1/0/1] quit
[CE1] interface vlan-interface 10
[CE1-Vlan-interface10] ipv6 address 10::1 64
[CE1-Vlan-interface10] quit
# 配置静态路由,缺省下一跳为PE 1。
[CE1] ipv6 route-static :: 0 10::2
(4) 配置CE 2
# 配置各接口的地址。
<Sysname> system-view
[Sysname] sysname CE2
[CE2] interface loopback 0
[CE2-LoopBack0] ipv6 address 4::4 128
[CE2-LoopBack0] quit
[CE2] vlan 20
[CE2-vlan20] quit
[CE2] interface ten-gigabitethernet 1/0/1
[CE2-Ten-GigabitEthernet1/0/1] port link-type trunk
[CE2-Ten-GigabitEthernet1/0/1] port trunk permit vlan 20
[CE2-Ten-GigabitEthernet1/0/1] quit
[CE2] interface vlan-interface 20
[CE2-Vlan-interface20] ipv6 address 20::1 64
[CE2-Vlan-interface20] quit
# 配置静态路由,缺省下一跳为PE 2。
[CE2] ipv6 route-static :: 0 20::2
# 显示PE 1和PE 2上的IPv6 BGP路由信息,可以看到PE 1和PE 2上均存在到达两个IPv6用户网络的路由。下面仅以PE 1为例。
[PE1] display bgp routing-table ipv6
Total number of routes: 7
BGP local router ID is 2.2.2.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 : ::FFFF:127.0.0.0 PrefixLen : 104
NextHop : :: LocPrf :
PrefVal : 32768 OutLabel : NULL
MED : 0
Path/Ogn: ?
* i Network : ::FFFF:127.0.0.0 PrefixLen : 104
NextHop : ::FFFF:3.3.3.3 LocPrf : 100
PrefVal : 0 OutLabel : 600127
MED : 0
Path/Ogn: ?
* > Network : 1::1 PrefixLen : 128
NextHop : 10::1 LocPrf :
PrefVal : 32768 OutLabel : NULL
MED : 0
Path/Ogn: ?
* >i Network : 4::4 PrefixLen : 128
NextHop : ::FFFF:3.3.3.3 LocPrf : 100
PrefVal : 0 OutLabel : 600126
MED : 0
Path/Ogn: ?
* > Network : 10:: PrefixLen : 64
NextHop : :: LocPrf :
PrefVal : 32768 OutLabel : NULL
MED : 0
Path/Ogn: ?
* > Network : 10::2 PrefixLen : 128
NextHop : ::1 LocPrf :
PrefVal : 32768 OutLabel : NULL
MED : 0
Path/Ogn: ?
* >i Network : 20:: PrefixLen : 64
NextHop : ::FFFF:3.3.3.3 LocPrf : 100
PrefVal : 0 OutLabel : 600127
MED : 0
Path/Ogn: ?
# CE 1可以ping通CE 2的IPv6地址(Loopback接口地址4::4)。
· PE 1
#
sysname PE1
#
ospf 1
area 0.0.0.0
network 1.1.0.0 0.0.255.255
network 2.2.2.2 0.0.0.0
#
mpls lsr-id 2.2.2.2
#
vlan 10
#
vlan 30
#
mpls ldp
lsp-trigger all
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface Vlan-interface10
ipv6 address 10::2/64
#
interface Vlan-interface30
ip address 1.1.1.1 255.255.0.0
mpls enable
mpls ldp enable
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 30
#
bgp 65100
router-id 2.2.2.2
peer 3.3.3.3 as-number 65100
peer 3.3.3.3 connect-interface LoopBack0
#
address-family ipv6 unicast
import-route direct
import-route static
peer 3.3.3.3 enable
peer 3.3.3.3 label-route-capability
#
return
· PE 2
#
sysname PE2
#
ospf 1
area 0.0.0.0
network 1.1.0.0 0.0.255.255
network 3.3.3.3 0.0.0.0
#
mpls lsr-id 3.3.3.3
#
vlan 20
#
vlan 30
#
mpls ldp
lsp-trigger all
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface Vlan-interface20
ipv6 address 20::2/64
#
interface Vlan-interface30
ip address 1.1.1.2 255.255.0.0
mpls enable
mpls ldp enable
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 20
#
interface Ten-GigabitEthernet1/0/2
port link-type trunk
port trunk permit vlan 1 30
#
bgp 65100
router-id 3.3.3.3
peer 2.2.2.2 as-number 65100
peer 2.2.2.2 connect-interface LoopBack0
#
address-family ipv6 unicast
import-route direct
import-route static
peer 2.2.2.2 enable
peer 2.2.2.2 label-route-capability
#
return
· CE 1
#
sysname CE1
#
vlan 10
#
interface LoopBack0
ipv6 address 1::1/128
#
interface Vlan-interface10
ipv6 address 10::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 10
#
ipv6 route-static :: 0 10::2
#
return
· CE 2
#
sysname CE2
#
vlan 20
#
interface LoopBack0
ipv6 address 4::4/128
#
interface Vlan-interface20
ipv6 address 20::1/64
#
interface Ten-GigabitEthernet1/0/1
port link-type trunk
port trunk permit vlan 1 20
#
ipv6 route-static :: 0 20::2
#
return
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!
