MPLS VPN HUB SPOKE
1、 思路分析
Hub spoke含义是仅存在R5 – R7一条vpn、R6 – R7一条vpn。R5-R6之间不存在vpn关系。思路是将R7作为hub点,中转传递两个spoke点路由,实现两个spoke点通信。
默认情况下当R3将其中一个站点的vpn路由传给R7,R7单接口不会将路由再传递回R3。所以需要在R3 – R7之间建立2个vrf互联。实现R7的一根VRF线路专门用作路由接受,另外一根专门用作路由发送。
RT值设计:
100:100 – 总部路由
100:200 – 分支路由
分支:R5、R6 导出RT 100:100,导入100:200
总部:R7导出100:200,导入100:100
RD值设计:注意左侧站点的RD,一定不要与右侧站点RD相同,否则hub点的CE将路由传回R3时,R3会认为从对侧PE学到的路由和本侧CE的路由是同一条,导致选路问题。
2、基础核心网配置
2.1、IGP配置(省略)
2.2、mpls ldp配置(省略)
2.3、mp-bgp邻居关系
注意:仅在R1 – R3、R2 – R3上建立mpbgp邻居关系
3、PE VRF配置
3.1、hub端PE–CE 发路由接口配置(CE收)
R3
ip vpn-instance in
ipv4-family
route-distinguisher 100:57
vpn-target 100:200 import-extcommunity //导入分支的路由
interface GigabitEthernet0/0/1.37 //创建子接口
dot1q termination vid 37 //封装vlan37
ip binding vpn-instance in //接口绑定进入vrf in
ip address 37.1.1.3 255.255.255.0
arp broadcast enable //开启arp广播,很重要!
3.2、hub端PE-CE 收路由接口配置(CE发)
R3
ip vpn-instance out
ipv4-family
route-distinguisher 100:67
vpn-target 100:100 export-extcommunity //导出总部和分支的路由
interface GigabitEthernet0/0/1.137
dot1q termination vid 137
ip binding vpn-instance out
ip address 137.1.1.3 255.255.255.0
arp broadcast enable
3.3、Spoke端 PE 接口配置
R1
ip vpn-instance 15
ipv4-family
route-distinguisher 100:51
vpn-target 100:200 export-extcommunity //导出分支的路由
vpn-target 100:100 import-extcommunity //导入总部的路由
interface GigabitEthernet0/0/2
ip binding vpn-instance 15
ip address 15.1.1.1 255.255.255.0
R2
ip vpn-instance 26
ipv4-family
route-distinguisher 100:62
vpn-target 100:200 export-extcommunity
vpn-target 100:100 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance 26
ip address 26.1.1.2 255.255.255.0
4、CE接口配置
4.1、hub端CE接收路由接口配置
注意:hub端的CE仅使用子接口将物理接口分成两个接口即可(防止路由不收发),不用起VRF,如果起了vrf 就变成MCE组网了
R7
interface GigabitEthernet0/0/1.37
dot1q termination vid 37
ip address 37.1.1.7 255.255.255.0
arp broadcast enable
interface LoopBack0
ip address 7.7.7.7 255.255.255.255
4.2、hub端CE发送路由接口配置
R7
interface GigabitEthernet0/0/1.137
dot1q termination vid 137
ip address 137.1.1.7 255.255.255.0
arp broadcast enable
4.3、spoke端CE接口配置(省略)
5、PE-CE 各协议情况
5.1、情况一:
hub端、spoke端全bgp
注:Hub端PE在收Hub CE路由时要:allow-as-loop
5.1.1、hub PE、CE BGP配置
R3
bgp 100
ipv4-family vpn-instance in
peer 37.1.1.7 as-number 7
ipv4-family vpn-instance out
peer 137.1.1.7 as-number 7
peer 137.1.1.7 allow-as-loop //允许接受总部发过来包含自己AS号的路由,很重要
R7
bgp 7
network 7.7.7.7 255.255.255.255
peer 37.1.1.3 as-number 100
peer 137.1.1.3 as-number 100
network 7.7.7.7 255.255.255.255
5.1.2、spoke PE、CE配置
R1
bgp 100
ipv4-family vpn-instance 15
peer 15.1.1.5 as-number 5
R2
bgp 100
ipv4-family vpn-instance 26
peer 26.1.1.6 as-number 6
R5
bgp 5
router-id 5.5.5.5
peer 15.1.1.1 as-number 100
network 5.5.5.5 255.255.255.255
R6
bgp 6
router-id 6.6.6.6
peer 26.1.1.2 as-number 100
network 6.6.6.6 255.255.255.255
5.1.3、观察路由
针对R5的5.1.1.1路由传给R6为例:
R1通过bgp ipv4路由学到5.1.1.1,转换成vpnv4继续传给R3
R3通过vpnv4路由学到5.1.1.1,转换成ipv4,放进vrf in
dis bgp vpnv4 route-distinguisher 100:51 routing-table //查 vpnv4 bgp表
dis bgp vpnv4 vpn-instance in routing-table //查vrf in bgp表
R7通过g0/0/1.37接口学到ipv4 bgp路由,通过g0/0/1.137传回R3
R3通过vrf out将5.1.1.1,转换成vpnv4路由继续传递 – 发现会传给R2,但也会传回R1,但R1没有接收
R3:display bgp vpnv4 all route
R1从两个方向学到去往5.1.1.1的路由,因为AS_Path选择正确的路由。
从R5直接学到:AS_Path = 5
从R3绕圈学到:AS_Path = 7 100 5
R2正常收到R3传递的5.1.1.1vpnv4路由,放进vrf继续传递给R6
R6查看路由表,学到了5.1.1.1的路由(反向同理)
5.1.4、连通性验证
R5访问R6、R7测试连通性
R5 trace R6路径
5.2、情况二
hub端bgp、spoke端IGP
注:Hub端PE在收Hub CE路由时要:allow-as-loop
5.2.1、hub PE、CE路由协议配置
R3
bgp 100
ipv4-family vpn-instance in
peer 37.1.1.7 as-number 7
ipv4-family vpn-instance out
peer 137.1.1.7 as-number 7
peer 137.1.1.7 allow-as-loop //允许接收包含自己AS号的bgp路由
R7
bgp 7
router-id 7.1.1.1
peer 37.1.1.3 as-number 100
peer 137.1.1.3 as-number 100
network 7.1.1.1 255.255.255.255
5.2.2、spoke PE、CE路由协议配置
R1
ospf 1 router-id 1.1.1.1 vpn-instance 15
area 0.0.0.0
network 15.1.1.0 0.0.0.255
R2
ospf 1 router-id 2.2.2.2 vpn-instance 26
area 0.0.0.0
network 26.1.1.0 0.0.0.255
R5
ospf 1 router-id 5.1.1.1
area 0.0.0.0
network 5.1.1.0 0.0.0.255
network 15.1.1.0 0.0.0.255
R6
ospf 1 router-id 6.1.1.1
area 0.0.0.0
network 6.1.1.0 0.0.0.255
network 26.1.1.0 0.0.0.255
5.2.3、spoke端PE双向引入
R1
ospf 1 router-id 1.1.1.1 vpn-instance 15
import-route bgp
bgp 100
ipv4-family vpn-instance 15
import-route ospf 1
R2
ospf 1 router-id 2.2.2.2 vpn-instance 26
import-route bgp
bgp 100
ipv4-family vpn-instance 26
import-route ospf 1
5.2.3、观察路由
以R5的loopback口5.1.1.1路由传递给R6为例
R5首先通过1类LSA将路由传递给R1
R1通过vrf ospf学习到1类lsa,引入至bgp变成vpnv4路由传递给R3
R3收到R1发送的5.1.1.1的vpnv4路由,转换成ipv4 bgp路由传递给R7
dis bgp vpnv4 route-distinguisher 100:51 routing-table
dis bgp vpnv4 vpn-instance in routing-table 5.1.1.1
R7从g0/0/1.37收到路由后,又自动从g0/0/1.137传出给R3
R3的vrf out收到5.1.1.1的路由后会转换成vpnv4路由同时传递给R1和R2
dis bgp vpnv4 route-distinguisher 100:67 routing-table
dis bgp vpnv4 route-distinguisher 100:67 routing-table 5.1.1.1
R1会同时从R5、R3方向两个方向收到去往5.1.1.1的路由
从R5收的是ospf路由 – 优先级 = 10(1类LSA) – 选择正确的路
从R3收的是bgp路由 – 优先级 = 255
R2收到从R3方向学的5.1.1.1的路由,会将路由转换成ipv4 bgp路由引入ospf,并作为ospf 5类LSA传递给R6
dis bgp vpnv4 all routing-table 5.1.1.1、display ospf lsdb
R6通过5类lsa形成去往5.1.1.1路由(反向同理)
5.2.4、连通性验证
R5分别访问R6和R7的loopback接口
R5 trace R6查看路径
5.3、情况三
hub端OSPF、spoke端OSPF(Hub端单进程、双进程)
注:Hub端PE在收Hub CE路由时:3类 关闭3类 ospf DN=1 检查
5类关闭5类ospf DN=1 + 修改route-tag
5.3.1、Hub端OSPF单进程
5.3.1.1、hub PE、CE配置
R3
ospf 2 router-id 3.1.1.1 vpn-instance in //收路由接口起ospf
area 0.0.0.0
network 37.1.1.0 0.0.0.255
ospf 2 router-id 3.1.1.1 vpn-instance out //发路由接口起ospf
area 0.0.0.0
network 137.1.1.0 0.0.0.255
注:hub端的PE必须起双进程,两个vpn不能起同一个ospf进程
R7
ospf 2 router-id 7.1.1.1 //hub段CE ospf单进程
area 0.0.0.0
network 7.1.1.0 0.0.0.255
network 37.1.1.0 0.0.0.255 //收路由接口
network 137.1.1.0 0.0.0.255 //发路由接口
5.3.1.2、spoke PE、CE配置
R1
ospf 2 router-id 1.1.1.1 vpn-instance 15
area 0.0.0.0
network 15.1.1.0 0.0.0.255
R2
ospf 2 router-id 2.1.1.1 vpn-instance 26
area 0.0.0.0
network 26.1.1.0 0.0.0.255
R5
ospf 1 router-id 5.1.1.1
area 0.0.0.0
network 5.1.1.0 0.0.0.255
network 15.1.1.0 0.0.0.255
R6
ospf 1 router-id 6.1.1.1
area 0.0.0.0
network 6.1.1.0 0.0.0.255
network 26.1.1.0 0.0.0.255
5.3.1.3、hub、Spoke端PE双向引入
R3
ospf 2 router-id 3.1.1.1 vpn-instance in //上面的vrf(中心CE收路由)
import-route bgp //将bgp引入上面vrf里传递给CE
bgp 100
ipv4-family vpn-instance out //下面的vrf(中心CE发路由)
import-route ospf 3 //将hub CE和分支的ospf路由引入bgp
ospf 3 route-id 3.1.1.1 vpn-instance out
dn-bit-check disable summary //关闭R3下面vrf的3类LSA DN置位检查
注:ospf PE双vrf 连接hub CE点,必须关闭DN bit位检查,否则hub点传回来的路由携带DN =1 的属性默认PE不接收
R1
ospf 2 router-id 1.1.1.1 vpn-instance 15
import-route bgp
bgp 100
ipv4-family vpn-instance 15
import-route ospf 2
R2
bgp 100
ipv4-family vpn-instance 26
import-route ospf 2
ospf 2 router-id 2.1.1.1 vpn-instance 26
import-route bgp
5.3.1.4、观察路由
以R5的5.1.1.1路由传递给R6为例
R5通过ospf以1类lsa将自身loopback口路由传递给R1
R1将vrf 收到的ospf路由引入bgp ipv4,转换成vpnv4路由的传递给R3
R3将收到的vpnv4路由导入vrf in,引入ospf作为3类lsa(domain id相同)传递给R7 g0/0/1.37
R7接受和发送接口属于同一个ospf进程,所以不用做引入,R7自动将g0/0/1.37接口收到的路由通过g0/0/1.13.7传递回R3
R3下面vrf out收到R7发过来的5.1.1.1的3类LSA(DN=1),默认不接受,需要开启忽略3类lsa DN置位功能。R3就会接受,并且将路由引入bgp转换成vpnv4路由继续传递给R1和R2
dis ospf lsdb summary 5.5.5.5 originate-router 37.1.1.3 //查看3类lsa dn = 1
dis bgp vpnv4 route-distinguisher 100:67 routing-table 5.5.5.5
R1从两个方向学到去往5.1.1.1的路由
R1从R5直接学到去往5.1.1.1的路由 – 优先级 10 - 优选正确这条,无环
R1从R3绕圈学到去往5.1.1.1的路由 – 优先级 255
R2正常从R3收到5.1.1.1的vpnv4路由,并转换成ipv4 bgp 再引入ospf作为3类LSA传递给R6 (因为还是hub点也是ospf,且三个站点domain id 相同,中间是super backbone,三个PE都执行ABR功能)
R6查看收到的3类lsa 5.1.1.1
5.3.1.5、连通性验证
R5访问R6、R7验证连通性
R5 tracer R6查看访问路径
5.3.2、Hub端OSPF双进程
5.3.2.1、hub PE、CE配置
Hub PE配置与上面CE单进程配置相同(省略)
Hub CE配置:
R7
ospf 2 router-id 7.1.1.1
area 0.0.0.0
network 37.1.1.0 0.0.0.255
ospf 3 router-id 7.1.1.1
area 0.0.0.0
network 7.1.1.0 0.0.0.255 //将自己loopback 激活进ospf – 1类lsa
network 137.1.1.0 0.0.0.255
import-route ospf 3 //将上面vrf in收到的分支路由引入下面vrf ospf – 5类lsa
5.3.2.2、spoke PE、CE配置(与上面实验相同,省略)
5.3.2.3、观察路由(与上面实验相同)
与上面单进程ospf基本相同,唯一的区别就是hub CE(R7)上做了引入动作,将R7收到的5.1.1.1变成了5类lsa重新从R7传递给R6,5类经过对端PE ABR(R2)传递给R6还是5类lsa
问题:hub点CE(R7)因为是双进程ospf,需要做引入,将5.1.1.1的路由作为5类lsa传递回R3,R3不关闭DN、route-tag检查能否学习到路由?
答案:可以。因为R7没运行vrf,不存在DN和route tag防环的问题
5.3.2.4、连通性验证
5.4、情况四(有环路)
Hub端IGP、Spoke端bgp(有问题) - spoke端PE自然产生环路
5.4.1、hub端PE、CE配置
R3
ospf 2 router-id 3.1.1.1 vpn-instance in
area 0.0.0.0
network 37.1.1.0 0.0.0.255
ospf 3 router-id 3.1.1.1 vpn-instance out
area 0.0.0.0
network 137.1.1.0 0.0.0.255
R7
ospf 2 router-id 7.1.1.1
area 0.0.0.0
network 7.1.1.0 0.0.0.255
network 37.1.1.0 0.0.0.255
network 137.1.1.0 0.0.0.255
5.4.2、spoke端PE、CE配置
R1
bgp 100
ipv4-family vpn-instance 15
peer 15.1.1.5 as-number 5
R2
bgp 100
ipv4-family vpn-instance 26
peer 26.1.1.6 as-number 6
R5
bgp 5
router-id 5.1.1.1
peer 15.1.1.1 as-number 100
network 5.1.1.1 255.255.255.255
R6
bgp 6
router-id 6.1.1.1
peer 26.1.1.2 as-number 100
network 6.1.1.1 255.255.255.255
5.3.3、hub端PE双向引入
R3
ospf 2 router-id 3.1.1.1 vpn-instance in
import-route bgp //bgp路由引入vrf in 传给R7
bgp 100
ipv4-family vpn-instance out
import-route ospf 3
ospf 3 router-id 3.1.1.1 vpn-instance out
dn-bit-check disable ase //下面vrf ospf 3 接受dn=1的5类lsa
route-tag 200 //修改ospf 3 接受,发送的5类lsa route tag=200 ≠ 自己AS号100
注:因为R3产生的是5类lsa给R7(分支和总部不是都是ospf)
DN=1检查关闭
route-tag修改≠自己的AS号
这两步操作必须都做,才可以实现R3的vrf out 路由表里存在R7传回来的5.5.5.5的路由
5.4.4、环路现象
以R5的5.1.1.1路由传递给R6为例
R1收到R5发送的ipv4 bgp路由,转换成vpnv4路由传递给R3
R3收到5.1.1.1的vpnv4路由,转换成ipv4 bgp路由,通过ospf传递5类lsa给R7(vrf 出去 ospf DN = 1)
R7通过ospf收到5类lsa,放进自己路由表,同时传回给R3
R3收到5类lsa dn =1 ,由于关闭5类lsa dn检查、修改了route tag,放进vrf out路由表,引入bgp变成ipv4 bgp路由,再自动转换成vpnv4路由分别传递给R1、R2
R1 分别从R5和R3两个方向学到5.1.1.1的路由
R1从R5方向学到的5.1.1.1 bgp路由 AS_Path = 5
从R3方向学到的5.1.1.1 bgp路由 AS_Path = 没有 – 选择环路路由
display bgp vpnv4 vpn-instance 15 routing-table 5.1.1.1
分析:R1一旦选择从R3去往5.1.1.1,本来从R5直接去5.1.1.1的路由就被顶出路由表,就不能作为vpnv4路由传递给R3 – 路由震荡、环路
R5访问R6 – 不通
5.4.5、解决方法
R1上去往5.1.1.1 的路由不能被自己传给R3再穿回来的路由顶掉。
在R1上修改从R5方向学到的路由的Preval值(改大),让R1去往5.5.5.5始终保持从R5走。
R1
bgp 100
ipv4-family vpn-instance 15
peer 15.1.1.5 preferred-value 100 //将从R5学到的路由preval改大,优先从R5走
R1查看bgp表变化 – R1选择直接从R5 去5.1.1.1,然后将路由传递给R5完成路由传递
dis bgp vpnv4 vpn-instance 15 routing-table 5.1.1.1
R2一样需要修改去往6.6.6.6的路由优先从R6走(同理修改preval)
R2
bgp 100
ipv4-family vpn-instance 26
peer 26.1.1.6 preferred-value 100
5.4.5、连通性验证
R5测试访问R6、R7连通性
R5 tracer R6查看访问路径
三、mpls 域间vpn
IE考试不考,有兴趣可以自行了解