開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


TUIC 伺服器架設包含兩端:伺服器提供受保護的 UDP 監聽,客戶端核實 TLS 身份並提交 UUID 及密碼。本文兩端使用 Ubuntu 24.04 LTS amd64、sing-box 1.14.3,驗證範圍是一個明確經代理發出的 TCP 請求。內容依據官方文件,作者並未完成端對端實測。[1]
關鍵要點
- 監聽成功不等於連接成功;UDP、TLS、認證與轉送要分開核對。
- 使用自己的域名與可信憑證,兩端均不啟用 0-RTT。
- 本機代理只綁定回環位址,不會接管整部裝置。
- 安裝套件或新增防火牆規則前,先保存可復原的基準資料。
你需要有權管理主機,並承擔憑證、用戶憑證、防火牆和更新的維護工作。自建服務的責任清單可協助確認負責人。如果只是需要日常公網出口,先比較 VPS 與託管 VPN 的維護需要,再決定是否自建端點。
Hysteria2 協議介紹只用來說明相鄰協議;不能更改設定檔名稱便當成 TUIC。VPN 連接範圍的基礎說明則解釋加密連接與實際涵蓋範圍的分別。
準備兩部獨立且獲授權的 Ubuntu 主機,沒有需要保留的 sing-box 安裝。預留 UDP 24443,確認封包能抵達伺服器;如涉及 NAT,只採用獲准管理的上游映射。透過現有 CA 簽發及續期程序,取得自有域名的有效憑證鏈與配對私鑰。示例域名、大寫位址及憑證欄位都必須換成真實值。
私下記錄套件、服務狀態、相關防火牆規則、位址、路由、DNS 及設定,並試用一條新的獨立 SSH 或供應商控制台連接。若下列套件來源、帳戶、服務單元或目錄已由其他服務使用,先與擁有者協調,不能覆寫。
兩端先從 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]
以具權限的私密編輯器建立 /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 查看有限數量的近期日誌。診斷可能含客戶端位址,須私下保留。綁定位址或檔案權限有問題時,修正相應設定,不要把私鑰開放予所有用戶讀取。
確認現有防火牆的管理者,保留管理連接。若 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 的應用程式使用它。保留裝置現有網絡控制,不為取得成功結果而更改或關閉其他代理應用程式。
透過 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]
沿用既有 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]
TUIC 外層使用 UDP/QUIC。TCP 結果不能驗證 UDP 連接埠、TLS 握手、用戶認證或轉送。
不足夠。本設定為同一用戶提供兩個欄位,客戶端須符合伺服器的 UUID 與密碼。[2][3]
實作文件提醒有重放風險,因此本文保留關閉設定,也不宣稱啟用後能改善你的工作負載。[2]
不能由編輯檔案推斷。本文檢查修改後設定並重啟獨立服務,再以已撤銷憑證核對新連接。
不能。結果只涵蓋該次瀏覽器請求;其他應用程式、DNS、IPv6 及 UDP 要另行設定及核對。
不可以。應使用所選 TUIC 實作的相應欄位,相鄰協議的設定檔不能證明與本伺服器相容。
保留獨立管理連接,停止自己啟動的程式,復原確切防火牆與客戶端設定,驗證基準狀態後才刪除私密檔案。
免責聲明:只管理自己擁有或獲授權的主機及網絡,遵守適用法例與網絡政策。步驟及預期核對項目並非作者部署紀錄或效能保證。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。