Skip to content

L4 UDP over FAKE_TCP

状态:Current

最后核对:2026-05-30

L4 UDP over FAKE_TCP 会把一个 UDP datagram payload 放进 TCP-looking raw packet。 它不是 TCP tunneling,也不会把 UDP 变成 stream。

目录

支持的 Profile

当前支持的 L4 profile 是:

text
payload = udp
outer   = fake_tcp
security= raw

gateway 有两个方向:

方向Proto 字段当前行为
Inbound listenerUdpRule.fake_tcpTCP-looking raw packet 到达 Agent 后被 decode,内层 UDP payload 发给配置的 UDP upstream。
Outbound upstreamUdpRule.upstream_fake_tcp=true普通 UDP route payload 在发往下一跳前被包装为 FAKE_TCP。

Inbound Listener

Inbound listener 包:

text
Client 或上一跳发送:

+-------------------------------+
| Outer IP                      |
|  proto = TCP(6)               |
+-------------------------------+
| TCP header                    |
|  dport = fake_tcp.listen_port |
+-------------------------------+
| FAKE_TCP payload header       |
+-------------------------------+
| UDP datagram payload          |
+-------------------------------+

Agent 转发到 UDP upstream:

+-------------------------------+
| UDP socket send               |
|  dst = upstream endpoint      |
+-------------------------------+
| UDP datagram payload          |
+-------------------------------+

listener path 在 userspace decode,并为所选 TCP-looking flow 安装 RST filter。 没有内核 TCP socket 会 accept stream。

Outbound Upstream

Outbound upstream 包:

text
Client 先发普通 UDP 到 Nexus listener:

+-------------------------------+
| UDP datagram payload          |
+-------------------------------+

Agent 发给下一跳时变成 FAKE_TCP:

+-------------------------------+
| Outer IP                      |
|  proto = TCP(6)               |
+-------------------------------+
| TCP header                    |
|  sport = source port          |
|  dport = upstream port        |
+-------------------------------+
| FAKE_TCP payload header       |
+-------------------------------+
| UDP datagram payload          |
+-------------------------------+

Outbound upstream wrapping 是封包构造步骤。upstream endpoint port 会成为 TCP-looking destination port。

处理逻辑

Inbound FAKE_TCP listener path:

text
raw TCP-looking packet arrives
  match destination listen address and listen port
  validate magic, session id, length, and checksum
  extract UDP datagram payload
  forward payload with normal UDP socket send
  report listener as tcp + fake_tcp + udp payload

Outbound FAKE_TCP upstream path:

text
normal UDP route receives datagram
  resolve upstream endpoint address and port
  build outer IP header
  build TCP-looking header
  write FAKE_TCP payload header
  copy UDP datagram payload
  send raw packet to next hop

两个方向的 payload 都仍然是 datagram。FAKE_TCP 不提供 backpressure、重传、 fragmentation repair 或 stream ordering。

当前限制

  • Inbound FAKE_TCP listener 只支持 RAW UDP。
  • 该 listener path 会拒绝 inbound Noise、upstream Noise、upstream QUIC REALITY 和嵌套 upstream FAKE_TCP。
  • 当前 runtime 不支持 UDP over FAKE_TCP upstream 再叠 upstream Noise。
  • 同一个 TCP-looking address:port 上的重复 UDP FAKE_TCP RAW listener 会只保留 一个,因为目前还没有早期 route discriminator。

Runtime 上报

Runtime listener 会把 inbound L4 FAKE_TCP 上报成:

text
transport = tcp
payload   = udp
outer     = fake_tcp
security  = raw

普通 UDP route 如果下一跳使用 FAKE_TCP,则上报:

text
outer = udp->fake_tcp

NexusNet documentation