华为HCIP扩展技术MPLS-VPN
使用技术:mpls,bgp(MP-BGP),vpn-instance,IGP
在华为的网络架构中,CE路由器(Customer Edge Router)和PE路由器(Provider Edge Router)是两种不同类型的路由器,它们在网络中扮演着各自的角色。
CE路由器(Customer Edge Router):
- CE路由器是用户边缘设备,通常位于用户的网络边界。
- 它是用户网络与服务提供商网络之间的接口。
- CE路由器通过连接一个或多个PE路由器,为用户提供服务接入。
- 它通常是一台IP路由器,与连接的PE路由器建立邻接关系,可以是EBGP或OSPF等协议的邻居。
PE路由器(Provider Edge Router):
- PE路由器是运营商边缘路由器,位于服务提供商的网络边缘。
- 它充当IP VPN接入路由器,相当于标签边缘路由器(LER)。
- PE路由器连接CE路由器和P路由器(Provider Router,运营商骨干路由器),是网络中非常重要的节点。
- 用户的流量通过PE路由器流入用户网络,或者通过PE路由器流到MPLS骨干网。
- PE路由器负责与CE设备交换路由信息,并与其他PE路由器或P路由器交换VPN相关的路由信息。
简而言之,CE路由器是用户端的路由器,而PE路由器是服务提供商网络的一部分,它们共同协作以提供网络服务。在MPLS VPN网络中,PE路由器负责处理VPN标签,而P路由器则负责在网络核心中转发标签化的数据包。
1. 骨干IGP配置
在R1,R2,R3,R4运行ospf协议使得R1环回口可以访问R4环回口
建议配置router id
2. CE端 路由协议配置BGP
R5:
bgp 100
peer 15.1.1.1 as-number 400
network 5.5.5.0 255.255.255.0
network 192.168.5.0
R9:
bgp 200
peer 19.1.1.1 as-number 400
network 9.9.9.0 255.255.255.0
network 192.168.9.0
R7:
bgp 300
peer 17.1.1.1 as-number 400
network 7.7.7.0 255.255.255.0
network 192.168.7.0
R8:
bgp 500
peer 48.1.1.4 as-number 400
network 8.8.8.0 255.255.255.0
network 192.168.8.0
R6:
bgp 600
peer 46.1.1.4 as-number 400
network 6.6.6.0 255.255.255.0
network 192.168.6.0
3. VPN实例配置
注意:
- 一个vpn实例vpn-instance只能有一个route-distinguisher(代表实例身份号,针对本台路由器的实例区分)
- BGP路由更新会携带一个RT-export值。
- 一条路由可以配置多个RT值(RT-import值不携带在路由更新里)
- RT-import属性不会再路由更新里面携带,仅仅用于判断将那些路由导入CE
R1:
ip vpn-instance vpn100
route-distinguisher 100:100
vpn-target 10:10 export-extcommunity
vpn-target 50:50 import-extcommunity
ip vpn-instance vpn200
route-distinguisher 200:200
vpn-target 20:20 export-extcommunity
vpn-target 50:50 import-extcommunity
ip vpn-instance vpn300
route-distinguisher 300:300
vpn-target 30:30 export-extcommunity
vpn-target 60:60 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance vpn100
ip address 15.1.1.1 255.255.255.0
interface GigabitEthernet0/0/2
ip binding vpn-instance vpn200
ip address 19.1.1.1 255.255.255.0
interface GigabitEthernet4/0/0
ip binding vpn-instance vpn300
ip address 17.1.1.1 255.255.255.0
R4:
ip vpn-instance vpn500
route-distinguisher 500:500
vpn-target 50:50 export-extcommunity
vpn-target 10:10 20:20 import-extcommunity
ip vpn-instance vpn600
route-distinguisher 600:600
vpn-target 60:60 export-extcommunity
vpn-target 30:30 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance vpn600
ip address 46.1.1.4 255.255.255.0
interface GigabitEthernet0/0/2
ip binding vpn-instance vpn500
ip address 48.1.1.4 255.255.255.0
测试:
R1:
ping -vpn-instance 17.1.1.7
dis ip routing-table vpn-instance vpn100
4. PE端 MP-BGP配置
R4:
bgp 400
peer 1.1.1.1 as-number 400
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 1.1.1.1 enable
#
ipv4-family vpnv4
policy vpn-target
peer 1.1.1.1 enable
#
ipv4-family vpn-instance vpn500
peer 48.1.1.8 as-number 500
#
ipv4-family vpn-instance vpn600
peer 46.1.1.6 as-number 600
---------------------------------
R1:
bgp 400
peer 4.4.4.4 as-number 400
peer 4.4.4.4 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 4.4.4.4 enable
#
ipv4-family vpnv4
policy vpn-target
peer 4.4.4.4 enable
#
ipv4-family vpn-instance vpn100
peer 15.1.1.5 as-number 100
#
ipv4-family vpn-instance vpn200
peer 19.1.1.9 as-number 200
#
ipv4-family vpn-instance vpn300
peer 17.1.1.7 as-number 300
测试:
[R1_PE1]dis bgp peer
[R1_PE1]dis bgp routing-table
[R1_PE1]dis bgp vpnv4 vpn-instance vpn100 routing-table
5. MPLS(MP-BGP)配置
注意:
- 针对某路由前缀,PE之间传递MP-BGP的update路由更新包含三个参数:RD,RT-e,内层标签
- 内层标签的作用:区分业务报文(非路由更新)属于哪个vpn实例
- 在运行MPLS之前PE之间的BGP不传递路由更新,因为BGP需要为路由更新分配相应的内层标签
- 数据在传输时,由两层标签,内层标签是由MP-BGP分配。外层标签是由LDR分配。外层标签为了穿越公网。
- 在没有运行MPLS之前,PE和CE之间是可以传递bgp路由更新。
[R1_PE1]mpls lsr-id 1.1.1.1
[R1_PE1]mpls
Info: Mpls starting, please wait... OK!
[R1_PE1-mpls]mpls ldp
[R1_PE1-mpls-ldp]quit
[R1_PE1]int g0/0/0
[R1_PE1-GigabitEthernet0/0/0]mpls
[R1_PE1-GigabitEthernet0/0/0]mpls ldp
R2:
mpls lsr-id 2.2.2.2
mpls
mpls ldp
int g0/0/0
mpls
mpls ldp
int g0/0/1
mpls
mpls ldp
R3:
mpls lsr-id 3.3.3.3
mpls
mpls ldp
int g0/0/0
mpls
mpls ldp
int g0/0/1
mpls
mpls ldp
R4:
mpls lsr-id 4.4.4.4
mpls
mpls ldp
int g0/0/0
mpls
mpls ldp
测试
[R2]dis mpls ldp peer
[R3]dis mpls ldp peer
[R1_PE1]dis bgp vpnv4 all routing-table
[R1_PE1]dis bgp vpnv4 vpn-instance vpn100 routing-table
<R5>ping -a 192.168.5.1 8.8.8.8
<R4_PE4>dis bgp vpnv4 all routing-table label
[R4_PE4]dis bgp vpnv4 vpn-instance vpn500 routing-table label
<R1_PE1>dis mpls lsp
<R1_PE1>dis fib vpn-instance vpn100
<R1_PE1>dis mpls lsp verbose
<R1_PE1>dis bgp vpnv4 all routing-table 192.168.5.0
注意:
- 入标签in 是本台路由器为其分配,出标签out是从对端通过bgp update报文学来的。
- 内层标签通过查找
dis bgp vpnv4 vpn-instance vpn100 routing-table label
out标签。 - 外层标签通过
dis fib vpn-instance vpn100
查找Tunnel-ID,进而到dis mpls lsp verbose
查找对于Tunnel ID(Token)来封装外层标签 - 在次末跳会弹出外层标签到达末端PE时报文只会含有内层标签,PE设备根据内层标签来识别该数据属于哪个vpn实例
- 数据报文(业务)到达末端PE时,PE根据标签(内层)结合
dis bgp vpnv4 all routing-table label
表来决定应该将报文送给相应的vpn实例转发。最终通过vpn实例的路由表转发给CE。例如:vpn实例路由表dis ip routing-table vpn-instance vpn500
- RD:route distinguisher值---对应一个vpn实例---公司站点。RD值作用:在一台路由器上创建多个路由表(小路由表)来隔离路由。每个小路由表就是对于一个vpn实例,对应一个站点。同一PE设备上分配给每个VPN实例的RD值必须唯一。一个vpn实例只能分配一个RD值。
- VRF:vpn routing and forwarding table vpn路由转发表既“小路由器”的路由表。
- RT:route target 封装在bgp的扩展community属性中,在路由传递过程中作为可选可传递属性进行传递,作用:路由取舍,路由喜好,路由导入。为了灵活的导入导出路由,同一个vpn实例RT值(export,import)可以配置多个。
- VPNv4路由:传统ip前缀+RD+RT+label
- 为什么业务数据传输时不采用RD值进行标识而采用内层标签?①RD值8字节太大(mpls只有4字节);②骨干网早期已经部署了mpls;③靠mpls多层标签可以对流量进行区分,方便QoS。
- 内外层标签的区别:外层标签( outer mpls label )在mpls vpn中被称为公网标签,用于mpls 网络中转发数据(业务数据)。一般公网标签会在到达PE设备时已被倒数第二跳剥掉,露出内层标签( inner label )内层标签在mpls vpn中被称为私网标签,用于将数据正确发送到相应的vpn中,PE依靠内存标签区分数据包属于哪个vpn。
- 查看mp-bgp给路由增加RD、RT、 Label不要用命令
dis bgp vpnv4 vpn-instance vpn100 routing-table 192.168.5.0
,不能接具体vpn实例;而是用命令dis bgp vpnv4 all routing-table 192.168.5.0
解决VPN客户地址空间重叠问题需要解决下述三个问题。
- PE设备怎么区分不同VPN客户的相同路由?
- 冲突路由在公网传播时,接收端PE如何正确导入VPN客户路由?
- PE设备收到IP数据包后,如何正确的发送给目的VPN客户?
从上面的技术难点分析,主要问题都是与路由相关的特性,所以解决这些问题必须从路由协议考虑,但现在的路由协议都不具备解决这些问题的条件,因此考虑对路由协议进行改造。
由于BGP的诸多优点对技术难点的解决提供了思路:
- 公共网络上的VPN路由数量庞大,BGP是唯一支持大量路由的协议;
- BGP的报文基于TLV的结构,便于扩展;
- BGP可以承载附加在路由后面的任何信息,并作为可选属性传递给其他邻居。
上面提到的3个技术难点迎刃而解︰
- 本地路由冲突的问题:可以通过在同一台PE设备上为不同的VPN建立单独的路由,这样冲突的的路由就被隔离开来;
- 在路由传递过程中,为不同的VPN路由添加不同的标识,以示区别。这些标识可以作为BGP属性进行传递;
- 由于IP报文不可更改,可以在IP报文头前加一些信息。由始发路由器打上标记,接收路由器在收到带标记的的数据包时,根据标记转发给正确的VPN。
下面将针对上面的三个技术难点逐一进行解决方案的介绍。
如何在网络传递过程中区分冲突路由
- 将VPN路由发布到全局路由表之前,使用一个全局唯一的标识和路由绑定,以区分冲突的私网路由。这个标识被称为RD ( Route Distinguisher )。
- 共享PE设备上实现重叠路由的隔离就是在PE设备上将来自每个VPN的路由放入自己对应的VPN Routing Table中,每个VPN Routing Table只记录对应VPN中学来的路由,就像是专用PE一样。这个VPN Routing Table称谓VRF(( VPN Routing and Forwarding table ) ,即VPN路由转发表。
- 每一个VRF都需要对应一个VPN instance,VPN用户对应的接口绑定到VPN instance中。
- RD即VPN路由标识符,由8字节组成,配置时同一PE设备上分配给每个VPN的RD必须唯一。
- RD用于区分使用相同地址空间的IPv4前缀,增加了RD的IPv4地址称为VPN-IPv4地址(即VPNv4地址)。
- 运营商设备采用BGP协议作为承载VPN路由的协议,并将BGP协议进行了扩展,称为MP-BGP ( Multiprotocol Extensions for BGP-4)。PE从CE接收到客户的IPv4私网路由后,将客户的私网路由添加各种标识信息后变为VPNv4路由放入MP-BGP的VPNv4路由表中,并通过MP-BGP协议在公网上传递。
Hub-Spoke场景中VPN路由的引入问题的解决
- RD不能解决VPN路由正确引入VPN的问题。
- 我们需要一种类似于Tag的标识。这个标识由人工分配,发送端PE发送时打上标识,接收端PE收到后根据需要将带有相应标识的路由引入VPN。
- RT属性用于将路由正确引入VPN,有两类VPN Target属性,Import Target和Export Target,分别用于VPN路由的导出与导入。
- RT ( Route Target)封装在BGP的扩展Community属性中,在路由传递过程中作为可选可传递属性进行传递。
RT的本质是每个VRF表达自己的路由取舍及喜好的属性,有两类VPN Target属性∶
- Export Target:本端的路由在导出VRF,转变为VPNv4的路由时,标记该属性;
- Import Target:对端收到路由时,检查其Export Target属性。当此属性与PE上某个VPN实例的Import Target匹配时,PE就把路由加入到该VPN实例中。
解决数据转发过程中冲突路由的查找
因为数据包没有携带任何标识,所以在ICMP的数据包到达PE1时,PE1并不知道该查找哪个VPN的路由表找到正确的目标地址。
解决该问题的方案有两种:
- 在数据包中增加标识信息,并且使用RD作为区分数据包所属VPN的标识符,数据转发时也携带RD信息。缺点是由于RD由8字节组成,额外增大数据包,会导致转发效率降低。
- 借助公网中已经实施的MPLS协议建立的标签隧道,采用标签作为数据包正确转发的标识,MPLS标签支持嵌套,可以将区分数据包所属VPN的标签封装在公网标签内。
MPLS标签嵌套的应用
使用标签嵌套解决数据转发过程中冲突路由的查找问题。
Outer MPLS Label在MPLS VPN中被称为公网标签,用于MPLS网络中转发数据。一般公网标签会在到达PE设备时已被倒数第二跳剥掉,漏出Inner Label。Inner MPLS Label在MPLS VPN中被称为私网标签,用于将数据正确发送到相应的VPN中,PE依靠Inner Label区分数据包属于哪个VPN。
MPLS VPN的工作过程
分为两部分:
- MPLS VPN路由的传递过程;
- MPLS VPN数据的转发过程。
MPLS VPN路由传递过程分哪几个阶段
1.PE与CE之间的路由交换
PE与CE之间可以通过静态路由协议交换路由信息,也可以通过动态路由协议(如︰RIP,OSPF ,ISIS,BGP等)交换路由信息。
2.VPN路由注入MP-BGP的过程
VRF中的IPv4路由被添加上RD,RT与标签等信息成为VPN-IPv4的路由放入到MP-BGP的路由表中,并通过MP-BGP协议在PE设备之间交换路由信息。
3.MP-BGP路由注入VPN的过程
PE2在接收到PE1发送的VPNv4路由后将检查路由的扩展团体属性,将携带的Export Target值与本端VPN的Import Target值比较,数值相同则将路由引入VPN的路由表,实现路由的正确导入。
MPLS VPN数据转发过程
三个阶段:
- CE设备到PE设备的数据转发
- 公网设备上的数据转发
- PE设备到CE设备的数据转发
CE设备到PE设备的数据转发
两张表:
FIB表
[R4_PE4]dis ip routing-table vpn-instance vpn500
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: vpn500
Destinations : 10 Routes : 10
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.0/24 IBGP 255 0 RD 1.1.1.1 GigabitEthernet0/0/0
8.8.8.0/24 EBGP 255 0 D 48.1.1.8 GigabitEthernet0/0/2
9.9.9.0/24 IBGP 255 0 RD 1.1.1.1 GigabitEthernet0/0/0
48.1.1.0/24 Direct 0 0 D 48.1.1.4 GigabitEthernet0/0/2
48.1.1.4/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
48.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
192.168.5.0/24 IBGP 255 0 RD 1.1.1.1 GigabitEthernet0/0/0
192.168.8.0/24 EBGP 255 0 D 48.1.1.8 GigabitEthernet0/0/2
192.168.9.0/24 IBGP 255 0 RD 1.1.1.1 GigabitEthernet0/0/0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
[R4_PE4]dis ip routing-table vpn-instance vpn500 verbose
Route Flags: R - relay, D - download to fib
---------------------------------------
Routing Tables: vpn500
Destinations : 10 Routes : 10
Destination: 5.5.5.0/24
Protocol: IBGP Process ID: 0
Preference: 255 Cost: 0
NextHop: 1.1.1.1 Neighbour: 1.1.1.1
State: Active Adv Relied Age: 07h34m13s
Tag: 0 Priority: low
Label: 1028 QoSInfo: 0x0
IndirectID: 0x4
RelayNextHop: 34.1.1.3 Interface: GigabitEthernet0/0/0
TunnelID: 0x5 Flags: RD
Destination: 8.8.8.0/24
Protocol: EBGP Process ID: 0
Preference: 255 Cost: 0
NextHop: 48.1.1.8 Neighbour: 48.1.1.8
State: Active Adv Age: 07h00m57s
Tag: 0 Priority: low
Label: NULL QoSInfo: 0x0
IndirectID: 0x6
RelayNextHop: 0.0.0.0 Interface: GigabitEthernet0/0/2
TunnelID: 0x0 Flags: D
[R4_PE4]dis fib vpn-instance vpn500 verbose
Route Flags: G - Gateway Route, H - Host Route, U - Up Route
S - Static Route, D - Dynamic Route, B - Black Hole Route
L - Vlink Route
------------------------------------------------------------------------------
FIB Table:
Total number of Routes : 10
Destination: 48.1.1.255 Mask : 255.255.255.255
Nexthop : 127.0.0.1 OutIf : InLoopBack0
LocalAddr : 127.0.0.1 LocalMask: 0.0.0.0
Flags : HU Age : 27422sec
ATIndex : 0 Slot : 0
LspFwdFlag : 0 LspToken : 0x0
InLabel : NULL OriginAs : 0
BGPNextHop : 0.0.0.0 PeerAs : 0
QosInfo : 0x0 OriginQos: 0x0
NexthopBak : 0.0.0.0 OutIfBak : [No Intf]
LspTokenBak: 0x0 InLabelBak : NULL
LspToken_ForInLabelBak : 0x0
EntryRefCount : 0
VlanId : 0x0
BgpKey : 0
BgpKeyBak : 0
LspType : 0 Label_ForLspTokenBak : 0
MplsMtu : 0 Gateway_ForLspTokenBak : 0.0.0.0
NextToken : 0x0 IfIndex_ForLspTokenBak : 0
Label_NextToken : 0 Label : 0
LspBfdState : 0
LFIB表
[R4_PE4]dis mpls lsp
-------------------------------------------------------------------------------
LSP Information: BGP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
192.168.6.0/24 1027/NULL -/- vpn600
6.6.6.0/24 1028/NULL -/- vpn600
8.8.8.0/24 1029/NULL -/- vpn500
192.168.8.0/24 1030/NULL -/- vpn500
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
2.2.2.2/32 NULL/1024 -/GE0/0/0
2.2.2.2/32 1024/1024 -/GE0/0/0
3.3.3.3/32 NULL/3 -/GE0/0/0
3.3.3.3/32 1025/3 -/GE0/0/0
4.4.4.4/32 3/NULL -/-
1.1.1.1/32 NULL/1026 -/GE0/0/0
1.1.1.1/32 1026/1026 -/GE0/0/0
数据从CE4转发给PE2,在PE2设备上需要查找VPN2的路由表,确定数据进行标签转发后,再查找下—跳与出接口,根据分配的标签进行MPLS的封装。
数据从CE设备到PE设备的转发:
- 如图所示,CE4所连接的VPN2的用户要与对端VPN2中的172.16.1.1/32用户通信,PE2收到数据包后,查找本地VPN2的路由表,发现数据包需要进行标签转发,分配的私网标签为1027,到达目标地址的下一跳为PE1。
- PE2通过查找LFIB表,发现到达PE1被分配的公网标签为1030,出接口为G0/0/0 ,PE2将数据包进行MPLS封装,内层为1027,外层为1030,从接口G0/0/0转发出去。
公网设备上的数据转发
数据包在公网上转发时,通过MPLS协议已建立好的标签隧道将数据报文转发到PE1。转发过程中,只改变公网标签。
数据包在公网上的传递过程∶
- 如图所示,PE2收到VPN用户的数据包后,封装上MPLS的标签,将私网数据通过MPLS建立的标签隧道进行转发,PE2上数据包封装的公网标签为1030,转发给P设备后,查找LFIB表,进标签为1030的数据包,对应的出标签为3,即将公网标签标签剥离后,将数据包发送给PE1,PE1收到的是只有内层私网标签的数据包。
PE设备到CE设备的数据转发
PE1收到剥离公网标签的数据包后,根据私网标签查找转发数据包的下一跳,将数据包正确发送给相应VPN客户。
数据包转发给相应VPN的过程:
- 如图所示,PE1收到只有一层标签的数据包,查找标签表,发现标签为1027的数据包对应的下一跳为CE2,于是PE2将数据包剥离私网标签,进行IP封装,查找出接口,将数据包发送给CE2处理。
- 至此,数据包到达正确的目标用户,我们是以单向的数据转发过程为例进行的介绍,其实数据转发的过程是双向的,但过程都是类似的。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。