AnyTLS 是一種在 TLS 內執行的代理協定,它會填充每條連線的開頭,讓代理流量不再顯示那些通常會洩漏「TLS 套 TLS」的封包大小特徵。 你用密碼登入,伺服器驗證後,你的連線就在一條看似普通的 TLS 工作階段中傳送。AnyTLS 也會重複使用它的 TLS 連線,讓大多數新連線省下一次交握。

本文會說明 AnyTLS 是什麼、如何運作、和 Trojan 與 VLESS 相比定位如何,以及 anytls:// 連結長什麼樣子。

AnyTLS 是什麼?

AnyTLS 是一個相當年輕的協定。它在 2025 年隨著 anytls-go 出現,這是它的參考用戶端與伺服器,協定規格也放在這裡。不久之後,兩個廣泛使用的代理核心也加入了支援:sing-box 和 mihomo(目前大多數 Clash 類 App 背後的核心)。

它的目標很明確。像 Trojan 這樣的協定本來就藏在 TLS 裡,觀察者只會看到一條連往某台伺服器的加密工作階段。但當你透過這種代理打開 HTTPS 網站時,瀏覽器自己的 TLS 交握會在代理的 TLS 工作階段裡傳送。內層交握最初的幾則訊息有典型的大小和時序。由於加密只隱藏內容、不隱藏長度,這些特徵可能透過外層加密洩漏出來。這通常被稱為「TLS 套 TLS」問題。

AnyTLS 試圖模糊這些特徵。它會依照填充方案,把每條連線最初的幾個封包填充到特定大小,讓它們不再符合典型的 TLS 交握。

更難,但不是不可能。 填充讓代理流量更難被辨識,但並不能讓它無法偵測,而且每條新連線都會多出一些位元組。

AnyTLS 如何運作

當你手機上的 App 透過 AnyTLS 伺服器開啟一條連線時,會發生以下事情:

  1. 先建立 TLS。 你的用戶端向伺服器開啟一條普通的 TLS 連線,帶有伺服器名稱(SNI),也可以選用類似瀏覽器的指紋。在網路上看起來,這就和任何 HTTPS 瀏覽一樣。
  2. 驗證密碼。 在 TLS 內,用戶端送出密碼的雜湊值和一段填充資料。伺服器不認得這個密碼時,會直接關閉連線。
  3. 填充。 兩個方向最初的幾個封包,都會依照填充方案描述的長度被分割並填充。伺服器可以傳送自己的填充方案,用戶端會從下一條 TLS 連線開始採用。
  4. 你的連線。 用戶端請伺服器開啟一條通往目的地的連線,例如 example.com:443,並雙向轉送資料。
  5. 重複使用。 這條連線結束後,TLS 工作階段不會關閉,而是以閒置工作階段的狀態等待,下一條連線會直接使用它,而不是開啟新的。每個工作階段一次只承載一條連線,所以同時有多條連線時會開啟多個工作階段,之後再重複使用。

UDP(例如語音通話或 QUIC)會在同一條 TLS 連線內承載,這稱為 UDP over TCP。

填充方案

填充方案是一份簡短的規則清單:要填充幾個封包、每個封包多長,通常是一個隨機範圍。預設值來自 anytls-go。伺服器管理者可以更改它,用戶端會自動採用新的方案,你的裝置上不需要設定任何東西。

REALITY

一般的 AnyTLS 伺服器需要一張屬於自己網域的 TLS 憑證。sing-box 伺服器則可以讓 AnyTLS 搭配 REALITY,借用另一個真實網站的 TLS 憑證。使用 REALITY 時,你要設定伺服器的公鑰和 short ID,把被借用網站的名稱當作伺服器名稱,並選擇一個瀏覽器指紋,例如 chrome。如果你還不熟悉 REALITY,請見 VLESS + REALITY 是什麼?

優點與缺點

優點

  • 看起來就像 HTTPS。 外層是帶有真實伺服器名稱的普通 TLS,和一般網頁流量混在一起。
  • 隱藏「TLS 套 TLS」的封包大小。 填充正是針對讓 TLS 代理容易被看穿的那種特徵。
  • 交握更少。 重複使用閒置工作階段,讓大多數新連線省去 TLS 交握,在高延遲線路上很有幫助。
  • 設定簡單。 用戶端只需要密碼和一般的 TLS 設定。
  • 可搭配 REALITY(sing-box),所以不需要自己的憑證。

