本页目录

隧道技术对比

"隧道"是将一个协议封装在另一个协议中传输——GRE 最简的 IP-in-IP,VXLAN 为多租户叠加 L2,rathole/frp 通过中继暴露内网服务,WireGuard/IPsec 提供端到端加密。选型看封装开销、是否需要加密、和对 NAT 的兼容性。

概述

"隧道"是网络工程中的通用概念——将一个协议封装在另一个协议中传输。不同隧道解决不同问题:GRE 是最简单的 IP-in-IP 封装,VXLAN 在 L3 网络上叠加 L2 用于多租户,rathole 和 frp 通过中继暴露内网服务,WireGuard/IPsec 提供端到端加密。选型的核心考量是封装开销、是否需要加密、连接模型(按需 vs 常驻)和对 NAT 的兼容性。

隧道分类

L2 overlay: VXLAN, GENEVE — 数据中心虚拟网络, 24-bit VNI
L3 tunnel:  GRE, IPIP, WireGuard — 站点互连, 加密 or not
Port forward: rathole, frp, ngrok — 内网服务暴露
Full VPN:    WireGuard, IPsec, OpenVPN — 设备级加密接入

rathole vs frp

ratholefrp
架构对称 (server ↔ client)集中 (frps ↔ frpc)
连接模型预建 TCP 连接池按需创建 TCP
多服务per-service tunnelper-service proxy
加密依赖上层 (TLS by Caddy)内置 (可选)
协议支持TCP onlyTCP/UDP/HTTP
Dockerserver + clientserver + client
资源占用极低 (~5MB RAM)中等 (~20MB)

预建连接池的优势: server 和 client 启动时就预先建立多个空闲 TCP 连接。客户端请求到达 server → server 从池中取一个已建立的连接 → 转发数据 → 消除每次请求的 TCP 三次握手延迟。

预建连接池的代价: NAT 或 conntrack 可能把 idle 连接清掉 → early eof 错误 → client 需设 keepalive (TCP keepalive interval < conntrack timeout)。

GRE vs VXLAN

GRE (IP protocol 47):
  封装: [Outer IP | GRE hdr(4-16B) | Inner IP | Payload]
  设计: 通用 (Generic Routing Encapsulation) — 可封装任何协议
  标识: 可选 Key (4B) — 多 GRE 隧道复用同一个 IP

VXLAN (UDP):
  封装: [Outer Eth | Outer IP | UDP(port 4789) | VXLAN(8B) | Inner Eth | Inner L2+]
  标识: VNI (24-bit) — 16M 个虚拟网络
  ECMP: UDP src port 用作 entropy → 多路径路由
  MTU: 50B overhead → 需要巨帧 (9000 MTU) 或分片

选型指南

需求选择
暴露内网 HTTP 服务rathole + Caddy (auto TLS, 连接池)
多协议内网穿透frp (TCP/UDP/HTTP, dashboard)
低延迟 mesh VPNWireGuard (内核, ~4K 行代码)
自动 NAT 穿透Tailscale (STUN+DERP+UPnP)
企业 VPN 网关IPsec/IKEv2 (硬件 offload)
数据中心 overlayVXLAN + EVPN (BGP control plane)
简单 IP tunnelGRE (轻量, 无加密)

参考

  • rathole: github.com/rapiz1/rathole
  • frp: github.com/fatedier/frp
  • RFC: 2784 (GRE), 7348 (VXLAN)

Keywords: tunnel, rathole, frp, GRE, VXLAN, WireGuard, connection pool, overlay, port forwarding