先了解 Android 上的 VpnService 接管方式

Android 版 Clash 類客戶端通常會透過系統提供的 VpnService 建立本機虛擬網路介面。應用程式啟動服務後,Android 會將符合範圍的網路流量送入這個虛擬介面,再由客戶端核心依照設定中的規則、策略群組與節點處理連線。狀態列出現鑰匙或 VPN 圖示,表示系統正在使用 VPN 通道,並不代表手機直接連線到傳統企業 VPN 伺服器。

這套流程可以分成三層理解。第一層由 Android 系統負責將應用程式流量交給虛擬介面;第二層由 Clash 或 mihomo 核心讀取目標網域、目標位址、連接埠等資訊並比對規則;第三層才是依據 DIRECT、代理節點、拒絕連線或其他策略結果建立實際連線。訂閱提供的節點與規則設定決定第三層如何運作,VpnService 則負責第一層的流量入口。

Android 同一個使用者空間通常只能同時保留一個主要 VPN 服務。若系統已連線至公司 VPN、其他代理客戶端、防火牆或依賴 VpnService 的過濾工具,再啟動 Clash 客戶端時,舊服務可能會被停止,或新服務無法取得 VPN 權限。遇到「點擊啟動後立即停止」時,應先檢查狀態列與系統的 VPN 頁面,而不是反覆更新訂閱。

VpnService 與一般系統代理的差異

一般 HTTP 系統代理仰賴應用程式主動遵循代理設定,部分應用程式、UDP 流量或自行實作網路堆疊的軟體可能會繞過它。VpnService 從系統網路層接收納入範圍的流量,涵蓋範圍通常更完整,因此 Android 客戶端多半採用這種方式。部分客戶端介面會將它稱為 VPN 模式、TUN 模式或服務模式,具體名稱雖然不同,但判斷重點都是:是否建立了 Android 虛擬介面,以及哪些應用程式被納入介面範圍。

這裡的 Android VpnService 與桌面端手動啟用 TUN 並不完全相同。桌面系統可能需要安裝虛擬網卡、調整路由或提升權限;Android 則透過公開的 VPN API 完成授權。使用者首次啟動時看到系統確認對話框屬於正常的權限流程,只有確認後客戶端才能建立通道。

首次啟動時需要確認的關鍵設定

匯入訂閱後,不宜立即將所有異常歸因於省電策略。先確保設定可以載入、節點能夠連線、代理群組已完成選擇,再處理背景常駐。一套穩定的排查順序,可以將設定錯誤與系統限制分開。

  1. 確認設定處於啟用狀態。設定清單中可能同時儲存多個訂閱或本機 YAML 檔案。更新成功不代表新設定已切換為目前使用的設定,應檢查啟用標記、更新時間與設定名稱。
  2. 檢查策略群組選擇。設定中的代理群組可能預設選取無法使用的節點,也可能處於自動測速狀態。先選擇一個已完成延遲測試且能建立連線的節點,再測試網頁。
  3. 接受系統 VPN 授權。首次啟動通常會跳出連線要求。若取消對話框,客戶端可以正常開啟介面,卻無法接管系統流量。
  4. 確認執行模式。規則模式會依照設定中的規則分流;全域模式通常會讓大部分流量進入指定代理;直連模式則會繞過代理。測試時應記錄目前模式,避免在直連模式下誤判節點失效。
  5. 查看執行日誌。設定解析失敗、DNS 請求異常、節點握手失敗與網路無法連線通常會留下不同日誌。日誌比單純觀察網頁能否開啟更接近故障位置。

如何設定應用程式分流範圍

不少 Android 客戶端支援「僅代理所選應用程式」或「排除所選應用程式」。前者是白名單思路,只有勾選的應用程式會進入 VpnService;後者是黑名單思路,被勾選的應用程式則維持直連。兩種模式不要只憑名稱猜測,修改前應閱讀目前頁面的說明,並使用一個瀏覽器進行驗證。

