TUIC 服务端搭建:用 sing-box 配置认证、验证连接与恢复

TUIC 服务端搭建:用 sing-box 配置认证、验证连接与恢复

Marcus Reid
2026年10月11日· 7 分钟阅读

TUIC 服务端搭建需要一个受保护的 UDP 监听端,以及验证服务器 TLS 身份、提交 UUID 与密码的客户端。本文双端均采用 Ubuntu 24.04 LTS amd64 与 sing-box 1.14.3,只检查一个明确经过代理的 TCP 请求。步骤依据列出的官方文档编写,作者未进行完整端到端实测。[1]

关键要点

  • 进程监听只是起点,UDP、TLS、认证和转发需要分别检查。
  • 使用自有域名与受信证书,双端保持关闭 0-RTT。
  • 本地代理只监听回环地址,不接管整个设备。
  • 安装软件和开放端口前,记录可恢复的原始状态。

谁适合进行 TUIC 服务端搭建?

适合能够维护自有主机证书、凭证、防火墙和更新的读者。先按自建维护责任清单确定负责人。如果只是需要日常公网出口,先比较 VPS 与托管 VPN 的维护负担,再决定是否增加服务器。

Hysteria2 协议说明介绍的是相邻协议,不能把其配置改名后当作 TUIC 使用。VPN 基础与连接覆盖说明可帮助区分加密连接与实际覆盖范围。

准备两台独立、获得授权的 Ubuntu 主机,且没有需要保留的 sing-box 安装。预留 UDP 24443,确认服务器能接收该流量;需要 NAT 时,只使用获得授权的上游映射。通过现有 CA 签发和续期流程,取得自有域名的有效证书链及匹配私钥。示例域名、大写地址和凭证均须替换,不能直接部署。

私下保存软件包清单、服务状态、相关防火墙规则、地址、路由、DNS 和配置。测试一条独立的新 SSH 或服务商控制台连接。如果下文的软件源、用户、服务单元或路径已被其他服务使用,先停止并协调所有权,不覆盖现有配置。

步骤 1:安装稳定版并准备私密文件

双端先从 Ubuntu 受信仓库安装前置工具,再添加官方稳定 APT 源。将 APT_VERSION_FOR_1.14.3 替换为 apt-cache madison 列出的、对应核心 1.14.3 的完整软件包版本;没有该版本就停止。不改装 sing-box-beta,不执行未经审阅的安装脚本。[5]

sudo apt-get update
sudo apt-get install curl ca-certificates openssl
sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc
sudo chmod 644 /etc/apt/keyrings/sagernet.asc
sudo tee /etc/apt/sources.list.d/sagernet.sources >/dev/null <<'REPO'
Types: deb
URIs: https://deb.sagernet.org/
Suites: *
Components: *
Enabled: yes
Signed-By: /etc/apt/keyrings/sagernet.asc
REPO
sudo apt-get update
apt-cache madison sing-box
sudo apt-get install sing-box='APT_VERSION_FOR_1.14.3' curl ca-certificates openssl
sing-box version

确认双端可执行文件都报告 1.14.3。保留可恢复的软件包或官方发行文件,后续升级前查看发行说明和安全公告。软件包可能提供默认服务单元;先检查,不为本练习启动或改造已有服务。

服务端创建独立身份,并从私密来源复制已经签发的证书。以下命令假定名称和路径尚未占用。[4]

sudo useradd --system --user-group --no-create-home --shell /usr/sbin/nologin sbtuic
sudo install -d -o root -g sbtuic -m 750 /etc/sing-box-tuic
sudo install -o root -g sbtuic -m 640 /PRIVATE/SOURCE/fullchain.pem /etc/sing-box-tuic/fullchain.pem
sudo install -o root -g sbtuic -m 640 /PRIVATE/SOURCE/privkey.pem /etc/sing-box-tuic/privkey.pem

在私密终端用 sing-box generate uuid 生成 UUID,用 openssl rand -base64 32 生成随机密码,安全保存并通过授权的安全通道传递。不要把密码放入命令参数、截图、聊天或公开仓库。UUID 用于标识该用户,不能替代配置中的密码。[2]

步骤 2:设置 sing-box TUIC 配置与独立服务

用私密的提权编辑器创建 /etc/sing-box-tuic/config.json。SERVER_LOCAL_IPV4 必须换成实际分配给服务器的 IPv4 地址,而不是外部 NAT 地址。两个 JSON 的 UUID 和密码必须一致。配置文件属主设为 root:sbtuic,权限设为 640。

{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {
        "type": "local",
        "tag": "system-dns"
      }
    ]
  },
  "inbounds": [
    {
      "type": "tuic",
      "tag": "tuic-in",
      "listen": "SERVER_LOCAL_IPV4",
      "listen_port": 24443,
      "users": [
        {
          "name": "reader-test",
          "password": "REPLACE_WITH_PRIVATE_PASSWORD",
          "uuid": "REPLACE_WITH_GENERATED_UUID"
        }
      ],
      "tls": {
        "enabled": true,
        "certificate_path": "/etc/sing-box-tuic/fullchain.pem",
        "key_path": "/etc/sing-box-tuic/privkey.pem"
      },
      "zero_rtt_handshake": false
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "final": "direct",
    "default_domain_resolver": "system-dns"
  }
}

