如何解决BGP路由黑洞问题

描述

  实验拓扑

  BGP

  实验需求1.设备互联地址如图所示;所有设备开设Loopback0口,该接口IP地址为x.x.x.x/32,其中x为设备编号。Loopback0的IP地址作为OSPF RouterID以及LSR ID、LDP传输地址。

  2.R1、R2、R3、R4运行OSPF,通告直连接口及Loopback0。注意R1不能在OSPF中通告192.168.1.0/24路由,R4也不能在OSPF中通告192.168.2.0/24路由。

  3.R1及R4基于Loopback0口建立iBGP邻居关系;R1将直连路由192.168.1.0/24通告进BGP,R4将直连路由192.168.2.0/24通告进BGP,R2及R3不运行BGP。

  4.通过部署MPLS,使得PC1与PC2能够互通。

  实验步骤及配置1.完成设备接口、OSPF和BGP的配置:

  R1的配置如下:

  完成接口IP地址的配置:

[R1] interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0] ip address 12.1.1.1 24
[R1] interface GigabitEthernet0/0/1
[R1-GigabitEthernet0/0/1] ip address 192.168.1.254 24
[R1] interface loopback0
[R1-Loopback0] ip address 1.1.1.1 32

配置OSPF:

[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-0.0.0.0] network 12.1.1.0 0.0.0.255
[R1-ospf-1-0.0.0.0] network 1.1.1.1 0.0.0.0

配置BGP:

[R1] bgp 100
[R1-bgp] peer 4.4.4.4 as-number 100
[R1-bgp] peer 4.4.4.4 connect-interface Loopback0
[R1-bgp] network 192.168.1.0 24

R2的配置如下:

完成接口IP地址的配置:

[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] ip address 12.1.1.2 24
[R2] interface GigabitEthernet0/0/1
[R2-GigabitEthernet0/0/1] ip address 23.1.1.2 24
[R2] interface loopback0
[R2-Loopback0] ip address 2.2.2.2 32

配置OSPF:

[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-0.0.0.0] network 12.1.1.0 0.0.0.255
[R2-ospf-1-0.0.0.0] network 23.1.1.0 0.0.0.255
[R2-ospf-1-0.0.0.0] network 2.2.2.2 0.0.0.0

R3的配置如下:

完成接口IP地址的配置:

[R3] interface GigabitEthernet0/0/0
[R3-GigabitEthernet0/0/0] ip address 23.1.1.3 24
[R3] interface GigabitEthernet0/0/1
[R3-GigabitEthernet0/0/1] ip address 34.1.1.3 24
[R3] interface loopback0
[R3-Loopback0] ip address 3.3.3.3 32

配置OSPF:

[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-0.0.0.0] network 23.1.1.0 0.0.0.255
[R3-ospf-1-0.0.0.0] network 34.1.1.0 0.0.0.255
[R3-ospf-1-0.0.0.0] network 1.1.1.1 0.0.0.0

R4的配置如下:

完成接口IP地址的配置:

[R4] interface GigabitEthernet0/0/0
[R4-GigabitEthernet0/0/0] ip address 34.1.1.4 24
[R4] interface GigabitEthernet0/0/1
[R4-GigabitEthernet0/0/1] ip address 192.168.2.254 24
[R4] interface loopback0
[R4-Loopback0] ip address 4.4.4.4 32

配置OSPF:

[R4] ospf 1 router-id 4.4.4.4
[R4-ospf-1] area 0
[R4-ospf-1-0.0.0.0] network 34.1.1.0 0.0.0.255
[R4-ospf-1-0.0.0.0] network 4.4.4.4 0.0.0.0

配置BGP

[R1] bgp 100
[R1-bgp] peer 1.1.1.1 as-number 100
[R1-bgp] peer 1.1.1.1 connect-interface Loopback0
[R1-bgp] network 192.168.2.0 24

完成上述配置后,当PC1去ping PC2时,肯定是无法ping通的,数据包的转发过程如下:

BGP