支付、銀行、區域網路裝置控制、投放與智慧家庭應用程式是否需要排除,應依實際網路需求決定。排除應用程式後,其連線不會再經過 Clash 規則,因此在日誌中看不到對應請求是預期行為。若瀏覽器可以存取而某個應用程式始終無法連線,應用程式分流清單是優先檢查項目。

鎖定螢幕後斷線的常見原因

「螢幕亮起時正常,鎖定螢幕幾分鐘後無法連線,解鎖並開啟客戶端後又恢復」通常表示設定本身可以運作,但背景服務受到限制、程序被回收,或待機期間網路發生切換。Android 原生 Doze 機制、手機製造商的電量管理、背景啟動限制與記憶體清理都可能參與其中。

Doze 會在裝置靜止、螢幕熄滅並符合條件後,限制背景活動與網路存取。前景服務通常比一般背景程序更不容易被停止,因此客戶端啟動後通常會顯示持續通知。若使用者關閉通知權限、將通知頻道設為不允許,部分系統仍能執行服務,但也有系統會更積極限制無法正常顯示通知的前景服務。建議保留客戶端的執行狀態通知,並避免使用系統清理工具一鍵結束它。

先觀察斷線屬於哪一種情況

  • VPN 圖示消失:較可能是 VpnService 被停止、應用程式程序遭清理,或另一個 VPN 服務搶占了系統通道。
  • VPN 圖示仍在,但所有連線都失敗:可能是上游網路變更後舊連線未恢復,也可能是節點、DNS 或虛擬介面狀態異常。
  • 只有部分應用程式失敗:優先確認應用程式代理範圍、規則命中、IPv6、DNS 與目標應用程式本身的背景限制。
  • 從 Wi-Fi 切換至行動數據後失敗:檢查客戶端是否能在網路切換後重新建立連線,以及行動網路是否具備可用的數據權限。
  • 開啟客戶端後立即恢復:通常指向背景限制。介面進入前景後,系統重新提供執行機會,服務或核心也隨之恢復。

排查時可以進行可重複的測試:維持相同設定與相同節點,開啟一個可持續重新整理的頁面,鎖定螢幕等待 10 分鐘,再解鎖觀察 VPN 圖示、客戶端執行狀態與日誌時間線。接著分別使用 Wi-Fi 與行動數據重複測試。一次只修改一項設定,才能判斷究竟是哪項省電策略造成影響。

如果日誌在鎖定螢幕期間完全中斷,解鎖後才繼續出現,應重點檢查程序常駐與電池限制。如果日誌持續記錄請求,但大量出現逾時,則應轉向檢查節點可用性、網路切換與 DNS。若服務遭系統停止,部分客戶端會在日誌末尾留下服務銷毀或核心退出資訊;不過程序若被直接終止,日誌可能來不及記錄完整原因。

省電白名單與背景執行設定

不同品牌手機使用的選單名稱不一致,但目標基本相同:允許客戶端在背景持續執行、取消針對該應用程式的電池最佳化,並允許必要的背景網路活動。設定入口可能位於「應用程式資訊」「電池」「應用程式啟動管理」或「特殊應用程式權限」中。

建議依照以下順序調整

  1. 將電池用量設為不受限制。在客戶端的應用程式資訊中找到電池設定,選擇「不受限制」「允許背景活動」或意思相近的選項。Android 原生系統常見的入口是應用程式資訊中的電池用量管理。
  2. 關閉自動管理。部分系統提供自動啟動、關聯啟動與背景活動三個開關。關閉自動管理後,依照頁面說明允許客戶端自動啟動及在背景執行。
  3. 保留前景服務通知。允許客戶端顯示執行通知。通知不僅用於顯示狀態,也與 Android 前景服務機制有關。
  4. 允許背景數據。檢查行動數據與 WLAN 權限,確保背景數據未被停用。啟用系統數據節省模式時,可將客戶端加入「不受限制的數據用量」清單。
  5. 在最近使用的工作中鎖定應用程式。部分手機製造商的系統提供工作卡片鎖定功能,可以降低一鍵清理時被結束的機率。它不能取代電池白名單,但可作為補充。
  6. 重新啟動客戶端服務。權限變更後停止並重新啟動 VpnService;必要時重新啟動手機,再驗證鎖定螢幕與網路切換。

