MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

说明

        关于MPLS *** OSPF 是IGP协议中最难总结的了,因为它在MPLS ***比较特殊,并且3类和5类LSA的防环机制,和1、2类 3类、5类LSA的还原,所以机制比较复杂。

       在我们传统的OSPF中,area 0作为backbone存在,而当作为MPLS *** 连接的PE时,那么就有一个新的概念叫做superbackbone,
它比area 0还要高级,经过MPLS ***传递给对端CE后,那么无论是area 0 1 2 3都会被看成是一个域间来处理。假设这时候用area 1连接的PE,而身后连接的area 0,那么对于superbackbone来说,它也不会管你area 0的存在,只传递area 1的,只时候解决办法只能是虚链路了。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

OSPF属性传递,关于cost,它会携带在MPBGP的MED中在backbone中传递到对方。这时候会10.0.0.0/8传递到area 2后变成了三类LSA,这个是正常的,因为是从area 1 到其他区域。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

关于BGP backbone 它怎么知道给客户的是1类LSA还是3类和5类呢,那么就通过RT值来携带在MPBGP中了,这个RT不是VRF的那个,是属于OSPF在MPLS ***中特殊存在的,首先看下几个值的意思1:5:1 1代表area ,5代表 几类LSA, 1代表五类LSA的类型是OE1还是OE2的,0为OE1,1为OE2, 这里的图跟实际中有点小出入,到时候实验中可以看到,但是表达的含义都一样。

在MPLS ***的OSPF中,有个特殊的ID,叫Domain ID,它一般根据进程号来取值,如果在两个PE的OSPF进程不一样的话,那么Domain ID也不一样,Domain ID的作用就是判断你是否属于同一个进程,如果不属于的话,那么所以的LSA当做五类的看待,而OSPF携带的RT值就不会看了。相当于你从一个OSPF进程重分布进另外一个OSPF进程一样。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

OSPF Down Bit:防止三类LSA出现环路的作用,当area 1PE向PE路由器发送一个路由更新,它重分布进BGP backbone ,然后更新给右边的PE,PE也会将路由导入到area 2的PE中,这时候很有可能area 2连接另外的一台PE,又将路由导入回去了,这样很可能导致环路的产生,因为PE传递给另外一个PE收到的是B的路由,而OSPF传递的是o的 管理距离低,可能由于某些原因在收敛的时候,就产生了环路。 Down Bit的作用就是当MPBGP重分布进OSPF的时候,就会把这些路由的Down-Bit置位,这样当area 2其他连接另外一个PE传递路由的时候,检查这条路由的Down-Bit是否置位了 如果置位了 就会忽略掉。 把Down-Bit置位的规则就是有VRF的接口,就会置位,也只有VRF的接口才会检查Down-Bit。另外Down-Bit在重分布的时候会被清除。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

OSPF Tag Fied:在三类中有Donw-BIt进行防环,但是如果在这么个拓扑中,路由更新成左边的BGP backbone传递给左边的OSPF域 1,这时候DownBit是置位了,但是它在之间有台设备连接连网一个OSPF域,它进行了重分布,这时候Donw-bit会被清除,那么很有可能被OSPF Domain2的路由器传递到另外一个PE上去,造成环路。 这时候Tag Fied就是给五类LSA打上一个Tag,它利用AS的号码和area合起来计算一个值,在传递过程中会携带,如果PE收到一个关于与自己AS号相同的值那么就会忽略这个更新。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

实验环境,MPLS *** 底层EIGRP,客户之间OSPF,但是为了保证通信的稳定,还用了一个帧中继的链路连接,作为后门链路存在。 2.2.2.2这条路由作为o的路由,3.3.3.3作为OIA 4.4.4.4作为OE1|2 这个主要明白OSPF的一些属性和LSA的还原,做通其实很简单。