入站要求 TLS 和用户认证,direct 转发与认证是不同环节。type: local 的 DNS 服务器使用服务器操作系统的解析器;default_domain_resolver 明确指定 direct 拨号时的域名解析,不改变客户端系统 DNS。[2][6]

把以下单元保存为 /etc/systemd/system/sing-box-tuic.service,属主 root,权限 644。它以非特权身份读取本练习的配置和证书。24443 不需要低端口绑定能力。

[Unit]
Description=Isolated sing-box tuic reader exercise
After=network-online.target
Wants=network-online.target

[Service]
User=sbtuic
Group=sbtuic
ExecStart=/usr/bin/sing-box run -c /etc/sing-box-tuic/config.json
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

先以实际服务身份检查配置,再启动。配置检查成功只说明配置可接受,不证明远端握手或公网转发可用。

sudo -u sbtuic /usr/bin/sing-box check -c /etc/sing-box-tuic/config.json
sudo systemctl daemon-reload
sudo systemctl start sing-box-tuic.service
sudo systemctl status sing-box-tuic.service --no-pager
sudo ss -lnup

使用 sudo journalctl -u sing-box-tuic.service -n 30 --no-pager 查看有限条数的近期日志。日志可能包含客户端地址,应私下保存。绑定或权限失败时,修正地址及文件访问;不要把私钥设成所有人可读。

步骤 3:只开放所需 UDP 路径并配置客户端

确认当前防火墙由谁管理并保留管理通道。仅当 UFW 已启用且负责策略时,允许测试客户端可见公网地址到服务器本地地址 UDP 24443 的入站流量,注释为 tuic-test;服务商侧需要规则时也采用相同的最小范围。记录新增规则以便删除,不启用、重置或清空共享防火墙。

仅适用于上述 UFW 条件,先替换两个地址占位值:

sudo ufw allow proto udp from CLIENT_PUBLIC_IP to SERVER_LOCAL_IPV4 port 24443 comment 'tuic-test'

开放 TCP 24443 不等于开放 TUIC 外层的 QUIC/UDP。下文 network: tcp 限制本例允许的应用流量,并不会把服务端监听改为 TCP。[3]

在客户端私下创建 tuic-client.json。把 SERVER_PUBLIC_IPV4 换成可达的数字地址,把 tuic.example.com 换成证书真实域名。连接数字 IP、验证域名可分别检查可达性与 TLS 身份;保持 insecure 为 false。[4]

{
  "log": {
    "level": "info"
  },
  "inbounds": [
    {
      "type": "mixed",
      "tag": "local-in",
      "listen": "127.0.0.1",
      "listen_port": 1080
    }
  ],
  "outbounds": [
    {
      "type": "tuic",
      "tag": "tuic-out",
      "server": "SERVER_PUBLIC_IPV4",
      "server_port": 24443,
      "password": "REPLACE_WITH_PRIVATE_PASSWORD",
      "tls": {
        "enabled": true,
        "server_name": "tuic.example.com",
        "insecure": false
      },
      "uuid": "REPLACE_WITH_GENERATED_UUID",
      "zero_rtt_handshake": false,
      "network": "tcp"
    }
  ],
  "route": {
    "final": "tuic-out"
  }
}
chmod 600 tuic-client.json
sing-box check -c tuic-client.json
sing-box run -c tuic-client.json

让该前台进程保持运行,在另一终端发起请求。只有明确指向 127.0.0.1:1080 的应用使用此代理。保留设备现有网络控制,不为制造成功而更改或关闭其他代理应用。

步骤 4:验证 TUIC 身份认证及分层失败条件

通过 SOCKS 进行远端域名解析,发送一个有限时长的请求:

curl --noproxy "" --proxy socks5h://127.0.0.1:1080 --connect-timeout 5 --max-time 20 https://example.com/

收到响应只证明该请求经过所配路径,不证明所有应用、DNS、IPv6 或应用 UDP 已覆盖。若检查出口地址,单独创建浏览器配置,明确使用本地 HTTP 代理,再打开显示该浏览器请求可见 IP 的工具。检查后恢复该浏览器配置原来的代理设置;浏览器结果与上述命令是两份不同证据。

使用私密客户端配置副本进行反例检查。每次只用 Ctrl-C 停止自己的前台客户端,修改一个条件后重新启动并发起新请求,防止旧的已认证连接掩盖错误。

读者检查预期现象结果不符时的处理
地址、域名、UUID 和密码都正确限时应用请求完成分别检查本地监听、服务日志、DNS 和目标服务
仅改 UUID,再仅改密码新请求被拒绝或失败确认载入改后的文件,1080 没有旧客户端提供服务
仅把 TLS 名称改成无关域名证书校验阻止连接核对证书名称,不启用 insecure
在隔离测试策略中仅移除本练习 UDP 许可确实阻断该路径时,新连接失败其他允许规则可能仍放行,核对策略所有权
删除用户、检查配置、重启本单元被移除凭证的新连接失败核对有效文件、单元命令和新客户端身份
保留有效用户并重启新的授权请求恢复比较私密基线和近期日志

