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= rawgateway 有两个方向:
| 方向 | Proto 字段 | 当前行为 |
|---|---|---|
| Inbound listener | UdpRule.fake_tcp | TCP-looking raw packet 到达 Agent 后被 decode,内层 UDP payload 发给配置的 UDP upstream。 |
| Outbound upstream | UdpRule.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 payloadOutbound 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