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


AnyTLS 伺服器架設會建立以密碼認證的 TLS 服務,客戶端核實憑證後才傳送應用流量。本文以 兩部獲授權的 Ubuntu 24.04 LTS amd64 主機、sing-box 1.14.3 為基準,使用回環代理及獨立伺服器單元。步驟根據官方文件整理,作者並未完成端對端實測。[1]
關鍵要點
- 憑證驗證與用戶密碼各有用途,不能互相代替。
- 建立基準時保留預設填充及閒置工作階段設定。
- 變更憑證資料後檢查新連接;改檔案不等於已撤銷存取。
- 復原只處理本練習新增的服務、規則、憑證副本及客戶端設定。
你須能管理自有端點的完整生命週期,包括憑證簽發、私鑰存取、用戶、日誌、更新與停用。自建服務責任指南可協助分配工作。若主要需要日常公網出口,先比較 VPS 及託管 VPN 的維護要求。
Trojan 協議說明用作另一種 TLS 協議的背景,並不代表能匯入其設定。VPN 連接涵蓋範圍則區分單一應用代理與整部裝置的路由。本文只涵蓋同一核心的兩端,不延伸至 GUI、面板、REALITY 組合或相容性列表。
伺服器預留 TCP 24444,另一部客戶端預留回環 1080。透過現有 CA 支援的簽發和續期流程,取得自有域名有效憑證鏈及配對私鑰。主機本機位址可與外部映射不同;NAT 映射亦須在授權管理範圍內。
安裝前私下保存套件版本、服務啟用狀態、APT 來源、相關防火牆規則、位址及解析器設定。測試新的獨立 SSH 或供應商控制台連接。下列名稱與路徑必須未被使用;已有服務擁有它們時,先與負責人協調,不直接覆寫。
兩端先安裝 Ubuntu 的 curl、ca-certificates 及 openssl,再加入官方穩定版 APT 來源。從列表找出核心為 1.14.3 的完整套件版本,取代佔位值。它刻意不是有效套件版本;若目標版本不存在便停止,不自行改用測試版。[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,保留可復原套件或官方發行檔案,升級前檢查發行及安全資訊。查閱套件附帶的預設單元,不啟動或挪用其他運作中的服務。
在伺服器建立獨立帳戶,從受保護的真實位置複製已簽發憑證鏈及私鑰,取代 /PRIVATE/SOURCE/。私鑰不用傳到客戶端。[4]
sudo useradd --system --user-group --no-create-home --shell /usr/sbin/nologin sbanytls
sudo install -d -o root -g sbanytls -m 750 /etc/sing-box-anytls
sudo install -o root -g sbanytls -m 640 /PRIVATE/SOURCE/fullchain.pem /etc/sing-box-anytls/fullchain.pem
sudo install -o root -g sbanytls -m 640 /PRIVATE/SOURCE/privkey.pem /etc/sing-box-anytls/privkey.pem
在私密終端機執行 openssl rand -base64 32 產生獨立密碼,安全保管並經獲准安全途徑傳送。把密碼貼入私密編輯器,不放進 shell 參數;不要分享帶有可重用憑證資料的設定檔、截圖或日誌。users.name 是用戶標籤,密碼才是認證秘密。[2]
以具權限的私密編輯器建立 /etc/sing-box-anytls/config.json。將 SERVER_LOCAL_IPV4 換成主機實際獲分配的 IPv4,兩端填入相同密碼。檔案擁有者 root:sbanytls,權限 640。
{
"log": {
"level": "info"
},
"dns": {
"servers": [
{
"type": "local",
"tag": "system-dns"
}
]
},
"inbounds": [
{
"type": "anytls",
"tag": "anytls-in",
"listen": "SERVER_LOCAL_IPV4",
"listen_port": 24444,
"users": [
{
"name": "reader-test",
"password": "REPLACE_WITH_PRIVATE_PASSWORD"
}
],
"tls": {
"enabled": true,
"certificate_path": "/etc/sing-box-anytls/fullchain.pem",
"key_path": "/etc/sing-box-anytls/privkey.pem"
}
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct",
"default_domain_resolver": "system-dns"
}
}
省略 padding_scheme 以使用實作預設。自訂填充不屬本文範圍,也不能據此宣稱在特定網絡隱形或可靠。伺服器的 type: local DNS 伺服器與 default_domain_resolver 指明目的域名解析,不改客戶端系統解析器。[2][6]
將獨立單元存為 /etc/systemd/system/sing-box-anytls.service,由 root 擁有,權限 644。它不需要低連接埠權限,也不存取用戶家目錄。
[Unit]
Description=Isolated sing-box anytls reader exercise
After=network-online.target
Wants=network-online.target
[Service]
User=sbanytls
Group=sbanytls
ExecStart=/usr/bin/sing-box run -c /etc/sing-box-anytls/config.json
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
sudo -u sbanytls /usr/bin/sing-box check -c /etc/sing-box-anytls/config.json
sudo systemctl daemon-reload
sudo systemctl start sing-box-anytls.service
sudo systemctl status sing-box-anytls.service --no-pager
sudo ss -lntp
設定檢查通過或單元 active 並不能驗證 TLS、密碼接受或轉送。以 sudo journalctl -u sing-box-anytls.service -n 30 --no-pager 查閱有限近期日誌,分享前移除位址及秘密。私密檔案讀取失敗時,修正擁有者與權限,不擴大私鑰讀取範圍。
沿用既有防火牆管理方式。只有 UFW 已啟用並管理策略時,才允許測試客戶端可見公網位址至伺服器本機位址 TCP 24444,註解 anytls-test。供應商如需規則,亦採相同最小範圍。記錄精確新增項目,保留管理通道,不重設共用防火牆。
符合上述條件才使用以下 UFW 命令,先替換兩個位址:
sudo ufw allow proto tcp from CLIENT_PUBLIC_IP to SERVER_LOCAL_IPV4 port 24444 comment 'anytls-test'
私下建立 anytls-client.json。以可達數字位址取代 SERVER_PUBLIC_IPV4,以憑證真實域名取代 anytls.example.com。客戶端連接所選 IP,同時驗證憑證名稱;保留 insecure: false。[4]
{
"log": {
"level": "info"
},
"inbounds": [
{
"type": "mixed",
"tag": "local-in",
"listen": "127.0.0.1",
"listen_port": 1080
}
],
"outbounds": [
{
"type": "anytls",
"tag": "anytls-out",
"server": "SERVER_PUBLIC_IPV4",
"server_port": 24444,
"password": "REPLACE_WITH_PRIVATE_PASSWORD",
"tls": {
"enabled": true,
"server_name": "anytls.example.com",
"insecure": false
}
}
],
"route": {
"final": "anytls-out"
}
}
示例省略閒置工作階段選項。出站文件列出的檢查間隔與閒置逾時預設均為 30 秒,最少閒置工作階段為零;結構範例中的五並非預設。週期檢查才處理逾時,因此不能當成精確的應用斷線期限。[3]
chmod 600 anytls-client.json
sing-box check -c anytls-client.json
sing-box run -c anytls-client.json
保留前台客戶端執行。mixed 只在回環接受明確設定的 HTTP 或 SOCKS 客戶端,不會捕獲整部裝置。現有網絡控制及其他代理應用程式維持原狀。
在另一終端機經 SOCKS 遠端解析名稱,發出有時限的請求:
curl --noproxy "" --proxy socks5h://127.0.0.1:1080 --connect-timeout 5 --max-time 20 https://example.com/
請求完成只確認該應用的測試路徑。要核對瀏覽器出口,可用獨立設定檔明確指定回環 HTTP 代理,查看該瀏覽器請求可見的 IP,之後復原原來代理。兩項結果都不涵蓋其他應用程式、DNS、IPv6 或 UDP。
反例測試使用私密設定副本。只按 Ctrl-C 停止自己啟動的前台客戶端,以選定檔案重啟後再發出新請求,避免已認證的連接池掩蓋錯誤密碼或名稱。
| 讀者核對項目 | 預期現象 | 判讀及復原 |
|---|---|---|
| 密碼與憑證名稱正確 | 新請求完成 | 私下記錄請求及時間,不宣稱吞吐量 |
| 只更改密碼 | 新連接不能認證 | 確認有效檔案,沒有舊程式監聽 |
| 只改為無關憑證名稱 | TLS 驗證失敗 | 查核憑證鏈及名稱,保留驗證 |
| 只停止本伺服器單元 | 新請求失敗 | 表面成功時追查真正服務的程式 |
| 客戶端閒置後再發請求 | 服務健康時能建立新工作階段 | 閒置池清理本身不是服務故障 |
| 移除用戶、檢查檔案並重啟單元 | 舊憑證資料的新連接失敗 | 重啟亦中斷本單元現有連接 |
| 保留授權用戶或加入新用戶後重啟 | 新請求恢復 | 失敗時復原安全設定,不還原外洩密碼 |
表格列出讀者驗證標準,並非測量結果。閒置核對須等待超過一次檢查間隔,配合有限的兩端日誌,不憑單一時間戳推斷精確壽命。若應用持有長時間請求,應另行觀察,不能視作閒置池工作階段。[3]
編輯檔案不保證即時移除用戶。本獨立單元刻意沒有 ExecReload;先檢查設定,再用 systemctl restart 建立明確中斷點。不要將通用 reload 命令描述成立即撤銷工作階段。
透過現有憑證流程續期,按原來受限權限安裝配對鏈與私鑰。以 sbanytls 檢查設定,只重啟本單元,再用新連接核實實際身份及到期日。TLS 文件有說明檔案重新載入,但本文採明確重啟與驗證,不把換檔案當成成功。[4]
密碼外洩時,更換受影響用戶密碼並重啟,打斷舊連接。確認新憑證資料有效、舊資料遭拒後,才考慮 sudo systemctl enable sing-box-anytls.service。其後在授權維護時段重新啟動主機並測試新請求。
停用練習時停止並停用單元,停止前台客戶端,只移除記錄中的本練習防火牆及供應商許可。復原瀏覽器代理,保存必要私密診斷,再移除本練習單元、設定與憑證副本,執行 sudo systemctl daemon-reload。檢查監聽及原管理、DNS 路徑。套件或 APT 來源只有在基準資料證明本次新增且無其他依賴時才移除。復原未確認就停止更改,使用獨立管理通道。
以 sudo openssl x509 -in /etc/sing-box-anytls/fullchain.pem -noout -subject -issuer -dates 查閱部署檔案的身份及有效期。這只反映本機檔案,須配合新的 TLS 驗證請求;讀取檔案本身不能證明遠端程式實際提供的憑證。
移除練習檔案後,先確認沒有剩餘程式、服務單元或檔案依賴該 UID 或群組,才刪除本練習新建的 sbanytls 帳戶。使用 sudo userdel sbanytls,不強制刪除或連帶移除家目錄;專用群組若仍存在且沒有其他成員或依賴,才用 sudo groupdel sbanytls 移除。保留原有身份,擁有權不明便停止。不再需要時刪除自己建立的 anytls-client.json 及反例副本;必要備份仍須私密保存,不重新啟用已撤銷憑證資料。[7][8]
關閉它會移除正要建立的身份檢查。應修正名稱、信任鏈、時間或憑證部署,同時保持驗證。[4]
不可以。應採用此實作對應的 AnyTLS 欄位;同樣使用 TLS 不代表不同協議的設定可互換。
只改檔案不能證明這點。本文重啟獨立服務,再用被移除憑證資料檢查新連接。
不是。未使用的池連接可以正常回收;先檢查之後能否建立健康的新工作階段,才判斷故障。[3]
本基準不需要。文件預設是零,保留省略,待有獨立理由及驗證後才調整。[3]
不能。只確認被測瀏覽器路徑;其他應用程式、DNS、IPv6 及 UDP 要各自支援的設定及檢查。
停止練習,或復原仍有效的配對憑證與安全設定。核對新 TLS 及應用請求才恢復,不能還原已外洩私鑰。
免責聲明:只管理獲授權主機及網絡,遵守適用法例和政策。預期現象是讀者核對標準,並非作者測試紀錄或網絡可用性保證。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。