解决方案"/>
四、MPLS VPN跨域解决方案
1 跨域和非跨域的区别
在了解跨域和非跨域的区别前,先看下面两点:
- 多AS的特点
1、每个AS都拥有各自的IGP协议,区域之间不可能交换所有的路由信息,而是选择性的交换
2、AS之间使用eBGP协议连接
3、无论是单AS还是多AS,客户路由是不能出现在公网中的,防止和正常使用的公网IP冲突 - LDP的特点
1、不会为BGP条目分配标签
综上,出现一个问题:
ASBR之间也就是AS边界设备之间将无法使用LDP协议来进行跨跳建立邻居的路由黑洞避免,所以衍生出以下三种方案
2 标签的回顾以及深入研究
2.1 标签的种类
标签分三种:
- 1、LDP标签
封装在最外层,代替公网使用的标签,用于防止iBGP跨跳建立邻居时的路由黑洞问题 - 2、BGP-Label标签
封装在中间层,用于跨域MPLS VPN的Option C方案里的两个ASBR之间的流量的转发 - 3、MP-BGP标签
封装在最内层,用于存在VRF的场景中,负责根据将数据流转发到指定的关联VRF的接口
2.2 标签的生成和转发
- 表项生成
- 标签的装填(生成)和转发
前者依赖FIB表,后者依赖LFIB表; - 标签变化位置
无论哪一种标签,标签变化的位置都是在NH(下一跳)变化的位置,其中的NH要看是哪一种标签;
LDP标签就是LDP的下一个邻居位置,BGP-Label标签就是IPV4 BGP的下一个BGP邻居位置(如果有next-hop-self的话),MP-BGP标签就是下一个MP-BGP邻居的位置(MP-BGP的iBGP邻居会自动next-hop-self);
2.3 LDP标签特性说明
- 特性一
LDP不为路由表中的BGP路由分发标签也就是开头有个“R”的条目 - 特性二
当本地访问的IP是BGP路由匹配的IP时,封装的LDP标签应该是:LDP邻居发来的,本地BGP路由条目经过在BGP条目中“递归查找”后得出的最优的下一跳的IP的标签;(附带VRF特性说明,VRF的RIB在生成FIB时,会调用全局的RIB来进行“递归查找”等操作生成VRF的FIB)
图示说明
例子1:
PE2开启VRF 1关联的接口下连CEA-2
查看PE2表项:
- 按照LDP分发逻辑打上的标签是邻居发来的5.5.5.5对应的标签,但是显然不是;
- 而是经过递归后得出的邻居发来的8.8.8.8对应的标签;
- 所以得出结论,对于BGP条目,需要递归到有效BGP路由中最优的下一跳然后封装邻居发来的这个IP对应的标签;
例子2:
- 特性三
对于多标签情况,我们根据上一层标签的NH来作为下一层标签的network(当然,需要开启相关的协议才可以)
例子1:
随便举例,MPLS VPN C里面的标签封装,后面会详细介绍
- 特性四
对于MPLS标签和BGP-Label标签,默认都开启PHP机制(次末跳弹出机制)
3 跨域MPLS VPN解决方案
3.1 Option A
-
方案介绍
需要跨域的VPN在ASBR间通过专用的接口管理自己的VRF路由(子接口),VRF-to-VRF; -
方案优势
1、 ISP可以自己定义RT值,不需要多个ISP协商 -
方案缺陷
1、ASBR设备负担较大,需要承载所有客户路由
2、ASBR设备间链路负担较大,因为需要开子接口,一条链路多个子接口共用,带宽有限
3、对于跨越多个运营商(超过两个),配置比较麻烦
4、以上缺陷注定客户的节点数和需要传递的网络数不能太多,也就是网络规模不能过大 -
方案细节
-
转发原理
(1)CE2向PE2绑定了VRF的接口发出目的IP为Client的流量
(2)PE2的VRF接口收到流量之后,根据访问的目的IP查询对应VRF的VPNV4的表项,封装上VPNV4标签
(3)由于还有开启LDP协议,所以再把对应VPNV4表项内的NH作为MPLS表项的network来查找标签的进行封装,最后打上了两层标签(一弹出层内网标签,一层外网标签)根据最外层标签的NH发往P2
(4)P2接收之后将最外层标签弹出,发往ASBR2
(5)ASBR2收到之后,弹出MP-BGP标签发往ASBR1
(6)ASBR1的VRF接口收到不带标签的流量之后,根据访问的目的IP查询对应VRF的VPNV4的表项,封装上VPNV4标签
(7)由于还有开启LDP协议,所以再把对应VPNV4表项内的NH作为MPLS表项的network来查找标签的进行封装,最后打上了两层标签(一弹出层内网标签,一层外网标签)发往P1
(8)P1接收之后将最外层标签弹出,发往PE1
(9)PE1接收到带内网标签的报文之后,将流量导入对应的VRF,CE1接收到流量完成流量的转发
3.2 Option B
- 方案介绍
ASBR间通过MP-EBGP发布标签VPNV4路由,也称为单跳MP-EBGP跨域方式 - 方案优势
1、较OptionA而言,ASBR中间链路负担小,因为不用划分子接口 - 方案缺陷
1、RT值需要两个ISP协商
2、ASBR需要保存VPNV4前缀信息,ASBR负担较重可能成为瓶颈
2、对于跨越多个运营商(超过两个),配置比较麻烦 - 方案细节
- 转发原理
(1)CE2向PE2绑定了VRF的接口发出目的IP为Client的流量
(2)PE2的VRF接口收到流量之后,根据访问的目的IP查询对应VRF的VPNV4的表项,封装上VPNV4标签
(3)由于还有开启LDP协议,所以再把对应VPNV4表项内的NH作为MPLS表项的network来查找标签的进行封装,根据最外层标签的NH发往P2
(4)P2接收之后将最外层标签弹出,发往ASBR2
(5)ASBR2收到之后,交换MP-BGP标签发往ASBR1(此时就一层内层标签)
(6)ASBR1收到之后,先根据MP-BGP表项交换MP-BGP标签,然后再将该标签的NH做为MPLS表项的network来查找标签进行封装,最后根据最外层标签的下一跳发出流量(此时携带两层的标签)
(7)P1接收到之后将最外层标签弹出,发往PE1
(8)PE1接收到带内网标签的报文之后,将流量导入对应的VRF,CE1接收到流量完成流量的转发
3.3 Option C
-
方案介绍
PE或RR之间通过Multi-hop MP-EBGP发布VPNV4路由,也称为多跳MP-EBGP跨域方式,也是现网最常使用的方式 -
方案优势
1、对于跨多ISP的情况下部署更加合理 -
方案缺陷
1、方案贼几把难理解
2、方案配置较复杂
3、RT值需要ISP之间协商 -
方案细节
-
转发原理
(1)CE2向PE2绑定了VRF的接口发出目的IP为Client的流量
(2)PE2的VRF接口收到流量之后,根据访问的目的IP查询对应VRF的VPNV4的表项,封装上VPNV4标签
(3)由于有开启BGP-Label协议,所以再把对应VPNV4表项内的NH作为BGP-Label表项的network来查找标签的进行封装
(4)由于还有开启LDP协议,所以再把对应BGP-Label表项内的NH作为MPLS表项的network来查找标签的进行封装,根据最外层标签的NH发往P2(此时一共三层标签,一层内网标签,两层外网标签)
(5)P2接收之后将最外层标签弹出,发往ASBR2
(5)ASBR2收到之后,交换中层标签,根据其NH发往ASBR1
(6)ASBR1收到之后,弹出中层标签,然后再将该标签的NH做为MPLS表项的network来查找标签进行封装,最后根据最外层标签的下一跳发出流量到P1(此时携带两层的标签)
(7)P1接收到之后将最外层标签弹出,发往PE1
(8)PE1接收到带内网标签的报文之后,将流量导入对应的VRF,CE1接收到流量完成流量的转发
4 部分实现代码
(代码仅是事例和拓扑图配置无关)
- Option A
(1)每个设备配置物理接口IP以及环回接口IP
(2)搭建Underlay网络,每个蓝色区域内使用IGP协议实现AS内互通,并且都启用LDP协议
(3)配置PE和ASBR的VRF并且关联接口(其中两个ASBR之间接口用子接口关联),并且CE与PE的VRF之间建立普通eBGP邻居(环回口建立邻居)
- VRF配置事例
创建VRF并且设定RD和RT值
R1(config)#ip vrf sb
R1(config-vrf)#rd 250:520
R1(config-vrf)#route-target both 5:21
将相关接口关联进VRF
R1(config)#int f0/0
R1(config-if)#ip vrf forwarding sb- 子接口设置
R1(config)#int f0/0.1
R1(config-subif)#- eBGP环回接口建邻
R1(config)#router bgp 1
R1(config-router)#address-family ipv4 在IPV4地址族内用VRF和CE建立邻居
R1(config-router-af)#neighbor 3.3.3.3 remote-as 3
R1(config-router-af)#neighbor 3.3.3.3 update-source loopback 0
R1(config-router-af)#neighbor 3.3.3.3 ebgp-multihop 10 开启多跳(默认TTL=1)同时也取消了eBGP的直连检测
(4)PE1和ASBR1建立MP-iBGP邻居,PE2和ASBR2同理
- MP-iBGP配置事例
R1(config)#router bgp 1
R1(config-router)#no bgp default ipv4-unicast 当建立MP-BGP邻居之后关闭默认建立的普通的IPV4邻居
R1(config-router)#neighbor 3.3.3.3 remote-as 1
R1(config-router)#neighbor 3.3.3.3 update-source loopback 0
R1(config-router)#address-family vpnv4 在VPNV4地址族内激活MP-BGP
R1(config-router-af)#neighbor 3.3.3.3 activate
(5)CE侧宣告内网路由
- Option B
1、每个设备配置物理接口IP以及环回接口IP
2、搭建Underlay网络,每个蓝色区域内使用IGP协议实现AS内互通,并且都启用LDP协议
3、配置PE的VRF并且关联接口(ASBR之间接口不需要配置VRF接口),并且CE与PE的VRF之间建立普通eBGP邻居(环回口建立邻居)
4、PE1和ASBR1建立MP-iBGP邻居,PE2和ASBR2同理
5、ASBR1和ASBR2之间建立MP-eBGP邻居,并且关闭RT检测(默认需要RT匹配才会导入VPNV4数据库,并且转发VPNV4前缀信息)
- 关闭RT检测功能
R1(config)#router bgp 1
R1(config-router)#no bgp default route-target filter
6、CE侧宣告内网路由
- Option C
1、每个设备配置物理接口IP以及环回接口IP
2、搭建Underlay网络,每个蓝色区域内使用IGP协议实现AS内互通,并且都启用LDP协议
3、配置PE的VRF并且关联接口(ASBR之间接口不需要配置VRF接口),并且CE与PE的VRF之间建立普通eBGP邻居(环回口建立邻居)
4、PE1与ASBR1建立普通iBGP邻居,ASBR之间建立普通eBGP邻居,PE2与ASBR2建立普通iBGP邻居,以上邻居全部使用环回接口建立,并且在iBGP邻居之间使用next-hop-self;同时,这些邻居之间在普通BGP邻居的基础上还要发送BGP标签;
5、PE1,PE2在BGP中宣告自身环回接口路由
6、PE1和PE2建立MP-eBGP邻居(开启ebgp多跳,如果邻居一直处于 Idle状态可能就是没开,一定要用环回接口建立邻居)
- 关闭默认建立IPv4邻居以及开启多跳(默认就关闭了直连检测)
router bgp 2
no bgp default ipv4-unicast
neighbor 67.67.67.7 remote-as 3
neighbor 67.67.67.7 ebgp-multihop 10
7、CE侧宣告内网路由
5 MPLS VPN排错
5.1 查看类命令
- 查看 VPNV4标签
show ip bgp vpnv4 all labels
- 查看LDP 标签
show mpls ldp bindings
- 查看BGP标签
show ip bgp labels
- 查看VRF的CEF表
show ip vef vrf CE1
5.2 排错思路
控制层
- 私网路由是否送往对端
通过查看PE设备的VPNV4表项以及CE设备的路由表可以确定
转发层
- 设备是否支持或者开启MPLS转发功能
a、所有设备是否开启了CEF转发功能,这一功能决定了思科设备是否能够将标签压入?
b、应该开启MPLS 转发功能的接口是否开启功能,以及是否是LDP协商? - 在部分方案中是否还顺利分配了其他标签
a、如Option C的BGP-Label? - 标签的分配是否正确?
a、是否会存在由于下一跳的错误配置导致标签提前剥离的情况(这种情况会导致路由黑洞)?
最终数据是否能够通达
- 实际测试业务流量就可以知道是否能通达,一般不通就是上面两层出现问题导致的
5.3 错误案例
- 错误案例一
错误原因:Option C中的MP-eBGP邻居使用物理接口建立邻居关系,导致隧道提前中断
示范:
更多推荐
四、MPLS VPN跨域解决方案
发布评论