v2rayN 本機連接埠遭占用:排查 10808 衝突與變更監聽連接埠

啟動時若提示連接埠遭占用,先用 netstat 或 lsof 找出占用 10808/10809 的程序,再到 v2rayN 參數設定變更本機監聽連接埠,並同步更新系統代理與瀏覽器設定。

本文重點

本文適合 v2rayN 啟動核心失敗、記錄中出現 bind 錯誤,或變更連接埠後瀏覽器仍無法連線的使用者。先確認監聽位址與連接埠,再找出占用程序,最後選擇關閉重複執行的執行個體或更換本機連接埠。Windows 可用 netstat 和 PowerShell;macOS、Linux 可用 lsof。變更後也要同步更新系統代理、瀏覽器與命令列環境。

先確認是本機監聽失敗

v2rayN 是桌面用戶端,實際建立本機監聽的是它啟動的代理核心。瀏覽器會先連上本機代理入口,再由核心依照路由規則轉送流量。若入口連接埠繫結失敗,請求尚未進入遠端連線階段;此時反覆更新訂閱或切換 VMess、VLESS 設定,通常無法解決衝突。

瀏覽器請求 本機監聽 路由比對 遠端連線 回傳回應

開啟 v2rayN 主畫面的記錄區域,記下錯誤行中的協定、監聽位址與連接埠。以下兩種錯誤都表示繫結失敗,但實際措辭會因作業系統與核心而異;記錄前後也可能包含時間、入站名稱或其他資訊。

bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

原因:Windows 上所需的位址與連接埠已被其他監聽程序占用。解法:依記錄中的連接埠查詢 PID,確認程序身分後關閉重複執行的執行個體,或變更 v2rayN 本機監聽連接埠。

bind: address already in use

原因:macOS、Linux 上要繫結的位址與連接埠已遭占用。解法:使用 lsof 找出監聽程序,停止衝突服務,或替 v2rayN 指定其他未占用的連接埠。

Windows:從監聽連接埠找出程序

在 PowerShell 或命令提示字元執行以下指令。netstat 的篩選結果可能同時包含本機位址與遠端位址,因此請查看完整一行:本機位址必須是目標連接埠,狀態應為 LISTENING,最後一欄才是監聽程序的 PID。遠端位址包含 10808 的連線,不代表該程序占用了本機連接埠。

netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"

若輸出結果太多,可在 PowerShell 依本機連接埠與監聽狀態精確篩選。第二個指令會將查到的 PID 傳給 Get-Process,顯示對應的程序名稱。

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress,LocalPort,State,OwningProcess

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty OwningProcess -Unique |
  ForEach-Object { Get-Process -Id $_ }
  1. 先結束目前執行的 v2rayN。請使用系統匣選單中的結束選項;關閉主視窗不一定會結束程式。接著重新查詢連接埠。
  2. 若監聽已消失:原本的監聽很可能屬於目前這個執行個體。只要重新啟動一個 v2rayN,確認問題是否再次發生,不必直接結束核心程序。
  3. 若監聽仍存在:在工作管理員的「詳細資料」頁面依 PID 找出程序,核對執行檔位置與命令列。必要時可從欄位選擇清單啟用這些欄位。
  4. 確認程序所屬程式後再處理。重複啟動的另一個 v2rayN 可以正常結束;其他必須保留的服務則不應強制終止,改用目前用戶端的連接埠較合適。

看到核心程序名稱,不代表它就是殘留程序:另一個仍在使用的執行個體也可能啟動相同核心。請先核對檔案路徑、父程序與正在執行的用戶端。若查詢程序路徑時遇到權限不足,可用系統管理員權限重新開啟終端機查詢,但不要把「以系統管理員身分啟動用戶端」當成處理連接埠衝突的常規方法。

macOS、Linux:使用 lsof 找出監聽程序

在終端機執行以下指令。-nP 會保留數字位址與連接埠,避免名稱轉換;-sTCP:LISTEN 只顯示 TCP 監聽項目。輸出中的 COMMAND、PID 和 NAME 分別用來確認程序名稱、程序識別碼與監聽位址。

lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN

變更 v2rayN 本機監聽連接埠

確認占用程序必須保留後,再變更 v2rayN 設定。先記下舊連接埠與目前的系統代理狀態,方便需要時還原。不同版本的欄位名稱可能是「本機混合監聽連接埠」,也可能分別列出 SOCKS、HTTP 連接埠;請依實際存在的欄位修改,不要照著舊教學尋找不存在的 HTTP 欄位。

  1. 確認新連接埠未遭占用

    先用前文的指令檢查 11808;若目前設定分別監聽兩種協定,再檢查 11809。查不到監聽只表示目前未遭占用,無法保證其他程式日後不會使用。

  2. 開啟參數設定

    在主畫面依序進入「設定」→「參數設定」→「Core 基礎設定」,找到本機監聽連接埠欄位。若介面上的分組名稱略有不同,請以包含本機連接埠或監聽位址的設定頁為準。

  3. 輸入新連接埠

    混合監聽的範例改為 11808;分開設定 SOCKS 與 HTTP 監聽的範例,則分別改為 11808、11809。只變更本機入站連接埠,不要修改伺服器編輯視窗中的遠端連接埠。

  4. 儲存並重新啟動

    儲存設定,等待用戶端套用變更。若記錄中沒有顯示重新啟動,請從系統匣正常結束程式,再啟動一個執行個體,確認新記錄中是否仍有 bind 錯誤。

  5. 再次確認監聽狀態

    查詢 11808 的監聽 PID,確認它屬於這次啟動的核心。若舊的 10808 仍由其他服務使用,並不影響;重點是 v2rayN 已成功繫結新的連接埠。

