For the complete documentation index, see llms.txt. This page is also available as Markdown.

MPLS 与标签分发

概述

本章介绍如何在 OpenBSD 上部署多协议标签交换(MPLS),使用基本系统自带的标签分发协议守护进程 ldpd(8)。内容涵盖:用 ifconfig(8) 在接口上启用 MPLS;由 ldpd.conf(5) 信令驱动、基于 LDP 的核心标签交换;用运营商边缘接口 mpe(4) 配合 bgpd.conf(5) 实现三层 MPLS VPN;以及用 mpw(4) 实现二层 VPLS 伪线。在 IGP 域内进行简单、可互通的标签分发时使用 LDP;需要跨 MPLS 核心承载多租户三层服务时,采用基于 BGP 的 VPN。MPLS 的启用、禁用及按接口控制均由 ifconfig(8) 提供。

设计考量

  • 底层与发现。 LDP 邻居在具有 IP 连通性且启用 MPLS 的接口上通过链路发现建立。先确保底层(静态/OSPF/IS-IS/BGP-IGP)提供可达性;LDP 不替代 IGP。

  • 接口启用。 MPLS 按接口启用(例如 ifconfig em0 mpls)。用 -mpls 禁用。调整 MTU 时须为每个标签预留 4 字节垫片开销。

  • 标签处置。 默认情况下,直连路由使用隐式空标签;需要时可通过 explicit-null yes 通告显式空标签(用于保留 QoS/ECN)。

  • 基于 rdomain 的 VRF。 用路由域(类似 VRF)隔离客户路由表;将 VRF 接入 MPLS 核心时,使用绑定到该 rdomain 的 mpe(4) 接口。

  • 二层服务。 对于 VPLS,在各 PE 之间建立全互联伪线,并用 bridge(4) 桥接。使用受保护域以避免环路。

  • 安全与互通。 LDP 会话使用 TCP 与 hello 发现;视情况启用 GTSM 和 MD5。OpenBSD 的 ldpd 对两者均提供调节选项。

配置

示例假定一个最小的双 PE 核心:

  • PE1 底层: em0 ↔ 核心,em1 ↔ 核心

  • PE2 底层: em0 ↔ 核心,em1 ↔ 核心

PE 之间经核心的 IP 可达性已存在(通过 IGP 或静态路由)。

1) 在中转接口上启用 MPLS 并启动 LDP(两个 PE)

按接口启用 MPLS,并配置 ldpd 在核心链路上运行 LDP。

创建一个最小的 /etc/ldpd.conf,在核心接口上为 IPv4 运行 LDP:

在第二个 PE 上,将 router-id 设为 192.0.2.2,接口列表保持一致。ldpd 在已启用的链路上发现邻居;链路本地会话无需指定邻居 IP。

2) 验证跨核心的标签分发

使用 ldpctl(8)ifconfig(8)

3) 用 mpe(4) 与 OpenBGPD 实现 L3 MPLS VPN(PE-CE)

在非默认 rdomain 内用 mpe(4) 接口将客户 VRF 绑定到 MPLS,并用 bgpd(8) 信令通告 VPN 路由。

PE1(示例客户 VRF rdomain 10):

PE1/etc/bgpd.conf 的最小摘录,用于定义 VPN 并向 PE2 启用 VPN AFI/SAFI:

PE2 上镜像该设置:创建 VRF(例如 rdomain 20),附加 mpe0(标签 3000),在 vpn 块中通告其客户网络,并向 PE1 启用 announce IPv4 vpnvpn 块使用 mpe 接口的标签与 /32 地址,且可绑定到与 bgpd 运行所在 rdomain 不同的 rdomain。

验证(任一 PE):

4) 用 mpw(4) 伪线与 bridge(4) 实现 L2 VPLS

对于二层多点服务,创建到远端 PE 的伪线并与 CE 端口桥接。ldpd 可信令 VPLS 并将伪线绑定到 mpw(4)

PE1:

PE1/etc/ldpd.conf 的 VPLS 块:

PE2 上,创建 mpw1,加入本地 bridge0,使用相同的 pw-id,并将 neighbor-id 设为 192.0.2.1。如有需要,调整 mpw(4) 上的 MTU 及控制字/流感知开关(pwecw-pwefat)。

验证(任一 PE):

注: 通过 GRE 底层传输时,gre(4) 可封装 MPLS;须相应规划 MTU。

验证

  • 核心 LDP 健康: ldpctl show neighborsldpctl show lib

  • 接口状态: ifconfig <if> | grep -i mpls 确认 MPLS 启用与 MTU。

  • L3VPN 控制平面: bgpctl show summary(Established)、bgpctl show rib vpn(路由、标签、mpe)。

  • VRF 数据平面: route -T <rdomain> -n show 及在 CE 子网间 traceroute,确认经 MPLS 核心转发。

故障排查

  • 无 LDP 邻居。 确保链路两端均启用 MPLS、底层 IP 可达、接口已列入 ldpd.conf。检查发现/传输优先级与 GTSM(多跳时)。

  • 直连路由缺少标签。 检查 ldpctl show lib。对需要 EXP/ECN 处理的特定路径,考虑使用 explicit-null yes

  • VRF 中无 L3VPN 路由。 确认 mpe 处于正确的 rdomain、带有 /32 地址与 mplslabel,且邻居协商了 VPN AFI/SAFI(announce IPv4 vpn)。

  • 伪线 down。 核对 pw-id 匹配、neighbor-id(LSR-ID)正确、MTU 一致。按需在 mpw(4) 上调整控制字(pwecw)或流感知传输(-pwefat)。

  • MTU 黑洞。 MPLS 每个标签增加 4 字节(常见两个标签)。降低载荷 MTU 或尽可能提升底层 MTU;用大包 ping 重新测试。

参见

最后更新于