跳到主要内容

Juicity

Juicity 是一种基于 QUIC 的代理协议及其实现,灵感来源于 TUIC。它在 TUIC 的基础上针对 UDP 转发、连接稳定性和客户端兼容性进行了改进。Juicity 于 2023 年 7 月发布,目前由社区维护。

基本信息

项目信息
发布2023.07
传输层QUIC(UDP)
官方实现juicity/juicity
许可证AGPL-3.0
生态成熟度小众 / 社区维护

核心特性

基于标准 QUIC

Juicity 构建在标准 QUIC 协议之上,要求最低支持 BBR 拥塞控制算法,TLS 版本必须为 1.3 以上,ALPN 标识为 h3。流量从协议层面看与普通 HTTP/3 流量高度相似。

UUID + 密码认证

Juicity 使用 UUID 和密码的组合进行身份认证。认证发生在 QUIC 连接建立阶段,客户端通过单向流发送认证请求,服务端验证通过后才开始处理代理请求。单个 QUIC 连接只需认证一次,其上承载的所有 Stream 共享该认证状态。

客户端 --[QUIC 握手]--> 服务端
客户端 --[单向流:UUID + Token]--> 服务端
客户端 --[Stream 1:代理请求 A]--> 服务端
客户端 --[Stream 2:代理请求 B]--> 服务端

Token 的生成基于 QUIC 连接的 TLS ExportKeyingMaterial,结合 UUID 和密码派生,保证了认证信息与底层连接的绑定。

UDP over Stream

这是 Juicity 相对于 TUIC 的核心改进之一。TUIC 在 udp_relay_mode=native 时,丢包会导致应用层重试(如 DNS 重试),影响体验;而在 quic 模式下,每个 UDP 数据报使用独立的单向流,资源消耗较大。

Juicity 采用 UDP over Stream 方案:同一源地址三元组 <源 IP, 源端口, UDP> 的所有数据报共享同一条 QUIC Stream,兼顾了效率和可靠性:

QUIC 连接
├── Stream 1 → TCP 连接 A(Google)
├── Stream 2 → TCP 连接 B(GitHub)
├── Stream 3 → UDP 流(源 192.168.1.1:12345)
│ ├── [proxy header][len][payload] 数据报 1
│ ├── [proxy header][len][payload] 数据报 2
│ └── [proxy header][len][payload] 数据报 3
└── Stream 4 → UDP 流(源 192.168.1.1:53)

全锥型 NAT 支持

Juicity 的 UDP 实现支持全锥型 NAT(Full Cone),适合需要 NAT 穿透的应用场景(如 P2P 游戏、VoIP)。通过将同一源地址的 UDP 数据报绑定到同一条 Stream,Juicity 能够维护稳定的地址映射。

动态 Stream 管理

QUIC 协议对 maxOpenIncomingStreams 有限制。Juicity 要求客户端维护远端可用 Stream 的动态计数,当可用数量不足时自动建立新的 QUIC 连接。如果客户端无法获取精确的可用 Stream 数量(如底层 QUIC 库不暴露该接口),则在累计打开 30 条 Stream 后创建新连接。

与 TUIC 的对比

Juicity 官方明确表示其设计目标是改进 TUIC 的不足:

对比维度JuicityTUIC v5
UDP 转发方式UDP over Streamnative / quic 可选
丢包时 UDP 表现较好,共享 Streamnative 模式下较差
全锥型 NAT支持有限支持
Stream 资源消耗较低quic 模式下较高
认证方式UUID + PasswordUUID + Password
拥塞控制BBR(最低要求)BBR / CUBIC 可选
传输层QUIC(TLS 1.3)QUIC(TLS 1.3)
需要域名
客户端生态较窄较广
维护状态社区维护活跃

总结: Juicity 在 UDP 处理上有明确的技术改进,但客户端生态不如 TUIC 广泛。如果你主要使用 TCP 代理,TUIC 的客户端支持更好;如果需要高质量的 UDP 转发(如游戏、DNS),Juicity 值得尝试。

与 Hysteria 2 的对比

对比维度JuicityHysteria 2
拥塞控制BBR(标准)Brutal(激进)
高丢包性能较强极强
带宽占用行为自适应,友好主动占用,可能触发告警
UDP 代理UDP over StreamUDP over QUIC Datagram
端口跳跃不支持支持
流量伪装标准 QUIC / TLS 1.3HTTP/3 + 可选混淆
客户端支持较窄广

优缺点

优点缺点
QUIC 传输,在高延迟/高丢包线路上表现好依赖 UDP,在 UDP 封锁的网络中不可用
UDP over Stream 改进了 TUIC 的 UDP 转发问题需要域名和有效的 TLS 证书
支持全锥型 NAT,适合游戏和 P2P 场景客户端生态较窄,主流客户端支持有限
标准拥塞控制,对线路友好社区维护,更新节奏不确定
配置简单文档和教程资源较少
TLS 1.3 内置加密,安全性好

适用场景

推荐使用 Juicity 的场景:

  • 对 UDP 转发质量有较高要求(如游戏加速、DNS 查询)
  • 愿意自行测试和排障,接受客户端生态较窄的现状
  • 作为 Hysteria 2 / TUIC 的补充或备选方案
  • 需要全锥型 NAT 支持的应用场景

不推荐单独依赖 Juicity 的场景:

  • 需要广泛客户端支持的用户(优先选择 TUIC 或 Hysteria 2)
  • 企业/校园网络可能封锁 UDP 的环境
  • 不愿投入时间自行排障的用户

服务端部署

前置条件

  • 一台公网 VPS,已开放 UDP 端口(如 443)
  • 一个指向服务器 IP 的域名
  • 有效的 TLS 证书

