文章目录

  • 参考阅读
  • 数据层面的路由黑洞
  • 实验拓扑
  • 配置思路
  • BGP建邻
  • 使能LDP
  • 检查BGP、LDP邻居
  • 详细分析
  • 黑洞的产生
  • 解决黑洞
  • 抓包分析label的in、out
  • 总结


数据层面的路由黑洞

在一个BGP-domain中,纯P设备是不运行BGP进程的,只做高速的路由转发,转发是基于MPLS-LSP进行的,即在MPLS+BGP环境下,纯P设备收到的必须是label包,若收到一个IP包,其并没有路由,这样就会产生数据层面的路由黑洞了

实验拓扑

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_R3


1、承接参考于阅读中的网段信息与静态LSP的配置信息,这些都不做改变

2、三种颜色被分成了三个BGP的domain,在AS234中底层跑了动态的LDP,进行label的分发;

3、AS之间使用EBGP关系

4、R1、R5分别发布自己的loopback路由

5、R3是纯P设备,R2与R4之间使用loopback口建立IBGP关系,并修改下一条属性

配置思路

BGP建邻

[R1-bgp]di th
[V200R003C00]
#
bgp 100
 router-id 172.16.1.1
 peer 172.16.12.2 as-number 234 
 #
 ipv4-family unicast
  undo synchronization
  network 172.16.1.0 255.255.255.0 
  peer 172.16.12.2 enable
#
return

[R2-bgp]di th
[V200R003C00]
#
bgp 234
 router-id 10.1.2.2
 peer 10.1.4.4 as-number 234 
 peer 10.1.4.4 connect-interface LoopBack0
 peer 172.16.12.1 as-number 100 
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.4.4 enable
  peer 10.1.4.4 next-hop-local 
  peer 172.16.12.1 enable
#
return

[R4-bgp]di th
[V200R003C00]
#
bgp 234
 router-id 10.1.4.4
 peer 10.1.2.2 as-number 234 
 peer 10.1.2.2 connect-interface LoopBack0
 peer 172.16.45.5 as-number 200 
 #
 ipv4-family unicast
  undo synchronization
  peer 10.1.2.2 enable
  peer 10.1.2.2 next-hop-local 
  peer 172.16.45.5 enable
#
return

[R5]bgp 200
[R5-bgp]di th
[V200R003C00]
#
bgp 200
 router-id 172.16.5.5
 peer 172.16.45.4 as-number 234 
 #
 ipv4-family unicast
  undo synchronization
  network 172.16.5.0 255.255.255.0 
  peer 172.16.45.4 enable
#
return

使能LDP

R2
mpls lsr-id 10.1.2.2
mpls
mpls ldp
interface Serial4/0/0
mpls 使能mpls
mpls ldp 使能动态的lsp

R3
mpls lsr-id 10.1.3.3
mpls
mpls ldp
interface Serial4/0/0 Serial4/0/1
mpls 
mpls ldp 

R4
mpls lsr-id 10.1.4.4
mpls
mpls ldp
interface Serial4/0/0
mpls 
mpls ldp

检查BGP、LDP邻居

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_02


bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_mpls_03


bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_网络_04

详细分析

黑洞的产生

由于R1、R5都宣告了自己的loopback,此时做ping操作,可见并不能ping通

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_R3_05


这是一个IP包,查询FIB,发现没有tunnel-id,说明仍然进行IP转发,下一跳给到R2

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_R3_06


R2查询FIB,仍然没有tunnel-id,下一跳给到R3;由于R3是一个纯P设备,上面并未运行BGP进程,所以没有去往172.16.5.5的路由信息,所以就造成数据层面的路由黑洞

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_R3_07


bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_08

解决黑洞

1、本质在于要让R3可以转发,前提就在于要让这个IP包变成label包;
2、虽然AS234的底层运行了MPLS,且存在LDP生成的LSP,但是对于BGP的路由并没有生效
这是因为华为的LDP默认只对32位的主机路由分label,为了节省资源
需要在R2和R4上运行如下命令,

route recursive-lookup tunnel

这条命令的意义在于,让非标签的BGP路由迭代进BGP下一跳的隧道;即让非标签的BGP路由迭代进自己下一跳的隧道
注意:LDP不会为BGP分配label,转发时使用的是BGP的下一跳label


在R2、R4上进行label迭代的配置

[R2]route recursive-lookup tunnel

R1上带源去pingR5的loopback,可见符合预期

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_09


R1收到一个IP包,查询FIB,将数据转发到R2

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_10


R2收到一个IP包,查看FIB,其是存在tunnel-ID的,所以要继续查看LFIB,唯一标识是0x5,且迭代到10.1.4.4这个FEC(forwarding equal class)转发等价类中

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_11


详细查看NHLFE,可以看到Token、Type、Out-Label、Label Operation等详情

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_12


此数据包的fec是10.1.4.4 ,且下一跳是R3,然后在R3上查看in-label为1025的详情,可以看到是进行SWAP的label交换操作,out label被改成了3 说明在R3设备上要进行PHP操作,即次末跳弹出,变成IP包

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_网络_13

这个目的地址为172.16.5.5的IP包来到R4上后,直接查看FIB,因为这是一个IP包,直接按照出接口进行转发即可

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_R3_14

抓包分析label的in、out

R3的入接口查看,可以发现这个标签是1025

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_IP_15


R3的出接口抓包看不到label,是因为PHP(次末跳弹出),label变成了一个IP包

bgp路由汇总 自动生成一条黑洞路由 bgp路由黑洞产生原因_bgp路由汇总 自动生成一条黑洞路由_16

总结

  • LDP要进行使能才能生效,配置完成LDP后,要检查LDP的session邻居是否建立成功
  • 华为的设备默认只对32位的主机路由分label,节省资源
如何对所有的路由分配标签?
[]mpls
[]lsp-trigger all
默认是lsp-trigger host