連線疑難排解 · Clash 技術部落格

FlClash 結束後代理變了?v0.9.2 保留與還原

Windows 上 FlClash 結束後代理仍開著,或原本的代理被關閉?依 v0.9.2 分清這次是否接管,記錄系統設定、正常結束並還原原值,再驗證實際請求。

  • FlClash
  • v0.9.2
  • 系統代理
  • Windows
  • 正常結束
本文目錄

Windows 上正常結束 FlClash 後,系統代理仍開著,不一定是清理失敗;原本的代理被關閉,也不代表應用程式保存了舊設定卻未還原。先確認設定來自哪裡,再決定保留、關閉,或依原值還原。

結束應用程式後,代理仍開著與代理被關閉是兩種情況

FlClash v0.9.2 的正式發行紀錄提到,會保留並非由它設定的系統代理。本文限定 Windows 10/11、該版本的系統代理開關與正常結束流程;TUN、WinHTTP、終端機環境變數及應用程式內的代理,各有不同設定範圍。

先依結束前後的實際設定分流

觀察到的現象先做什麼
這次從未嘗試啟用,或先前已成功停用,結束後原代理仍開著先核對它是否仍是自己需要的原伺服器或指令碼;不要因為開關還開著就清空。
曾啟用 FlClash,結束後原企業代理或 PAC 沒有恢復該版本不保證會自動還原原值,請依事前紀錄還原需要的設定。
FlClash 已結束,手動代理仍啟用並指向它原本的本機連接埠,而且請求失敗核對是否確實正常結束、目前系統設定及失敗日誌,再依原本的網路需求還原。
瀏覽器正常,只有終端機或某個應用程式失敗另外檢查該程式的代理來源;系統代理開關不能代表所有程式。

v0.9.2 保留的是哪一種設定?

該版本進入系統代理啟用流程後,會留下這次尚待解除的紀錄;結束時,僅在紀錄仍存在的情況下停用。先前已成功停用,就會清除紀錄,如同這次從未嘗試啟用,結束時不會再次解除。這不等於讀取 Windows 目前的代理設定來判斷歸屬。

固定版本原始碼將這次紀錄稱為 _applied,而且在呼叫 startProxy 前就設為 true;因此它表示已嘗試,不代表系統代理已成功寫入。啟用與停用失敗時,都可能留下 update system proxy failed 日誌。

Windows 的 stopProxy 透過 WinINet 將連線選項切換為 PROXY_TYPE_DIRECT;它不會保存並還原先前的伺服器、PAC 或全部例外。解除系統代理與還原原本的企業網路設定,是不同的事。

也不能只憑自己有沒有手動點過開關來判斷:該版本的 systemProxy 預設為 true,已儲存的自動執行等狀態,也可能進入啟用流程。真正要分清的是,這次處理程序是否曾嘗試接管,而非印象中有沒有點選。

先記錄 Windows 原值與 FlClash 目前狀態

保留可還原的對照

  1. 記錄系統設定

    開啟 Windows 的「設定」,進入「網路和網際網路」中的代理設定頁。分別記錄「自動偵測設定」、設定指令碼與手動代理的開關,以及指令碼位址、伺服器、連接埠及例外。原本不使用代理時,也要記下該狀態。

  2. 記錄應用程式與接管方式

    以下應用程式按英文介面標籤對照。確認 FlClash 實際為 v0.9.2,記下目前設定、實際代理連接埠、Dashboard 上的 System proxy 與 TUN 狀態,以及 Auto run 設定。不要以預設連接埠代替實際值。

  3. 安排獨立驗證

    在可中斷使用的時段驗證系統代理。記錄 TUN 原值後,暫時關閉同名的 TUN 開關,並暫停其他會自動改寫同一組 Windows 設定的功能;需要的原代理服務可以繼續執行。

沒有可信的原值時,先保留現況與紀錄,使用原代理工具或組織提供的方法還原,不要填入陌生伺服器。Windows 顯示設定由組織管理而無法變更時,請依既有管理員流程還原,不要刪除登錄項目來繞過限制。

驗證「這次未接管」時,原代理是否保留

