AnyTLS 伺服器架設:以 sing-box 驗證憑證及工作階段

AnyTLS 伺服器架設:以 sing-box 驗證憑證及工作階段

Marcus Reid
2026年10月11日· 7 分鐘讀完

AnyTLS 伺服器架設會建立以密碼認證的 TLS 服務,客戶端核實憑證後才傳送應用流量。本文以 兩部獲授權的 Ubuntu 24.04 LTS amd64 主機、sing-box 1.14.3 為基準,使用回環代理及獨立伺服器單元。步驟根據官方文件整理,作者並未完成端對端實測。[1]

關鍵要點

  • 憑證驗證與用戶密碼各有用途,不能互相代替。
  • 建立基準時保留預設填充及閒置工作階段設定。
  • 變更憑證資料後檢查新連接;改檔案不等於已撤銷存取。
  • 復原只處理本練習新增的服務、規則、憑證副本及客戶端設定。

何時適合進行 AnyTLS 伺服器架設?

你須能管理自有端點的完整生命週期,包括憑證簽發、私鑰存取、用戶、日誌、更新與停用。自建服務責任指南可協助分配工作。若主要需要日常公網出口,先比較 VPS 及託管 VPN 的維護要求。

Trojan 協議說明用作另一種 TLS 協議的背景,並不代表能匯入其設定。VPN 連接涵蓋範圍則區分單一應用代理與整部裝置的路由。本文只涵蓋同一核心的兩端,不延伸至 GUI、面板、REALITY 組合或相容性列表。

伺服器預留 TCP 24444,另一部客戶端預留回環 1080。透過現有 CA 支援的簽發和續期流程,取得自有域名有效憑證鏈及配對私鑰。主機本機位址可與外部映射不同;NAT 映射亦須在授權管理範圍內。

安裝前私下保存套件版本、服務啟用狀態、APT 來源、相關防火牆規則、位址及解析器設定。測試新的獨立 SSH 或供應商控制台連接。下列名稱與路徑必須未被使用;已有服務擁有它們時,先與負責人協調,不直接覆寫。

步驟 1:安裝穩定核心並準備獨立密碼

兩端先安裝 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]

步驟 2:建立 sing-box AnyTLS 設定及服務

以具權限的私密編輯器建立 /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 查閱有限近期日誌,分享前移除位址及秘密。私密檔案讀取失敗時,修正擁有者與權限,不擴大私鑰讀取範圍。

步驟 3:限制 TCP 存取並連接回環客戶端

沿用既有防火牆管理方式。只有 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 客戶端,不會捕獲整部裝置。現有網絡控制及其他代理應用程式維持原狀。

步驟 4:核對 AnyTLS TLS 憑證與失敗條件

在另一終端機經 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 命令描述成立即撤銷工作階段。

步驟 5:更新憑證、撤銷存取及復原

透過現有憑證流程續期,按原來受限權限安裝配對鏈與私鑰。以 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]

總結

  • 先核實 TLS 身份,才判讀密碼及應用失敗。
  • 分清閒置回收、新認證與既有工作階段中斷。
  • 僅撤回自己擁有的變更,復原服務及客戶端狀態。

常見問題(FAQ)

排查時為何仍要保留憑證驗證?

關閉它會移除正要建立的身份檢查。應修正名稱、信任鏈、時間或憑證部署,同時保持驗證。[4]

可以重用 Trojan 設定嗎?

不可以。應採用此實作對應的 AnyTLS 欄位;同樣使用 TLS 不代表不同協議的設定可互換。

移除用戶會立即斷開已有流量嗎?

只改檔案不能證明這點。本文重啟獨立服務,再用被移除憑證資料檢查新連接。

閒置工作階段是否等於失敗連接?

不是。未使用的池連接可以正常回收;先檢查之後能否建立健康的新工作階段,才判斷故障。[3]

應否抄用最少閒置數五?

本基準不需要。文件預設是零,保留省略,待有獨立理由及驗證後才調整。[3]

瀏覽器成功能驗證全部流量嗎?

不能。只確認被測瀏覽器路徑;其他應用程式、DNS、IPv6 及 UDP 要各自支援的設定及檢查。

續期後新憑證失敗怎麼辦?

停止練習,或復原仍有效的配對憑證與安全設定。核對新 TLS 及應用請求才恢復,不能還原已外洩私鑰。

免責聲明:只管理獲授權主機及網絡,遵守適用法例和政策。預期現象是讀者核對標準,並非作者測試紀錄或網絡可用性保證。

來源:

  1. sing-box 1.14.3 release — https://github.com/SagerNet/sing-box/releases/tag/v1.14.3
  2. sing-box AnyTLS inbound — https://sing-box.sagernet.org/configuration/inbound/anytls/
  3. sing-box AnyTLS outbound — https://sing-box.sagernet.org/configuration/outbound/anytls/
  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 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

AnyTLS 伺服器架設:以 sing-box 驗證憑證及工作階段 | AethoVPN