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-cache madison 找出核心為 1.14.3 的完整套件版本,取代 APT_VERSION_FOR_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 產生隨機密碼,安全保存並經授權的安全途徑傳送。不要將密碼放進 shell 參數、螢幕截圖、聊天或公開儲存庫。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。以可達的數字 IP 取代 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