建立清楚的新處理程序對照

  1. 先儲存 FlClash 系統代理關閉的狀態

    在可控狀態下,關閉 FlClash 的 System proxy,再從系統匣選擇 Exit,正常結束應用程式。關閉開關本身可能解除這次代理,請先確認已記錄原值。

  2. 還原需要的原代理基準

    FlClash 結束後,使用原工具或 Windows 代理設定頁,還原事前確認的自動偵測、指令碼及手動代理設定,並驗證實際請求。原本允許直接連線時,就還原原有的直接連線狀態;直接連線不能取代必須經過代理的業務。

  3. 重新開啟,但不啟用系統代理

    確認已儲存系統代理關閉的狀態,留意自動執行設定,全程不啟用該開關。以同一目標請求核對原路徑,再從系統匣選擇 Exit;關閉視窗可能只是最小化,不能取代這一步。

  4. 比較 Windows 設定與實際請求

    再次查看自動偵測、設定指令碼及手動代理的開關、位址與連接埠,確認是否仍符合基準,並驗證同一請求。若設定改變,請記錄前後時間、應用程式狀態及日誌,不要只憑圖示推論。

v0.9.2 的正常結束保護,僅適用於其對應流程。原代理若未改變,而且仍需要它運作,就保留原值;若仍被關閉,先保留可重現條件,不能只憑一次結果,就推論其他版本、所有結束方式或其他軟體也受到保護。

這次曾接管,就依原值還原需要的網路

需要驗證 FlClash 自己的系統代理時,先確認應用程式已執行並記下實際連接埠,確認 TUN 仍關閉,再開啟 System proxy。Windows 設定應對應 FlClash 的本機位址 127.0.0.1 與實際連接埠;只看按鈕亮起,不能證明寫入成功。

停用、還原與複查

  1. 停止這次接管

    透過 System proxy 開關停用,或從系統匣選擇 Exit,正常結束應用程式,並等待操作完成。若出現 update system proxy failed,先保留日誌與 Windows 目前的值,不要連續切換而掩蓋差異。

  2. 還原原本需要的設定

    原本直接連線時,將手動代理還原為原來的關閉狀態;原本使用其他伺服器或 PAC 時,依事前紀錄還原自動偵測、指令碼及手動代理各自的開關,以及位址、連接埠與例外,或讓原工具重新設定。不要假設結束應用程式就會自動還原。

  3. 分別驗證實際請求

    在還原後的同一網路存取原目標,核對是否使用預期的代理或直接連線。若只有某個程式失敗,另外檢查該程式的設定,不要一次重設 WinHTTP、環境變數及所有代理層。

如果其他工具在 FlClash 接管後,又寫入系統設定,這次處理程序留下的紀錄,不會自動成為可靠的「目前歸屬」判斷。先讓寫入設定的操作依序完成,再還原需要的原值;不能將它視為多個用戶端之間的自動協調機制。

通過哪些檢查,才算完成?

結束與還原的驗證清單

  • 已記錄應用程式完整版本、實際連接埠,以及 Windows 自動偵測、設定指令碼與手動代理的原值。
  • 已分清這次從未嘗試接管、曾嘗試接管及啟用失敗的情況,不只憑點選記憶判斷。
  • 已透過系統匣正常結束,而非僅關閉視窗、使用工作管理員強制結束,或執行安裝程式的清理流程。
  • 結束或停用後,Windows 設定符合實際需求;原自動偵測、企業伺服器、PAC 及例外,已依紀錄還原。
  • 同一目標的實際請求通過;終端機、TUN 或應用程式內的代理另有異常時,分別保留證據。

安裝與解除安裝是另一條路徑:該版本的安裝程式會呼叫帶有 --clear-stale-proxy 參數的處理程序,處理殘留代理。這不等於本文的正常結束佇列。不要為了驗證這次保護而執行該參數,也不能把強制結束或當機視為已完成正常清理。

設定仍異常時,如何還原與回報?

先停止這次對照,還原自己記錄的 Windows 設定、FlClash 系統代理與 TUN 原值,以及其他暫時變更,再確認一般網路與必須透過原代理存取的目標。代理服務本身若無法使用,應先恢復該服務,而非只是重新填入同一個失效位址。

若需升級才能取得這項功能,先獨立備份應用程式資料與 Windows 原值,再透過專案正式管道更新。升級後若出現相容問題,使用原本支援的方式還原對應版本與備份;還原舊版不會自動還原 Windows 的外部設定,也不要讓兩個版本共用唯一的資料目錄。

向專案回報完整用戶端與系統版本、是否自動執行、系統代理及 TUN 狀態、這次處理程序的啟用經過、正常結束方式、前後位址及失敗時間。公開資料應隱藏私人伺服器、PAC 認證資料及訂閱權杖;原始日誌與備份留在本機。

參考資料