Option2的图还是使用上面的,并且R2f1/0和R4fa1/0,R5fa1/0和R7fa1/0shu。
Option2的思路是在R4与R5之间建立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上也要这么配。
现在R1和R8上都学到了路由:
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 ×××的路由肯定是双层标签。
我们先看R2,R3,R4这部分:
首先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的时候只有一层标签,此时R4将406标签改成505发出去。
这里有疑问:为什么对于8.8.8.8的路由底层标签会改变呢?
为什么要标签,因为R4,R5都没有8.8.8.8的路由,如果接收到IP报头,那就丢弃了。
然后这个标签是由MPLS给的,因为我没有在接口开启LDP。
因为这条路由的下一跳在改变,而不是固定的R7的lo0地址,所以上层标签被去除。
而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,但是不是物理接口,是一条路由。
如果在R5上network 45.45.45.4 0.0.0.0 a 0,在R6上是学不到的,如果要学到,只能通过redistribute connected了。
这就提供了一种方式,我可以通过redistirbute 这条路由进OSPF让R3和R6学到:
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
的确是这样!