说明
在MPLS ***的域中,也存在不同ISP之间的通信,可能因为业务的需求、或者相同ISP之间需要把这个MPLS ***域连通起来,同个ISP之间进行跨域连接,肯定问题不大,因为有可以跟正常一样通过分配标签跟路由的交换, 而不同ISP之间因为业务的竞争,不可能把网络内部的信息让其他ISP知道,所以给跨越的模型带来了很大的困难。 到现在为止提供了3种解决方案, Opent A 、Opent B、Open C、 OpenA已经不在使用了,不过在学习其他两个方案之前 了解这个对后续的理解会更好。
在之前的MPLS ***中,都是单域的模型,如果想要两个CE之间进行通信,主要是保证标签的连续性,中间不能被断开,否则就出现数据包黑洞了,在跨域中也是一样,一定要保持标签的连续性,否则在ASBR之间传递的时候 就出现了故障了。 在MPLS ***中ASBR就是相当于一个ISP的边界。
Open A是利用ASBR之间用VRF建立EBGP关系,来传递客户的路由。这种模型实现缺点也很明了了,当大量不同的客户出现,那么每个接口就要对应一个VRF,或者子接口来建立邻居关系,并且这里标签也不是连续的,实验中可以看出来。
实验环境,电信 联通的MPLS底层使用的是EIGRP,两个CE之间运行OSPF,每个路由器都有一个loopback 32位。ASBR之间用VRF建立MPBGP关系
Router-ISP1_PE(config)#int lo 0
Router-ISP1_PE(config-if)#ip add 1.1.1.1 255.255.255.255
Router-ISP1_PE(config)#int s1/1
Router-ISP1_PE(config-if)#ip add 12.1.1.1 255.255.255.0
Router-ISP1_PE(config-if)#no shut
ISP1_P(config)#int s1/1
ISP1_P(config-if)#ip add 12.1.1.2 255.255.255.0
ISP1_P(config-if)#no shut
ISP1_P(config-if)#int lo 0
ISP1_P(config-if)#ip add 2.2.2.2 255.255.255.255
ISP1_P(config-if)#int s1/2
ISP1_P(config-if)#ip add 23.1.1.1 255.255.255.0
ISP1_P(config-if)#no shut
Router-ISP1_ASBR(config)#int s1/2
Router-ISP1_ASBR(config-if)#ip add 23.1.1.2 255.255.255.0
Router-ISP1_ASBR(config-if)#no shut
Router-ISP1_ASBR(config-if)#int lo 0
Router-ISP1_ASBR(config-if)#ip add 3.3.3.3 255.255.255.255
Router-ISP1_CE(config)#int lo 0
Router-ISP1_CE(config-if)#ip add 1.1.1.1 255.255.255.255
Router-ISP1_CE(config)#int s1/0
Router-ISP1_CE(config-if)#ip add 192.168.1.1 255.255.255.0
Router-ISP1_CE(config-if)#no shu
先把ISP1的MPLS 和***打通,这里限制下标签的范围,到时候分析标签置换好分析。
Router-ISP1_PE(config)#mpls label range 100 199
Router-ISP1_PE(config)#mpls ldp router-id lo 0
Router-ISP1_PE(config)#int s1/1
Router-ISP1_PE(config-if)#mpls ip
ISP1_P(config)#mpls label range 200 299
ISP1_P(config)#mpls ldp router-id lo 0
ISP1_P(config)#int s1/1
ISP1_P(config-if)#mpls ip
ISP1_P(config-if)#int s1/2
ISP1_P(config-if)#mpls ip
Router-ISP1_ASBR(config)#mpls ldp router-id lo 0
Router-ISP1_ASBR(config)#mpls label range 300 399
Router-ISP1_ASBR(config)#
Router-ISP1_ASBR(config)#int s1/2
Router-ISP1_ASBR(config-if)#mpls ip
Router-ISP1_PE(config)#router eigrp 1
Router-ISP1_PE(config-router)#no auto-summary
Router-ISP1_PE(config-router)#network 12.1.1.1 0.0.0.0
Router-ISP1_PE(config-router)#network 1.1.1.1 0.0.0.0
ISP1_P(config)#router eigrp 1
ISP1_P(config-router)#no auto-summary
ISP1_P(config-router)#network 12.1.1.2 0.0.0.0
ISP1_P(config-router)#network 23.1.1.1 0.0.0.0
ISP1_P(config-router)#network 2.2.2.2 0.0.0.0
Router-ISP1_ASBR(config)#router eigrp 1
Router-ISP1_ASBR(config-router)#no auto-summary
Router-ISP1_ASBR(config-router)#network 23.1.1.2 0.0.0.0
Router-ISP1_ASBR(config-router)#network 3.3.3.3 0.0.0.
Router-ISP1_PE(config)#ip vrf A
Router-ISP1_PE(config-vrf)#rd 1:1
Router-ISP1_PE(config-vrf)#route-target 1:1
Router-ISP1_PE(config)#int s1/0
Router-ISP1_PE(config-if)#ip vrf forwarding A
Router-ISP1_PE(config-if)#ip add 192.168.1.2 255.255.255.0
Router-ISP1_PE(config-if)#no shut
Router-ISP1_PE(config)#router ospf 1 vrf A
Router-ISP1_PE(config-router)#router-id 192.168.1.2
Router-ISP1_PE(config-router)#network 192.168.1.2 0.0.0.0 a 0
Router-ISP1_PE(config-router)#redistribute bgp 1 subnets
Router-ISP1_CE(config)#router ospf 1
Router-ISP1_CE(config-router)#router-id 1.1.1.1
Router-ISP1_CE(config-router)#network 1.1.1.1 0.0.0.0 a 0
Router-ISP1_CE(config-router)#network 192.168.1.1 0.0.0.0 a
关于ASBR的VRF后续在创建,先把ISP1 和ISP2的***的路由搞定
Router-ISP1_PE(config)#router bgp 1
Router-ISP1_PE(config-router)#bgp router-id 1.1.1.1
Router-ISP1_PE(config-router)#no bgp default ipv4
Router-ISP1_PE(config-router)#neighbor 3.3.3.3 remote 1
Router-ISP1_PE(config-router)#neighbor 3.3.3.3 upda lo 0
Router-ISP1_PE(config-router)#address-family ***v4
Router-ISP1_PE(config-router-af)#neighbor 3.3.3.3 ac
Router-ISP1_PE(config-router)#address-family ipv4 vrf A
Router-ISP1_PE(config-router-af)#redistribute ospf 1
Router-ISP1_ASBR(config)#router bgp 1
Router-ISP1_ASBR(config-router)#bgp router-id 3.3.3.3
Router-ISP1_ASBR(config-router)#no bgp default ipv4-unicast
Router-ISP1_ASBR(config-router)#neighbor 1.1.1.1 remote 1
Router-ISP1_ASBR(config-router)#neighbor 1.1.1.1 upda lo 0
Router-ISP1_ASBR(config-router)#address-family ***v4
Router-ISP1_ASBR(config-router-af)#neighbor 1.1.1.1 ac
ISP1的***路由搞定了,这里ASBR不是作为PE存在,所以暂时不操作,把ISP2的基本搞定。
Router-ISP2_ASBR(config)#int s1/0
Router-ISP2_ASBR(config-if)#ip add 45.1.1.1 255.255.255.0
Router-ISP2_ASBR(config-if)#no shut
Router-ISP2_ASBR(config-if)#int lo 0
Router-ISP2_ASBR(config-if)#ip add 4.4.4.4 255.255.255.255
Router-ISP2_ASBR(config-if)#router eigrp 1
Router-ISP2_ASBR(config-router)#no auto-summary
Router-ISP2_ASBR(config-router)#network 45.1.1.1 0.0.0.0
Router-ISP2_ASBR(config-router)#network 4.4.4.4 0.0.0.0
Router-ISP2_P(config)#int s1/0
Router-ISP2_P(config-if)#ip add 45.1.1.2 255.255.255.0
Router-ISP2_P(config-if)#no shut
Router-ISP2_P(config-if)#int s1/1
Router-ISP2_P(config-if)#ip add 56.1.1.1 255.255.255.0
Router-ISP2_P(config-if)#no shut
Router-ISP2_P(config-if)#int lo 0
Router-ISP2_P(config-if)#ip add 5.5.5.5 255.255.255.255
Router-ISP2_P(config-if)#router eigrp 1
Router-ISP2_P(config-router)#no auto-summary
Router-ISP2_P(config-router)#network 5.5.5.5 0.0.0.0
Router-ISP2_P(config-router)#network 45.1.1.2 0.0.0.0
Router-ISP2_P(config-router)#network 56.1.1.1 0.0.0.0
Router-ISP2_PE(config)#int s1/1
Router-ISP2_PE(config-if)#ip add 56.1.1.2 255.255.255.0
Router-ISP2_PE(config-if)#no shut
Router-ISP2_PE(config-if)#int lo 0
Router-ISP2_PE(config-if)#ip add 6.6.6.6 255.255.255.255
Router-ISP2_PE(config-if)#router eigrp 1
Router-ISP2_PE(config-router)#no auto-summary
Router-ISP2_PE(config-router)#network 56.1.1.2 0.0.0.0
Router-ISP2_PE(config-router)#network 6.6.6.6 0.0.0.0
基本地址配置和EIGRP的建立
Router-ISP2_ASBR(config)#mpls ldp router-id lo 0
Router-ISP2_ASBR(config)#mpls label range 400 499
Router-ISP2_ASBR(config)#int s1/0
Router-ISP2_ASBR(config-if)#mpls ip
Router-ISP2_P(config)#mpls label range 500 599
Router-ISP2_P(config)#mpls ldp router-id lo 0
Router-ISP2_P(config)#int s1/0
Router-ISP2_P(config-if)#mpls ip
Router-ISP2_P(config-if)#int s1/1
Router-ISP2_P(config-if)#mpls ip
Router-ISP2_PE(config)#mpls label range 600 699
Router-ISP2_PE(config)#mpls ldp router-id lo 0
Router-ISP2_PE(config)#int s1/1
Router-ISP2_PE(config-if)#mpls ip
MPLS完成
Router-ISP2_ASBR(config-if)#router bgp 2
Router-ISP2_ASBR(config-router)#bgp router-id 4.4.4.4
Router-ISP2_ASBR(config-router)#neighbor 6.6.6.6 remote 2
Router-ISP2_ASBR(config-router)#neighbor 6.6.6.6 upda lo 0
Router-ISP2_ASBR(config-router)#no bgp default ipv4-unicast
Router-ISP2_ASBR(config-router-af)#neighbor 6.6.6.6 activate
Router-ISP2_PE(config)#router bgp 2
Router-ISP2_PE(config-router)#bgp router-id 6.6.6.6
Router-ISP2_PE(config-router)#no bgp default ipv4-unicast
Router-ISP2_PE(config-router)#neighbor 4.4.4.4 remote 2
Router-ISP2_PE(config-router)#neighbor 4.4.4.4 upda lo 0
Router-ISP2_PE(config-router)#address-family ***v4
Router-ISP2_PE(config-router-af)#neighbor 4.4.4.4 activat
Router-ISP2_PE(config-router)#address-family ipv4 vrf A
Router-ISP2_PE(config-router-af)#redistribute ospf 1
Router-ISP2_PE(config)#ip vrf A
Router-ISP2_PE(config-vrf)#rd 1:1
Router-ISP2_PE(config-vrf)#route-target 1:1
Router-ISP2_PE(config-vrf)#int s1/2
Router-ISP2_PE(config-if)#ip vrf forwarding A
Router-ISP2_PE(config-if)#ip add 192.168.2.2 255.255.255.0
Router-ISP2_PE(config-if)#no shut
Router-ISP2_PE(config)#router ospf 1 vrf A
Router-ISP2_PE(config-router)#network 192.168.2.2 0.0.0.0 a 0
Router-ISP2_PE(config-router)#redistribute bgp 2 subnets
Router-ISP2_CE(config)#int s1/2
Router-ISP2_CE(config-if)#ip add 192.168.2.1 255.255.255.0
Router-ISP2_CE(config-if)#no shut
Router-ISP2_CE(config-if)#int lo 0
Router-ISP2_CE(config-if)#ip add 2.2.2.2 255.255.255.255
Router-ISP2_CE(config-if)#router ospf 1
Router-ISP2_CE(config-router)#router-id 2.2.2.2
Router-ISP2_CE(config-router)#network 2.2.2.2 0.0.0.0 a 0
Router-ISP2_CE(config-router)#network 192.168.2.1 0.0.0.0 a 0
这里ISP1 和ISP2的MPLS ***路由更新和底层都完成了,开始ASBR之间问题。
从ISP1的PE收到CE的路由后,会更新给ASBR,因为它们建立***v4的邻居关系,但是发现ASBR上没有关于客户的路由。
这是因为默认情况下,MPBGP会拒绝本身没有创建相同VRF内容的路由,因为这里使用Open A的模型,就是使用VRF来解决的,所以把两边的VRF创建 和MPBGP建立起来。
Router-ISP1_ASBR(config)#ip vrf A
Router-ISP1_ASBR(config-vrf)#rd 1:1
Router-ISP1_ASBR(config-vrf)#route-target 1:1
Router-ISP1_ASBR(config-vrf)#int s1/3
Router-ISP1_ASBR(config-if)#ip vrf forwarding A
Router-ISP1_ASBR(config-if)#ip add 34.1.1.1 255.255.255.0
Router-ISP1_ASBR(config-if)#no shut
Router-ISP2_ASBR(config)#ip vrf A
Router-ISP2_ASBR(config-vrf)#rd 1:1
Router-ISP2_ASBR(config-vrf)#rou
Router-ISP2_ASBR(config-vrf)#route-target 1:1
Router-ISP2_ASBR(config)#ip vrf A
Router-ISP2_ASBR(config-vrf)#rd 1:1
Router-ISP2_ASBR(config-vrf)#route-target 1:1
Router-ISP2_ASBR(config)#int s1/3
Router-ISP2_ASBR(config-if)#ip vrf forwarding A
Router-ISP2_ASBR(config-if)#ip add 34.1.1.2 255.255.255.0
Router-ISP2_ASBR(config-if)#no shut
Router-ISP2_ASBR(config)#router bgp 2
Router-ISP2_ASBR(config-router)#address-family ipv4 vrf A
Router-ISP2_ASBR(config-router-af)#neighbor 34.1.1.1 remote
Router-ISP1_ASBR(config)#router bgp 1
Router-ISP1_ASBR(config-router)#address-family ipv4 vrf A
Router-ISP1_ASBR(config-router-af)#neighbor 34.1.1.2 remote 2
路由已经收到了,先测试下连通性。
通信是没问题的,主要看是怎么通的,开始标签的分析。
1、Router-ISP1_CE发送一个IP数据包 2.2.2.2出去,交给Router-ISP1_PE
2、PE收到以后查看属于这个接口的VRF的FIB表
内层标签303,就是ASBR分配的,这里我限制了标签的范围,也看想到是ASBR分配的,因为改变了下一跳。201是关于怎么去ASBR的下一跳标签。 外层201标签交给P。
查看MPBGP分配了标签用 show ip bgp ***v4 all labels ,关于2.2.2.2的条目产生了303标签,就是内层标签,这里In label代表自己分片的 Out Label代表别人分配的。
3、P上因为是次莫跳 执行Pop动作,发送给Router-ISP1_ASBR。
4、此时ASBR收到以后,是一层标签,但是关于2.2.2.2的标签,我并没有从邻居那收到关于分配的标签,所以导致的情况就是本地会执行untagged,把所有的标签全部弹出。
5、此时Untagged,那么就是一个存IP数据包发送给对端的ASBR, 这就是Open A的解决方案特点,两个ASBR用VRF建立邻居,在Router-ISP1_ASBR传递数据给Router-ISP2_ASBR时,相当于一个PE给CE传递数据包一样,PE会执行untagged动作,以IP数据包传递给CE。
6、Router-ISP2_ASBR收到以后,因为是关联的VRF接口,所以会查看FIB表,是否压入标签
查看关于2.2.2.2的压入内存标签603,外层标签501 ,603是Router-ISP2_PE MPBGP分配的,而501是关于去往MPBGP的下一跳标签。
7、P路由器收到以后 执行Pop动作,交给下一跳PE
8、PE收到以后,执行untagged 弹出所有标签,交给下一跳S1/1
整个通信完毕了,这个模型是最简单 也是最不好的一个了,因为可以发现 在ASBR之间先是IP包传递,然后传递到对方ASBR后要压入双层标签,另外客户一多,那么VRF需要创建大量的连关联接口。 所以这对路由器性能和维护都非常高。
本文首发于公众号:网络之路博客