VPLS
基础概念总结
- VPLS
- VPLS是早期的二层VPN技术,后期被EVPN顶替
- 我们可以把VPLS形成的网络看成是一个大的二层交换机所连接的网络
- 主要部署在园区网与园区网中间,或数据中心与数据中心之间
- 被淘汰的原因:
- 控制层面MPLS强依赖
- 不能很好应对双归属场景
- MAC地址的学习是在数据转发层面完成,初始通信的时候太慢了
- 配置思路概述
- VPLS也是两层标签结构
- VPLS使用的MPLS架构,所以整体配置思路与MPLS-VPN的思路非常相似。
- 基本名词
- VSI:其实就是VRF,虚拟交换机,在PE上部分用于和CE相连
- AC:(Attachment Circuit 接入电路),PE和CE相连的那根线叫做AC
- PW:pseudo-wire 直译为伪线,在MPLS-LDP生成的隧道当中创建
- VPLS的两种部署方案
- Martini:一层标签由MPLS-LDP生成,另一层标签由扩展的LDP生成
- kompella:一层标签由MPLS-LDP生成,另一层标签由MP-BGP生成
基本原理
- 基础概念概述
- VPLS使用的MPLS架构,所以整体思路与MPLS-VPN的思路非常相似。
- VPLS也是两层标签结构
- 基本名词
- VSI:其实就是VRF,虚拟交换机,在PE上部分用于和CE相连
- AC:(Attachment Circuit 接入电路),PE和CE相连的那根线叫做AC
- PW:pseudo-wire 直译为伪线,在MPLS-LDP生成的隧道当中创建
- VPLS的两种部署方案
- 一层标签由MPLS-LDP生成,另一层标签由VSI生成或是VPLS自己生成
- 一层标签由MPLS-LDP生成,另一层标签由MP-BGP生成
控制层面
控制层面一共分为三个步骤
第一步:在PE1和PE2之间所有的设备上部署MPLS-LDP从而形成LSP,也就是上图当中所示的Tunnel
第二步:然后再在PE1和PE1再部署一个扩展的LDP或MP-BGP,再形成一条链路,也就是上图所有的PW链路。
第三步:在PE1上创建VRF(VSI)与CE1绑定上,扩展的LDP与MP-BGP会给这个虚拟机分配一个内层标签,CE2也是如此。
PS:PE1为VSI分配完内层标签之后会通过MP-BGP或扩展的LDP将标签发送给PE2,其实作用就是告诉PE2,如果你想给我发送报文,就要携带这个内层标签,这与MPLS-VPN当中的MP-BGP给分配标签的效果一样的。
另外一点需要注意,你看哈,在控制层面只能建立好了路径,并没有为数据转发层面准备好MAC地址,这其实就是VPLS的问题之一。
报文转发过程
如上图,我们来看一下报文转发过程,先看广播,然后再看单播,为什么广播和单播要分开说呢?因为在IPV4的网络同网段通信过程当中,想要单播必须先广播!
广播报文的通信过程:
- CE1的的请求到达PE1的VSI,这时候VSI会源MAC地址放到自己的VSI的MAC地址表当中。
- 对于广播广播报文,PE1会通过pwA转发给PE2,注意这时候会携带两层标签,最内层标签是扩展的LDP形成的用来标签PE2上的VSI,最外层的标签就是MPLS-LDP。
- PE2也会学习源MAC地址,并将此广播发送给CE2
- CE2回包,PE2和PE1先后学习,这样PE1才有了完整的单播MAC地址表。
单播报文的通信过程:
没什么说的,就比较简单了,根据形成的MAC地址表转发就可以了。
基础实验
- 控制层面配置步骤概述
- 在PE之间部署MPLS-LDP(或RSTE、SR)生成隧道,这时会生成外层标签
- 为不同的企业用户创建PW
- 静态配置产生PW,这样就不需要控制层面
- 通过扩展的LDP辅助生成(martini)用的最多
- MP-BGP辅助生成(kompella)
- 为站点创建VSI(虚拟交换机),保存不同企业用户的MAC地址表
- 把AC绑定到VSI
martini方案概述:
其实是使用了两个LDP进程。其实一个LDP进程就是传统的MPLS-LDP进程,与MPLS-VPN当中的作用是一样的就是用来生成外层隧道或生成外部标签的;另一个LDP进程是扩展的LDP进程,用于PE与PE间的直接通信,类似于MPLS-VPN当中MP-BGP的效果,只不过在此处通过扩展的LDP实现了,作用与MP-BGP相似,用于生成内层标签。
kompella方案概述:
这个方案与MPLS-LDP最像了,MPLS-LDP生成外部标签,通过MP-BGP生成内部标签,但由于实现起来比较复杂,已经很少使用了,目前使用最广泛的还是martini这种方案。
实验Martini
实验目标:让R4和R5实现二层间的通信
注意事项:全都使用ENSP的router路由器
实验重点:利用LDP为AC分配标签,两层标签
实验思路:
- R1、R2、R3三台路由器先跑一个IGP-OSPF;
- R2、R2、R3 启用MPLS-LDP;
- R1到R3单独建立一个会话
- 双方PE使能MPLS L2VPN
- 在PE上创建VSI、指定信令为LDP,然后将VSI与AC接口绑定
-
第一步:R1和、R2、R3配置OSPF并验证
R1: sys sysn R1 int g0/0/1 ip add 10.0.12.1 24 int LoopBack 0 ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1 a 0 network 10.0.12.1 0.0.0.0 network 1.1.1.1 0.0.0.0 R2: sys sysn R2 int LoopBack 0 ip add 2.2.2.2 32 int g0/0/1 ip add 10.0.12.2 24 int g0/0/2 ip add 10.0.23.2 24 ospf 1 router-id 2.2.2.2 a 0 network 2.2.2.2 0.0.0.0 network 10.0.12.2 0.0.0.0 network 10.0.23.2 0.0.0.0 R3: sys sysn R3 int LoopBack 0 ip add 3.3.3.3 32 int g0/0/2 ip add 10.0.23.3 24 ospf 1 router-id 3.3.3.3 a 0 network 3.3.3.3 0.0.0.0 network 10.0.23.3 0.0.0.0
# 验证 <R1>dis ip routing-table protocol ospf 3.3.3.3/32 OSPF 10 2 D 10.0.12.2 GigabitEthernet 0/0/1 10.0.23.0/24 OSPF 10 2 D 10.0.12.2 GigabitEthernet 0/0/1 [R3]dis ip routing-table protocol ospf Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.1/32 OSPF 10 2 D 10.0.23.2 GigabitEthernet 0/0/2 10.0.12.0/24 OSPF 10 2 D 10.0.23.2 GigabitEthernet 0/0/2
-
第二步:R1和、R2、R3配置MPLS-LDP并验证
R1: sys mpls lsr-id 1.1.1.1 mpls quit mpls ldp int g0/0/1 mpls mpls ldp R2: sys mpls lsr-id 2.2.2.2 mpls quit mpls ldp quit int g0/0/1 mpls mpls ldp int g0/0/2 mpls mpls ldp R3: sys mpls lsr-id 3.3.3.3 mpls quit mpls ldp int g0/0/2 mpls mpls ldp
<R1>dis mpls ldp session LDP Session(s) in Public Network Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM) A '*' before a session means the session is being deleted. ------------------------------------------------------------------------------ PeerID Status LAM SsnRole SsnAge KASent/Rcv ------------------------------------------------------------------------------ 2.2.2.2:0 Operational DU Passive 0000:00:00 2/2 ------------------------------------------------------------------------------ <R1>dis mpls ldp lsp LDP LSP Information ------------------------------------------------------------------------------- DestAddress/Mask In/OutLabel UpstreamPeer NextHop OutInterface ------------------------------------------------------------------------------- 1.1.1.1/32 3/NULL 2.2.2.2 127.0.0.1 InLoop0 *1.1.1.1/32 Liberal/1024 DS/2.2.2.2 2.2.2.2/32 NULL/3 - 10.0.12.2 GE0/0/1 2.2.2.2/32 1024/3 2.2.2.2 10.0.12.2 GE0/0/1 3.3.3.3/32 NULL/1025 - 10.0.12.2 GE0/0/1 3.3.3.3/32 1025/1025 2.2.2.2 10.0.12.2 GE0/0/1 ------------------------------------------------------------------------------- <R3>dis mpls ldp session LDP Session(s) in Public Network Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM) A '*' before a session means the session is being deleted. ------------------------------------------------------------------------------ PeerID Status LAM SsnRole SsnAge KASent/Rcv ------------------------------------------------------------------------------ 2.2.2.2:0 Operational DU Active 0000:00:00 3/3 ------------------------------------------------------------------------------ TOTAL: 1 session(s) Found. <R3>dis mpls ldp lsp LDP LSP Information ------------------------------------------------------------------------------- DestAddress/Mask In/OutLabel UpstreamPeer NextHop OutInterface ------------------------------------------------------------------------------- 1.1.1.1/32 NULL/1024 - 10.0.23.2 GE0/0/2 1.1.1.1/32 1024/1024 2.2.2.2 10.0.23.2 GE0/0/2 2.2.2.2/32 NULL/3 - 10.0.23.2 GE0/0/2 2.2.2.2/32 1025/3 2.2.2.2 10.0.23.2 GE0/0/2 3.3.3.3/32 3/NULL 2.2.2.2 127.0.0.1 InLoop0 *3.3.3.3/32 Liberal/1025 DS/2.2.2.2 -------------------------------------------------------------------------------
-
R1到R3单独建立一个会话
注意,你看哈,在这个环境当中,一旦三台路由器的LDP建立完成之后,R1和R3其实都是只有一条会话,只有中间的R2有两条,我们要做的就是在R1并没有直接连接R3,我们接下来做的就是让R1与R3之间建立一个会话,完成之后你会发现LSP其实产没有发生变化。
这一步有点类似于MPLS VPN当中的建立IBGP对等体
[R1]mpls ldp remote-peer ar3 [R1-mpls-ldp-remote-ar3]remote-ip 3.3.3.3 [R3]mpls ldp remote-peer ar1 [R3-mpls-ldp-remote-ar1]remote-ip 1.1.1.1
[R1]dis mpls ldp session ------------------------------------------------------------------------------ PeerID Status LAM SsnRole SsnAge KASent/Rcv ------------------------------------------------------------------------------ 2.2.2.2:0 Operational DU Passive 0000:00:08 35/35 3.3.3.3:0 Operational DU Passive 0000:00:00 4/4 ------------------------------------------------------------------------------ TOTAL: 2 session(s) Found. [R1]dis mpls ldp lsp 1.1.1.1/32 3/NULL 2.2.2.2 127.0.0.1 InLoop0 1.1.1.1/32 3/NULL 3.3.3.3 127.0.0.1 InLoop0 *1.1.1.1/32 Liberal/1024 DS/2.2.2.2 *1.1.1.1/32 Liberal/1024 DS/3.3.3.3 2.2.2.2/32 NULL/3 - 10.0.12.2 GE0/0/1 2.2.2.2/32 1024/3 2.2.2.2 10.0.12.2 GE0/0/1 2.2.2.2/32 1024/3 3.3.3.3 10.0.12.2 GE0/0/1 *2.2.2.2/32 Liberal/1025 DS/3.3.3.3 3.3.3.3/32 NULL/1025 - 10.0.12.2 GE0/0/1 3.3.3.3/32 1025/1025 2.2.2.2 10.0.12.2 GE0/0/1 3.3.3.3/32 1025/1025 3.3.3.3 10.0.12.2 GE0/0/1 *3.3.3.3/32 Liberal/3 DS/3.3.3.3
-
PE使能MPLS L2VPN—创建VSI—指定信令为LDP,然后将VSI与AC接口绑定
[R1]mpls l2vpn [R1-l2vpn]quit [R1]vsi yeslab static [R1-vsi-yeslab]pwsignal ldp [R1-vsi-yeslab-ldp]vsi-id 1 [R1-vsi-yeslab-ldp]peer 3.3.3.3 R3: mpls l2vpn quit vsi yeslab static pwsignal ldp vsi-id 1 peer 1.1.1.1 [R1]int g0/0/0.1 [R1-GigabitEthernet0/0/0.1]shutdown [R1-GigabitEthernet0/0/0.1]vlan-type dot1q 10 [R1-GigabitEthernet0/0/0.1]l2 binding vsi yeslab [R1-GigabitEthernet0/0/0.1]un sh [R3-vsi-yeslab]int g0/0/0.1 [R3-GigabitEthernet0/0/0.1]shutdown [R3-GigabitEthernet0/0/0.1]vlan-type dot1q 10 [R3-GigabitEthernet0/0/0.1]l2 binding vsi yeslab [R3-GigabitEthernet0/0/0.1]un sh
-
验证
R4: interface GigabitEthernet0/0/0.1 vlan-type dot1q 10 ip address 192.168.0.4 255.255.255.0 [R5]int g0/0/0.1 [R5-GigabitEthernet0/0/0.1]dis th # interface GigabitEthernet0/0/0.1 vlan-type dot1q 10 ip address 192.168.0.5 255.255.255.0 [R5]ping 192.168.0.4 PING 192.168.0.4: 56 data bytes, press CTRL_C to break Reply from 192.168.0.4: bytes=56 Sequence=1 ttl=255 time=110 ms Reply from 192.168.0.4: bytes=56 Sequence=2 ttl=255 time=110 ms Reply from 192.168.0.4: bytes=56 Sequence=3 ttl=255 time=100 ms Reply from 192.168.0.4: bytes=56 Sequence=4 ttl=255 time=110 ms Reply from 192.168.0.4: bytes=56 Sequence=5 ttl=255 time=100 ms [R5]dis arp IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE VLAN/CEVLAN PVC ------------------------------------------------------------------------------ 192.168.0.5 5489-980c-14f3 I - GE0/0/0.1 192.168.0.4 5489-9887-65d9 18 D-0 GE0/0/0.1 10/- ------------------------------------------------------------------------------ Total:2 Dynamic:1 Static:0 Interface:1
<R1>dis vsi name yeslab verbose ***VSI Name : yeslab Administrator VSI : no Isolate Spoken : disable VSI Index : 0 PW Signaling : ldp Member Discovery Style : static PW MAC Learn Style : unqualify Encapsulation Type : vlan #封装方式 MTU : 1500 Diffserv Mode : uniform Service Class : -- Color : -- DomainId : 255 Domain Name : Ignore AcState : disable P2P VSI : disable Create Time : 0 days, 0 hours, 24 minutes, 12 seconds VSI State : up # 状态 VSI ID : 1 # ID *Peer Router ID : 3.3.3.3 # peer primary or secondary : primary ignore-standby-state : no VC Label : 1026 # 分配的标签 Peer Type : dynamic # 分配的标签 Session : up Tunnel ID : 0x5 # Tunnel ID Broadcast Tunnel ID : 0x5 Broad BackupTunnel ID : 0x0 CKey : 2 NKey : 1 Stp Enable : 0 PwIndex : 0 Interface Name : GigabitEthernet0/0/0.1 State : up Access Port : false Last Up Time : 2023/04/05 16:20:21 Total Up Time : 0 days, 0 hours, 11 minutes, 31 seconds **PW Information: *Peer Ip Address : 3.3.3.3 PW State : up Local VC Label : 1026 Remote VC Label : 1026 PW Type : label Tunnel ID : 0x5 Broadcast Tunnel ID : 0x5 Broad BackupTunnel ID : 0x0 Ckey : 0x2 Nkey : 0x1 Main PW Token : 0x5 Slave PW Token : 0x0 Tnl Type : LSP # LSP OutInterface : GigabitEthernet0/0/1 Backup OutInterface : Stp Enable : 0 PW Last Up Time : 2023/04/05 16:20:21 PW Total Up Time : 0 days, 0 hours, 11 minutes, 31 seconds <R3>dis vsi name yeslab verbose ***VSI Name : yeslab Administrator VSI : no Isolate Spoken : disable VSI Index : 0 PW Signaling : ldp Member Discovery Style : static PW MAC Learn Style : unqualify Encapsulation Type : vlan MTU : 1500 Diffserv Mode : uniform Service Class : -- Color : -- DomainId : 255 Domain Name : Ignore AcState : disable P2P VSI : disable Create Time : 0 days, 0 hours, 18 minutes, 32 seconds VSI State : up VSI ID : 1 *Peer Router ID : 1.1.1.1 primary or secondary : primary ignore-standby-state : no VC Label : 1026 Peer Type : dynamic Session : up Tunnel ID : 0x5 Broadcast Tunnel ID : 0x5 Broad BackupTunnel ID : 0x0 CKey : 2 NKey : 1 Stp Enable : 0 PwIndex : 0 Interface Name : GigabitEthernet0/0/0.1 State : up Access Port : false Last Up Time : 2023/04/05 16:16:22 Total Up Time : 0 days, 0 hours, 14 minutes, 26 seconds **PW Information: *Peer Ip Address : 1.1.1.1 PW State : up Local VC Label : 1026 Remote VC Label : 1026 PW Type : label Tunnel ID : 0x5 Broadcast Tunnel ID : 0x5 Broad BackupTunnel ID : 0x0 Ckey : 0x2 Nkey : 0x1 Main PW Token : 0x5 Slave PW Token : 0x0 Tnl Type : LSP OutInterface : GigabitEthernet0/0/2 Backup OutInterface : Stp Enable : 0 PW Last Up Time : 2023/04/05 16:20:21 PW Total Up Time : 0 days, 0 hours, 10 minutes, 27 seconds <R3>
-
抓包验证
两层标签,两层标签哪里来的?外1025,内1026
[R1]dis fib Destination/Mask Nexthop Flag TimeStamp Interface TunnelID 3.3.3.3/32 10.0.12.2 DGHUT t[3707] GE0/0/1 0x3 2.2.2.2/32 10.0.12.2 DGHUT t[3697] GE0/0/1 0x1 …… <R1>dis vsi name yeslab verbose | incl 1025 <R1>dis vsi name yeslab verbose | incl 1026 VC Label : 1026 Local VC Label : 1026 Remote VC Label : 1026 <R1>dis mpls ldp lsp | incl 1026 <R1>dis mpls ldp lsp | incl 1025 LDP LSP Information ------------------------------------------------------------------------------- DestAddress/Mask In/OutLabel UpstreamPeer NextHop OutInterface ------------------------------------------------------------------------------- *2.2.2.2/32 Liberal/1025 DS/3.3.3.3 3.3.3.3/32 NULL/1025 - 10.0.12.2 GE0/0/1 3.3.3.3/32 1025/1025 2.2.2.2 10.0.12.2 GE0/0/1 3.3.3.3/32 1025/1025 3.3.3.3 10.0.12.2 GE0/0/1 -------------------------------------------------------------------------------
实验kompella
这种方式不需要远端的LDP,这个内层标签是MP-BGP帮助它分配的,而且使用MP-BGP的优势是如果有RR设备会比较省事,不用一个个的邻居去指定。
-
配置
[R1]undo mpls ldp remote-peer ar3 [R1]undo vsi yeslab [R1]bgp 100 [R1-bgp]peer 3.3.3.3 as-number 100 [R1-bgp]peer 3.3.3.3 connect-interface LoopBack 0 [R1-bgp]vpls-family [R1-bgp-af-vpls]peer 3.3.3.3 enable # 启动二层VPN功能 [R1]mpls l2vpn # 配置vsi [R1]vsi yeslab auto [R1-vsi-yeslab]pwsign [R1-vsi-yeslab]pwsignal bgp [R1-vsi-yeslab-bgp]route-distinguisher 100:1 [R1-vsi-yeslab-bgp]vpn-target 100:1 [R1-vsi-yeslab-bgp]site 1 range 5 [R1-vsi-yeslab-bgp]site 1 range 5 default-offset 0 [R1-GigabitEthernet0/0/0.1]dis th # interface GigabitEthernet0/0/0.1 vlan-type dot1q 10 l2 binding vsi yeslab
[R3]undo mpls ldp remote-peer ar1 [R3]undo vsi yeslab [R3]bgp 100 [R3-bgp]peer 1.1.1.1 as-number 100 [R3-bgp]peer 1.1.1.1 con loopback 0 [R3-bgp]vpls-fa [R3-bgp-af-vpls]peer 1.1.1.1 enable [R3-bgp-af-vpls]quit [R3-bgp]mpls l2vpn [R3-l2vpn]quit [R3]vsi yeslab auto [R3-vsi-yeslab]pwsignal bgp [R3-vsi-yeslab-bgp]route-dist 100:1 [R3-vsi-yeslab-bgp]vpn-target 100:1 [R3-vsi-yeslab-bgp]site 2 range 5 default-offset 0 # 绑定 [R3-GigabitEthernet0/0/0.1]dis th # interface GigabitEthernet0/0/0.1 vlan-type dot1q 10 l2 binding vsi yeslab
-
验证
[R1]dis vsi name yeslab verbose ***VSI Name : yeslab Administrator VSI : no Isolate Spoken : disable VSI Index : 0 PW Signaling : bgp Member Discovery Style : auto PW MAC Learn Style : unqualify Encapsulation Type : vlan MTU : 1500 Diffserv Mode : uniform Service Class : -- Color : -- DomainId : 255 Domain Name : Ignore AcState : disable P2P VSI : disable Create Time : 0 days, 0 hours, 10 minutes, 7 seconds VSI State : up BGP RD : 100:1 SiteID/Range/Offset : 1/5/0 Import vpn target : 100:1 Export vpn target : 100:1 Remote Label Block : 100001/5/0 Local Label Block : 0/100001/5/0 Interface Name : GigabitEthernet0/0/0.1 State : up Access Port : false Last Up Time : 2023/04/05 17:36:36 Total Up Time : 0 days, 0 hours, 1 minutes, 42 seconds **PW Information: *Peer Ip Address : 3.3.3.3 PW State : up Local VC Label : 100003 # 本地分配的标签 Remote VC Label : 100002 # 远端的标签 PW Type : label Tunnel ID : 0x6 Broadcast Tunnel ID : 0x6 Broad BackupTunnel ID : 0x0 Ckey : 0x4 Nkey : 0x3 Main PW Token : 0x6 Slave PW Token : 0x0 Tnl Type : LSP OutInterface : GigabitEthernet0/0/1 Backup OutInterface : Stp Enable : 0 PW Last Up Time : 2023/04/05 17:37:09 PW Total Up Time : 0 days, 0 hours, 1 minutes, 9 seconds
-
抓包验证
缺陷
依赖性强
- 对MPLS架构的依赖性强,没有MPLS的话,VPLS无法部署
- 而且PE和CE之间必须是以太网
MAC地址的学习
我们知道同网段通信要进行广播,而同网段同地域情况下通常带宽资源充足,这么做没什么大问题,但在VPLS当中,跨地域马上进行通信时,MAC地址学习依然是是通过广播报文在广域网当中转发,这样太浪费带宽和时间,我们能不能提供把MAC地址提前准备好呢?其实完全可以在数据通信之前提前把MAC地址表在控制层准备好(EVPN),这样的话,就不会在马上要通信的时候还要在广域网上进行广播,EVPN就是这个思路。
没有良好的冗余机制
为了冗余和稳定性,我们很可能会将CE1连接到两个PE,这样一条链路断了,还有另一条链路,但这样又很有可能会形成物理环路,为了破环我们还得运行一个第三方的技术-STP,而STP的问题在于它一定会堵塞其中一条链路,所以就会导致流量不平均。
另外在PE-PE之间,它也做不到PE1同时将流量发送给PE3和PE4,只能发给其中一PE,这也会导致流量分配不平均。
PS:EVPN就是因为有了良好的冗余机制才战胜了VPLS。
收敛慢
假如现在PE3和CE2之间链路断了
- PE3会立马感知到,然后通过PE3与PE1之间运行的扩展LDP进程,利用mac-withdraw报文通知PE1自己这边断了
- STP也会立马感知到,将PE4提升为主链路
- PE1收到之后立马立马删除与CE2侧下有关于的MAC地址
- PE1没有了MAC地址,现在PE1收到CE1的请求,PE1又得重新开始广播,根据头端列表广播询问所有的PE,PE4要在重新学习CE2的MAC,然后返回给PE1
- PE1终端有了目标主机的MAC地址,才开始进行单播发送
过程复杂且慢,最根本的原因在于关于MAC地址的学习,控制层面是不管的,MAC地址学习是由数据转发层面来负责的。在EVPN当中就没有这个收敛慢的问题,因为EVPN有良好的冗余机制,所以一连断了立马就切换到另一端了,速度非常快。