裸 UDP 隧道模块文档

目前正在讨论各种使用 UDP 的 L3 封装标准,以利用不同网络基于 UDP 的负载均衡能力。 MPLSoUDP(https://tools.ietf.org/html/rfc7510)就是其中之一。

Bareudp 隧道模块为在 UDP 隧道内隧道传输不同的 L3 协议(如 MPLS、IP、NSH 等)提供通用的 L3 封装支持。

特殊处理

bareudp 设备支持对 MPLS 和 IP 的特殊处理,因为它们可以有多个 ethertype。 MPLS 协议可以具有 ethertype ETH_P_MPLS_UC(单播)和 ETH_P_MPLS_MC(多播)。 IP 协议可以具有 ethertype ETH_P_IP (v4) 和 ETH_P_IPV6 (v6)。 只有 ethertype ETH_P_IP 和 ETH_P_MPLS_UC 可以通过一个名为 multiproto 模式的标志启用此特殊处理。

用法

  1. 设备创建和删除

    1. ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc

      这将创建一个 bareudp 隧道设备,该设备通过 ethertype 0x8847(MPLS 流量)隧道传输 L3 流量。 UDP 标头的目标端口将设置为 6635。该设备将侦听 UDP 端口 6635 以接收流量。

    2. ip link delete bareudp0

  2. 启用 multiproto 模式的设备创建

multiproto 模式允许 bareudp 隧道处理同一系列的多个协议。 目前仅适用于 IP 和 MPLS。 必须使用“multiproto”标志显式启用此模式。

  1. ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto

    对于 IPv4 隧道,multiproto 模式允许隧道也处理 IPv6。

  2. ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto

    对于 MPLS,multiproto 模式允许隧道处理单播和多播 MPLS 数据包。

  1. 设备用法

bareudp 设备可以与 OVS 或 TC 中的 flower 过滤器一起使用。 OVS 或 TC flower 层必须在将数据包缓冲区发送到 bareudp 设备进行传输之前,在 SKB dst 字段中设置隧道信息。 在接收时,bareUDP 设备提取隧道信息并将其存储在 SKB dst 字段中,然后将数据包缓冲区传递到网络堆栈。