这些是读者预期检查,不是作者测试结果。UDP 检查后先恢复被删除的原规则,确认管理通道正常;不在共享网络插入宽泛拒绝规则。无法安全隔离时,将该检查记为未执行。

双端均保持 zero_rtt_handshake: false。实现文档建议关闭存在重放风险的优化;更换拥塞控制也不能证明速度或抗封锁能力提高。[2][3]

步骤 5:续期证书、撤销用户并恢复基线

通过既有 CA 流程续期,按原受限属主和权限安装新的证书链及匹配私钥,检查配置,只重启 sing-box-tuic.service,再用授权身份建立新请求。核对实际提供的身份与有效期是否符合目标证书;进程重启本身不算成功。文档虽说明文件重载,本文采用显式重启来明确验证点。[4]

凭证泄露时,删除或替换受影响用户并重启此独立单元;重启会中断该单元的现有连接。不能从备份恢复已泄露密码。确认新用户成功、旧用户失败后,才考虑运行 sudo systemctl enable sing-box-tuic.service 启用开机启动。

停用时停止并禁用本单元,停止自己的客户端,仅删除记录中的本练习防火墙和服务商许可。恢复浏览器代理,保留必要私密诊断,再移除本练习的单元、证书和配置。运行 sudo systemctl daemon-reload,检查端口,验证原管理通道和 DNS。只有基线证明软件包、APT 文件由本练习新增且无人使用时才删除。恢复失败就停止后续实验,使用独立恢复通道。

用 sudo openssl x509 -in /etc/sing-box-tuic/fullchain.pem -noout -subject -issuer -dates 查看部署文件的身份和有效期。这只是本地文件信息,必须结合新的 TLS 验证请求;读取文件本身不能证明远端进程实际提供哪张证书。

删除练习文件后,只有确认没有剩余进程、服务单元或文件依赖其 UID 或组时,才移除本练习新建的 sbtuic 账号。使用 sudo userdel sbtuic,不强制删除,也不连带删除家目录;专用组若仍存在且没有其他成员或依赖,再用 sudo groupdel sbtuic 移除。保留原有身份,所有权不明时停止。无需保留时删除自己的 tuic-client.json 和反例副本;必要备份仍须私密保存,不重新启用已撤销凭证。[7][8]

总结

  • 双端核心、地址、凭证与经过验证的 TLS 身份必须匹配。
  • 通过受控失败条件下的新请求检查,不只看服务状态。
  • 撤销旧访问,并在停用后验证原网络状态。

常见问题(FAQ)

为什么 TCP 端口检查成功,TUIC 仍然失败?

TUIC 外层使用 UDP/QUIC。TCP 结果不能验证对应 UDP 端口、TLS 握手、用户认证或实际转发。

UUID 能替代密码吗?

不能。本配置为同一用户同时设置两个字段,客户端必须匹配服务端配置的 UUID 和密码。[2][3]

为什么保持关闭 0-RTT?

实现文档提醒存在重放风险。本文保持关闭,不声称开启后能改善你的工作负载。[2]

删除用户会立即断开旧连接吗?

不能仅凭文件修改推断。本文检查新文件并重启独立服务,再用被删除凭证检查新连接。

浏览器 IP 结果能证明整机覆盖吗?

不能。它只描述被测试的浏览器请求,其他应用、DNS、IPv6 和 UDP 需要分别配置并验证。

能把 Hysteria2 配置粘贴到这个客户端吗?

不能。应使用所选 TUIC 实现的匹配字段;相邻协议的配置不能证明与本服务器兼容。

练习失败后应该先恢复什么?

先保留独立管理通道,停止自己启动的进程,恢复确切的防火墙和客户端设置,再验证基线后删除私密文件。

免责声明:仅管理自己拥有或获授权的主机与网络,遵守适用法律和网络政策。本文步骤及预期检查不代表作者部署记录或性能保证。

来源:

  1. sing-box 1.14.3 release — https://github.com/SagerNet/sing-box/releases/tag/v1.14.3
  2. sing-box TUIC inbound — https://sing-box.sagernet.org/configuration/inbound/tuic/
  3. sing-box TUIC outbound — https://sing-box.sagernet.org/configuration/outbound/tuic/
  4. sing-box TLS configuration — https://sing-box.sagernet.org/configuration/shared/tls/
  5. sing-box package installation and service management — https://sing-box.sagernet.org/installation/package-manager/
  6. sing-box local DNS server and route — https://sing-box.sagernet.org/configuration/dns/server/local/
  7. Ubuntu Noble userdel manual — https://manpages.ubuntu.com/manpages/noble/man8/userdel.8.html
  8. Ubuntu Noble groupdel manual — https://manpages.ubuntu.com/manpages/noble/man8/groupdel.8.html

Sources checked 2026 年 10 月 11 日。

延伸阅读:

开启 3 天免费试用

注册即可免费体验全部高级功能。

*仅限新用户;每位用户只能获得一次试用。

TUIC 服务端搭建:用 sing-box 配置认证、验证连接与恢复 | AethoVPN