如果在你的 VPS 上,3x-ui + Xray 正在安稳地跑着,且霸占着宝贵的 443/tcp 端口。这时候你想测试 AnyTLS、NaiveProxy 或 Mieru 这些新玩意,第一步千万别是去搜“怎么把它们装进面板”。

你真正要考虑的生死问题是:这个入口现在归谁?新协议抢不抢 443?如果翻车了,旧服务怎么无感回滚?很多代理部署到最后,折腾的根本不是协议,而是端口和入口。3x-ui 不会变魔术,Xray-core 原生不支持的协议,你怎么在面板里硬塞都没用。

这篇不写保姆级教程,只记录我的选择和避坑判断,为接下来愈来愈近的“大日子”提前备战。

省流版

项目能直接塞进 3x-ui 吗?推荐姿势最大的坑 / 约束
AnyTLS想都别想独立跑个 sing-box 监听高位端口极其挑内核版本;证书得自己搞定
NaiveProxy想都别想建议直接上新 VPS / 新 IP强依赖标准 443 和可信 TLS,极易和现有 Xray 冲突
Mieru想都别想同一台机器跑个 mita,开几个高位端口小众生态;客户端和服务器时间必须精准同步

想在同一台机器上共存,最稳妥的方案就是纯旁路部署

旧生产入口:client -> example.com:443   -> 3x-ui / Xray (雷打不动)
新测试入口:client -> example.com:31443 -> sing-box (AnyTLS)
新测试入口:client -> example.com:30443 -> Caddy (NaiveProxy)
新测试入口:client -> VPS_IP:30217      -> mita (Mieru)

大家各跑各的进程,用不同的端口、systemd 服务和防火墙规则彻底物理隔离。


3x-ui 不是哆啦A梦的口袋

说白了,3x-ui 只是 Xray-core 的一个套壳 GUI。它能管什么,全看底层的 Xray 支持什么。

既然 Xray 原生根本就不认识 AnyTLS、NaiveProxy 和 Mieru,你就别指望能通过面板的“高级配置”或者手改数据库把它们加进去。强行塞的下场通常不是解锁隐藏玩法,而是整个 Xray 服务报错起不来。

正确的运维分工是: Xray 继续干它擅长的,AnyTLS 交给 sing-box,NaiveProxy 交给 Caddy,Mieru 用它自己的 mita 跑。别把鸡蛋和铁球放在同一个篮子里。

AnyTLS:sing-box 的独立试验田

AnyTLS 不是“把 TLS 包再套一层名字”这么简单,它更像是在标准 TLS 连接里面再做一套轻量会话层。外面看起来还是正常 TLS,里面用 password 做认证,用 padding_scheme 把不同阶段的数据包长度打散。sing-box 的 AnyTLS inbound / outbound 里能看到这几个核心字段:userstlspadding_scheme。这也解释了为什么它特别挑内核版本,因为客户端和服务端必须理解同一套 AnyTLS 会话格式和 padding 规则。

AnyTLS 的重点不在“加密强度比 TLS 更强”,而在流量外观。普通代理协议最容易暴露的是握手阶段、首包长度、固定字段和后续包长规律。AnyTLS 借 TLS 拿到一个可信的外层,再通过认证和 padding 把里面的代理数据做得不那么规整。它解决的是“特征太明显”的问题,不是保证所有网络环境都能无脑穿透。

AnyTLS 的主场在 sing-box / mihomo,跟 Xray 没半毛钱关系。

既然 443 已经被占了,测试阶段直接让 sing-box 跑一个高位端口(比如 31443)。最大的好处是容错率极高:AnyTLS 挂了,或者不想用了,直接 systemctl stop sing-box-anytls,把防火墙放行的 31443 一删,你的 Xray 443 依然稳如老狗。

测 AnyTLS 有几个需要注意的坑:

  1. 看内核,别只看 GUI: 必须确保双端的底层内核够新,别看个客户端名字就盲上。排障时,强烈建议先用纯 CLI 的原生 sing-box 跑通,再切到 GUI 客户端。
  2. 高位端口的证书问题: 别指望高位端口能用 HTTP 验证去自动申请 ACME 证书。老老实实用 DNS-01 验证,或者测试阶段干脆搞个自签证书(注意 server_name 和 SAN 必须对齐)。
  3. 面板不管了: 没面板帮你管理多用户了。密码、流量限制、到期时间,统统得写在 sing-box 的配置文件里,自己手搓。

