zl程序教程

您现在的位置是:首页 >  工具

当前栏目

华为数通笔记-BGP环路、次优问题、黑洞路由

路由笔记华为 BGP 问题 黑洞 数通 环路
2023-09-11 14:15:52 时间

一、路由引入造成的环路

 场景描述:

如图所示,R1将10.10.10.10 通告进BGP,且传递给AS 200,R2 与R4建立iBGP邻居,R4从iBGP学习到该路由,R4将iBGP引入进IGP,此时,R3访问10.10.10.10 时将会出现环路。。

具体原因:

由于R3没有运行BGP,只能通过IGP学习到该路由,R4 BGP引入到IGPR3将会从R4学习到该路由如果R3访问10.10.10.10,下一跳数据包将会交给R4。而R4iBGP中学到该路由,下一跳为R2,但是R4需要通过R3才能到达R2因此数据包会再次经过R3,故而形成环路。

解决方式1

改变AS 200的物理拓扑,R2R4直接相连,形成AS内三角形的组网,如下图所示,R4到达10.10.10.10 将会直接经过R2到达,不会造成环路。

解决方法2

在R2上引入BGP路由,R3访问10.10.10.10 时则会直接经过R2访问,不会造成环路。

二、聚合路由引起的环路问题

场景描述:

如上图所示,AS 100 中通告了三条网段分别为172.16. 1.0/24、172.16.2.0/24、172.16.3.0/24, 为了减少AS 200的路由数量,在R2上进行了手动聚合,但没有携带AS-SET关键字。假设聚合时不生成指向NULL 0的路由条目,将会带来环路问题,具体过程如下所述。

问题分析:

由于没有携带AS-SET 关键字,该聚合路由被重新通告进R1,对于R1来说,明细路由来自于本地IGP (通告进OSPF),聚合路由来自于R2,BGP聚合路由和明细路由都出现在IP路由表中。IGP收敛速度比BGP,如果R1上OSPF中的明细路由消失了,R1没有了明细路由,此时,如果R1要访问一个明细地址,将会匹配到聚合路由,会将数据包发送给R2,而R2是通过BGP从R1学到的这些明细路由,但是由于BGP的收敛速度慢,R2 BGP表无变化。数据包将再次指向R1,至此,将会出现短暂环路。

解决方法:

实际上BGP生成聚合路由时,将会在IP路由表中自动形成一条指向NULL 0接口的路由聚合条目。如果R1有了这条指向NULL 0的聚合路由,那么R1匹配到该路由条目时将会直接丢弃掉,从而避免环路。

三、默认路由注入造成的次优路径

BGP中的默认路由下放:当对等体的BGP路由表中的多条路由都只是由本端发送时,可以在本端配置向对等体发送缺省路由功能。配置向对等体发送缺省路由功能后,无论本端的路由表中是否存在缺省路由,都向对等体发布一条下一跳地址为本地地址的缺省路由,从而很大程度地减少网络路由数量,节省对等体的内存资源与网络资源。

实验:

场景描述:

如图所示,AS 100中的路由器R1与R2和R3是eBGP邻居,R1分别向R2和R3发布默认路由,R2和R3为OSPF域中的ASBR路由器,分别向该域中有条件地发布默认路由(ASBR的路由表中存在默认路由才向OSPF发布)

问题分析:

假设R1与R2之间的链路出现故障,R2则收不到eBGP发布进来的默认路由,而R3从OSPF发布的默认路由被R2接收到,此时R2将会把该默认路由放进路由表,下一跳指向R4。但是如果R1与R2的链路恢复以后,R1通过eBGP向R2发布的默认路由也是不会注入到R2的路由表的,原因在于eBGP的路由优先级为255,OSPF默认路由优先级为150(LSA5)因此R2也不会将eBGP的默认路由放进路由表,这样会造成R2选择一条次优路径,如果匹配到默认路由时将会沿着R4-R3-R1

解决方法:

修改R2的路由优先级,将BGP的优先级改得更小(要小于OSPF的150),让BGP的默认路由出现在路由表中。

四、黑洞路由

R2R4IBGP邻居,使用环回口建立 IBGP 邻居,管理员在R2R4上分别将SiteA SiteB通告进了BGP

Site1访问Site2会发生成什么事情?

SiteA无法与SiteB互访

