先看錯誤訊息:是連接埠占用,還是監聽權限問題?
Clash 介面能開啟,不代表 Proxy 核心已正常監聽。日誌出現 listen tcp 127.0.0.1:7890: bind,並伴隨「通常每個通訊端位址只允許使用一次」或 Only one usage of each socket address,通常表示已有程序使用相同的監聽位址與連接埠。此時反覆切換系統 Proxy 開關,無法釋放連接埠。
7890 是常見的本機 Proxy 連接埠,但不是所有用戶端都必須使用的固定值。實際連接埠請以目前生效的設定和核心日誌為準。HTTP 連接埠、SOCKS 連接埠、混合連接埠和控制介面連接埠用途各不相同,不能只因數字相近就互相替換。
| 日誌或現象 | 優先檢查 |
|---|---|
| 位址已在使用、Only one usage | 查詢監聽程序,確認是否同時執行了兩個核心。 |
| 不允許存取、forbidden by its access permissions | 檢查 Windows 排除連接埠範圍、系統原則和安全軟體限制。 |
| 核心監聽正常,但瀏覽器連線遭拒 | 檢查瀏覽器或系統 Proxy 是否仍指向舊連接埠。 |
| 日誌顯示其他連接埠發生錯誤,例如 9090 | 依照日誌中的實際連接埠排查,不要只修改 mixed-port。 |
使用 netstat 找出監聽 7890 的程序
步驟一:篩選 TCP 監聽紀錄
開啟 Windows 終端機中的 PowerShell 或命令提示字元,執行以下命令。一般權限通常就能查看監聽連接埠;若出現權限提示,再以系統管理員身分開啟終端機。
netstat -ano -p tcp | findstr LISTENING | findstr ":7890 "
-a 顯示連線和監聽連接埠,-n 以數字顯示位址,-o 顯示 PID。篩選字串中,7890 後方保留一個空格,可避免把 78900 之類的連接埠也列入。以下為格式範例,最後一欄的 12480 僅供示範:
TCP 127.0.0.1:7890 0.0.0.0:0 LISTENING 12480
127.0.0.1:7890表示只在 IPv4 迴路位址上監聽。0.0.0.0:7890表示監聽所有 IPv4 本機位址,可能與迴路位址上的監聽發生衝突。[::]:7890是 IPv6 萬用位址監聽,是否衝突需視實際通訊端設定而定。- 同一個 PID 出現多行,不一定代表有多個程式,也可能是同一個程序監聽多個位址。
步驟二:依 PID 確認程序身分
按下 Ctrl + Shift + Esc 開啟工作管理員,切換到「詳細資料」,依 PID 找到對應程序。若看不到 PID,請在欄位標題上按右鍵,選擇顯示該欄。對目標程序選擇「開啟檔案位置」,確認它屬於哪個用戶端或服務。
tasklist /FI "PID eq 12480"
執行時,將命令中的範例數字替換成剛才查到的實際 PID。常見原因包括舊用戶端仍在系統匣執行、另一個用戶端也已啟動,或以服務模式執行的核心尚未結束。不要只因程序名稱包含 Clash 或 mihomo 就直接結束它,請先確認路徑和所屬用戶端。
使用 PowerShell 查詢的替代方法
Get-NetTCPConnection -LocalPort 7890 -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess
輸出中的 OwningProcess 就是 PID。若命令沒有傳回監聽紀錄,請參照當時的日誌再做判斷;短暫啟動後就結束的核心,可能在查詢前已釋放連接埠。
排除衝突:關閉重複執行的用戶端,或改用未占用的連接埠
若占用連接埠的是另一個不再使用的用戶端,建議先從系統匣選單正常結束。若該用戶端啟用了獨立服務,關閉視窗可能只會隱藏介面,不會停止服務核心;請從該用戶端的服務管理入口停止對應服務,再重新查詢連接埠。
- 記下原本的系統 Proxy 位址和連接埠,暫時關閉系統 Proxy,避免排查期間其他應用程式繼續連線到失效的入口。
- 正常結束重複執行的用戶端,必要時透過
services.msc確認對應服務。 - 再次執行 netstat,確認舊的監聽紀錄已消失。
- 啟動要保留的用戶端,查看日誌確認是否已成功監聽 7890。
若占用連接埠的是必須保留的程式,不必強行結束它。替 Clash 更換為未占用的連接埠通常更直接。本文以 7897 為例,但無法保證每台電腦都能使用此連接埠,修改前請先檢查:
netstat -ano -p tcp | findstr LISTENING | findstr ":7897 "
修改 mixed-port:變更本機 Proxy 入口
mixed-port 會讓同一個本機監聽連接埠接受 HTTP 和 SOCKS Proxy 連線。它不是節點伺服器連接埠,也不是訂閱連結的連接埠。設定中 Proxy 節點的 port 屬於遠端連線參數,無法解決本機 7890 的監聽衝突。
先確認用戶端實際使用的設定檔
不同用戶端的連接埠設定位置和儲存方式各不相同。先到設定中尋找「連接埠」、「混合連接埠」或 mixed-port;若有圖形介面可供設定,優先在介面中修改。使用 mihomo 核心的用戶端也可能透過覆寫、合併設定或執行階段設定來管理連接埠;直接編輯訂閱快取檔案,可能會在下次更新時被覆蓋。
若需要編輯 YAML,請先備份原始檔案,再將生效設定中既有的 mixed-port 修改為目標值。以下僅列出需要調整的欄位,並非完整設定檔,請勿用它覆蓋整份訂閱:
mixed-port: 7897
- 此欄位需放在 YAML 頂層,不要放進
proxies、proxy-groups或rules清單中。 - 同一份最終設定中,不要出現重複的
mixed-port鍵。 - 若也啟用了
port: 7890或socks-port: 7890,舊連接埠仍可能發生衝突,需分別檢查這些獨立監聽項目。 external-controller是用戶端管理核心的控制介面,不應當作瀏覽器 Proxy 連接埠使用。
重新載入後,確認監聽狀態已更新
儲存後,使用用戶端提供的重新載入設定或重新啟動核心功能。只儲存檔案而不重新載入,舊程序可能仍使用原本的連接埠。接著查看日誌並再次查詢 7897:應能看到目標核心的 PID 正在監聽。若介面顯示 7897,日誌卻仍是 7890,請優先檢查設定是否被覆寫,以及目前啟用的設定是否為剛才修改的檔案。
同步 Windows 系統 Proxy 與應用程式內的 Proxy 設定
連接埠修改成功後,並非所有用戶端都會自動同步系統 Proxy。若核心已監聽 7897,但 Windows 仍指向 127.0.0.1:7890,瀏覽器就可能出現 Proxy 連線失敗。請先確認新連接埠已成功監聽,再重新啟用用戶端的系統 Proxy 功能,並檢查 Windows 儲存的位址。
- Windows 11:前往「設定」→「網路和網際網路」→「Proxy」→「手動設定 Proxy」→「使用 Proxy 伺服器」旁的「設定」。
- Windows 10:前往「設定」→「網路和網際網路」→「Proxy」,檢查手動 Proxy 設定。
- 位址請使用
127.0.0.1,連接埠須與目前的混合連接埠一致,本例為7897。若使用 Proxy 指令碼,也要確認指令碼實際傳回的 Proxy 入口。
Firefox、開發工具、Git 和終端機環境變數可能各自設有 Proxy,不一定會沿用 Windows 設定。可先在終端機查看目前工作階段的 Proxy 變數:
Get-ChildItem Env: | Where-Object Name -Match 'proxy'
若結果仍指向 7890,請同步修改對應的應用程式或變數。若只要修改目前 PowerShell 工作階段,可使用以下兩行;這不會自動更新已開啟的其他終端機,也不會修改所有程式的設定。
$env:HTTP_PROXY = 'http://127.0.0.1:7897'
$env:HTTPS_PROXY = 'http://127.0.0.1:7897'
在 HTTPS_PROXY 中使用 http://,代表透過本機 HTTP Proxy 建立通道,並不是將目標 HTTPS 網站降級為 HTTP。排查時也不要任意執行 WinHTTP 重設命令:WinHTTP Proxy 與瀏覽器常用的 Windows 使用者 Proxy 設定,並非相同的設定入口。
沒有程序監聽連接埠,仍無法繫結
若 netstat 查不到占用程序,但日誌顯示「不允許存取」,可在系統管理員終端機查看 Windows 的 TCP 排除連接埠範圍。Hyper-V、WSL、容器或其他網路元件可能影響這些保留範圍,但不能只因安裝了某項功能就認定問題由此造成。
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
確認 7890 或預計使用的 7897 是否落在輸出的起始和結束連接埠範圍內。若在範圍內,優先選擇範圍外且未被監聽的連接埠。不要為了釋放單一 Proxy 連接埠就直接刪除系統保留範圍,這可能影響虛擬網路服務。
留意日誌中的通訊協定和位址
本文主要排查 TCP Proxy 監聽。若錯誤明確指出 UDP,請檢查對應的 UDP 端點,而非只查詢 TCP 的 LISTENING。UDP 輸出沒有相同的監聽狀態欄位,可使用以下命令查看:
netstat -ano -p udp | findstr ":7890 "
若日誌顯示要繫結的區域網路位址已不存在,還需檢查 bind-address。若只供本機使用,請勿為了避開錯誤而任意開放區域網路存取;啟用 allow-lan 會改變可存取範圍,與解決本機連接埠衝突是兩回事。
確認問題已排除:分別檢查監聽、入口與出口
網頁重新開啟,還不足以確認所有設定都已同步。建議依下列三個層面檢查,更容易區分連接埠、Proxy 規則和節點連線問題。
- 確認監聽:查詢 7897,確認 PID 屬於目標用戶端的核心,且日誌不再出現繫結失敗。
- 確認入口:使用明確指定 Proxy 的請求,略過系統 Proxy 設定來測試本機入口。
- 確認出口:在用戶端連線紀錄中查看該請求套用的規則、策略群組和實際出口,確認是否符合預期。
curl.exe -I --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:7897 https://www.microsoft.com/
上述命令會明確連線至本機 HTTP Proxy。若立即顯示無法連線到 127.0.0.1:7897,請繼續檢查監聽狀態和連接埠;若 Proxy 連線已建立,但目標請求逾時,則應進一步檢查節點可用性、DNS、規則或遠端網路。收到 HTTP 回應不代表請求一定經過 Proxy 節點:Rule 模式仍可能讓目標直接連線,請以連線紀錄為準。
最後重新開啟瀏覽器和需要使用 Proxy 的應用程式,再重新啟動一次用戶端,確認連接埠設定能保留下來。若每次重新啟動或更新訂閱後又變回 7890,請修正用戶端的持久化設定或覆寫設定,而非反覆修改暫存檔案。TUN 模式也無法用來釋放連接埠;即使部分流量已交由虛擬網卡處理,失效的本機 HTTP Proxy 入口仍須另外修復。