將客戶端設為不受電池最佳化限制,通常會增加一定的背景耗電,因為核心需要維護虛擬介面、DNS 處理與必要的連線狀態。實際耗電量還取決於流量、規則規模、日誌層級、節點協定,以及應用程式是否持續產生網路請求。應先確保連線穩定,再逐項減少不必要的高耗能設定,而不是同時關閉所有背景權限。

開機後是否會自動恢復

客戶端能否隨開機啟動,取決於應用程式是否實作相關功能、系統是否允許自動啟動,以及 VPN 授權與系統策略是否仍然有效。部分 Android 版本提供「永遠開啟的 VPN」選項,可在系統 VPN 設定中指定應用程式;但客戶端是否適合啟用此選項,應以其功能說明為準。

「封鎖未使用 VPN 的連線」屬於更嚴格的系統層級選項。啟用後,如果指定的 VPN 服務尚未建立,裝置可能無法連線網路。除錯設定、切換客戶端或訂閱節點不可用時,這會讓故障表現更加明顯。只有在需要持續強制流量經過 VPN 時才應考慮啟用,並提前確認客戶端能穩定自動啟動並恢復服務。

DNS、私人 DNS 與網路切換問題

背景執行正常並不代表解析鏈路一定正常。Android 的「私人 DNS」使用系統層級的加密 DNS 設定,Clash 設定也可能啟用內建 DNS、Fake-IP 或基於規則的 DNS 處理。兩者在不同客戶端與設定下可能形成不同路徑。出現「可以連線 IP,但網域無法開啟」「部分應用程式一直轉圈」時,應將 DNS 單獨列為檢查項目。

測試時可以暫時將 Android 私人 DNS 調整為自動,再重新啟動客戶端服務。如果問題消失,表示原先指定的私人 DNS 主機、目前網路或設定中的 DNS 路徑可能存在相容性問題。這裡不宜長期依靠隨機切換來解決,而應檢查設定是否明確啟用 DNS、監聽方式是否適合 Android 客戶端,以及規則是否要求解析特定網域。

Fake-IP 模式會為網域回傳保留位址範圍中的對應位址,再由核心還原網域並比對規則。這有利於保留網域資訊並提升規則比對的一致性,但部分區域網路服務、特殊應用程式或依賴真實位址判斷的情境,可能需要加入過濾項目。Redir-Host 等其他模式的解析流程不同,不能直接套用相同的過濾設定。

Wi-Fi 與行動數據切換後的恢復

手機離開 Wi-Fi 後,底層網路、出口位址與 DNS 環境都會改變。客戶端需要感知預設網路變更,並讓後續連線使用新的網路。如果切換後 VPN 圖示仍在但無法存取,可以先等待幾秒,再在客戶端內停止並啟動服務。若每次切換都必須手動重新啟動,應檢查客戶端版本、背景網路權限與系統對 VPN 的限制。

同時啟用雙 SIM、數據節省、熱點分享或區域網路存取時,問題會更加複雜。熱點裝置的流量是否經過手機上的 VpnService,會受到 Android 版本、手機製造商實作與客戶端能力影響,不能只因手機本身已使用代理,就推斷熱點流量也已被接管。需要分別在手機與熱點終端測試出口與 DNS。

日誌定位與完整排查順序

Android Clash 客戶端的日誌通常包含規則命中、連線目標、所選策略、DNS 處理與錯誤資訊。排查時可以暫時將日誌層級調至資訊或除錯,但長期開啟詳細日誌會增加寫入與處理負擔。完成記錄後應恢復日常層級。

