本文適合 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 $_ }
- 先結束目前執行的 v2rayN。請使用系統匣選單中的結束選項;關閉主視窗不一定會結束程式。接著重新查詢連接埠。
- 若監聽已消失:原本的監聽很可能屬於目前這個執行個體。只要重新啟動一個 v2rayN,確認問題是否再次發生,不必直接結束核心程序。
- 若監聽仍存在:在工作管理員的「詳細資料」頁面依 PID 找出程序,核對執行檔位置與命令列。必要時可從欄位選擇清單啟用這些欄位。
- 確認程序所屬程式後再處理。重複啟動的另一個 v2rayN 可以正常結束;其他必須保留的服務則不應強制終止,改用目前用戶端的連接埠較合適。
看到核心程序名稱,不代表它就是殘留程序:另一個仍在使用的執行個體也可能啟動相同核心。請先核對檔案路徑、父程序與正在執行的用戶端。若查詢程序路徑時遇到權限不足,可用系統管理員權限重新開啟終端機查詢,但不要把「以系統管理員身分啟動用戶端」當成處理連接埠衝突的常規方法。
macOS、Linux:使用 lsof 找出監聽程序
在終端機執行以下指令。-nP 會保留數字位址與連接埠,避免名稱轉換;-sTCP:LISTEN 只顯示 TCP 監聽項目。輸出中的 COMMAND、PID 和 NAME 分別用來確認程序名稱、程序識別碼與監聽位址。
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN
- 若一般使用者看不到預期程序,在取得授權的情況下,可使用
sudo lsof重新查詢。 - 若 Linux 顯示找不到 lsof,可使用
sudo ss -ltnp 'sport = :10808'查看監聽與程序資訊。 - 先透過所屬程式的介面正常結束;若該程序是背景服務,應使用該服務的管理方式停止。不要對不熟悉的 PID 執行強制終止。
- 處理後再次查詢同一個連接埠。若監聽很快又出現,請檢查開機啟動項目、背景服務或其他用戶端執行個體,不要反覆終止程序。
變更 v2rayN 本機監聽連接埠
確認占用程序必須保留後,再變更 v2rayN 設定。先記下舊連接埠與目前的系統代理狀態,方便需要時還原。不同版本的欄位名稱可能是「本機混合監聽連接埠」,也可能分別列出 SOCKS、HTTP 連接埠;請依實際存在的欄位修改,不要照著舊教學尋找不存在的 HTTP 欄位。
-
確認新連接埠未遭占用
先用前文的指令檢查 11808;若目前設定分別監聽兩種協定,再檢查 11809。查不到監聽只表示目前未遭占用,無法保證其他程式日後不會使用。
-
開啟參數設定
在主畫面依序進入「設定」→「參數設定」→「Core 基礎設定」,找到本機監聽連接埠欄位。若介面上的分組名稱略有不同,請以包含本機連接埠或監聽位址的設定頁為準。
-
輸入新連接埠
混合監聽的範例改為 11808;分開設定 SOCKS 與 HTTP 監聽的範例,則分別改為 11808、11809。只變更本機入站連接埠,不要修改伺服器編輯視窗中的遠端連接埠。
-
儲存並重新啟動
儲存設定,等待用戶端套用變更。若記錄中沒有顯示重新啟動,請從系統匣正常結束程式,再啟動一個執行個體,確認新記錄中是否仍有 bind 錯誤。
-
再次確認監聽狀態
查詢 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/
- 顯示無法連線至本機連接埠:重新查詢監聽狀態,檢查連接埠是否輸入錯誤、核心是否已結束,或監聽位址是否不是 127.0.0.1。
- 出現代理協定錯誤:確認是否將 HTTP 請求送至只接受 SOCKS 的入口,或反過來;連接埠號碼本身無法判斷協定。
- 本機連線成功,之後交握失敗或逾時:接著檢查節點、DNS、TLS 與路由記錄,不要再將問題歸類為連接埠遭占用。
- curl 成功,但瀏覽器失敗:優先檢查瀏覽器個別代理、系統代理與 PAC,尤其是是否殘留 10808、10809。
範例中的 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。不要為了解決繫結衝突而全面關閉防火牆。