FAKE_TCP 数据面模式
状态:Current
最后核对:2026-05-30
FAKE_TCP 有多个运行模式,因为不同部署的内核、权限和 underlay 约束不同。模式 控制 packet rewrite 发生在哪里,不改变通用线上格式。
目录
支持矩阵
| 模式 | 配置值 | 运行时含义 |
|---|---|---|
| 自动 | auto 或空 | 先尝试纯 eBPF;启动失败时,在支持 fallback 的路径退到混合 eBPF。 |
| 纯 eBPF | ebpf_tc 或 pure_ebpf | attach tc ingress 和 egress 程序,在内核态直接改包。 |
| 混合 eBPF | hybrid_ebpf 或 raw | 使用 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:
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_OKIngress flow:
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:
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 转发到配置的 upstreamAuto 和 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。