缺點

  • 年輕,支援還不普及。 提供 AnyTLS 的伺服器面板、服務商和 App,比 Trojan、Shadowsocks 或 VLESS 少。
  • 填充會耗用頻寬。 額外負擔不大,但每個新工作階段都會多送一些位元組。
  • UDP 走在 TCP 上。 UDP over TCP 可以運作,但掉封包時,TLS 連線裡的所有東西都得等待。像 Hysteria 2 這樣以 QUIC 為基礎的協定更能應付掉封包。
  • 沒有傳輸可選。 AnyTLS 直接跑在 TLS 上,不提供 WebSocket 或 gRPC,所以無法像 WebSocket 上的 Trojan 或 VLESS 那樣放在 CDN 後面。

AnyTLS 與相近協定比較

AnyTLS Trojan VLESS + REALITY Hysteria 2
執行於 TCP 上的 TLS TCP 上的 TLS TCP 上的 REALITY(TLS) UDP 上的 QUIC
登入方式 密碼 密碼 使用者 ID(UUID) 密碼
隱藏「TLS 套 TLS」 填充 否 搭配 Vision 流控 —
重複使用連線 是 否 否 是,一條 QUIC 連線
需要憑證 是,或使用 REALITY 是,或使用 REALITY 否 是(常用自簽憑證)
UDP UDP over TCP 經由 TLS 經由同一條連線 QUIC datagram

想看包含 Shadowsocks、VMess 和 SOCKS5 的更完整比較,請見代理協定比較。想進一步了解它最接近的協定,請讀 Trojan 代理是什麼?

AnyTLS 分享連結長什麼樣子

服務商通常以 anytls:// 連結提供 AnyTLS 伺服器,格式依照 anytls-go URI 格式:

anytls://password@host:port/?parameters#name

密碼會經過百分比編碼,# 後面的名稱只是標籤。沒有指定連接埠時,用戶端會使用 443。以下是一台密碼為 secret 的基本伺服器:

anytls://secret@anytls.example.com:443/?sni=anytls.example.com#Basic

常見的參數有:

參數 意義
sni TLS 伺服器名稱。
insecure 1 表示關閉憑證驗證。
alpn ALPN 清單,以逗號分隔並經過百分比編碼。
fp 瀏覽器指紋,例如 chrome。
hpkp 伺服器憑證的 SHA-256,用來釘選它。

一台使用自簽憑證、以釘選取代不驗證的伺服器:

anytls://secret@anytls.example.com:443/?sni=anytls.example.com&fp=chrome&hpkp=abababababababababababababababababababababababababababababababab#Pinned

在 Clash 或 Mihomo 訂閱中,同一台伺服器是一筆 type: anytls 的項目,帶有 password、sni,以及 udp: true 或 client-fingerprint 等選項。Clash 項目還可以用 idle-session-check-interval、idle-session-timeout 和 min-idle-session 調整工作階段的重複使用。

避免使用 insecure 模式。 insecure=1 會讓你與伺服器之間的任何人都能讀取你的流量。如果伺服器使用自簽憑證,請改用 hpkp 釘選它。

在 iPhone 上使用 AnyTLS

Potatso 是 iPhone 與 iPad 上的免費代理用戶端,支援 AnyTLS 的填充方案、連線重複使用、UDP over TCP、REALITY、ECH、憑證釘選和瀏覽器指紋。你可以從 anytls:// 連結、Clash 或 Mihomo 訂閱、Surge 設定加入伺服器,也可以手動輸入。

請照著 iPhone 使用 AnyTLS 教學一步步操作,或在 AnyTLS 參考文件中查看所有支援的設定。

常見問題

AnyTLS 是用來做什麼的?
AnyTLS 是一種代理協定,它把你的連線放在一條普通的 TLS 連線裡傳送並加以填充,讓流量更難被認出是代理。想要一種既是 TLS 代理、又能隱藏「TLS 套 TLS」封包大小特徵的協定時,大家會用它來取代 Trojan 或 VLESS。
AnyTLS 比 Trojan 好嗎?
沒有哪一個在所有情況下都比較好。兩者都在 TLS 內執行,也都以密碼驗證。AnyTLS 加入了填充和連線重複使用,讓代理的 HTTPS 更難被辨識;Trojan 則更早出現、更簡單,支援的伺服器和 App 也更多。
哪些伺服器和 App 支援 AnyTLS?
參考伺服器是 anytls-go。sing-box 和 mihomo 也支援 AnyTLS,sing-box 還能把它和 REALITY 搭配使用。在 iPhone 與 iPad 上,Potatso 可以透過 anytls:// 連結、Clash 或 Mihomo 訂閱、Surge 設定,或手動輸入的設定連上 AnyTLS 伺服器。
AnyTLS 支援 UDP 嗎?
支援。AnyTLS 會在它的 TLS 連線內承載 UDP,這稱為 UDP over TCP。在 Potatso 中,AnyTLS 伺服器的「UDP 轉送」預設為關閉,如果你的伺服器會轉送 UDP,請將它開啟。

其他語言版本: English · 简体中文 · 日本語 · Русский