R-PE1(config)#int s1/1
R-PE1(config-if)#ip add 12.1.1.1 255.255.255.0
R-PE1(config-if)#no shut
R-PE1(config-if)#int lo 0
R-PE1(config-if)#ip add 1.1.1.1 255.255.255.255
R-PE1(config-if)#router eigrp 1
R-PE1(config-router)#no au
R-PE1(config-router)#network 12.1.1.0 0.0.0.255
R-PE1(config)#mpls ldp router-id lo 0
R-PE1(config)#int s1/1
R-PE1(config-if)#mpls ip

P(config)#int s1/2
P(config-if)#ip add 12.1.1.2 255.255.255.0
P(config-if)#no shut
P(config-if)#int s1/1
P(config-if)#ip add 23.1.1.1 255.255.255.0
P(config-if)#no shut
P(config-if)#int lo 0
P(config-if)#ip add 2.2.2.2 255.255.255.255
P(config-if)#router eigrp 1
P(config-router)#no auto-summary
P(config-router)#network 2.2.2.2 0.0.0.0
P(config-router)#network 12.1.1.2 0.0.0.0
P(config-router)#network 23.1.1.1 0.0.0.0
P(config)#mpls ldp rou lo0
P(config)#int s1/2
P(config-if)#mpls ip
P(config-if)#int s1/1
P(config-if)#mpls ip

R-PE2(config)#int s1/1
R-PE2(config-if)#ip add 23.1.1.2 255.255.255.0
R-PE2(config-if)#no shut
R-PE2(config-if)#int lo 0
R-PE2(config-if)#ip add 3.3.3.3 255.255.255.255
R-PE2(config-if)#router eigrp 1
R-PE2(config-router)#no auto-summary
R-PE2(config-router)#network 23.1.1.2 0.0.0.0
R-PE2(config-router)#network 3.3.3.3 0.0.0.0
R-PE2(config-router)#mpls ldp router-id lo 0
R-PE2(config)#int s1/2
R-PE2(config-if)#mpls ip

R-PE1(config)#ip vrf A
R-PE1(config-vrf)#rd 1:1
R-PE1(config-vrf)#route-target 1:1
R-PE1(config-vrf)#int s1/0
R-PE1(config-if)#ip vrf forwarding A
R-PE1(config-if)#ip add 192.168.1.2 255.255.255.0

R-PE1(config)#router ospf 1 vrf A
R-PE1(config-router)#network 192.168.1.2 0.0.0.0 a 0
这里OSPF不是在地址族中关联的,而是在进程号后面跟VRF参数。

R-CE1(config)#int s1/1
R-CE1(config-if)#ip add 192.168.1.1 255.255.255.0
R-CE1(config-if)#no shut
R-CE1(config-if)#int lo 0
R-CE1(config-if)#ip add 1.1.1.1 255.255.255.255
R-CE1(config-if)#router ospf 1
R-CE1(config-router)#router-id 1.1.1.1
R-CE1(config-router)#network 1.1.1.1 0.0.0.0 a 0
R-CE1(config-router)#network 192.168.1.1 0.0.0.0 a 0

R-PE2(config)#ip vrf A
R-PE2(config-vrf)#rd 1:1
R-PE2(config-vrf)#route-target 1:1
R-PE2(config-vrf)#int s1/0
R-PE2(config-if)#ip vrf forwarding A
R-PE2(config-if)#ip add 192.168.2.2 255.255.255.0
R-PE2(config-if)#no shut
R-PE2(config-if)#rface Serial1/0
R-PE2(config-if)#router ospf 200 vrf A 这里有进程200
R-PE2(config-router)#router-id 192.168.2.2
R-PE2(config-router)#network 192.168.2.2 0.0.0.0 a 0

