Shadowrocket(小火箭)中的 VMess 與 VLESS 不能只修改 Type 就互相轉換。兩者都能使用 UUID 識別使用者,但協定的加密機制不同,傳輸方式與 TLS 設定也須分別確認。本文適合已備妥伺服器參數或訂閱的使用者,依序說明協定、身分、傳輸與安全層的設定方式,並整理連線失敗時的檢查方法。
VMess 與 VLESS 的主要差異
請依伺服器設定選擇協定,不要只看名稱或新舊。VMess 是具備驗證與協定層加密機制的代理協定;常見的 VLESS 設定則不在協定本身加密傳輸內容,通常須透過 TLS 等外層機制保護傳輸。兩者都能搭配不同傳輸方式,因此「VMess 就是 WebSocket」或「VLESS 就是 TLS」都不是正確的對應方式。
| 比較項目 | VMess | VLESS |
|---|---|---|
| 使用者身分 | 通常使用 UUID,且必須與伺服器端的使用者設定一致。 | 通常使用 UUID,且必須與伺服器端的使用者設定一致。 |
| 協定層加密 | 具備協定層加密機制,具體方式依伺服器端要求設定。 | 常見設定的 Encryption 為 none,傳輸保護需另外設定。 |
| TLS | 可另外使用,不等同於 VMess 本身的加密。 | 常見部署會使用 TLS 等外層保護,不能只憑協定名稱判定傳輸已加密。 |
| 傳輸方式 | 必須與伺服器端設定相符,例如 TCP 或 WebSocket。 | 同樣必須與伺服器端設定相符,不能直接沿用其他連線設定的傳輸參數。 |
| 切換方式 | 取得對應伺服器的完整設定後,再新增或匯入連線,而非只修改 Type。 | |
VMess 的 AEAD 驗證與內容加密彼此相關,但並非同一概念;AEAD 也不是 TLS 開關。若舊參數包含 AlterId,不要自行改成某個數值嘗試相容,應向現有服務的管理者確認目前有效的設定。VLESS 若另有 Flow 等參數,也須確認用戶端與伺服器端皆支援且設定相符,不宜參考其他連線設定自行填入。
UUID 是身分憑證,不是加密方式
UUID 用來讓伺服器辨識獲准使用服務的使用者。格式相同,不代表兩種協定可以共用同一組帳號設定:伺服器必須在對應協定的使用者清單中設定該身分,位址、連接埠及其他參數也都必須相符。複製 UUID 時多出空格或少一個字元,都會影響驗證結果。
判斷方式:分別確認身分、連接埠與 TLS
UUID 格式正確,只能表示文字格式看起來符合要求。接著仍須向伺服器端確認使用者是否有效、連接埠是否對應目前使用的協定,以及是否啟用 TLS;不要因為 UUID 沒變,就認為其他設定也能直接沿用。
- 請完整複製 UUID,不要將顯示名稱、訂閱 token 或一般登入密碼填入此欄位。
- 儲存前請檢查字串前後的空白、換行及字元是否遭替換,尤其是從其他 App 複製時。
- 請勿在公開截圖中顯示 UUID 或完整訂閱連結;排查問題時,只需保留欄位名稱與錯誤現象。
協定、Transport 與 TLS 各自控制什麼
可將一筆伺服器連線設定視為幾個彼此獨立的層次:VMess 或 VLESS 決定代理協定,TCP、WebSocket 等決定資料的傳輸方式,TLS 則決定是否在外層建立受保護的連線。WebSocket 本身不等於 TLS;啟用 TLS 與未啟用 TLS 的 WebSocket,對端要求也不同。
以既有的 WebSocket 加 TLS 設定為例,伺服器位址用來指定連線目標,Port 指向監聽連接埠,WebSocket 的 Host 和 Path 用來對應伺服器端路由,TLS 的 Server Name(SNI)則是在交握時宣告目標名稱。這些欄位可能使用同一個網域,也可能依部署方式分別指定;不要因為幾個欄位都涉及網域,就一律改填伺服器 IP。
啟用 TLS,並依伺服器端設定驗證憑證
建議若伺服器端提供 TLS,請填入指定的 Server Name,並維持憑證驗證。遇到憑證錯誤時,先檢查名稱、裝置時間與伺服器憑證,不要直接略過驗證。
適用情況:既有服務端明確要求使用 TLS 的 VMess 或 VLESS 設定
停用 TLS,僅依伺服器端明確要求連線
僅適用於伺服器端確實提供相應連線方式的設定。停用 TLS 不會自動啟用其他保護機制;尤其是 VLESS,Encryption 設為 none 不代表傳輸已加密。
適用情況:已確認保護範圍的受控網路測試,或伺服器端明確指定的部署
上述建議針對 TLS 設定,不代表所有既有連線都必須強制啟用 TLS。若伺服器端連接埠只接受未啟用 TLS 的連線,單方面在用戶端啟用 TLS 會導致交握失敗。同樣地,連接埠號碼為 443 只是常見部署方式,不能據此判定協定或加密狀態。
在 Add Server 中依什麼順序填寫
若有完整訂閱或分享設定,請先匯入再逐項確認,通常比手動重新輸入更能保留參數。手動設定時,從 Home 右上角的新增入口進入 Add Server,先選擇 Type,再依該類型顯示的欄位填寫。畫面欄位會因類型及 App 狀態而異,以下提供檢查原則,不代表每個欄位都會同時出現。
- 確認 Type。伺服器端使用 VMess 就選 VMess,使用 VLESS 就選 VLESS。類型不符時,即使後續欄位相同,也不能視為有效設定。
- 填寫位址與 Port。位址欄填入主機名稱或 IP,不要附加網頁路徑。連接埠請依伺服器端提供的值填寫;例如伺服器端指定 8443,就不能因為啟用 TLS 而自行改成 443。
- 填寫 UUID。請使用這筆連線設定對應的使用者身分。VMess 的加密選項,以及 VLESS 的 Encryption、Flow 等附加項目,都應以既有服務設定為準。
- 確認 Transport。若伺服器端使用 WebSocket,請確認 Host 與 Path;若使用其他傳輸方式,請勿沿用 WebSocket 欄位。
- 確認 TLS。檢查是否啟用、Server Name 是否正確,以及憑證驗證設定。即使位址使用 IP,伺服器端仍可能要求以網域格式填寫 Server Name。
- 儲存並選取連線。返回 Home,在 SERVER 清單中選取剛儲存的伺服器,再進行連線測試,避免測到先前選取的其他連線。
連線失敗時,依症狀縮小排查範圍
先確認實際使用的是哪一筆伺服器連線設定,再判斷問題發生在哪個層次。Home 中的連線開關已開啟,表示本機連線流程已啟動,不代表遠端驗證、TLS 交握及目標網頁存取都已成功。Connectivity Test 可作為初步檢查,但單次測試結果無法涵蓋所有網域、規則與 App。
UUID 相同,為什麼從 VMess 改成 VLESS 就無法連線?
先恢復原本的連線設定,不要繼續只修改 Type。向現有服務的管理者確認是否提供 VLESS 入口,並取得其連接埠、UUID、Transport 與 TLS 參數。兩種協定的交握方式不同,相同的 UUID 不會讓伺服器自動切換協定。
出現 TLS 相關錯誤時,應先檢查什麼?
開啟該伺服器的編輯頁面,先確認 TLS 設定是否與伺服器端一致,再檢查 Server Name、裝置系統時間及憑證網域。若位址使用 IP,仍須確認原設定要求的 SNI;不要以停用憑證驗證代替問題排查。
WebSocket 連線失敗時,UUID 正確還要檢查什麼?
依序檢查 Port、TLS、WebSocket Host 與 Path。若連線紀錄提供 HTTP 狀態碼,404 可能表示路徑或反向代理路由不符,403 則可能與存取限制有關;這些只能作為排查線索,不能單憑狀態碼判定 UUID 有誤。
Connectivity Test 有結果,網頁卻無法開啟?
先檢查 Home → Global Routing。Direct 不適合用來驗證所選代理的網頁存取;Config 則會受規則影響。可暫時切換至 Proxy,選取目標連線後重新開啟同一個網頁,測試完成再恢復原設定;若只有在 Config 下失敗,請繼續檢查規則與 DNS。
排查時一次只修改一項,並記錄修改前後的狀況。若同時更換協定、連接埠、SNI 與 Path,即使之後恢復連線,也無法確定真正原因。若連線由訂閱管理,請先保留問題資訊並確認更新後的參數,以免本機手動修改在下次更新訂閱時被覆蓋。
如何選擇與驗證,而非只看協定名稱
一般使用者可依序確認:現有服務支援哪些設定、Shadowrocket 中的參數能否完整對應,最後再比較實際使用結果。VLESS 的協定設計較精簡,不代表在任何網路環境下都更快;VMess 具備協定層加密,也不代表可以忽略 TLS、憑證或伺服器身分。延遲、壅塞、伺服器負載與傳輸方式都會影響使用體驗。
- 維持測試條件一致。在相同網路下存取同一個目標,避免把網路切換造成的差異誤認為協定差異。
- 區分路由與協定。Config 依規則選擇策略,Proxy 用於讓相關代理測試經由代理路徑,Direct 則用於直連。路由設定不會將 VMess 轉換成 VLESS。
- 檢查網域存取。若伺服器可連線但網域無法存取,請繼續檢查 DNS 與規則命中狀況,不要立刻重新填寫 UUID。
- 完成手動驗證後,再設定自動觸發。若要使用 On Demand,請前往 Settings → On Demand 檢查條件;自動觸發無法修正錯誤的伺服器參數。
結論:先保留完整設定,再比較連線結果
為 VMess 與 VLESS 分別保留獨立連線設定,逐項確認身分、傳輸與 TLS,並在相同條件下測試。若目前只有一組有效設定,請先確保它穩定運作,不要靠猜測欄位來嘗試另一種協定。