裸 UDP 隧道模块文档¶
目前正在讨论使用 UDP 的各种 L3 封装标准,以利用不同网络的基于 UDP 的负载均衡能力。MPLSoUDP ( https://tools.ietf.org/html/rfc7510 ) 就是其中之一。
Bareudp 隧道模块为在 UDP 隧道内隧道传输不同的 L3 协议(如 MPLS、IP、NSH 等)提供通用的 L3 封装支持。
特殊处理¶
bareudp 设备支持对 MPLS 和 IP 的特殊处理,因为它们可以有多个以太类型。MPLS 协议可以有以太类型 ETH_P_MPLS_UC(单播)和 ETH_P_MPLS_MC(多播)。IP 协议可以有以太类型 ETH_P_IP(v4)和 ETH_P_IPV6(v6)。只有当以太类型为 ETH_P_IP 和 ETH_P_MPLS_UC 并且启用了名为 multiproto 模式的标志时,才能启用此特殊处理。
用法¶
设备创建和删除
ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc
这将创建一个 bareudp 隧道设备,该设备使用以太类型 0x8847(MPLS 流量)隧道传输 L3 流量。UDP 标头的目标端口将设置为 6635。该设备将侦听 UDP 端口 6635 以接收流量。
ip link delete bareudp0
启用 multiproto 模式的设备创建
multiproto 模式允许 bareudp 隧道处理同一系列的多个协议。目前仅适用于 IP 和 MPLS。此模式必须使用 “multiproto” 标志显式启用。
ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto
对于 IPv4 隧道,multiproto 模式允许隧道同时处理 IPv6。
ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto
对于 MPLS,multiproto 模式允许隧道同时处理单播和多播 MPLS 数据包。
设备用法
bareudp 设备可以与 OVS 或 TC 中的 flower 过滤器一起使用。OVS 或 TC flower 层必须在将数据包缓冲区发送到 bareudp 设备进行传输之前,在 SKB dst 字段中设置隧道信息。在接收时,bareUDP 设备在将数据包缓冲区传递到网络堆栈之前,提取并将隧道信息存储在 SKB dst 字段中。