还是这张图,R2,R3fa1/0shu同理R5,R7。
这次MP-EBGP邻居建立在RR上,因为R4,R5没有必要收到这么多***v4的前缀,而R3,R6上都有。
既然R3,R6要建立MP-EBGP邻居关系,首先要知道对方环回口的地址,怎么得到对方环回口的地址呢?
通过BGP即图中蓝色的部分。
R2(config)#router bgp 10
R2(config-router)#add ipv4
R2(config-router-af)#nei 3.3.3.3 ac
R3(config)#router bgp 10
R3(config-router)#add ipv4
R3(config-router-af)#nei 2.2.2.2 ac
R3(config-router-af)#nei 2.2.2.2 route-reflector-client
R3(config-router-af)#nei 4.4.4.4 ac
R3(config-router-af)#nei 4.4.4.4 route-reflector-client
R4(config)#router bgp 10
R4(config-router)#add v
R4(config-router-af)#nei 3.3.3.3 ac
R4(config-router-af)#nei 3.3.3.3 route-reflector-client
R4(config-router)#nei 45.45.45.5 remote 20
R4(config-router)#add ipv4
R4(config-router-af)#nei 45.45.45.5 ac
邻居关系已经建立,现在在BGP中宣告环回口地址。宣告完之后查看:
R3#show ip bgp
Network Next Hop Metric LocPrf Weight Path
r>i2.2.2.2/32 2.2.2.2 0 100 0 i
*> 3.3.3.3/32 0.0.0.0 0 32768 i
r>i4.4.4.4/32 4.4.4.4 0 100 0 i
* i5.5.5.5/32 45.45.45.5 0 100 0 20 i
* i6.6.6.6/32 45.45.45.5 0 100 0 20 i
* i7.7.7.7/32 45.45.45.5 0 100 0 20 i
对于R5,R6,R7的路由没有最优,采用Next-hop-self的方式解决
R4(config-router-af)#nei 3.3.3.3 next-hop-self (在add ipv4中)
R3#show ip bgp
Network Next Hop Metric LocPrf Weight Path
r>i2.2.2.2/32 2.2.2.2 0 100 0 i
*> 3.3.3.3/32 0.0.0.0 0 32768 i
r>i4.4.4.4/32 4.4.4.4 0 100 0 i
*>i5.5.5.5/32 4.4.4.4 0 100 0 20 i
*>i6.6.6.6/32 4.4.4.4 0 100 0 20 i
*>i7.7.7.7/32 4.4.4.4 0 100 0 20 i
既然学习到了对端的地址,那么就可以建立MP-BGP关系
R3(config)#router bgp 10
R3(config-router)#nei 6.6.6.6 remote 20
R3(config-router)#nei 6.6.6.6 up lo 0
R3(config-router)#nei 6.6.6.6 e
R3(config-router)#add ***v
R3(config-router-af)#nei 6.6.6.6 ac
现在已经学习到了路由,控制层面的问题解决了,但是ping的通吗?
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:26, 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:25, FastEthernet0/0
R1#ping 8.8.8.8
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
问题出在哪呢?
R2#show ip bgp ***v4 all labels
Route Distinguisher: 10:2 (abc)
1.1.1.1/32 12.12.12.1 203/nolabel
8.8.8.8/32 6.6.6.6 205/603
12.12.12.0/24 0.0.0.0 204/aggregate(abc)
78.78.78.0/24 6.6.6.6 206/602
Route Distinguisher: 10:7
8.8.8.8/32 6.6.6.6 nolabel/603
78.78.78.0/24 6.6.6.6 nolabel/602
从R6收到了一个标签,木问题。
然后查看R3:
R3#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
300 Pop tag 2.2.2.2/32 0 Fa0/0 23.23.23.2
301 Pop tag 4.4.4.4/32 590 Fa0/1 34.34.34.4
302 204 10:2:12.12.12.0/24 \
0 Fa0/0 23.23.23.2
303 203 10:2:1.1.1.1/32 0 Fa0/0 23.23.23.2
304 Untagged 7.7.7.7/32 0 Fa0/1 34.34.34.4
305 Untagged 6.6.6.6/32 0 Fa0/1 34.34.34.4
306 Untagged 5.5.5.5/32 0 Fa0/1 34.34.34.4
对于6.6.6.6的路由是Untag的!到达不了下一跳。
为什么呢?
因为这条路由是BGP路由!对于BGP路由只分配下一跳的标签而不分配路由的标签。
解决方法:
将BGP的路由在ASBR(R4,R5)上重分发进IGP。
R4(config)#router ospf 1
R4(config-router)#redistribute bgp 10 subnets
R5(config)#router ospf 1
R5(config-router)#redistribute bgp 20 subnets
查看现象,还是没有分配标签!
R3#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
300 Pop tag 2.2.2.2/32 0 Fa0/0 23.23.23.2
301 Pop tag 4.4.4.4/32 590 Fa0/1 34.34.34.4
302 204 10:2:12.12.12.0/24 \
0 Fa0/0 23.23.23.2
303 203 10:2:1.1.1.1/32 0 Fa0/0 23.23.23.2
304 Untagged 7.7.7.7/32 0 Fa0/1 34.34.34.4
305 Untagged 6.6.6.6/32 0 Fa0/1 34.34.34.4
306 Untagged 5.5.5.5/32 0 Fa0/1 34.34.34.4
对于6.6.6.6的路由是Untag的!这个不应该,没有从R4收到标签!!
为什么呢?
R4#show ip route bgp
5.0.0.0/32 is subnetted, 1 subnets
B 5.5.5.5 [20/0] via 45.45.45.5, 00:18:24
6.0.0.0/32 is subnetted, 1 subnets
B 6.6.6.6 [20/0] via 45.45.45.5, 00:17:53
7.0.0.0/32 is subnetted, 1 subnets
B 7.7.7.7 [20/0] via 45.45.45.5, 00:17:53
因为R4上仍然是BGP的路由!怎么解决?
R4(config)#router bgp 10
R4(config-router)#address-family ipv4
R4(config-router-af)#nei 45.45.45.5send-label
R5(config)#router bgp 20
R5(config-router)#address-family ipv4
R5(config-router-af)#nei 45.45.45.4 send-label
查看现象:
R3#show mpls forwarding-table
Local Outgoing Prefix Bytes tag Outgoing Next Hop
tag tag or VC or Tunnel Id switched interface
300 Pop tag 2.2.2.2/32 0 Fa0/0 23.23.23.2
301 Pop tag 4.4.4.4/32 590 Fa0/1 34.34.34.4
302 204 10:2:12.12.12.0/24 \
0 Fa0/0 23.23.23.2
303 203 10:2:1.1.1.1/32 0 Fa0/0 23.23.23.2
304 403 5.5.5.5/32 0 Fa0/1 34.34.34.4
305 408 6.6.6.6/32 0 Fa0/1 34.34.34.4
306 409 7.7.7.7/32 0 Fa0/1 34.34.34.4
R2#show ip cef vrf abc 8.8.8.8
8.8.8.8/32, version 12, epoch 0, cached adjacency 23.23.23.3
0 packets, 0 bytes
tag information set
local tag: 207
fast tag rewrite with Fa0/1, 23.23.23.3, tags imposed: { 305 603}
R1#traceroute 8.8.8.8
1 12.12.12.2 116 msec 68 msec 20 msec
2 23.23.23.3 [MPLS: Labels 305/603 Exp 0] 144 msec 132 msec 144 msec
3 34.34.34.4 [MPLS: Labels 408/603 Exp 0] 184 msec 168 msec 60 msec
4 45.45.45.5 [MPLS: Labels 500/603 Exp 0] 80 msec 92 msec 108 msec
5 56.56.56.6 [MPLS: Label 603 Exp 0] 68 msec 56 msec 52 msec
6 78.78.78.7 [MPLS: Label 703 Exp 0] 152 msec 172 msec 68 msec
7 78.78.78.8 188 msec * 212 msec
顶层标签用来到达下一跳,因为下一跳改变2次所以底层标签改变两次。
现在我打开R2R4和R5R7之间的接口!宣告进IGP
R1#traceroute 8.8.8.8
1 12.12.12.2 108 msec 28 msec 32 msec
2 24.24.24.4 [MPLS: Labels 408/603 Exp 0] 176 msec 160 msec 140 msec
3 45.45.45.5 [MPLS: Labels 500/603 Exp 0] 72 msec 128 msec 164 msec
4 56.56.56.6 [MPLS: Label 603 Exp 0] 116 msec 200 msec 84 msec
5 78.78.78.7 [MPLS: Label 703 Exp 0] 124 msec 104 msec 80 msec
6 78.78.78.8 192 msec * 224 msec
明显跳过了R3,因为标签的原因,到达下一跳走最优路径。但能不能跳过R7直接从R6到R8,这样减少了RR上的带宽?
R6(config)#router bgp 20
R6(config-router)#add v
R6(config-router-af)#nei 3.3.3.3 next-hop-unchanged
只要在R6上对R3下一跳不变就可以了
R1#traceroute 8.8.8.8
1 12.12.12.2 36 msec 240 msec 4 msec
2 24.24.24.4 [MPLS: Labels 409/703 Exp 0] 216 msec 8 msec 160 msec
3 45.45.45.5 [MPLS: Labels 502/703 Exp 0] 108 msec 132 msec 84 msec
4 78.78.78.7 [MPLS: Label 703 Exp 0] 120 msec 76 msec 52 msec
5 78.78.78.8 152 msec * 220 msec
同理R6。
数据层面已经解决,总结一下:
1.两个路由反射器要互通
运行IPV4的BGP,通告接口Lo 0
2.解决顶层标签的问题
在ASBR上,把BGP路由redistribute进IGP
3.解决两个ASBR边界路由器的链路上标签的问题
IPv4 BGP+ send-label
4.数据面路径最优的问题
next-hop-unchanged
下面是一些优化的问题:
!把所有BGP路由重发布进IGP,这种不行!
可以采用BGP community的方式来控制路由
R2和R3宣告Lo0的时候community 234:1
R6和R7宣告Lo0的时候community 567:1
3.把所有的BGP的路由都设成标签了,需要改进
set mpls-label
match mpls-label