Hasty Briefsbeta

双语

Reimplementing pf as an eBPF/XDP dataplane on Linux

a day ago
  • #eBPF
  • #Firewall
  • #XDP
  • PFL 是一个实验性项目,旨在将 pf 防火墙的语言和状态语义转换为 Linux 的 XDP(eXpress Data Path),以实现高效的数据包处理。
  • PFL 基于 FreeBSD 的 pfSense 遗产构建,使用 Rust 作为控制平面(pfld)和 eBPF 数据平面,利用 XDP 的驱动程序级执行来实现高数据包速率。
  • 关键架构特点包括一个尾调用图管道以符合 eBPF 验证器的限制、用于连接状态的 LRU 哈希映射和每 CPU 计数器。
  • PFL 在多个 pf 功能上实现了显著的匹配,包括过滤、NAT(IPv4/IPv6)、NAT64、标准化、策略路由以及带有 SYN Cookie 的 DoS 抵抗能力。
  • PFL 的局限性包括没有完整的分片重组(由于 XDP 模型)以及初步性能结果(在 VM 测试中,相比于 nftables,中位数延迟更好,但尾部延迟和 CPU 使用率更高)。
  • 未来的工作包括在 Arm 设备上进行裸机评估、出口快速路径优化、通过 pflsync 实现高可用性以及协议深度改进。
  • PFL 的独特之处在于,它在保持对 pf 语言忠实性的同时,在内核中使用 XDP 运行,使得主机接口仍然可用,这与像 VPP 这样的用户空间替代方案不同。