常見日誌線索

  • timeout 或連線逾時:目標無法連線、節點回應緩慢、網路切換尚未恢復,或 DNS 請求未完成。
  • connection refused:目標連接埠明確拒絕連線,也可能是本機監聽或上游服務尚未啟動。
  • 設定解析錯誤:需要檢查 YAML 縮排、欄位格式、訂閱轉換結果,或目前核心不支援的設定項目。
  • 持續命中 DIRECT:目前規則將流量判定為直連,應核對規則順序、模式與目標網域。
  • 沒有任何目標應用程式日誌:應用程式可能被排除在 VpnService 外,或其流量未進入目前的客戶端。

需要進一步確認系統是否停止了程序時,可以使用 Android 開發者工具查看裝置日誌,但這屬於進階方法。連接電腦並授權除錯後,可依應用程式套件名稱、VPN 服務與程序狀態篩選資訊。不同客戶端的套件名稱不同,應從應用程式資訊或安裝套件資訊中確認,不能直接套用其他軟體的套件名稱。

adb shell dumpsys vpn
adb shell dumpsys deviceidle
adb shell dumpsys activity services

dumpsys vpn 可協助查看目前 VPN 狀態,dumpsys deviceidle 用於觀察裝置閒置與 Doze 情況,服務清單則有助於確認目標程序與服務是否仍存在。這些命令的輸出會隨 Android 版本變化,適合用來驗證現象,不應將某一行固定輸出視為所有裝置都適用的結論。

建議的排查流程

  1. 在前景固定使用一個已驗證的節點,確認規則模式下可以正常存取。
  2. 確認系統 VPN 圖示存在,並檢查沒有其他 VPN、防火牆或代理工具占用通道。
  3. 查看目標應用程式是否已納入應用程式代理範圍。
  4. 關閉螢幕進行定時測試,記錄 VPN 圖示、日誌中斷時間與恢復方式。
  5. 將客戶端加入電池最佳化白名單,允許背景活動、背景數據與執行通知。
  6. 分別測試 Wi-Fi、行動數據,以及兩者之間的切換。
  7. 若只有網域請求失敗,再檢查私人 DNS、設定中的 DNS 模式與 Fake-IP 相容項目。
  8. 仍然異常時,備份必要設定,更新至仍受維護的客戶端版本,並使用相同訂閱重新測試。

如果更新客戶端後出現設定無法載入,不應直接將舊設定中的所有欄位複製到新核心。Clash Meta(mihomo)在相容傳統 Clash 設定的基礎上,擴充了規則與協定能力,但不同客戶端封裝的核心版本、欄位支援與預設行為可能不同。應先閱讀客戶端的錯誤日誌,定位具體欄位,再參考對應核心文件進行調整。

穩定執行後的耗電最佳化

連線穩定後,可以從日誌、測速頻率與不必要的背景請求著手控制耗電。頻繁進行所有節點的延遲測試會同時建立大量連線;過短的訂閱自動更新週期也會增加喚醒次數。自動測速群組的測試間隔應依實際使用情況調整,不需要為了追求每分鐘最新結果而持續探測所有節點。

規則數量本身通常不是唯一的耗電來源,更值得關注的是持續活躍的應用程式、連線重試、DNS 循環失敗與詳細日誌。如果某個失效節點被策略群組持續選中,背景應用程式可能不斷重新連線,既影響使用體驗也增加耗電。日誌中出現密集的重複錯誤時,應先更換節點或修正規則。

省電白名單的目標是讓 VpnService 在需要時可靠執行,而不是要求客戶端永久維持高活動狀態。合理設定下,沒有流量時核心可以減少工作;產生連線時再完成規則比對與轉發。透過系統電池統計觀察一整天的數據,比短時間盯著瞬時百分比更具參考價值。

最後可以保留一套簡潔的基準設定:一個穩定設定、明確的規則模式、必要的應用程式代理範圍、允許背景執行、正常顯示前景通知,並記錄私人 DNS 與客戶端 DNS 的組合。之後遇到鎖定螢幕斷線時,先回到這套基準設定重新測試,再判斷是系統更新、客戶端版本還是訂閱設定發生變化。

繼續設定 Android Clash 客戶端

先選擇適合 Android 的客戶端,再依照使用指南匯入訂閱、檢查代理模式與系統 VPN 授權。