MPLS inter-as ××× Option 2:mp-ebgp for ***v4_第1张图片

Option2的图还是使用上面的,并且R2f1/0R4fa1/0R5fa1/0R7fa1/0shu

Option2的思路是在R4R5之间建立BGP

但之前有一个问题,R4有路由吗?显然是没有的。

因为没有明确的导入导出(我也没有配置VRF),解决:

R4(config-router)#no bgp default route-target filter 

R4#show ip bgp ***v4 all

BGP table version is 3, local router ID is 4.4.4.4

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,

              r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

 

   Network          Next Hop            Metric LocPrf Weight Path

Route Distinguisher: 10:2

*>i1.1.1.1/32       2.2.2.2                 11    100      0 ?

*>i12.12.12.0/24    2.2.2.2                  0    100      0 ?

R4(config)#router bgp 10

R4(config-router)#nei 45.45.45.5 remote 20

R4(config-router)#address-family ***v4

R4(config-router-af)#nei 45.45.45.5 ac

邻居关系建立了,查看R4上的BGP表:

R4#show ip bgp ***v4 all 

Route Distinguisher: 10:2

*>i1.1.1.1/32       2.2.2.2                 11    100      0 ?

*>i12.12.12.0/24    2.2.2.2                  0    100      0 ?

Route Distinguisher: 10:7

*> 8.8.8.8/32       45.45.45.5                             0 20 ?

*> 78.78.78.0/24    45.45.45.5                             0 20 ?

然后再查看R3的路由表:

R3#show ip bgp ***v4 all

Route Distinguisher: 10:2

*>i1.1.1.1/32       2.2.2.2                 11    100      0 ?

*>i12.12.12.0/24    2.2.2.2                  0    100      0 ?

Route Distinguisher: 10:7

* i8.8.8.8/32       45.45.45.5               0    100      0 20 ?

* i78.78.78.0/24    45.45.45.5               0    100      0 20 ?

路由没有最优,为什么呢?因为下一跳不可达,怎么解决呢?

解决方法一:

R4(config-router)#address-family ***v4 

R4(config-router-af)#nei 3.3.3.3 next-hop-self 

再次查看R3的路由表:

R3#show ip bgp ***v4 all

Route Distinguisher: 10:2

*>i1.1.1.1/32       2.2.2.2                 11    100      0 ?

*>i12.12.12.0/24    2.2.2.2                  0    100      0 ?

Route Distinguisher: 10:7

*>i8.8.8.8/32       4.4.4.4                  0    100      0 20 ?

*>i78.78.78.0/24    4.4.4.4                  0    100      0 20 ?

已然最优,同理在R5上也要这么配。

现在R1R8上都学到了路由:

R1#show ip route ospf

     8.0.0.0/32 is subnetted, 1 subnets

O IA    8.8.8.8 [110/11] via 12.12.12.2, 00:00:57, FastEthernet0/0

     78.0.0.0/24 is subnetted, 1 subnets

O IA    78.78.78.0 [110/11] via 12.12.12.2, 00:00:57, FastEthernet0/0

R8#show ip route ospf

     1.0.0.0/32 is subnetted, 1 subnets

O IA    1.1.1.1 [110/11] via 78.78.78.7, 00:01:20, FastEthernet0/0

     12.0.0.0/24 is subnetted, 1 subnets

O IA    12.12.12.0 [110/11] via 78.78.78.7, 00:01:19, FastEthernet0/0

R1#traceroute 8.8.8.8

  1 12.12.12.2 116 msec 4 msec 48 msec

  2 23.23.23.3 [MPLS: Labels 301/406 Exp 0] 212 msec 184 msec 120 msec

  3 34.34.34.4 [MPLS: Label 406 Exp 0] 256 msec 228 msec 128 msec

  4 45.45.45.5 [MPLS: Label 505 Exp 0] 172 msec 32 msec 220 msec

  5 56.56.56.6 [MPLS: Labels 601/703 Exp 0] 184 msec 96 msec 144 msec

  6 78.78.78.7 [MPLS: Label 703 Exp 0] 76 msec 52 msec 112 msec

  7 78.78.78.8 140 msec *  228 msec

已经通了,但是还没有结束,这个标签分配的问题很难理解。

