OSPF-weiPN联动下的防环
文章目录
- OSPF-weiPN联动下的防环
- 参考阅读
- 写在前面
- 一、实验搭建
- 1.1 实验拓扑
- 1.2 分析
- 1.2.1 为什么要被weiPN连接起来?
- 1.2.2 hub间的通信
- 1.2.3 OSPF-weiPN-instance
- 1.2.4 路由引入
- 1.3 配置部署
- 1.3.1 spoke端
- 1.3.2 hub端
- 1.3.3 超级骨干域
- 二、环路分析
- 2.1 环路举例
- 2.2 spoke、hub架构
- 2.3 解除DN位
- 2.4 解除weiPN Route Tag
- 2.4.1 OSPF Domin ID
- 2.4.2 解除route-tag
- 2.5 总结
- 三、Sham-Link
- 3.1 实验拓扑
- 3.2 需求分析
- 3.3 配置部署
- 3.4 总结
参考阅读
在网络架构中,P、PE、CE、CR等分别代表什么意思?
MPLS 实验-VRF表分离(Huawei设备
企业级网络架构配置细则(贰)
网络100问之路由技术(贰)OSPF大礼包(1-10)
网络100问之路由技术(壹)
写在前面
此实验的全称叫做Hub、Spoke环境下MP-BGP、MPLS-weiPN的OSPF3、5、7类LSA的DN、weiPN Route-Tag防环
此实验的题目有点长,我来简单分析下;核心问题是OSPF的防环问题,我们知道OSPF的防环分为域内和域间,域内防环用的是SPF算法基于LSDB计算出来的树,而域间防环分为如下几种
1、星型拓扑、水平分割
2、DN位防环
3、weiPN Route Tag
要知道这些置位情况,首先看看3、5类LSA的报文字段情况
Type-3 summary LSA
Type-5 AS-External-LSA 格式
什么是DN位?
存在位置:在3、5、7类LSA的头部信息中存在一个8bit的Options字段,其字段中的最高位为DN位;
定义:为了防止路由环路,OSPF多实例进程使用一个bit位作为标志位,称为DN位;
作用:PE在生成Type3、Type5或Type7LSA发布给CE时,都将DN位置位(值为1),其他类型LSA的DN位不置位(值0)
防环:PE的OSPF多实例进程在进行计算时,忽略DN置位的LSA;这样就防止了PE又从CE学到发出的LSA而引起的环路
如下就是一个3类LSA的DN位被置位的情况,实验中会详解
什么是weiPN Route Tag ?
存在位置:在5、7类LSA的头部信息中存在一个32bit的外部路由标记(External Route Tag)字段,添加到外部路由上的标记;OSPF 本身并不使用这个字段,它可以用来对外部路由进行管理
定义:
1、weiPN路由标记(weiPN Route Tag),PE根据收到的BGP的私网路由产生的5/7类LSA中必须包含这个参数。
2、weiPN路由标记不在BGP的扩展团体属性中传递,只是本地概念,只在收到BGP路由并且产生OSPF LSA的PE上有意义
作用:当PE发现LSA的weiPN路由标记(LSA的Tag值)和自己的一样,就会忽略这条LSA,因此避免了环路
如下就是一个5类LSA的route-tag存在的情况,实验中会详解
重要的概念说完了,下面就开始在实验环境下详细分析吧
一、实验搭建
1.1 实验拓扑
1.2 分析
? OSPF进程1分为三个区域spoke端的a0区域、hub1端的a1区域、hub2端的a2区域;但是中间被MP-BGP MPLS-weiPN 连接了起来
1.2.1 为什么要被weiPN连接起来?
目的:
? OSPF 是一种应用广泛的 IGP 协议,很多情况下,weipen 用户内部网络运行 OSPF。如果能够在 PE-CE之间使用 OSPF,PE 通过 OSPF 向 CE 发布 weiPN 路由,则在 CE 上就不需要配置 PE-CE 之间的其它路由协议,从而简化 CE的管理和配置
PE-CE 间使用 OSPF 有如下优势:
1、通常在一个 Site 内部使用 OSPF 学习路由。如果 PE-CE 间也使用 OSPF 则可以减少 CE 设备所支持的协议种类,降低对 CE 设备的要求。
2、同样,Site 内部和 PE-CE 间都使用 OSPF 可以降低网络管理人员的工作复杂度,不必要求管理人员对多种协议熟练掌握。
3、对于在骨干网上使能 OSPF 而不使能 weiPN 的网络,将其转换为使能 BGP/MPLS weiPN 时,由于 PE-CE 间继续使能 OSPF,从而降低了转换的难度。
实现:
CE1 上的路由发布给 CE3 和 CE4 过程可以描述为:
-
PE1 将 CE1 上的 OSPF 路由引入到 BGP 中,形成 BGP weiPNv4 路由。
-
PE1 通过 MP-BGP 将这些 BGP weiPNv4 路由发布给 PE2。
-
PE2 将 BGP weiPNv4 路由引入到 OSPF,再发布给 CE3 和 CE4。
同理,CE4 和 CE3 上的路由发布给 CE1 的过程类似。
中间的VPN区域可被称为超级骨干域;Super Backbone
1.2.2 hub间的通信
? hub就是分支的意思,spoke就是总部的意思,即分支间的通信需要绕行总部,由于OSPF进程1的中间区域是weiPN,即传递的路由是携带BGP团体属性的BGP weiPNV4路由,所以存在VRF表,那么hub1、2上将接收spoke的VRF表,总部的VRF表各自接收分支的VRF路由即可,即存在主备结构,但是此实验重在分析防环的字段,并不着重说明分流互备的思想,若想要了解,查看参考阅读即可
1.2.3 OSPF-weiPN-instance
在中间粉色的区域,由于跑的是BGP协议,底层首先要通,使用了OSPF进程2;
在spoke、hub区上用的是OSPF的进程1,因为这是总部与分支,他们本来就是属于一个OSPF进程的;
在PE与CE间,PE上起OSPF的weiPN-instance进行宣告,即两个hub上的OSPF宣告有些不同
1.2.4 路由引入
四个PE上做路由的双向引入操作,即将BGP引入到OSPF,将OSPF引入到BGP;需要注意的是PE的OSPF是 weiPN-instance路由,引入到BGP上是要进入ipv4-family weiPNv4 weiPN-instacne内进行路由的引入操作
题外话:
? 看过我之前的实验配置Blog的朋友,可能会发现此篇Blog将大篇幅的重心放在分析思考上面;其实,对于这种网络的架构与思想,最重要的其实就是分析问题的思考逻辑,而不是配置,套用在研发方面,学到后面看重的都是思考而不是语法,希望关注我的朋友们一定要明确这个道理
1.3 配置部署
1.3.1 spoke端
感觉没啥说的,配IP、起OSPF即可,注意一点,spoke端的OSPF是在a0区域的
[R3-ospf-1]di th
#
ospf 1 router-id 10.1.3.3area 0.0.0.0network 10.0.0.0 0.255.255.255
#
return
R4、5、6相同
1.3.2 hub端
两个hub处的OSPF与spoke的OSPF进程相同,因为处于同一个OSPF域中
[R7-ospf-1]di th
#
ospf 1 router-id 10.1.7.7area 0.0.0.1network 10.0.0.0 0.255.255.255
#
return
R8做相同配置
1.3.3 超级骨干域
显而易见,就是中间跑MP-BGP、MPLS-weiPN的区域
根据逻辑分为如下几个配置细则
1、底层起OSPF,因为同一个AS的BGP建邻用的是环回
为什么用环回?
因为用的是TCP建邻,就算直连断了后,底层能通,邻居还是可以建立起来的
2、建立IBGP邻居
注意:IBGP水平分割导致的下一跳不优不能加表的问题
解决:路由反射器、EBGP联邦;本实验采用的是将R2、3作为路由反射器
3、建立vpnv4邻居
因为要传递CE的私网路由,所有要使用MP-BGP来传递BGP的VPNV4路由,注意一定要关闭vpn-target策略
4、铺设MPLS隧道,即防止数据层面的路由黑洞
因为运营商内部肯定存在纯P设备,即不运行BGP
5、spoke与hub的VRF表接收
hub接收spoke;spoke中存在分流与互备的结构,此实验没有展开这里,但是此思想时刻存在于网络架构中
6、路由引入
四个PE端进行双向的路由引入即可
部署命令:
1、底层的OSPF;R2、3、4相同,注意是进程2
[R1-ospf-2]di th
#
ospf 2 router-id 10.1.1.1area 0.0.0.0network 10.0.0.0 0.255.255.255
#
return2、ipv4-family unicast邻居、weiPNv4邻居、路由引入
R1、R4建邻命令相同,区别在于引入的weiPNn-instance不同;R3、R2类似
[R1-bgp]di th
#
bgp 1peer 10.1.2.2 as-number 1peer 10.1.2.2 connect-interface LoopBack0peer 10.1.3.3 as-number 1peer 10.1.3.3 connect-interface LoopBack0#ipv4-family unicastundo synchronizationpeer 10.1.2.2 enablepeer 10.1.2.2 next-hop-localpeer 10.1.3.3 enablepeer 10.1.3.3 next-hop-local#ipv4-family vpnv4undo policy vpn-targetpeer 10.1.2.2 enablepeer 10.1.2.2 advertise-communitypeer 10.1.3.3 enablepeer 10.1.3.3 advertise-community#ipv4-family vpn-instance aimport-route ospf 1
#
[R4-bgp]di th
#
bgp 1peer 10.1.2.2 as-number 1peer 10.1.2.2 connect-interface LoopBack0peer 10.1.3.3 as-number 1peer 10.1.3.3 connect-interface LoopBack0#ipv4-family unicastundo synchronizationpeer 10.1.2.2 enablepeer 10.1.2.2 next-hop-localpeer 10.1.3.3 enablepeer 10.1.3.3 next-hop-local#ipv4-family vpnv4undo policy vpn-targetpeer 10.1.2.2 enablepeer 10.1.2.2 advertise-communitypeer 10.1.3.3 enablepeer 10.1.3.3 advertise-community#ipv4-family vpn-instance cimport-route ospf 1
#
return[R2-bgp]di th
#
bgp 1peer 10.1.1.1 as-number 1peer 10.1.1.1 connect-interface LoopBack0peer 10.1.4.4 as-number 1peer 10.1.4.4 connect-interface LoopBack0#ipv4-family unicastundo synchronizationpeer 10.1.1.1 enablepeer 10.1.1.1 reflect-clientpeer 10.1.1.1 next-hop-localpeer 10.1.4.4 enablepeer 10.1.4.4 reflect-clientpeer 10.1.4.4 next-hop-local#ipv4-family vpnv4undo policy vpn-targetpeer 10.1.1.1 enablepeer 10.1.1.1 reflect-clientpeer 10.1.1.1 advertise-communitypeer 10.1.4.4 enablepeer 10.1.4.4 reflect-clientpeer 10.1.4.4 advertise-community# ipv4-family vpn-instance bimport-route ospf 1
#
return
[R3-bgp]di th
#
bgp 1peer 10.1.1.1 as-number 1peer 10.1.1.1 connect-interface LoopBack0peer 10.1.4.4 as-number 1peer 10.1.4.4 connect-interface LoopBack0#ipv4-family unicastundo synchronizationpeer 10.1.1.1 enablepeer 10.1.1.1 reflect-clientpeer 10.1.1.1 next-hop-localpeer 10.1.4.4 enablepeer 10.1.4.4 reflect-clientpeer 10.1.4.4 next-hop-local#ipv4-family vpnv4undo policy vpn-targetpeer 10.1.1.1 enablepeer 10.1.1.1 reflect-clientpeer 10.1.1.1 advertise-communitypeer 10.1.4.4 enablepeer 10.1.4.4 reflect-clientpeer 10.1.4.4 advertise-community# ipv4-family vpn-instance cimport-route ospf 1
#
return3、VRF表
hub1
[R1-vpn-instance-a]di th
#
ip vpn-instance aipv4-familyroute-distinguisher 1:1vpn-target 1:1 export-extcommunityvpn-target 3:3 4:4 import-extcommunity
#
returnhub2
[R2-vpn-instance-b]di th
#
ip vpn-instance bipv4-familyroute-distinguisher 2:2vpn-target 2:2 export-extcommunityvpn-target 3:3 4:4 import-extcommunity
#
returnspoke
[R3-vpn-instance-c]di th
#
ip vpn-instance cipv4-familyroute-distinguisher 3:3vpn-target 3:3 export-extcommunityvpn-target 1:1 import-extcommunity
#
return
[R4-vpn-instance-c]di th
#
ip vpn-instance cipv4-familyroute-distinguisher 4:4vpn-target 4:4 export-extcommunityvpn-target 2:2 import-extcommunity
#
return4、OSPF-VPN-instance 需要注意的是区域
[R1-ospf-1]di th
#
ospf 1 router-id 10.1.1.1 vpn-instance aimport-route bgparea 0.0.0.1network 10.0.0.0 0.255.255.255
#
return
[R2-vpn-instance-b]ospf 1
[R2-ospf-1]di th
#
ospf 1 router-id 10.1.2.2 vpn-instance bimport-route bgparea 0.0.0.2network 10.0.0.0 0.255.255.255
#
return
R3、R4配置相同
[R3-ospf-1]di th
#
ospf 1 router-id 10.1.3.3 vpn-instance cimport-route bgparea 0.0.0.0network 10.0.0.0 0.255.255.255
#
return5、铺设MPLS-VPN隧道
部署方法:
全局mpls lsr-id 10.1.1.1mplsmpls ldp
进入接口:mpls ldpmpls
二、环路分析
2.1 环路举例
例1:CE双归
? 如下图所示CE3有一条路由,通过PE3重发布给自己的IBGP邻居PE1、2中,对于PE2来说从OSPF学到的三类LSA优先值是150,而IBGP学到的是255,则这条3类LSA又会被重发布到BGP中,至此环路产生
例2:路由震荡+完全环路
? 如上图所示,PE1 上 OSPF 引入了目的地址为 10.1.1.1/32 的 BGP 路由,产生 5 类或 7 类 LSA 发布给 CE1,CE1 上学到一条目的地址为 10.1.1.1/32,下一跳为 PE1 的 OSPF 路由,并发布给 PE2,这样 PE2 上就学到一条目的地址为 10.1.1.1/32,下一跳为 CE1 的 OSPF 路由。上图绿色线
? 同理,CE1 上也会学到一条目的地址为 10.1.1.1/32,下一跳为 PE2 的 OSPF 路由,PE1 上学到一条
目的地址为 10.1.1.1/32,下一跳为 CE1 的 OSPF 路由。上图蓝色线
? 此时,CE1 上存在两条等价路由,分别指向 PE1 和 PE2,而 PE1 和 PE2 上到 10.1.1.1/32 的下一跳
也都指向 CE1,环路就产生了。
? 同时,由于 OSPF 路由的优先级高于 BGP 路由,PE1 和 PE2 上到 10.1.1.1/32 的 BGP 路由被 OSPF路由所替代,也就是说,PE1 和 PE2 的路由表中活跃的是到 10.1.1.1/32,下一跳为 CE1 的 OSPF路由。很明显,此时真正的10.1.1.1/32路由是从OSPF学到的,那么BGP 路由转为不活跃状态,之前 OSPF 引入这条 BGP 路由时所产生的 LSA 就会被删除,而这样又会导致 OSPF 路由被撤消。
? 路由表中没有了 OSPF 路由,BGP 路由又变为活跃状态,继续重复之前的循环,导致路由振荡。
2.2 spoke、hub架构
此实验中,我们需要两个hub间进行路由的学习与流量的互通,即spoke,hub是同一家企业,只是中间存在一个运营商级别的超级骨干域;但是两个hub间并没有对方的路由;那么在这种架构下,就需要解除DN位的防环设计
2.3 解除DN位
在R5上查看lsdb的summary,可见DN位的存在;即R3引入这个3类LSA是将DN位置位
R5上抓包查看,可见,10.1.7.7这条路由进来的时候DN位被置位
R4上的OSPF的数据库表其实是可以看到这条DN被置位的路由的,但是并不会加表,至于为什么看到这里你肯定懂了
下面开始解除DN位
R3上解除3类LSA的DN位
[R3-ospf-1]dn-bit-set disable summary
一旦解除,OSPF马上发送LSU,如下所示,此时的10.1.7.7是没有DN位的
验证R4的数据库表与路由表,可见数据库表中没有了DN位的限制,路由也加表了
接下来在R3、R4上对五类做相同的配置,即解除DN位
dn-bit-set disable summarydn-bit-set disable ase
验证测试:
hub间的通信
通了!!!
这是我在网络中最喜欢的一句话!!!
2.4 解除weiPN Route Tag
R7与R8的环回通了说明CE的私网路由相通,但是R7的链路能不能与R8的链路相通呢?答案是不能,别问,问就是不能,要不然说weiPN Route Tag干嘛?
首先查看hub端的CE–PE间的10.1.17.0在spoke端是几类的LSA,可以很明显的看到其为5类的LSA
这里引入一个新的概念OSPF Domin ID(域ID)
2.4.1 OSPF Domin ID
OSPF Domain ID
本地 OSPF 区域和 VPN 远端的 OSPF 区域间如果相互发布区域间路由(Inter-area routes),则认为
这些区域属于同一个 OSPF 域(OSPF Domain)。
- 域标识符(Domain ID)用来标识和区分不同的域。
- 每一个 OSPF 域都有一个或多个域标识符,其中有一个是主标识符,其它为从标识符。
- 如果 OSPF 实例没有明确域标识符,则认为它的标识符为 NULL。PE 把 BGP 传来的远端路由向 CE 发布时,需要根据域标识符的情况选择向 CE 发布 Type3、Type5或 Type7 的 OSPF 路由。
- 如果本地的域标识符与 BGP 路由信息中携带的远端域标识符相等或相互兼容,则发布 3 类路由;否则,发布 Type5 或 Type7 路由。
? 现在就可以回答为什么CE–PE间的链路是5类的,因为其处在PE下的 weiPN-instance下,所以重发布时是5类的,而hub端CE的私网路由经BGP引入进spoke端时,其OSPF的Domin是一直的,注意:默认是进程号;那么就是3类的LSA
修改其Domin ID,使hub与spoke端的Domin ID不一致,这样一来hub端CE的私网路由来到spoke就是5类的
没有修改时,CE的私网路由是3类的
将R1上的domain id修改,修改后就是5类的了
[R1-ospf-1]domain-id 2
至于为什么R1-R7间的链路10.1.17.0在spoke端是以5类出现,原因是这条直连处在weiPN-instance表中,对于OSPF来说就当作是外部的路由,所以引入到spoke上时,就是以5类的LSA出现的
为了后面的实验,我将刚才配置的domin id取消了
2.4.2 解除route-tag
前面说到了什么是route-tag,我们来回顾一下
存在位置:在5、7类LSA的头部信息中存在一个32bit的外部路由标记(External Route Tag)字段,添加到外部路由上的标记;OSPF 本身并不使用这个字段,它可以用来对外部路由进行管理
定义:
1、 weiPN路由标记( weiPN Route Tag),PE根据收到的BGP的私网路由产生的5/7类LSA中必须包含这个参数。
2、 weiPN路由标记不在BGP的扩展团体属性中传递,只是本地概念,只在收到BGP路由并且产生OSPF LSA的PE上有意义
作用:当PE发现LSA的VPN路由标记(LSA的Tag值)和自己的一样,就会忽略这条LSA,因此避免了环路
未解除前
解除后
[R3-ospf-1]route-tag disable
测试,可见与预期相符
2.5 总结
总结:
PE是不加带DN位标记的路由进表;而tag位是引入的时候不能引入
注意:
DN位的路由,是进入了数据库中,但是不可能进表
为什么hub进入spoke的路由是3类的?
其实啊,中间的区域看似是一个区域,其实就是一条链路;即看似引入,实则链路
三、Sham-Link
3.1 实验拓扑
3.2 需求分析
hub与spoke都存在区域0,那么此时中间的VPN区域就叫做超级骨干域
? 如上图拓扑,在hub与spoke间拉了一条专线,但是我的需求是,weiPN作为主线路,专线作为备线路,此时有些人就不乐意了,花大价钱拉一条专线,却沦为备线路?
注意:我拉专线的时候,拉的是带宽低的线路,对比而言,其实 weiPN的价格和速率还是较快的
但是问题来了,如何调整选路,使weiPN链路作为主线路?
分析:
? 以现在这种情况,无论怎样调整cost,肯定优选的是专线,因为1类优于3类,即O>OIA;那么我有两种方案来解决此问题
1、将VPN做成一类的,这样主备线路就在同一级别上进行选路的调整(都是1类)
2、在专线上继续划区域,这样专线就是三类的了,但是,由于CE端接入的路由协议于区域十分复杂多变,这样做在实际环境中几乎不可能实现
综上所述,采用第一种方案
问题又又又又来了!!!
如何实现?
sham-link!!!
部署前的验证,即增大链路的cost还是优先专线
3.3 配置部署
分为如下几步
1、做sham-link的两个PE创建回环,放在vpn-instance里并且必须是32位
[R1]int loo 100
[R1-LoopBack100]ip binding vpn-instance a
Info: All IPv4 related configurations on this interface are removed!
Info: All IPv6 related configurations on this interface are removed!
[R1-LoopBack100]
[R1-LoopBack100]ip add 100.1.1.1 32[R3]int loo 100
[R3-LoopBack100]ip binding vpn-instance c
Info: All IPv4 related configurations on this interface are removed!
Info: All IPv6 related configurations on this interface are removed!
[R3-LoopBack100]ip add 100.1.1.2 32
2、BGP的VPN-instance中宣告
[R1-LoopBack100]bgp 1
[R1-bgp]ipv4-family vpn-instance a
[R1-bgp-a]network 100.1.1.1 32[R3-LoopBack100]bgp 1
[R3-bgp]ipv4-family vpn-instance c
[R3-bgp-c]network 100.1.1.2 32
测试这两个环回的连通性
3、在OSPF-weiPN-instance的区域0配置sham-link
[R1-ospf-1-area-0.0.0.0]sham-link 100.1.1.1 100.1.1.2
[R3-ospf-1-area-0.0.0.0]sham-link 100.1.1.2 100.1.1.1
查看sham-link邻居
验证测试:可见由于专线的cost大,所以会走 weiPN
3.4 总结
配置部署总结:
1、PE上各配置一个VRF的回环接口(接口VRF于OSPF所处的VRF相同)
2、PE在BGP的VRF簇中宣告回环接口,使之能够通信
3、PE中OSPF下的区域0内使用两个回环接口建立sham-link
sham-link的原理:
通过两个可以在PE的VRF中通信的回环地址,让两个PE建立OSPF邻居,从而不在依赖BGP的 weiPNV4传递两个PE之间的OSPF路由,sham-link的建立是两个站点之间的OSPF拓扑
由
CE1(OSPF)---->PE1(OSPF)---->PE1(BGP)---->PE2(BGP)---->PE2(OSPF)---->CE2(OSPF)
变为
CE1(OSPF)---->PE1(OSPF)---->PE2(OSPF)---->CE2(OSPF)sham-link