跳转至

客户端

tuic-client 是 TUIC 协议的客户端实现,提供本地 SOCKS5 服务与 TCP/UDP 端口转发。它保持精简,只包含一个可用 TUIC 客户端所需的核心能力;如需 HTTP 入站、负载均衡等功能,可自行实现或选用其它实现。

本页介绍客户端的安装、启动与配置。服务端请见服务端;最小配置与验证步骤见快速入门;完整示例与字段说明见配置编辑器。

安装

预编译的二进制文件可在 GitHub Releases 获取,也可以使用 Cargo 安装:

cargo install --git https://github.com/Itsusinn/tuic.git tuic-client

从源码构建需要 Rust 1.85.0 或更高版本以及 Git,详见快速入门。

启动

tuic-client -c /etc/tuic/client.toml

默认按需连接(lazy = true):仅在收到第一个代理请求时才建立 QUIC 连接;连接中断后默认自动重连。客户端在 local.server 暴露 SOCKS5 服务,将应用指向该地址即可,例如:

curl --socks5-hostname 127.0.0.1:1080 https://example.com

配置

配置文件格式根据扩展名判断:

  • TOML:.toml(推荐)
  • JSON5:.json、.json5(兼容旧配置)
  • YAML:.yaml、.yml

扩展名无法识别时客户端会报错退出;可用环境变量 TUIC_CONFIG_FORMAT(toml、json、json5、yaml、yml)显式指定格式。旧的 [relay] 段会在解析时自动迁移到顶层连接字段与 [tls],但新配置应使用下文的当前写法。

其中旧 [relay] 的传输调优字段按 [backend] mode 迁移:congestion_control、send_window、receive_window 会写入实际选中的后端([backend.quinn] 或 [backend.quiche]);initial_mtu、min_mtu、gso、pmtu 在 quiche 后端下没有对应字段,仍保留在 [backend.quinn],并会输出一条点名这些键的警告。

TLS 证书与 SNI

[tls] 下的三个开关由 quinn 后端(默认后端)实现,作用如下:

  • disable_sni = true:不在 ClientHello 中发送 SNI 扩展,主机名不再泄露给中间人;证书仍按 sni(未设置时按 server 的主机名)校验。若 server 是 IP 字面量且未设置 sni,请改用 sni 指定证书中的名称。
  • disable_native_certs = true:不使用平台信任库,改用内置的 Mozilla 根证书集合;配合 certificates 可只信任自建 CA。
  • certificates = ["/path/to/ca.pem"]:追加信任的 CA 证书文件(PEM,可含多个证书),用于校验自签或私有 CA 签发的服务端证书。文件不存在或解析不出证书时客户端会在启动时直接报错。

skip_cert_verify = true 仍然优先于上述配置:它完全不校验证书,仅供测试或明确可信的环境使用。

[backend] mode = "quiche" 时这三个 TLS 开关暂无对应实现:设置它们会输出一条警告说明其在 quiche 后端不生效,而不是静默忽略。

完整示例

完整且带注释的客户端配置由配置编辑器的预览区维护:在左侧表单填写参数,右侧实时生成配置,逐行悬浮或聚焦可查看字段说明,并同步显示校验结果与复制、下载入口。

打开客户端配置编辑器

编辑器默认输出 TOML,也可切换为 JSON 或 YAML,并可直接复制或下载。它只输出已接入运行逻辑的字段;ipstack_prefer、timeout、[proxy]、dual_stack 等预留字段不会被生成。

端口转发

除 SOCKS5 外,客户端还可以把本地端口直接转发到远端目标:

[local]
server = "127.0.0.1:1080"

[[local.tcp_forward]]
listen = "127.0.0.1:8080"
remote = "example.com:80"

[[local.udp_forward]]
listen = "127.0.0.1:5353"
remote = "8.8.8.8:53"
timeout = "60s"

默认情况下,服务端会阻止回环与私有目标;如需访问内网,需在服务端配置路由与访问控制。

许可证

本仓库代码依据 GNU General Public License v3.0 or later 发布。欢迎提交 Issue 与 Pull Request。