Skip to content

FAKE_TCP 数据面模式

状态:Current

最后核对:2026-05-30

FAKE_TCP 有多个运行模式,因为不同部署的内核、权限和 underlay 约束不同。模式 控制 packet rewrite 发生在哪里,不改变通用线上格式。

目录

支持矩阵

模式配置值运行时含义
自动auto 或空先尝试纯 eBPF;启动失败时,在支持 fallback 的路径退到混合 eBPF。
纯 eBPFebpf_tcpure_ebpfattach tc ingress 和 egress 程序,在内核态直接改包。
混合 eBPFhybrid_ebpfraw使用 tc eBPF 做捕获或 egress 辅助,raw socket 在用户态 encode/decode。

对 inbound L4 UDP FAKE_TCP listener 来说,当前 runtime 在 userspace decode,并 安装 RST filter;纯/混合 eBPF 的区别主要适用于 L4 UDP upstream client fast path。

纯 eBPF 数据面

纯 eBPF 模式会在解析出的 underlay interface 上,为每条 tunnel attach 一个 tc egress filter 和一个 tc ingress filter。

Egress flow:

text
tc egress
  match native UDP packet
  verify source, destination, protocol, and ports
  grow skb by TCP header + FAKE_TCP header
  rewrite IP protocol from UDP to TCP
  write TCP header
  write FAKE_TCP header
  recompute IPv4/TCP or IPv6/TCP checksums
  return TC_ACT_OK

Ingress flow:

text
tc ingress
  match TCP packet to local listen address and listen port
  verify remote source IP, FAKE_TCP magic, and session id
  shrink skb by TCP header + FAKE_TCP header
  restore IP protocol to UDP
  restore destination to local native endpoint
  recompute checksums where required
  return TC_ACT_OK

不匹配的包返回 TC_ACT_UNSPEC,让后面的 tc filter 继续处理。这一点很重要: 当前实现仍是每条 tunnel 装自己的 tc filter,而不是每个 interface 一个 map-driven dispatcher。

混合 eBPF 数据面

混合模式会让 raw socket 留在数据路径里。

L4 UDP hybrid:

text
egress native UDP
  tc egress 把匹配的 UDP 流量 redirect 到 loopback
  userspace raw receiver 读取 UDP payload
  userspace 编码 outer IP + TCP + FAKE_TCP
  userspace raw IP sender 发到 remote endpoint

ingress FAKE_TCP
  userspace raw TCP receiver 读取 TCP-looking packets
  userspace 校验并 decap
  userspace 把 UDP payload 转发到配置的 upstream

Auto 和 Raw 模式语义

Auto 模式会在 pure eBPF 安装失败时用 hybrid 作为启动 fallback。显式 pure_ebpf 在 pure eBPF 安装失败时会让 tunnel 启动失败。

raw 值会走 hybrid path。它不应被记录成零 eBPF 实现,因为当前启动仍会按流量 方向使用 tc 辅助完成 capture、redirect、filtering 或 fast-path 工作。

RST Filtering

FAKE_TCP packet 看起来像 TCP,但不属于 TCP socket;当包打到所选 tuple 时,本机 内核可能发 TCP RST。NexusNet 会为支持的 FAKE_TCP listener path 安装 RST filter, 避免 underlay compatibility wrapper 和本机 TCP 栈互相干扰。

RST filter 不会让 FAKE_TCP 变成 TCP connection。它只阻止内核终止它不理解的 flow。

运行要求

  • userspace encode/decode path 需要 raw socket capability。
  • pure eBPF、hybrid eBPF 和 RST filtering 需要 tc/eBPF capability。
  • tc attach 需要解析出的 underlay interface。

NexusNet documentation