R-CE2(config)#int s1/0
R-CE2(config-if)#ip add 192.168.2.1 255.255.255.0
R-CE2(config-if)#no shut
R-CE2(config-if)#int lo 0
R-CE2(config-if)#ip add 2.2.2.2 255.255.255.255
R-CE2(config-if)#int lo 1
R-CE2(config-if)#ip add 3.3.3.3 255.255.255.255
R-CE2(config-if)#int lo 2
R-CE2(config-if)#ip add 4.4.4.4 255.255.255.255
R-CE2(config-if)#router ospf 1
R-CE2(config-router)#router-id 2.2.2.2
R-CE2(config-router)#network 2.2.2.2 0.0.0.0 a 0
R-CE2(config-router)#network 3.3.3.3 0.0.0.0 a 1
R-CE2(config-router)#network 192.168.2.1 0.0.0.0 a 0
R-CE2(config-router)#redistribute connected subnets

R-PE2(config)#router bgp 1
R-PE2(config-router)#no bgp default ipv4
R-PE2(config-router)#neighbor 1.1.1.1 remote 1
R-PE2(config-router)#neighbor 1.1.1.1 upda lo 0
R-PE2(config-router)#address-family ***v
R-PE2(config-router-af)#neighbor 1.1.1.1 ac

R-PE1(config)#router bgp 1
R-PE1(config-router)#no default ipv
R-PE1(config-router)#no bgp default ipv4
R-PE1(config-router)#neighbor 3.3.3.3 remote 1
R-PE1(config-router)#neighbor 3.3.3.3 upda lo 0
R-PE1(config-router)#address-family ***v4
R-PE1(config-router-af)#neighbor 3.3.3.3 ac

最后一步 ,双向重分布

R-PE1(config)#router ospf 1
R-PE1(config-router)#redistribute bgp 1 subnets

R-PE1(config-router)#router bgp 1
R-PE1(config-router)#address-family ipv4 vrf A
R-PE1(config-router-af)#redistribute ospf 1 match internal external
这里注意一定要match external,默认情况下不敲的话就只有internal的,那么只有O和OIA的路由会发布过来而外部的就没戏了

R-PE2(config)#router bgp 1
R-PE2(config-router)#address-family ipv4 vrf A
R-PE2(config-router-af)#redistribute ospf 200 match internal external

R-PE2(config-router-af)#router ospf 200
R-PE2(config-router)#redistribute bgp 1 s

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

发现全部是OE2的,明明一条是O的,一条是OIA的,另外一条是OE2的,所以在这里就4.4.4.4是正常的,分析下为什么,之前说过一个Domain-ID,在MPLS ***的backbone中它会检查这个Domain-ID,如果一致才会看其他的RT属性,这里Domain-ID跟进程号相关。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

发现全部是OE2的,明明一条是O的,一条是OIA的,另外一条是OE2的,所以在这里就4.4.4.4是正常的,分析下为什么,之前说过一个Domain-ID,在MPLS ***的backbone中它会检查这个Domain-ID,如果一致才会看其他的RT属性,这里Domain-ID跟进程号相关。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

这里Domain-ID是32Bit的字节,相当于一个IP地址的形式,我在R-PE1上用的是ospf 1,所以这里是0.0.0.1,在看看R-PE2的

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

Superbakcbone

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

在R-PE2上,我用的是OSPF 200,所以这里Domain ID也为200,之前提到过 如果Domain ID不一致的话,它就会认为是重分布的路由,也就是五类的LSA发布到CE端。 也不会去看其他RT的属性值。

先做五类LSA还原成三类的LSA。
R-PE2(config)#router ospf 200
R-PE2(config-router)#domain-id 0.0.0.1

只需要一变改就好了,如果两边改相当于又改回原样了,Domain ID只存在MPLS ***中VRF中,在普通的IGP中不存在这个概念

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

原本属于三类的已经还原过来了。 在看看OSPF在MPBGP的属性

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

先看 Domain ID:0x005 :0x000000010200 :前面7个0和一个1,这是个十六进制的数字,因为我这里为1,所以表示为1.等下改成200,看下是不是c8,关于8位正好是 32bit,8*4, 就是之前的地址形式。