在底层路由可达的前提下, BGP 可以跨设备建立邻居关系。所以 SiteA 的路由是可以通过 BGP 协议从 R2设备传递到 R4设备上再传递进 SiteB 站点,同理 SiteB 的路由也是可以通过 BGP 协议从 R4设备传递到 R2 设备上,再传递到 SiteA 站点,两个站点都存在到达对方的路由条目。

但是由于中间的设备没有运行 BGP 协议,从而不会与其他设备建立 BGP 邻居关系,导致 R3设备无法通过 BGP 协议学习到 SiteA 的路由条目和 SnteB 的路由条目。

那么当 SiteA 要访问 SiteB 的时候,数据包首先会交给 R2设备, R2设备查找路由条目,去往 SiteB 要找到 BGP 邻居 R4 ,去往 BGP 邻居 R4要将数据包选代到 IGP 的下一跳 R3设备上,而 R3设备不存在去往 SiteB 站点的路由,导致丢包。同理 SieB 访问SiteA 的时候,数据包首先会交给R4设备, R4设备查找路由条目,去网 SiteA 要找到 BGP 邻居 R2 。去往 BGP 邻居 R2 要将数据包选代到 IGP 的下一跳 R3上,而 R3设备不存在去往 SiteA 站点的路由,导致丢包。最终导致 SiteA 站点和 SiteB 站点无法正常通信

解决方案一:IBGP全互联

R3分别与R2、R4建立IBGP邻居关系,R2会将Site1站点的路由通过BGP邻居直接通告给R3和R4,同理R4也会将Site2的路由通过IBGP传递给R2,R3。

解决方案二:使用路由反射器RR

在每台路由器上配置IBGP进程,配置R3为RR服务器,在RR服务器上配置其他路由器都为RR客户端,所有设备都和RR服务器建立IGBP邻居。RR会将客户端传递过来的路由通告给所有的客户端以及非客户端,这样所有的BGP路由都存在到达Site1 和Site2的路由。每台设备都部署了IBGP,并可以通过路由反射器学习到Site1和Site2的路由,数据转发时直接查找BGP路由表,就可以实现数据的转发。

解决方案三:MPLS隧道

在R2、R3、R4上开启MPLS协议,R2和R4之间建立MPLS LSP隧道,使用route recursive-lookup tunnel实现将site1和site2的路由迭代到LSP隧道

三台路由器通过MPLS LDP协议分别为Site1和Site2路由分发标签,形成LSP隧道。R2为ingres设备收到Site1访问Site2 的数据包,查找FIB表,检查目的地址对应的TunnelID不为空,会有压入相应的标签,发送给下一跳R3; R3为transit 设备会对标签进行交换,发送给下一跳,R4为Egress设备,收到标签报文会对标签进行剥离,查找路由表,根据路由表进行转发,传递给Site2,同理Site2访问Site也如此,通过MPLS实现数据的正常转发。

配置如下:

R2:
route recursive-lookup tunnel
mpls lsr-id 2.2.2.2
mpls
mpls ldp
int eth 0/0/1
 mpls
 mpls ldp


R3:
mpls lsr-id 3.3.3.3
mpls
mpls ldp
int eth 0/0/0
 mpls
 mpls ldp
int eth 0/0/1
 mpls
 mpls ldp


R4:
route recursive-lookup tunnel
mpls lsr-id 4.4.4.4
mpls
mpls ldp
int eth 0/0/0
 mpls
 mpls ldp

非标签公网路由迭代到LSP隧道配置完成后,可以使用display bgp routing-table network命令查看非标签公网路由迭代LSP隧道的信息。

方案四:GRE隧道

在R2和R4设备上建立GRE隧道,然后通过GRE隧道的IP地址建立IBGP邻居关系传递业务路由。Site1访问Siter2 网段的时候,在R2通过IBGP的路由转发数据,下一跳是tunnel口,然后根据Tunnel口的SourcelP和DestinationIP进行封装新的IP头部,从而将数据从本端PE传送到远端PE,然后解封装后将数据传递给客户端。

隧道的ip地址可以不在同一个网段,隧道源目的ip地址要可达。

R2:
interface Tunnel0/0/1
 ip address 10.10.10.10 255.255.255.255
 tunnel-protocol gre
 source Ethernet0/0/1
 destination 10.0.34.2
ip route-static 10.0.45.0 255.255.255.0 Tunnel0/0/1

R4:
interface Tunnel0/0/1
 ip address 11.11.11.11 255.255.255.255
 tunnel-protocol gre
 source Ethernet0/0/0
 destination 10.0.23.1
ip route-static 10.0.12.0 255.255.255.0 Tunnel0/0/1