先確認 7897 是監聽失敗,還是連線失敗
Clash Verge Rev 的混合連接埠對應 mihomo 設定中的 mixed-port,同一個監聽入口可接受 HTTP 代理和 SOCKS5 代理連線。本文以 7897 作為待排查連接埠,並以 7898 示範變更後的連接埠。實際值請以用戶端設定和核心記錄為準,範例連接埠不一定適用於所有安裝環境。
連接埠衝突發生在本機監聽階段。常見情況是用戶端介面可以開啟,但核心記錄出現 bind、address already in use,或 Windows 的「通常每個通訊端位址只允許使用一次」。這時訂閱更新成功、節點延遲正常,都不能證明本機代理入口已可使用。
listen tcp 127.0.0.1:7897: bind: address already in use
上方是常見錯誤訊息的範例,實際前綴可能不同。先在「記錄」頁面搜尋 7897 和 bind,再依下表判斷問題,避免把所有網路錯誤都當成連接埠遭占用。
| 記錄或現象 | 優先檢查 |
|---|---|
| address already in use | 相同位址、相同連接埠的監聽程序,以及萬用位址監聽 |
| connection refused | 應用程式連線的位址與連接埠是否確實有服務在監聽 |
| access permissions / permission denied | 系統保留連接埠、權限限制或安全軟體政策 |
| 連線已建立,之後發生 timeout | 節點、規則、DNS 與目標網站,不只是本機連接埠 |
Windows:使用 PowerShell 找出監聽程序
第一步:只查詢本機監聽連接埠
開啟 PowerShell,執行以下命令。如果一般終端機無法讀取完整資訊,可以改以系統管理員身分開啟。這裡只篩選本機連接埠和 Listen 狀態,不會把遠端連接埠剛好是 7897 的連線誤判為占用。
Get-NetTCPConnection -LocalPort 7897 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, State, OwningProcess
OwningProcess 欄是程序識別碼 PID。記下實際輸出的數字,再查詢程序名稱與路徑。以下會直接取得監聽程序的 PID;變數使用 $ownerPid,請勿替 PowerShell 內建變數 $PID 指派值。
$owners = Get-NetTCPConnection -LocalPort 7897 -State Listen -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty OwningProcess -Unique
foreach ($ownerPid in $owners) {
Get-Process -Id $ownerPid |
Select-Object Id, ProcessName, Path
}
第二步:確認是否為另一個用戶端執行個體
如果查到 mihomo 或其他代理用戶端,先檢查工作列通知區域和工作管理員。關閉視窗不一定代表程式已結束,用戶端可能仍在背景執行;服務模式下,核心也可能由系統服務管理。建議透過該用戶端的「結束」選項或服務管理介面停止,不要只看到程序名稱就強制終止。
如果程序結束後立刻以新的 PID 出現,通常表示有背景服務或啟動程式正在重新啟動它。反覆終止程序無法消除衝突,必須停止對應服務,或讓兩個程式使用不同連接埠。不要批次終止名稱中含有 proxy、clash 或 mihomo 的所有程序。
查不到監聽結果,卻仍無法繫結
先確認錯誤訊息中的位址與通訊協定。IPv4 的 0.0.0.0:7897 表示監聽所有 IPv4 介面,不只區域網路位址,也可能與迴圈位址的監聽衝突。如果記錄明確指出存取權限錯誤,可進一步查看 Windows 的 TCP 排除連接埠範圍:
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
如果 7897 落在排除範圍內,建議改用範圍外且沒有程序監聽的連接埠。不要為了解決單一代理連接埠問題而直接刪除系統排除項目。虛擬化、容器及網路元件可能會依賴這些設定。
macOS 與 Linux:依 PID 確認程序來源
macOS:使用 lsof 查看 TCP 監聽
開啟「終端機」,執行以下命令。-nP 會保留數字位址和連接埠,-sTCP:LISTEN 只列出監聽中的通訊端。使用 sudo 可減少因權限不足而漏查其他使用者程序的情況。
sudo lsof -nP -iTCP:7897 -sTCP:LISTEN
輸出中的 COMMAND 是程式名稱,PID 是程序識別碼,NAME 是監聽位址。若要查看完整啟動命令,先輸入查到的 PID,再執行查詢:
read -r owner_pid
ps -p "$owner_pid" -o pid=,user=,command=
確認是舊用戶端後,從選單列結束該程式。如果由背景服務啟動,請先確認服務歸屬再停用。系統程序或來源不明的程式不適合直接終止,可以先替 Clash Verge Rev 改用其他閒置連接埠。
Linux:使用 ss 查看監聽狀態與程序
在終端機執行以下命令。-l 查詢監聽中的連線,-t 查詢 TCP,-n 使用數字格式,-p 顯示關聯程序。查看程序詳細資訊通常需要系統管理員權限。
sudo ss -ltnp 'sport = :7897'
如果結果指向由 systemd 管理的代理服務,請透過該服務提供的方式停止。只終止核心程序可能會觸發自動重新啟動。如果記錄明確指出 UDP 繫結衝突,再另外檢查 UDP;不要把不同通訊協定的同號連接埠一概視為相同衝突:
sudo ss -lunp 'sport = :7897'
- 沒有輸出:表示目前查詢未發現相關監聽,不代表連接埠永遠可用;下次啟動時仍可能被其他程式搶先繫結。
- 監聽位址為 127.0.0.1:通常僅供本機使用,無須為了解決衝突而改成對外監聽。
- 監聽位址為 0.0.0.0 或 [::]:表示使用萬用位址;IPv6 雙堆疊行為會受系統和通訊端選項影響,請搭配實際記錄判斷。
變更混合連接埠:從 7897 改為 7898
有兩種處理方式:停止不再使用的占用程式,繼續使用 7897;或保留現有程式,將 Clash Verge Rev 改用其他閒置連接埠。如果確實需要同時執行兩個用戶端,第二種方式較直接,但也要避免兩者反覆改寫系統代理設定。
- 先使用前面的系統命令查詢
7898,確認沒有相關程序在監聽;Windows 還應檢查該連接埠是否位於排除範圍內。 - 開啟 Clash Verge Rev,進入「設定」,在「Clash 設定」中找到「混合連接埠」欄位。不同版本可能將相關欄位放在設定對話框或連接埠設定區,請以介面上的「混合連接埠」名稱為準。
- 將原值
7897改為7898並儲存。如果介面提示重新啟動核心,請依照提示操作;接著在「記錄」頁面確認新的監聽位址。 - 重新查詢
7898的監聽程序,確認它屬於目前用戶端使用的核心,而不是其他程序。
在 mihomo YAML 中,對應欄位如下。這裡僅說明欄位用途,不需要同時編輯訂閱檔案:
mixed-port: 7898
Clash Verge Rev 可能會透過用戶端設定覆寫訂閱中的通用欄位,因此直接修改下載的 YAML 不一定會決定最終監聽值,訂閱更新也可能覆蓋手動修改。建議優先使用用戶端提供的設定介面,並以啟動記錄和作業系統的監聽結果確認實際生效值。若要管理覆寫設定,請參閱進階設定。
同步系統代理、終端機變數與應用程式設定
核心已改為監聽 7898,但應用程式仍連線到 7897,是變更連接埠後最常見的疏漏。變更連接埠時,必須同時檢查「監聽端」和「使用端」。用戶端能更新自己管理的系統代理,不代表瀏覽器擴充功能、終端機環境變數和手動設定代理的開發工具也會跟著更新。
重新套用系統代理
儲存新連接埠後,在「設定」中先關閉再開啟「系統代理」,讓用戶端重新寫入代理位址。接著到系統設定確認:Windows 11 為「設定」→「網路和網際網路」→「Proxy」;macOS 為「系統設定」→「網路」→目前的網路連線→「詳細資訊」→「代理伺服器」。Linux 的系統代理入口依桌面環境而異,有些應用程式不會讀取桌面代理設定。
本機代理位址通常使用 127.0.0.1,連接埠應與新的監聽值一致。HTTP、HTTPS 目標流量可以透過同一個 HTTP 代理入口轉送;這不代表本機代理位址必須寫成 https://。如果其他用戶端也啟用了系統代理,請先關閉其他用戶端的這項功能,避免設定被反覆覆寫。
個別確認終端機與開發工具設定
已開啟的終端機可能仍保留舊的 HTTP_PROXY、HTTPS_PROXY 或 ALL_PROXY。以下命令只會調整目前的終端機工作階段,不會永久變更系統設定:
# macOS / Linux:目前的 shell 工作階段
export HTTP_PROXY=http://127.0.0.1:7898
export HTTPS_PROXY=http://127.0.0.1:7898
export ALL_PROXY=socks5h://127.0.0.1:7898
# Windows PowerShell:目前的工作階段
$env:HTTP_PROXY = "http://127.0.0.1:7898"
$env:HTTPS_PROXY = "http://127.0.0.1:7898"
$env:ALL_PROXY = "socks5h://127.0.0.1:7898"
應用程式是否讀取這些變數,取決於其本身的實作。瀏覽器代理擴充功能、Git 代理設定、編輯器網路設定、容器內部環境都可能各自保存設定。請逐一檢查仍使用 7897 的項目,而不只是重新開啟瀏覽器。
TUN 模式不等於混合連接埠
TUN 模式透過虛擬網路介面接管流量;混合連接埠則是應用程式主動連線的本機代理入口。變更 mixed-port 不會自動修改 TUN 路由或 DNS 設定。如果應用程式明確指定了舊代理連接埠,即使已啟用 TUN,也可能繼續出現連線失敗。請勿把啟用 TUN 當成解決連接埠衝突的方法。
驗證新連接埠:先確認監聽,再測試連線
請分階段驗證:先確認連接埠屬於正確的核心,再使用明確指定代理的方式送出一次請求。不要只憑網頁能開啟就判定問題已解決,因為頁面可能來自快取,也可能透過直連或其他網路路徑載入。
- 重新執行對應系統的監聽查詢,將連接埠改為
7898,確認程序與監聽位址。 - 查看「記錄」頁面,確認重新載入後沒有新的
bind錯誤。 - 執行以下 HTTP 代理測試,接著在「連線」頁面確認請求目標與規則比對結果。
# macOS / Linux
curl --noproxy "" --proxy http://127.0.0.1:7898 --connect-timeout 5 --max-time 15 -I https://example.com
# Windows PowerShell
curl.exe --noproxy "" --proxy http://127.0.0.1:7898 --connect-timeout 5 --max-time 15 -I https://example.com
此處的連線逾時為 5 秒,總逾時為 15 秒,都是測試參數,不是實際測得的延遲。--noproxy "" 用於排除現有代理略過清單的影響。收到 HTTP 回應表示請求已透過本機代理入口處理,但回應碼不一定是 200;規則也可能將目標流量導向直連,因此仍須查看連線詳細資訊。
如果立刻顯示無法連線至 127.0.0.1:7898,請回頭檢查監聽狀態。如果已連上本機代理,之後才發生 TLS、DNS 或上游逾時,則應改查節點、網域解析與規則。這時持續更換本機連接埠通常無濟於事。
常見問題補充:變更連接埠後仍報錯,該如何排查?
7897 出現多筆記錄,代表有多個程式衝突嗎?
不一定。同一個 PID 可能分別監聽 IPv4 與 IPv6,也可能有多筆已建立的連線。應著重確認監聽狀態、位址、通訊協定和 PID,而不是只計算輸出行數。TCP 的 TIME_WAIT 記錄也不能直接視為仍在執行的監聽程序。
只結束介面再重新開啟可以嗎?
可以作為操作步驟,但不能取代結果確認。常駐通知區域、服務模式或第二個用戶端都可能讓核心繼續執行。結束程式後再次查詢連接埠,才能確認監聽是否確實釋出;重新開啟後也要確認新的監聽程序。
開啟「允許區域網路連線」能解決占用問題嗎?
不應將它視為通用修復方式。這項設定會影響監聽範圍,可能從迴圈位址擴大到更多介面,反而與現有監聽產生衝突。若僅供本機使用,維持本機存取範圍即可;若要在區域網路共享,還須留意防火牆與存取控制。
需要重新安裝用戶端或刪除訂閱嗎?
通常不需要。訂閱提供節點與規則,連接埠衝突則發生在本機通訊端繫結階段。請先查出監聽程序、選擇閒置連接埠、同步所有代理使用端,再測試請求。只有確認安裝或服務本身有問題時,才進一步處理相關元件;不要一開始就清除所有設定。