RT:0.0.0.0:2:0 ,这里前面4个0,是代表区域,我们习惯把区域用一个数字来代表,但是也可以是地址的形式,2代表 1/2类LSA,这里无论是1类还是二类的在这里都显示为2. 后面的0只有在五类LSA中才会有效,0代表OE1 1代表OE2。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

关于4.4.4.4原本就是OE2的路由,所以这里为5 ,后面为1代表OE2。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

在平常的客户要求中。可能之前的就能解决问题了,但是有可能会存在一个客户为了保证链路的稳定,又主动租用了一个帧中继的线路做备份,我们在MPLS ***中成为Bookdoor 后门链路。

先把帧中继最痛,然后宣告

R-CE1(config)#int s1/0
R-CE1(config-if)#ip add 172.16.1.1 255.255.255.0
R-CE1(config-if)#encapsulation frame-relay
R-CE1(config-if)#no shutdown
R-CE1(config-if)#ip ospf network point-to-point
R-CE1(config-if)#bandwidth 64
R-CE1(config)#router ospf 1
R-CE1(config-router)#network 172.16.1.0 0.0.0.255 a 0

R-CE2(config)#int s1/1
R-CE2(config-if)#ip add 172.16.1.2 255.255.255.0
R-CE2(config-if)#encapsulation frame-relay
R-CE2(config-if)#no shutdown
R-CE2(config-if)#ip ospf network point-to-point
R-CE2(config-if)#bandwidth 64
R-CE2(config)#router ospf 1
R-CE2(config-router)#network 172.16.1.0 0.0.0.255 a 0

这里用inverse ARP获取DLCI号,这里没问题的,把接口改为点对点建立邻居快点。 改带宽为了测试环境,这里接口带宽都一样。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

这时候下一跳都走172.16.1.2了,这肯定不是我们希望的,我们希望平常走MPLS ***骨干网,出了故障后才走这帧中继。

那么就必须建立一个机制,让它走MPLS ***骨干网,那就是sham-link,它类是一种隧道机制,让这个隧道也属于area 0,并且可以随意设置cost,让它低于backdoor的cost的就优于backdoor了。

sham-link的几个要求 1、必须32位掩码地址 2、不能在OSPF中宣告,只能在MPBGP中宣告 3、这个地址必须属于VRF

R-PE1(config-if)#int lo 1
R-PE1(config-if)#ip add 11.11.11.11 255.255.255.255
R-PE1(config-if)#ip vrf forwarding A
R-PE1(config-if)#ip add 11.11.11.11 255.255.255.255
R-PE1(config)#router bgp 1
R-PE1(config-router)#address-family ipv4 vrf A
R-PE1(config-router-af)#network 11.11.11.11 mask 255.255.255.255
R-PE2(config)#int lo 1
R-PE2(config-if)#ip vrf forwarding A
R-PE2(config-if)#ip add 22.22.22.22 255.255.255.255
R-PE2(config-if)#router bgp 1
R-PE2(config-router)#address-family ipv4 vrf A
R-PE2(config-router-af)#network 22.22.22.22 mask 255.255.255.255

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

一定要保证这两个地址之间能够通信。

R-PE1(config)#router ospf 1
R-PE1(config-router)#area 0 sham-link 11.11.11.11 22.22.22.22 cost 1

R-PE2(config)#router ospf 200
R-PE2(config-router)#area 0 sham-link 22.22.22.22 11.11.11.11 cost

这里前面指定自己的地址 后面指定对方的地址。

MPLS系列之三: OSPF Summary 【superbackbone 、Domain ID L

这里关于2.2.2.2 和192.168.2.0 都是O路由了,这是正常的 也走下一跳192.168.1.2了 MPLS ***的网络了,11.11.11.11 和22.22.22.22这两个地址也会随着发布过来,因为属于同一VRF中。如果在OSPF中宣告的话,那么会引起Flapping,所以会一直翻动。

本文首发于公众号:网络之路博客

上一篇:Django学习笔记:第四天 View


下一篇:创建实验楼课程app模块以及配置图片路径