適用於 v2rayN 啟動核心時監聽失敗、切換節點後立即退出,或應用程式連線至本機代理遭拒的情況。先查看記錄確認失敗的位址與連接埠,再用 Windows 指令找出監聽程序;確認用途後,選擇關閉重複執行的執行個體或變更連接埠,最後同步更新系統代理與應用程式設定。本文以 Windows 為主,並附上 macOS、Linux 的查詢指令。
先確認是監聽失敗,而非節點逾時
本機監聽連接埠是瀏覽器、終端機等應用程式將流量交給核心的入口,並非遠端節點的伺服器連接埠。如果記錄在核心啟動階段就出現 bind、listen tcp 或「位址已被使用」,應先處理本機監聽問題;這時更換訂閱,或修改 VMess、VLESS 節點參數,通常無法解決連接埠衝突。
開啟 v2rayN 主畫面的記錄區,保留從啟動核心到發生錯誤的完整內容。錯誤訊息外層可能附有「啟動失敗」等說明,真正要找的是最內層那一行:通常會列出監聽協定、IP 位址、連接埠與系統錯誤。以下是可能出現的錯誤片段,實際完整記錄會因版本而異。
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
原因:Windows 常見的位址已占用錯誤,對應通訊端錯誤 10048,可能已有其他監聽程序綁定該位址與連接埠。
解法:查詢記錄中所列連接埠的監聽 PID,確認程序身分後關閉重複執行的執行個體,或替目前的執行個體改用未占用的連接埠。
bind: An attempt was made to access a socket in a way forbidden by its access permissions.
原因:Windows 通訊端錯誤 10013 可能與排除連接埠範圍、獨佔繫結或安全性原則有關,不一定能查到一般的監聽程序。
解法:先查詢監聽記錄,再檢查系統排除的連接埠範圍;不要把每次都以系統管理員身分啟動當成固定解法。
bind: address already in use
原因:macOS、Linux 常見的位址已占用訊息,表示目前設定的目標監聽位址無法繫結。
解法:使用 lsof 或 ss 找出監聽程序,並確認是否同時啟動了兩個 v2rayN。
確認連接埠與版本差異
不要只依照教學中的數字判斷是否衝突。v2rayN 6.x 傳統 Windows 介面常見的預設設定為 SOCKS 連接埠 10808、HTTP 連接埠 10809;部分較新版本或不同核心設定則採用混合監聽,單一連接埠即可接收 HTTP 與 SOCKS 請求。升級或搬移設定後,也可能沿用舊連接埠,因此本文以這兩個數字作為排查範例,不代表所有版本都使用相同預設值。
| 檢查項目 | 範例或範圍 | 判斷依據 |
|---|---|---|
| 傳統分離監聽 | SOCKS 10808、HTTP 10809 | v2rayN 6.x 常見預設設定;請以目前的參數設定為準 |
| 混合監聽 | 同一連接埠接收兩種代理請求 | 查看介面中的監聽類型與核心實際記錄,不要只依連接埠數字判斷協定 |
| 迴路位址 | 127.0.0.1、::1 | 分別為 IPv4、IPv6 迴路位址,需與錯誤訊息中的位址相符 |
| 所有介面 | 0.0.0.0、:: | 繫結範圍較廣,可能與相同連接埠上的特定位址監聽衝突 |
關閉「允許來自區域網路的連線」不代表連接埠已釋出,這項設定主要用來變更監聽範圍。若只供本機使用,優先採用迴路監聽;不要為了避開衝突而改成監聽所有介面,也不要另外啟用區域網路連入設定來反覆測試。
Windows:依連接埠找出 PID 與程式路徑
在 PowerShell 中執行以下查詢。指令只會讀取監聽資訊,不會結束程序;若沒有結果,可能是該連接埠目前沒有監聽,或核心在啟動失敗後已退出。遇到權限不足時,可在系統管理員終端機中重新查詢;查詢所需權限與核心是否應以較高權限執行,是兩回事。
# 查詢 TCP 監聽,保留位址、連接埠與程序 ID
Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
Where-Object { $_.LocalPort -in 10808,10809 } |
Select-Object LocalAddress,LocalPort,OwningProcess
# 取得這些監聽程序的名稱、執行檔路徑與命令列
$ownerIds = @(Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
Where-Object { $_.LocalPort -in 10808,10809 } |
Select-Object -ExpandProperty OwningProcess -Unique)
Get-CimInstance Win32_Process |
Where-Object { $_.ProcessId -in $ownerIds } |
Select-Object ProcessId,Name,ExecutablePath,CommandLine
也可以在命令提示字元中使用系統內建的 netstat。以下運算式會比對本機連接埠,避免將連線至遠端 10808 的記錄誤認成本機監聽;仍須查看狀態欄,只有 LISTENING 才表示 TCP 正在監聽。
netstat -ano -p tcp | findstr /R /C:":10808 " /C:":10809 "
- 記下 PID:輸出的最後一欄是程序 ID。在「工作管理員」→「詳細資料」中依 PID 找到程式,不要只看名稱判斷。
- 確認目錄:同名核心可能由不同位置的 v2rayN 啟動。查看執行檔路徑與命令列,確認它屬於哪個用戶端目錄。
- 區分連線狀態:
TIME_WAIT並非正在提供代理入口的監聽程序,不能據此判定某個應用程式占用了連接埠。 - 確認協定:TCP 與 UDP 使用不同的連接埠範圍。只有記錄明確指出 UDP 繫結失敗時,才使用
Get-NetUDPEndpoint查詢對應連接埠。
判斷方式:先辨識程序,再決定是否結束
如果兩個連接埠都是由舊用戶端目錄中的核心監聽,優先關閉該用戶端;如果占用連接埠的是仍在使用的服務,替目前的 v2rayN 更換連接埠會比較合適。不要只因程序名稱包含 xray 或 v2ray 就強制結束。
釋出連接埠,或在參數設定中更換連接埠
同一台電腦上開啟兩個 v2rayN、關閉視窗後仍在系統匣執行,或舊核心程序沒有隨主程式結束,都可能造成「剛啟動就被占用」的情況。先儲存目前設定,再選擇一種修復方式;不要同時修改節點位址、DNS、路由與監聽連接埠,否則很難判斷是哪項變更生效。
-
關閉重複執行的執行個體
檢查工作列系統匣,在不需要的 v2rayN 執行個體上選擇「結束」。關閉主視窗可能只是將程式縮到系統匣。結束後重新查詢連接埠,確認監聽記錄確實已消失。
-
確認是否有殘留程序
如果主程式已退出但連接埠仍被占用,請在「工作管理員」→「詳細資料」中核對剛才查到的 PID、程式路徑與命令列。只有確認不再需要的殘留核心才執行「結束工作」,不要結束系統程序或不明服務。
-
開啟參數設定
使用傳統選單的 v2rayN,可進入「設定」→「參數設定」尋找本機監聽相關選項。6.x 傳統介面通常可在「Core:基礎設定」頁面查看「本機監聽連接埠」;其他介面請依實際顯示的 SOCKS、HTTP 或混合監聽欄位為準。
-
選擇未占用的連接埠
可先將查詢指令中的數字改為
11808,11809,檢查候選連接埠。分離監聽設定中,請確認每個要啟用的入口都未被占用;如果 HTTP 連接埠會由基礎連接埠加 1 自動產生,也要檢查相鄰連接埠,不要假設兩項都能分開編輯。 -
儲存並重新啟動
儲存參數,讓核心重新載入設定。若核心沒有自動重新啟動,可正常結束 v2rayN 後再開啟。重新查看記錄與 TCP 監聽清單,確認新連接埠是由預期目錄中的核心使用。
查不到占用程序,但仍然繫結失敗,該怎麼辦?
先依照記錄中的位址與連接埠重新查詢。若記錄顯示的是其他連接埠,只查 10808/10809 當然找不到;如果另一個程序在失敗當下也退出了,事後查詢可能同樣沒有結果。確認連接埠數字無誤後,若 Windows 出現 10013 權限相關錯誤,再檢查排除的連接埠範圍。
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
輸出內容會列出起始與結束連接埠。只有目標連接埠落在某個範圍內,才與這次繫結失敗有關;不要因為清單很長就認定系統故障。系統網路元件或虛擬化功能可能會保留這些範圍,直接刪除範圍或停用系統服務可能影響其他網路功能。建議改用範圍之外且沒有監聽程序的連接埠。
- 確認實際位址:
127.0.0.1:10808與[::1]:10808是不同的監聽位址;繫結萬用位址也可能影響其他位址,排查時請保留完整位址欄。 - 查看安全性記錄:若改用多個確認未被占用的連接埠仍然失敗,請查看系統或安全軟體的封鎖記錄;不要直接關閉防護功能,或新增範圍過大的連入放行規則。
- 區分本機與遠端問題:防火牆封鎖遠端連線通常會造成連線失敗或逾時,不能只因「網頁無法開啟」就判定是本機連接埠衝突。
macOS、Linux 的對應查詢方式
使用 v2rayN 桌面版時,先從目前設定確認連接埠,再替換以下指令中的數字。macOS 可使用 lsof,Linux 可使用 ss;顯示程序路徑與權限資訊時可能需要系統管理員權限。結束占用程序前,也應先透過所屬應用程式正常退出。
# macOS:分別查詢兩個範例連接埠
lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN
# Linux:查看監聽通訊端與程序
sudo ss -ltnp '( sport = :10808 or sport = :10809 )'
變更後同步更新系統代理與應用程式設定
更換連接埠只完成了監聽端的修復。如果瀏覽器、終端機或開發工具仍連線至舊連接埠,就會出現「核心已啟動,應用程式仍無法連線」的情況。在 v2rayN 中重新套用「系統代理」→「自動設定系統代理」;如果目前介面沒有這個選單名稱,請使用對應的系統代理自動設定選項,並確認系統記錄的實際位址。
| 使用方式 | 需要同步更新的位置 | 檢查方法 |
|---|---|---|
| Windows 系統代理 | 「設定」→「網路和網際網路」→「Proxy」中的手動 Proxy 設定 | 確認位址與連接埠是否指向新的 HTTP 或混合入口 |
| 手動設定應用程式代理 | 應用程式本身的網路或代理設定 | 不要將 SOCKS5 設定誤填到僅支援 HTTP 的舊入口 |
| 終端機環境變數 | HTTP_PROXY、HTTPS_PROXY、ALL_PROXY | 檢查目前終端機工作階段與啟動設定中的舊連接埠 |
| 背景工具或服務 | 工具設定檔、服務啟動參數 | 修改後依工具要求重新載入或重新啟動 |
可在 PowerShell 中測試新的 TCP 入口。以下範例假設你已啟用 11808;TcpTestSucceeded : True 只表示 TCP 連線已建立,不代表監聽程序身分正確、代理協定可用或遠端節點可連線。請搭配 PID 查詢與實際請求一併判斷。
Test-NetConnection -ComputerName 127.0.0.1 -Port 11808
驗收方式:分開確認監聽已恢復與節點連線狀態
先確認記錄中沒有繫結錯誤、連接埠由正確程序使用,且應用程式連線至新的入口,再使用已知正常的目標網頁測試代理請求。如果這時出現遠端逾時,應改查節點位址、傳輸設定與伺服器狀態,不要繼續反覆更換本機連接埠。
連接埠遭占用常見問題
為什麼重新啟動電腦後可以使用,過一會兒又發生衝突?
檢查是否有另一個 v2rayN 設定為開機啟動,或其他代理服務稍後才啟動。分別記錄衝突前後的連接埠 PID 與程式路徑,再停用重複執行個體的開機啟動,或為仍需同時執行的執行個體設定不同連接埠。重新啟動只能暫時清除程序,無法消除設定衝突。
換掉 10808 後,為什麼記錄仍顯示 10809 遭占用?
目前設定可能仍保留獨立的 HTTP 入口,或由基礎連接埠自動推算相鄰連接埠。回到「設定」→「參數設定」確認所有啟用中的監聽項目,並以新記錄中的完整位址為準。如果只修改檔案而未透過用戶端儲存,檔案也可能已重新產生。
可以把本機連接埠改成節點使用的 443 嗎?
本機入口與遠端節點連接埠沒有必須相同的關係。為了避開衝突而將本機監聽改成 443 並無必要,還可能遇到其他服務占用或權限限制。保留節點原本的伺服器連接埠,只修改參數設定中的本機入口,並同步更新應用程式設定。
變更後瀏覽器恢復正常,終端機卻還連到舊連接埠?
瀏覽器可能使用系統代理,而終端機工具則會讀取環境變數。使用 PowerShell 的 Get-ChildItem Env:*PROXY* 檢查目前工作階段,再查看終端機啟動指令碼與工具本身的代理設定。變更永久環境變數後,通常需要重新開啟已啟動的終端機,才能讀取新值。