usque 部署全流程(WARP MASQUE · HTTP/2)¶
目标:在一台 Linux 服务器上安装 usque(WARP 客户端),开一个本地 SOCKS5 端口, 走 HTTP/2 over TCP(避开 UDP 限速),隧道内同时支持 IPv4 + IPv6 出口。
实测环境:香港 VPS(Sharon-NYD, Debian/root, 无原生 IPv6,靠 WARP 隧道提供 v6)
0. 原理速览¶
- usque = Go 编写的 Cloudflare WARP 客户端,基于 MASQUE / Connect-IP(RFC 9484),支持 HTTP/3(QUIC) 与 HTTP/2(TCP) 两种隧道。
- 隧道出口是 Cloudflare 网络:出口 IP 是 CF 的 IP(v4 ≈
104.x.x.x, v6 ≈2a09:...)。 --http2= HTTP/2 over TCP(QUIC 走 UDP,被机房限速时必用 HTTP/2)。- 不加
-F/-S参数 → 隧道内 IPv4 与 IPv6 同时启用(双栈)。 - 服务器本身没有公网 IPv6 也没关系:客户端通过隧道分配
fd01:/2606:地址,出口走 WARP 的 v6。
1. 准备工作¶
- 一台 Linux 服务器(本文以 Debian/root 为例),能访问 GitHub 与 Cloudflare。
- 需要
curl、wget、unzip。Debian/Ubuntu 安装: - 先确认服务器架构(决定下载哪个压缩包):
注意
官方仅对 Linux amd64 做过充分测试,其他架构可能有问题。VPS 基本是 x86_64。
2. 安装程序¶
注意
若 unzip 不存在会报错,先按第 1 节安装。若无法访问 GitHub,可手动到 Releases 页面 下载后上传到服务器。
3. 注册 WARP 生成配置(只需一次)¶
注册成功会看到 Successful registration 并生成 config.json。若提示被限流(rate-limited),等一会儿再重试即可。
注意
config.json 内含 private_key、access_token、license 等机密,务必妥善备份,勿泄露。更换机器迁移时复制该文件即可,无需重新注册。
3.1 重新登记(enroll)¶
enroll 用于重新登记已有密钥:账号从 WireGuard 切换到 MASQUE、或迁移设备时使用。ZeroTrust 场景下还能刷新配置中的 IPv4/IPv6(否则 v6 可能失效)。
警告
enroll 会用 Cloudflare 服务器返回的数据覆盖 config.json,执行前先备份:cp config.json config.json.bak。
config.json 关键字段(示例,密钥打码):
注意
endpoint_h2_v6 可留空:HTTP/2 走 endpoint_h2_v4(TCP)即可,不影响 v6 出口。仅当你要让 HTTP/2 本身走 IPv6 时才需手动填写。
4. 手动试跑 + 连通性验证¶
另开一个终端验证(用 curl 的 socks5h 代理,但不要加 -6 参数,-6 与 socks5h 不兼容,历史坑):
注意
这里的 -6 是 curl 的参数(强制 IPv6),与 socks5h 代理不兼容。usque 自己也有一个 -6/--ipv6(让 MASQUE 连接走 IPv6),含义不同,服务器无原生 IPv6 时不要给 usque 加 -6。
5. 设置开机自启(systemd)¶
创建 /etc/systemd/system/usque.service:
参数红线
-F 禁用隧道 IPv4、-S 禁用隧道 IPv6——双栈必须两个都不加。
--http2 必须保留(服务器 UDP 被限速时 QUIC 连不上)。
提示
想让隧道在空闲时也保持重连(默认仅产生出站流量后自动重连),可在 ExecStart 追加 --always-reconnect。
启用并启动:
6. 日常运维命令(汇总)¶
修改服务文件后:先备份 cp usque.service usque.service.bak,再 daemon-reload && restart。
7. 最终验收清单¶
| 检查项 | 命令 | 期望 |
|---|---|---|
| 开机自启 | systemctl is-enabled usque |
enabled |
| 运行状态 | systemctl is-active usque |
active |
| HTTP/2 | journalctl -u usque -n 20 \| grep "HTTP/2" |
HTTP/2 mode enabled |
| SOCKS 端口 | ss -tlnp \| grep 1080 |
127.0.0.1:1080 在监听 |
| IPv4 出口 | curl -x socks5h://127.0.0.1:1080 https://ipv4.icanhazip.com |
104.x.x.x |
| IPv6 出口 | curl -x socks5h://127.0.0.1:1080 https://ipv6.icanhazip.com |
2a09:... |
8. 客户端使用¶
任何程序指向代理即可:
8.1 局域网设备使用¶
把 -b 127.0.0.1 改为 -b ::(v4/v6 双栈监听),并放行防火墙 1080 端口。
注意
-b :: 表示双栈监听;如只想监听 IPv4 所有地址,可写 -b 0.0.0.0。
8.2 开启认证(可选)¶
需要认证时,官方参数是 -u(用户名)与 -w(密码),不是 --user/--pass:
客户端连接时带上账号密码:
注意
目前只支持一组 user:pass,不支持多用户。认证信息在 SOCKS5 握手阶段以明文传输,建议仅在可信内网使用。
9. 性能调优(可选)¶
- 增大 UDP 缓冲区:quic-go 提示缓冲区过小时可调大(Linux):
- 更换 DNS:默认使用 Quad9(
9.9.9.9等),可改用性能更好的1.1.1.1:
10. 常见坑(Known Issues)¶
- v6 测试失败但服务正常 → 别用
curl -6 -x socks5h://...(socks5h 与 -6 不兼容),直接访问https://ipv6.icanhazip.com。 - QUIC 连不上/隧道反复断开 → 服务器 UDP 被限速,务必用
--http2。 - 只有单栈出口 → 检查 ExecStart 是否有
-F(禁 v4)或-S(禁 v6)。 - 服务起来但日志不写 → usque 日志输出到 stdout,被 journald 捕获,看
journalctl -u usque,不是usque.log。 - enroll 后 v6 失效 → 重新
./usque enroll刷新 config 中的 IPv6 地址(ZeroTrust 场景常见)。 - 日志出现
H3_NO_ERROR断开 → 空闲过久被远端断开是正常现象,产生出站流量后会自动重连;如需保持在线加--always-reconnect。 - 新连接速度偏慢 → 默认使用
reno拥塞控制,新连接会逐步提速,属正常现象。 - 被防火墙识别为 WARP/QUIC → 可用
-s更换 SNI(默认client-masque.cloudflareclient.com),例如-s zt-masque.cloudflareclient.com。