Lab 利用MPLS解决BGP路由黑洞

MPLS Topology Lab

(1)底层配置
(2)AS 100运行IGP OSPF 100
(3)AS 100运行LDP
(4)按拓扑表建立BGP关系
(5)R1/R6分别通告BGP路由
(6)R2和R5互相指next-hop-self
r5#show mpls forwarding-table 10.1.1.1 detail                           
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
tag    tag or VC   or Tunnel Id      switched   interface               
5002   17          10.1.1.0/24       0          Fa0/0.45   45.1.1.4     
        MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
        CA030A740000CA040A7400008100002D8847 00011000                   
        No output feature configured                                    
    Per-packet load-sharing                                             

r5#show mpls forwarding-table 10.1.2.1 detail                           
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
tag    tag or VC   or Tunnel Id      switched   interface               
5002   17          10.1.2.0/24       0          Fa0/0.45   45.1.1.4     
        MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
        CA030A740000CA040A7400008100002D8847 00011000                   
        No output feature configured                                    
    Per-packet load-sharing                                             

r5#show mpls forwarding-table 10.1.3.1 detail                           
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
tag    tag or VC   or Tunnel Id      switched   interface               
5002   17          10.1.3.0/24       0          Fa0/0.45   45.1.1.4     
        MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
        CA030A740000CA040A7400008100002D8847 00011000                   
        No output feature configured                                    
    Per-packet load-sharing                                             

r5#show mpls forwarding-table 2.2.2.2 detail                            
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
tag    tag or VC   or Tunnel Id      switched   interface               
5002   17          2.2.2.2/32        0          Fa0/0.45   45.1.1.4     
        MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
        CA030A740000CA040A7400008100002D8847 00011000                   
        No output feature configured                                    
    Per-packet load-sharing                                             

数据包的目的地址在本地路由表中从BGP学习过来的,它的FEC的分类方式是BGP条目的下一跳地址,所以三个网段10.1.0.0/16的下一跳都是2.2.2.2,即是R4都为该FEC分配一个17的标签值,从而解决了数据黑洞问题
MPLS-domain路由器转发以BGP条目为目的地的数据包,该路由器会借用bgp条目的下一跳标签来发送该数据包
BGP的分类原则是找下一跳

以上的数据从R6(ISP2)发往ISP1在R4中的包结构如下:

R5:压制标签,查找FIB表
R4:Swap标签,查找LFIB
R3:Swap标签,查找LFIB,并为10.1.1.1 分配imp-null标签
R2:POP标签,查找FIB表


(7)如图使用R2和R5的物理接口代替loopback口来建立iBGP邻居关系就会发现,此时ISP2和ISP1无法通信
因为23.1.1.0/24是R3的直连网段,R3则会为其会压imp-null标签,并通告给R4,所以当数据流从ISP2发往ISP1的过程中,R4会提早pop标签,使得在R3路由器上露出包结构中的目的地址10.1.1.1(对于R3来说不可达)
所以此时R3则查找FIB表,然而R3却没有关于10.1.1.0/24的目的前缀,从而丢弃数据包,造成数据黑洞


(8)如上图建立IGP关系,并在R4上汇总路由5.0.0.0/8路由条目
r4(config-router)#area 1 range 5.0.0.0 255.0.0.0
r3#show mpls forwarding-table 5.5.5.5 detail                            
Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
tag    tag or VC   or Tunnel Id      switched   interface               
3006   Pop tag     5.0.0.0/8         135        Fa0/0.34   34.1.1.4     
        MAC/Encaps=18/18, MRU=1504, Tag Stack{}                         
        CA030A740000CA020A740000810000228847                            
        No output feature configured                                    
    Per-packet load-sharing                                             

由上述结果可以知道,汇总之后5.0.0.0汇总条目相当于本地发起,所以R4为其分配imp-null标签,根据倒数第二跳规则,在数据回包过程中,R3将会提前pop标签,使得数据流到达R4时要查找FIB造成172.16.6.6条目不可达而丢弃数据包,形成数据黑洞

(9)按照第5步完成实验可以使用一下命令发现:
r6#traceroute                                                   
Protocol [ip]:                                                  
Target IP address: 10.1.1.1                                     
Source address: 172.16.6.6                                      
Numeric display [n]:                                            
Timeout in seconds [3]:                                         
Probe count [3]:                                                
Minimum Time to Live [1]:                                       
Maximum Time to Live [30]:                                      
Port Number [33434]:                                            
Loose, Strict, Record, Timestamp, Verbose[none]:                
Type escape sequence to abort.                                  
Tracing the route to 10.1.1.1                                   
                                                                
  1 56.1.1.5 80 msec 32 msec 44 msec                            
  2 45.1.1.4 [MPLS: Label 17 Exp 0] 188 msec 92 msec 140 msec   
  3 34.1.1.3 [MPLS: Label 3000 Exp 0] 140 msec 152 msec 200 msec
  4 23.1.1.2 172 msec 124 msec 172 msec                         
  5 12.1.1.1 188 msec *  188 msec                               

可以返回中间路径的原因是因为,当数据到达R4的时候TTL = TTL - 1 = 0无效,而此时R4无法认知源网络号172.16.6.6,但是R4根据标签信息知道上游设备知道如何对该网段回包,所以其将此时的数据包TTL值设为255,发往R3,直至R2方可对172.16.6.6回包,然而此时的TTL = 252,在R4上打开debug mpls packets命令:
*Jul 30 22:35:01.363: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
*Jul 30 22:35:01.363: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
*Jul 30 22:35:01.439: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
*Jul 30 22:35:01.439: MPLS: Fa0/0.45: xmit: (no label)                   
*Jul 30 22:35:01.519: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
*Jul 30 22:35:01.519: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
*Jul 30 22:35:01.563: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
*Jul 30 22:35:01.563: MPLS: Fa0/0.45: xmit: (no label)                   
*Jul 30 22:35:01.659: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
*Jul 30 22:35:01.659: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
*Jul 30 22:35:01.735: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
*Jul 30 22:35:01.735: MPLS: Fa0/0.45: xmit: (no label)                   
*Jul 30 22:35:01.799: MPLS: Fa0/0.45: recvd: CoS=0, TTL=2, Label(s)=17   
*Jul 30 22:35:01.799: MPLS: Fa0/0.34: xmit: CoS=0, TTL=1, Label(s)=3000  

默认情况下traceroute是每次发送3个相同的探测包的

原文地址:https://www.cnblogs.com/cyrusxx/p/12824167.html