安装 Juicity 服务端

从 GitHub Releases 下载预编译二进制文件:

# 查看最新版本并下载
wget https://github.com/juicity/juicity/releases/latest/download/juicity-server-x86_64-linux-musl
chmod +x juicity-server-*
mv juicity-server-* /usr/local/bin/juicity-server

申请 TLS 证书

# 使用 acme.sh 申请 Let's Encrypt 证书
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --issue -d your.domain.com --webroot /var/www/html
~/.acme.sh/acme.sh --install-cert -d your.domain.com \
--cert-file /etc/juicity/cert.crt \
--key-file /etc/juicity/private.key \
--reloadcmd "systemctl restart juicity-server"

生成 UUID

cat /proc/sys/kernel/random/uuid

服务端配置文件(/etc/juicity/config.json)

{
"listen": ":443",
"users": {
"00000000-0000-0000-0000-000000000000": "your-strong-password"
},
"certificate": "/etc/juicity/cert.crt",
"private_key": "/etc/juicity/private.key",
"congestion_control": "bbr",
"log_level": "info"
}

配置字段说明:

字段说明
listen监听地址和端口
users用户列表,键为 UUID,值为密码,支持多用户
certificate / private_keyTLS 证书和私钥路径
congestion_control拥塞控制算法,可选 bbrcubicnew_reno
log_level日志级别

生成证书链哈希(可选)

Juicity 支持 pinned_certchain_sha256,用于固定证书链哈希,防止中间人攻击:

juicity-server generate-certchain-hash /path/to/fullchain_cert.pem

Systemd 服务单元

[Unit]
Description=Juicity Server
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/juicity-server run -c /etc/juicity/config.json
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

启动服务

systemctl daemon-reload
systemctl enable juicity-server
systemctl start juicity-server
systemctl status juicity-server

# 查看日志
journalctl -u juicity-server -f

开放防火墙规则

ufw allow 443/udp

客户端配置参考

Juicity 官方客户端

GitHub Releases 下载对应平台的客户端。

最小配置(config.json):

{
"listen": ":1080",
"server": "your.domain.com:443",
"uuid": "00000000-0000-0000-0000-000000000000",
"password": "your-strong-password",
"sni": "your.domain.com",
"allow_insecure": false,
"congestion_control": "bbr",
"log_level": "info"
}

完整配置:

{
"listen": ":1080",
"server": "your.domain.com:443",
"uuid": "00000000-0000-0000-0000-000000000000",
"password": "your-strong-password",
"sni": "your.domain.com",
"allow_insecure": false,
"congestion_control": "bbr",
"log_level": "info",
"pinned_certchain_sha256": "aQc4fdF4Nh1PD6MsCB3eofRyfRz5R8jJ1afgr37ABZs=",
"forward": {
"127.0.0.1:12322": "127.0.0.1:22",
"0.0.0.0:5201/tcp": "127.0.0.1:5201",
"0.0.0.0:5353/udp": "8.8.8.8:53"
}
}

配置字段说明:

字段说明
listen本地 SOCKS5/HTTP 代理监听地址,支持 user:pass@:1080 格式
server服务端地址和端口
uuid用户 UUID
password用户密码
sniTLS SNI,当 server 为域名时可省略
allow_insecure是否跳过证书验证,生产环境应设为 false
congestion_control拥塞控制算法,可选 bbrcubicnew_reno
pinned_certchain_sha256固定证书链哈希,增强安全性
forward端口转发规则,格式:"<本地地址>[/tcp][/udp]": "<远程地址>"

运行客户端:

./juicity-client run -c config.json

订阅链接格式

juicity://uuid:password@your.domain.com:443?congestion_control=bbr&sni=your.domain.com&allow_insecure=0

dae 客户端

dae 是 Linux 平台的高性能代理客户端,原生支持 Juicity。配置方式参见 dae 文档

v2rayA

v2rayA 是跨平台的 Web UI 客户端,支持 Juicity。通过 Web 界面导入订阅链接或手动添加节点即可。

客户端支持

平台客户端支持状态
Windows / macOS / Linuxjuicity-client支持(官方 CLI)
Linuxdae / daed支持
Windows / macOS / Linuxv2rayA支持
iOS暂无主流客户端支持
Android暂无主流客户端支持
Windowsv2rayN需确认版本
客户端支持有限

Juicity 的客户端生态远不如 TUIC 和 Hysteria 2。目前主要通过官方 CLI 客户端和 dae 使用,iOS 和 Android 平台暂无主流 GUI 客户端支持。选择 Juicity 前请确认你的平台有可用的客户端。

常见问题

Q:Juicity 和 TUIC 该选哪个?

如果你需要广泛的客户端支持(尤其是 iOS/Android),选 TUIC。如果你主要在 Linux 上使用,且对 UDP 转发质量有较高要求,Juicity 的 UDP over Stream 方案有一定优势。

Q:Juicity 支持多用户吗?

支持。服务端配置的 users 字段可以添加多个 UUID-密码对。

Q:congestion_control 用 bbr 还是 cubic?

推荐 bbr。BBR 在高延迟链路上的表现优于传统 CUBIC,且是 Juicity 的最低要求。

Q:是否可以在没有域名的情况下使用?

不可以。Juicity 要求 TLS 1.3,需要有效的证书和域名。如果无域名,建议使用 VLESS + Reality 方案。

Q:为什么连接后速度很慢?

检查以下几点:

  1. 服务端和客户端的 congestion_control 是否一致
  2. VPS 是否对 UDP 有限制
  3. 客户端所在网络是否封锁 UDP
  4. 尝试更换端口

延伸阅读