本文最后更新于 2026 年 4 月 22 日
本文以 Debian 13 为例,介绍如何搭建 sing-box 的 VLESS + HTTPUpgrade 服务端,通过 Cloudflare Tunnel 隐藏源站 IP,使用 Caddy 建立伪装站,并在客户端启用 ECH 加密 SNI。本文同样完全适用于 Ubuntu 24.04 及以上系统。
本方案有以下特点:
- VPS 不开放任何公网入站端口(防火墙仅允许 SSH 和出站),真实 IP 完全不出现在 DNS 记录、证书或任何公开信息中
- 无需申请 TLS 证书(外层 TLS 由 Cloudflare 边缘节点处理,VPS 内部全程明文 HTTP 回环通信)
- 浏览器直接访问域名显示真实的伪装网站,代理路径隐藏在特定 URI 下
- 客户端启用 ECH 后,中间人仅能看到
cloudflare-ech.com的外层 SNI,无法得知实际访问的域名
注:请先参照 Debian & Ubuntu 服务器的初始化配置 一文对服务器进行各种必要的配置。本文以 sammy 用户为例,并默认已按初始化配置文章对服务器进行了配置。
背景与原理
整体架构
1 | 客户端 sing-box (VLESS + HTTPUpgrade) |
关于 TLS-in-TLS
本方案中,用户访问 HTTPS 网站时产生的内层 TLS 流量被封装在 Cloudflare 的外层 TLS 连接中,TLS-in-TLS 特征不可避免。sing-box 的 multiplex.padding 可在多路复用层添加随机填充以缓解长度特征,但无法完全消除。需要消除 TLS-in-TLS 的场景应选择 AnyTLS + REALITY 或者 VLESS + Vision + REALITY(两者都是直连方案,无法过 CDN)。
本方案不适用的场景
- VPS 无法出站连接 Cloudflare 的场景(极少数网络环境)
- 需要完全消除 TLS-in-TLS 特征的场景
- 追求极致低延迟的场景(CF Tunnel 多一跳,延迟略高于直连)