NaiveProxy:最娇贵,极其吃部署形态

NaiveProxy 的思路和传统代理很不一样。它不是自己发明一套看起来很奇怪的新握手,而是尽量贴近浏览器访问 HTTPS 网站的样子:客户端使用 Chromium 的网络栈,和服务端前端建立 TLS,再通过 HTTP/2 或 HTTP/3 的 CONNECT 请求承载代理流量。换句话说,它更像是“把代理藏进一条正常的现代 Web 连接里”。

这里的关键是前端。服务端常见做法是 Caddy forwardproxy,或者其他能正确处理 HTTP/2 CONNECT、认证头和回落页面的前端。客户端连上来以后,不是裸奔一个自定义协议端口,而是先走可信证书、ALPN、HTTP/2 / HTTP/3,再通过用户名密码授权进入代理逻辑。probe_resistancehide_iphide_via 这些配置,本质上都是为了让它在被探测时更像一个普通 HTTPS 站点,而不是大大方方告诉别人“我是代理”。

NaiveProxy 和另外两个完全不一样,它不是你随便“开个端口”就能发挥实力的。它的核心防御力建立在**“标准形态”**之上:合法的域名 + 可信的 TLS + 隐匿在 HTTP/2 或 HTTP/3 流量下 + 标准前端(比如 Caddy)。

这也就是它最头疼的地方:它想当主力,就得霸占 443 端口。 但你的 443 现在正被 Xray 占着。

如果硬要在当前机器搞:

  • 前置分流共用 443: 复杂度飙升,排错火葬场,不建议直接上生产。
  • 用高位端口(如 30443): 可以跑通,但这就变成了纯粹的“连通性测试”,丢掉了 NaiveProxy 最精髓的隐蔽性优势。

如果你想把 NaiveProxy 当主力,请直接给它一台干净的新 VPS(或附加个新 IP);如果只是想随便尝个鲜,那就用高位端口。

Mieru:简单粗暴的备用通道

Mieru 走的是另一条路。它不是伪装成网站,也不依赖域名证书,而是自己定义了一套代理传输格式:客户端和服务端用用户名、密码以及系统时间派生出通信密钥,数据再用 XChaCha20-Poly1305 这类认证加密算法保护。外层可以走 TCP,也可以走 UDP;官方服务端叫 mita,客户端叫 mieru

它比较有意思的地方在包格式。Mieru 会把代理流量切成一个个 segment,每个 segment 里有随机 padding、长度信息、加密数据和认证标签。这样做的目的不是把自己伪装成浏览器,而是尽量减少固定明文特征,让连接更难被简单的规则抓出来。也因为密钥派生会用到时间,客户端和服务端时间不同步时,排障会非常痛苦。

Mieru 是个典型的实用主义者,不要域名,不依赖前置,直接 IP 直连。当个安全备用入口再合适不过了。

部署策略很简单:Xray 照跑,在机器上起个服务端(mita),随便挑 2 到 3 个未被占用的高位随机端口(比如 20000-60000 之间)。第一阶段建议只开 TCP,别开 UDP,也别作死开一整个端口段。

  • 最致命的一点:时间必须同步! Mieru 的密钥计算强依赖系统时间,客户端和服务端时间稍微有点误差,连报错都不给直接死连不上。排障第一步先敲一遍 timedatectl
  • 服务端日志平时切到 INFO,别一直开着 DEBUG
  • 密码必须足够长且随机,不要全员共享。
  • 严禁拿来跑 P2P、BT 下载或者大流量视频。

它的优势就是极简旁路,不需要去跟域名、证书死磕;缺点就是太小众,连个像样的面板都没有,出了问题只能自己翻日志。

写在最后

无论测什么新协议,只要在现役机器上动土,底线只有一条:新服务随便崩,老节点不能断。

在敲启动命令前,先确认一下老家情况:

# 确认 x-ui 活着,看看你要用的测试端口(如 31443)有没有冲突
systemctl is-active x-ui
ss -lntup | grep -E ':443 |:30443 |:31443 |:30217'

折腾完之后,回头再看一眼:

# 确保你的瞎折腾没有把 443 搞掉
ss -lntup | grep ':443 '

真正的稳,不是一上来就玩无缝切换,而是先在旁边搭个脚手架跑跑看。能连、能停、能干净回滚,才是一次合格的测试。