首先要理解,对于MPLS ×××的路由肯定是双层标签。

我们先看R2R3R4这部分:

首先R4发送一条路由×××V4的路由8.8.8.8,这条路由要携带一个标签。

R4#show mpls forwarding-table (省略其他的)

406    505         10:7:8.8.8.8/32   1712       Fa0/1      45.45.45.5

然后对于MBGP,由LDP分配下一跳的标签:

R3#show mpls forwarding-table(省略其他的)

301    Pop tag     4.4.4.4/32        1280       Fa0/1      34.34.34.4

R3分配到达4.4.4.4的标签给R2

所以R2会收到两层标签。

然后R2将数据包发给R3,由于第二条弹出机制,R3将上层标签弹出将数据包发给R4,到达R4的时候只有一层标签,此时R4406标签改成505发出去。

这里有疑问:为什么对于8.8.8.8的路由底层标签会改变呢?

为什么要标签,因为R4R5都没有8.8.8.8的路由,如果接收到IP报头,那就丢弃了。

然后这个标签是由MPLS给的,因为我没有在接口开启LDP

因为这条路由的下一跳在改变,而不是固定的R7lo0地址,所以上层标签被去除。

R4只能通过改变标签将数据包转发给R5

R5同理了,由R7给一个8.8.8.8路由的标签和R6给的下一跳的标签。

R5#show mpls forwarding-table 

502    601         7.7.7.7/32        0          Fa0/1      56.56.56.6   

505    703         10:7:8.8.8.8/32   2212       Fa0/1      56.56.56.6   

后面略。

解决方法二:

当然Option2还有一个现象:

R4#show ip route 45.0.0.0

C       45.45.45.5/32 is directly connected, FastEthernet0/1

C       45.45.45.0/24 is directly connected, FastEthernet0/1

R5#show ip route 45.0.0.0

C       45.45.45.4/32 is directly connected, FastEthernet0/0

C       45.45.45.0/24 is directly connected, FastEthernet0/0

产生了对面的/32位路由。

为什么会产生这条/32路由呢?

因为R4将数据包发给下一跳45.45.45.5匹配45.45.45.0网段,它的标签可能就不是什么505而是untag了,R5收到的就不是标签而是IP报头了。

注意,这前面虽然是C,但是不是物理接口,是一条路由。

如果在R5network 45.45.45.4 0.0.0.0 a 0,在R6上是学不到的,如果要学到,只能通过redistribute connected了。

这就提供了一种方式,我可以通过redistirbute 这条路由进OSPFR3R6学到:

R4(config)#ip prefix-list cisco permit 45.45.45.5/32

R4(config)#route-map cisco permit 10

R4(config-route-map)#match ip address pre cisco

R4(config)#router ospf 1

R4(config-router)#redistribute connected route-map cisco subnets 

R3#show ip bgp ***v4 all

Route Distinguisher: 10:2

*>i1.1.1.1/32       2.2.2.2                 11    100      0 ?

*>i12.12.12.0/24    2.2.2.2                  0    100      0 ?

Route Distinguisher: 10:7

*>i8.8.8.8/32       45.45.45.5               0    100      0 20 ?

*>i78.78.78.0/24    45.45.45.5               0    100      0 20 ?

下一跳已经可达了,现在试着traceroute一下:

traceroute之前我们分析一下,在之前那种方法,下一跳改变3次,所以底层标签改变3次,现在使用重分发路由的方法,那么底层标签会改变几次?

下一跳改变两次,应该标签会改变两次吧!

R1#traceroute 8.8.8.8 

  1 12.12.12.2 96 msec 120 msec 24 msec

  2 23.23.23.3 [MPLS: Labels 302/504 Exp 0] 212 msec 48 msec 164 msec

  3 34.34.34.4 [MPLS: Labels 400/504 Exp 0] 152 msec 152 msec 64 msec

  4 45.45.45.5 [MPLS: Label 504 Exp 0] 92 msec 32 msec 68 msec

  5 56.56.56.6 [MPLS: Labels 600/703 Exp 0] 68 msec 120 msec 32 msec

  6 78.78.78.7 [MPLS: Label 703 Exp 0] 108 msec 156 msec 180 msec

的确是这样!