Clash 連接埠被佔用怎麼辦:定位衝突程式與修改混合連接埠

啟動時出現 bind 失敗,多半是 7890 等連接埠被其他程式佔用。本文提供 Windows、macOS、Linux 三平台查詢佔用程式的指令,以及修改設定檔與客戶端連接埠的完整步驟。

為什麼會出現「連接埠被佔用」

Clash 核心啟動時需要在本機監聽幾個連接埠:混合連接埠(mixed-port,常見預設值 7890)同時處理 HTTP 與 SOCKS5 請求,外部控制連接埠(external-controller,常見 9090)供面板讀取狀態,部分客戶端還會另外開一個僅供 HTTP 的連接埠。這些連接埠一旦被系統上其他程式佔用,核心就無法完成 bind 這個系統呼叫,日誌裡通常會看到類似 address already in usebind: 拒絕存取 的訊息,客戶端介面則表現為核心啟動失敗、代理開關打不開,或啟動幾秒後自動回落成「未執行」狀態。

這類衝突常見的原因有三種:一是電腦上同時裝了兩款代理工具(例如 Clash 和另一個 V2Ray 客戶端),二是上一次 Clash 程序沒有正常退出,殘留的舊程序還佔著連接埠,三是極少數系統服務或路由器軟體恰好用到了相近的連接埠段。排查思路很直接——先確認連接埠到底被誰佔用,再決定要結束程序還是改連接埠。

第一步:確認衝突的具體連接埠

客戶端日誌或後台視窗一般會把出問題的連接埠號印出來,常見的預設值可以先對照一下:

用途常見預設連接埠說明
混合連接埠 mixed-port7890HTTP + SOCKS5 共用,瀏覽器與系統代理常指向它
外部控制 external-controller9090面板與 API 讀取執行狀態用
僅 SOCKS 連接埠 socks-port7891部分舊版設定會單獨分開寫
僅 HTTP 連接埠 port7892部分舊版設定會單獨分開寫

如果日誌沒有直接寫出連接埠號,就照上表逐一排查,重點先看 7890——這是大多數客戶端預設使用的混合連接埠,也是最容易撞號的一個。

Windows:定位佔用程序並結束它

打開命令提示字元或 PowerShell,用 netstat 搭配連接埠號查詢監聽狀態:

netstat -ano | findstr "7890"

輸出最後一欄是 PID(程序識別碼),再用它反查程序名稱:

tasklist | findstr "PID號"

確認是無關程式佔用後,可以直接結束該程序:

taskkill /PID PID號 /F

如果反查出來的程序名稱本身就是 Clash 相關(例如 clash-verge.exe、mihomo.exe),說明是上一次沒退乾淨的殘留程序,結束掉之後重新啟動客戶端即可,不需要改連接埠。

macOS:用 lsof 一條指令鎖定程序

macOS 下最常用的是 lsof,可以直接依連接埠過濾:

lsof -i :7890

輸出裡的 COMMAND 欄就是佔用連接埠的程式名稱,PID 欄是程序識別碼。如果確認要結束它:

kill -9 PID號

如果佔用連接埠的是系統級服務或不方便關閉的程式(例如某些封包擷取工具、開發環境的本機代理),優先選擇改 Clash 自己的連接埠,而不是去動別的軟體。

Linux:ss、lsof、fuser 三選一

Linux 環境建議用 ss(比舊式 netstat 更快),指令如下:

ss -tulnp | grep 7890

沒安裝 ss 也可以用 lsof,用法與 macOS 一致:

lsof -i :7890

或者用 fuser 直接定位並結束:

fuser -k 7890/tcp

用 systemd 常駐部署 mihomo 核心的情境下,還要留意是不是自己起了兩個 mihomo 服務實例——一個開機自啟,一個又手動跑了一次,兩者互搶連接埠是很典型的自坑現場。

改連接埠方案一:直接編輯設定檔

如果不想動別的程式,更省事的做法是把 Clash 自己的連接埠挪開。在設定檔(通常是 config.yaml)裡找到連接埠相關欄位,改成沒被佔用的數值即可:

mixed-port: 7891
external-controller: 127.0.0.1:9091
allow-lan: false

數值可以選任意 1024~65535 之間、目前未被佔用的連接埠,常見做法是在原值基礎上加 1 或加 100,方便記憶。改完儲存後重新載入設定或重新啟動客戶端即可生效。

改連接埠方案二:在客戶端介面裡改

主流圖形客戶端(Clash Verge Rev、Clash for Windows 系列衍生版本、ClashX Meta 等)都提供了連接埠設定介面,一般在「設定」或「一般」分區裡能找到混合連接埠、控制連接埠的輸入框,填入新數值並儲存,客戶端會自動重寫底層設定並重新啟動核心,不需要手動去改 yaml 檔案。改完之後記得同步檢查系統代理設定和瀏覽器擴充功能裡填寫的連接埠號,三處對不上是切換後「看起來沒生效」最常見的原因。

改完之後怎麼驗證

重新用查詢指令確認新連接埠已經被 Clash 自己佔用,而不是又撞到別的程式:

lsof -i :7891

指令回傳的程序名稱應該是 clash 或 mihomo 相關,再打開瀏覽器訪問幾個網站測試連通性,或者用面板查看流量曲線是否正常跳動,確認代理鏈路是通的。如果外部控制連接埠也改過,記得面板網址欄裡的連接埠號要跟著一起更新,否則面板會顯示連線失敗。

避免下次再撞號的兩個習慣

  • 只保留一款正在使用的代理客戶端在開機自啟清單裡,卸載或關閉閒置的舊客戶端,降低背景殘留程序搶連接埠的機率。
  • 如果長期需要同時跑兩套代理工具做對比測試,提前把其中一套的連接埠錯開固定下來,寫進筆記裡,不要每次都靠猜。

連接埠衝突本質上是資源搶占問題,和設定寫錯、訂閱失效是兩類不同的故障,排查時不要混在一起想。先看日誌報錯字樣,再查是誰佔用連接埠,最後決定結束程序還是改連接埠,三步走完基本都能解決。

下載客戶端 ->