不要直接修改用戶端自動產生的執行設定檔來永久變更連接埠:切換節點、儲存參數或重新啟動核心後,這類檔案可能會重新產生。若使用自訂設定,還須核對自訂入站中的 listen、port 與 protocol,避免只修改介面參數,實際載入的仍是舊入站設定。

同步更新系統代理與應用程式代理位址

成功變更連接埠後,瀏覽器仍可能嘗試連線到舊的 127.0.0.1:10809。此時核心已正常啟動,但應用程式連不到正確入口。請逐一同步代理位址,不必繼續更換節點。

代理入口 檢查項目 修改範例
v2rayN 系統代理 系統匣「系統代理」目前選項與寫入的位址 先選「清除系統代理」,再選「自動配置系統代理」,接著核對實際位址
瀏覽器沿用系統設定 確認瀏覽器確實使用系統代理,而非另外設定手動代理規則 確認系統 HTTP 代理指向 HTTP 或混合監聽連接埠
瀏覽器個別代理設定 手動設定中的協定、位址與連接埠 SOCKS5 指向 127.0.0.1:11808;HTTP 則使用實際的 HTTP 或混合監聽連接埠
命令列工具 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 等環境變數 移除舊連接埠;修改持續生效的變數後,重新開啟終端機
其他應用程式 下載工具、開發工具中各自儲存的代理位址 逐一替換舊連接埠,避免只有瀏覽器恢復連線

系統代理不會自動覆蓋每個應用程式的個別設定,也不會直接修改已開啟終端機中的環境變數。在 Windows 可前往「設定」→「網路和網際網路」→「Proxy」查看實際設定的代理位址。若使用 PAC 模式,也要確認 PAC 回傳的代理連接埠已更新;排查時先用一個明確指定的手動代理入口測試,減少變因。

依序測試本機入口與遠端請求

測試時請分別確認「本機 TCP 是否能建立連線」和「代理是否能完成請求」。先在 Windows PowerShell 檢查新的監聽連接埠。TcpTestSucceeded 為 True,只表示有程序接受 TCP 連線,不代表節點、DNS、TLS 與路由都正常,因此仍須確認監聽程序的身分。

Test-NetConnection -ComputerName 127.0.0.1 -Port 11808

接著用 curl 明確指定代理,排除系統代理是否生效的不確定因素。以下使用 SOCKS5,適用於 SOCKS 或混合監聽;socks5h 表示將目標網域交由代理解析。Windows PowerShell 請使用 curl.exe;macOS、Linux 則使用 curl 執行相同參數。

curl.exe --proxy socks5h://127.0.0.1:11808 --connect-timeout 10 --max-time 30 -I https://v2rayopenwrt.com/

範例中的 10 秒連線逾時與 30 秒總逾時是指令參數,不是效能測試結果。單一網站的 HTTP 狀態也無法證明所有目標都可連線;此處主要是確認請求是否經由正確的本機入口,以及錯誤發生在哪個階段。

常見問題與再次發生時的處理方式

查不到占用程序,為什麼仍然報錯?

先確認查詢的是錯誤訊息中的連接埠,而不是固定查詢 10808。若錯誤是「不允許存取通訊端」,而非 address already in use,可在 Windows 執行 netsh interface ipv4 show excludedportrange protocol=tcp,檢查系統排除的連接埠範圍。不要直接刪除系統保留範圍;優先改用不在該範圍內且未遭占用的連接埠。

改用 11808 後,需要重新匯入訂閱嗎?

不需要。本機監聽連接埠是應用程式進入代理的入口;訂閱中的伺服器位址與遠端連接埠則是另一組參數。只要儲存本機設定、重新啟動核心並同步更新應用程式代理即可;不要為了解決本機衝突而修改訂閱內容。

重新啟動電腦後又發生衝突,怎麼徹底解決?

重新啟動後、手動開啟 v2rayN 之前先查詢連接埠,確認是否有開機啟動服務先行占用。檢查是否同時啟用了兩個 v2rayN 自動啟動項目。保留一個執行個體,或替必須同時執行的服務指定不同連接埠,再重新驗證完整啟動流程。

需要同時變更 UDP 連接埠或關閉防火牆嗎?

先依記錄中的 tcp 或 udp 分別檢查,TCP 與 UDP 的連接埠範圍不可混為一談。本文的指令主要用來查找 TCP 監聽;若明確是 UDP 繫結失敗,Windows 可使用 Get-NetUDPEndpoint,macOS、Linux 可用 lsof 查詢 UDP。不要為了解決繫結衝突而全面關閉防火牆。

下載用戶端依平台選擇安裝套件