虽然R1已经通过BGP从R4学习到192.168.2.0/24的路由,PC1访问PC2的数据包被R1转发给了R2,但是由于R2没有运行BGP,而OSPF域中又没有关于192.168.2.0/24的路由,因此报文在R2处被丢包,这就是典型的BGP路由黑洞问题。其实之所以不在R2、R3上运行BGP,是因为BGP承载的路由前缀数量往往非常庞大,此举可以极大的降低R2、R3的设备资源消耗,但是却也带来了路由黑洞问题。

利用MPLS能够解决上述问题,我们在R1、R2、R3、R4上激活MPLS及LDP:

BGP

从而构建一个MPLS网络。

R1的配置增加如下:

[R1] mpls lsr-id 1.1.1.1  #配置MPLS LSR ID
[R1] mpls  #全局激活MPLS
[R1-mpls] quit
[R1] mpls ldp #全局激活LDP
[R1-mpls-ldp] quit
[R1] Interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] mpls #在接口上激活MPLS
[R1-GigabitEthernet0/0/0] mpls ldp #在接口上激活LDP

R2的配置增加如下:

[R2] mpls lsr-id 2.2.2.2
[R2] mpls
[R2-mpls] quit
[R2] mpls ldp
[R2-mpls-ldp] quit
[R2] Interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] mpls
[R2-GigabitEthernet0/0/0] mpls ldp
[R2] Interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] mpls
[R2-GigabitEthernet0/0/1] mpls ldp

R3的配置增加如下:

[R3] mpls lsr-id 3.3.3.3
[R3] mpls
[R3-mpls] quit
[R3] mpls ldp
[R3-mpls-ldp] quit
[R3] Interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] mpls
[R3-GigabitEthernet0/0/0] mpls ldp
[R3] Interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] mpls
[R3-GigabitEthernet0/0/1] mpls ldp

R4的配置增加如下:

[R4] mpls lsr-id 4.4.4.4 
[R4] mpls 
[R4-mpls] quit
[R4] mpls ldp
[R4-mpls-ldp] quit
[R4] Interface GigabitEthernet 0/0/0
[R4-GigabitEthernet0/0/0] mpls
[R4-GigabitEthernet0/0/0] mpls ldp

现在,我们遇到的问题,是R2及R3由于没有运行BGP,因此他们无法学习到BGP路由192.168.1.0/24及192.168.2.0/24,因此在他们这出现了路由黑洞。此处通过利用标签栈,可以解决192.168.1.0/24及192.168.2.0/24网络通信的问题。当PC1访问PC2时,IP数据包先是送到R1,如果这个IP数据包被R1压入一层MPLS标签,而这个标签正好又是R2能理解、能处理的,不就能解决这个问题么?那么压入的标签值是多少?其实完全可以走4.4.4.4这条LSP,因此标签值就用4.4.4.4这条FEC的标签。

实际上,在R1上查看BGP路由 192.168.2.0/24能够发现该路由的下一跳就是4.4.4.4。而4.4.4.4此刻在LFIB表中已经有条目,因此去往192.168.2.0/24的IP数据包能够使用4.4.4.4这条LSP来走。

BGP

PC1去访问192.168.2.1这台主机,IP报文先是被送到R1,R1通过查看路由表发现下一跳是4.4.4.4,将数据包压入4.4.4.4对应的标签值1026,然后把数据包发给R2。R2将标签1026置换成1028然后将数据包送到R3,R3将标签弹出,将IP报文转发给R4。这里有个细节需要注意,那就是在华为的设备上,缺省情况下,R1在查去往192.168.2.0/24的路由时会发现下一跳是4.4.4.4,而4.4.4.4非直连,又会进一步将下一跳递归得到10.1.12.2,然后将IP数据包转发给R2,而不会压标签。为了让R1递归到LSP,要配置一条命令来打开这个开关:route recursive-lookup tunnel。

BGP

如此一来PC1就能够ping 通PC2了。

审核编辑:郭婷


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分