HCIP MPLS L3VPN
0x00 拓扑
先记住一句话:
VPN实例 = 一张独立的路由表
RD = 让这张路由表里的路由在运营商骨干网里不重名
RT = 控制哪些VPN实例之间互相收发路由
用 5 台路由器:
CE1 ---- PE1 ---- P ---- PE2 ---- CE2
含义:
CE1:客户侧设备,模拟 172.24.80.0/20 在它后面
PE1:运营商 SR/PE,配置 VPN 实例、RD、RT
P:运营商骨干设备,只跑 MPLS,不管 VPN
PE2:另一个运营商 PE
CE2:另一个客户站点
0x01 地址规划
核心网:
PE1 LoopBack0:1.1.1.1/32
P LoopBack0:2.2.2.2/32
PE2 LoopBack0:3.3.3.3/32
PE1 - P:10.1.12.0/24
PE1:10.1.12.1
P: 10.1.12.2
P - PE2:10.1.23.0/24
P: 10.1.23.2
PE2:10.1.23.3
VPN 业务侧:
CE1 - PE1:
CE1:43.251.249.1/30
PE1:43.251.249.2/30
CE1 后面的业务网段:
172.24.80.0/20
CE2 - PE2:
CE2:10.10.20.1/30
PE2:10.10.20.2/30
CE2 后面的业务网段:
10.180.0.0/18(客户摄像头网段)
你的割接单里这一段就对应 PE1 到 CE1:
PE/SR地址:43.251.249.2/30
客户侧下一跳:43.251.249.1
静态路由目的:172.24.80.0/20
0x02 第一步:所有设备配接口和 OSPF
先把三台核心设备(PE1、P、PE2)的基础接口和 OSPF 搞通,确保 LoopBack 互相能 ping 通。
PE1
system-view
sysname PE1
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
interface GigabitEthernet0/0/1
ip address 10.1.12.1 255.255.255.0
ospf 1
area 0
network 1.1.1.1 0.0.0.0
network 10.1.12.0 0.0.0.255
P
system-view
sysname P
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
interface GigabitEthernet0/0/0
ip address 10.1.12.2 255.255.255.0
interface GigabitEthernet0/0/1
ip address 10.1.23.2 255.255.255.0
ospf 1
area 0
network 2.2.2.2 0.0.0.0
network 10.1.12.0 0.0.0.255
network 10.1.23.0 0.0.0.255
PE2
system-view
sysname PE2
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
interface GigabitEthernet0/0/0
ip address 10.1.23.3 255.255.255.0
ospf 1
area 0
network 3.3.3.3 0.0.0.0
network 10.1.23.0 0.0.0.255
验证 OSPF
在任意一台设备上:
display ospf peer
应该能看到邻居关系建立。然后在 P 上 ping 测试:
ping 1.1.1.1
ping 3.3.3.3
两边的 LoopBack 都能 ping 通,说明 OSPF 没问题,再进行下一步。
0x03 第二步:所有设备配 MPLS/LDP
OSPF 通了之后,在核心网所有设备上启用 MPLS 和 LDP。
PE1
mpls lsr-id 1.1.1.1
mpls
mpls ldp
interface GigabitEthernet0/0/1
mpls
mpls ldp
P
mpls lsr-id 2.2.2.2
mpls
mpls ldp
interface GigabitEthernet0/0/0
mpls
mpls ldp
interface GigabitEthernet0/0/1
mpls
mpls ldp
PE2
mpls lsr-id 3.3.3.3
mpls
mpls ldp
interface GigabitEthernet0/0/0
mpls
mpls ldp
验证 MPLS/LDP
display mpls ldp session
应该能看到 LDP 会话状态为 Operational。以 P 为例,应该看到两条会话:
PeerID Status LAM SsnRole SsnAge KASent/Rcv
------------------------------------------------------------------------------
1.1.1.1:0 Operational DU Active 0000:00:09 40/40
3.3.3.3:0 Operational DU Passive 0000:00:06 28/28
------------------------------------------------------------------------------
TOTAL: 2 session(s) Found.
这一步验证了什么:
1. LDP 邻居建立成功(PE1-P、P-PE2 各一对)
2. 每对邻居之间在周期性发送 KeepAlive(KASent/Rcv 持续增长)
3. 标签分发正常(DU 模式 = Downstream Unsolicited,华为默认)
4. MPLS 标签交换通道(LSP)已就绪,后续 VPN 报文可以通过标签转发穿越骨干网
简单说:OSPF 保证路由可达,LDP 保证有标签可以转发。这两步都通了,核心网的 MPLS 底层就绑好了,后面配 VPN 才能正常工作。
0x04 第三步:PE 上配 VPN 实例、绑定接口、静态路由
MPLS 标签交换通道就绪后,在两台 PE 上创建 VPN 实例并绑定客户侧接口。
PE1
创建 VPN 实例:
ip vpn-instance SX-FIRE-VPN
ipv4-family
route-distinguisher 32:57513
vpn-target 64862:57513 export-extcommunity
vpn-target 64862:57513 import-extcommunity
绑定接口并配 IP(注意:ip binding vpn-instance 会清掉接口原有 IP,所以先绑定再配 IP):
interface GigabitEthernet0/0/0
ip binding vpn-instance SX-FIRE-VPN
ip address 43.251.249.2 255.255.255.252
配置 VPN 内静态路由:
ip route-static vpn-instance SX-FIRE-VPN 172.24.80.0 255.255.240.0 43.251.249.1
PE2
VPN 实例,RT 要和 PE1 一样:
ip vpn-instance SX-FIRE-VPN
ipv4-family
route-distinguisher 32:57514
vpn-target 64862:57513 export-extcommunity
vpn-target 64862:57513 import-extcommunity
这里故意让 PE2 的 RD 不一样:
PE1 RD:32:57513
PE2 RD:32:57514
RT 都是:64862:57513
这样更容易理解:
RD 可以不同,只负责区分路由
RT 要匹配,才负责互通
绑定接口并配 IP(PE2 用 g0/0/1 连 CE2):
interface GigabitEthernet0/0/1
ip binding vpn-instance SX-FIRE-VPN
ip address 10.10.20.2 255.255.255.252
静态路由:
ip route-static vpn-instance SX-FIRE-VPN 10.180.0.0 255.255.192.0 10.10.20.1
0x05 第四步:PE 之间配 MP-BGP
VPN 实例和静态路由都配好了,但两个站点的路由还不能互相传递。需要在 PE1 和 PE2 之间建立 MP-BGP 邻居,通过 VPNv4 地址族把 VPN 路由传过去。
PE1
bgp 64862
peer 3.3.3.3 as-number 64862
peer 3.3.3.3 connect-interface LoopBack0
ipv4-family vpnv4
peer 3.3.3.3 enable
ipv4-family vpn-instance SX-FIRE-VPN
import-route static
PE2
bgp 64862
peer 1.1.1.1 as-number 64862
peer 1.1.1.1 connect-interface LoopBack0
ipv4-family vpnv4
peer 1.1.1.1 enable
ipv4-family vpn-instance SX-FIRE-VPN
import-route static
验证 BGP
display bgp vpnv4 all peer
应该能看到 PE1-PE2 之间的 BGP 会话状态为 Established。
0x06 第五步:配 CE 设备
核心网和 PE 都配好了,最后配两台 CE。
CE1
system-view
sysname CE1
interface GigabitEthernet0/0/0
ip address 43.251.249.1 255.255.255.252
interface LoopBack0
ip address 172.24.80.1 255.255.240.0
ip route-static 10.180.0.0 255.255.192.0 43.251.249.2
CE2
system-view
sysname CE2
interface GigabitEthernet0/0/0
ip address 10.10.20.1 255.255.255.252
interface LoopBack0
ip address 10.180.0.1 255.255.192.0
ip route-static 172.24.80.0 255.255.240.0 10.10.20.2
0x07 最终验证
先看核心网:
display ospf peer
display mpls ldp session
display ip routing-table
PE1 / PE2 看 VPN 实例:
display ip vpn-instance
display ip vpn-instance verbose SX-FIRE-VPN
display ip routing-table vpn-instance SX-FIRE-VPN
display bgp vpnv4 all routing-table
ping 验证(重要)
ping 是验证 VPN 是否通的最直接手段,但要注意源地址和 VPN 实例的选择。
1. PE 上 ping VPN 实例内的地址
PE 的接口绑定了 VPN 实例后,默认 ping 走的是全局路由表(公网),不会查 VPN 实例路由表。所以必须加 -vpn-instance 参数:
ping -vpn-instance SX-FIRE-VPN 43.251.249.1
ping -vpn-instance SX-FIRE-VPN 172.24.80.1
含义:告诉设备用 SX-FIRE-VPN 这张路由表去 ping,而不是用公网路由表。
2. CE 上 ping 对端 CE(跨 MPLS 骨干网)
CE1 直接 ping CE2 的 loopback:
ping 10.180.0.1
注意:这条 ping 的源地址是 CE1 的出接口 IP(43.251.249.1),CE2 必须有回 43.251.249.0/30 的路由才能收到回复。如果 CE2 没有这条路由,ping 就会超时。
用 -a 指定源地址可以绕过这个问题:
ping -a 172.24.80.1 10.180.0.1
含义:用 CE1 的 Loopback0(172.24.80.1)作为源 IP 去 ping。CE2 有 172.24.80.0/20 → 10.10.20.2 的静态路由,回程包能正常回来。
3. 常见 ping 失败原因
ping 不通时按这个顺序排查:
CE 能 ping 通 PE 的 VPN 接口? → 不通 = PE-CE 之间链路或 VPN 绑定有问题
PE 上 VPN 路由表有对端路由? → 没有 = BGP 或 RT 配置有问题
PE 上 MPLS LSP 到对端 PE 正常? → 不正常 = LDP 或 OSPF 有问题
CE 用 -a 指定源能 ping 通? → 能 = CE 缺少对互联地址的回程路由
4. ping 命令速查
CE 上 ping 对端:
ping 10.180.0.1 # 默认源=出接口IP
ping -a 172.24.80.1 10.180.0.1 # 指定源=Loopback0
PE 上 ping VPN 内地址:
ping -vpn-instance SX-FIRE-VPN 43.251.249.1 # PE→CE 直连验证
ping -vpn-instance SX-FIRE-VPN 10.180.0.1 # PE→对端CE 验证 MPLS 隧道
PE 上查路由:
display ip routing-table vpn-instance SX-FIRE-VPN
display bgp vpnv4 all routing-table
如果 CE1 能 ping 通 CE2 的 10.180.0.1,说明 MPLS L3VPN 基本通了。
0x0A RD 和 RT 再总结
RD:Route Distinguisher,路由区分符
作用:让不同 VPN 里的相同私网路由不冲突
重点:RD 不决定互通关系
RT:Route Target,路由目标
作用:控制 VPN 路由导入和导出
重点:RT 决定哪些站点之间能互相学习路由
一句话:
RD 像路由身份证
RT 像 VPN 群标签