v2rayN 本機連接埠遭占用:找出衝突程序並變更監聽連接埠

v2rayN 因連接埠占用而無法啟動核心?教你用系統指令找出占用 10808/10809 的程序,並在設定中改用其他本機連接埠。

本文重點

適用於 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 10809v2rayN 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 "

判斷方式:先辨識程序,再決定是否結束

如果兩個連接埠都是由舊用戶端目錄中的核心監聽,優先關閉該用戶端;如果占用連接埠的是仍在使用的服務,替目前的 v2rayN 更換連接埠會比較合適。不要只因程序名稱包含 xray 或 v2ray 就強制結束。

釋出連接埠,或在參數設定中更換連接埠

同一台電腦上開啟兩個 v2rayN、關閉視窗後仍在系統匣執行,或舊核心程序沒有隨主程式結束,都可能造成「剛啟動就被占用」的情況。先儲存目前設定,再選擇一種修復方式;不要同時修改節點位址、DNS、路由與監聽連接埠,否則很難判斷是哪項變更生效。

  1. 關閉重複執行的執行個體

    檢查工作列系統匣,在不需要的 v2rayN 執行個體上選擇「結束」。關閉主視窗可能只是將程式縮到系統匣。結束後重新查詢連接埠,確認監聽記錄確實已消失。

  2. 確認是否有殘留程序

    如果主程式已退出但連接埠仍被占用,請在「工作管理員」→「詳細資料」中核對剛才查到的 PID、程式路徑與命令列。只有確認不再需要的殘留核心才執行「結束工作」,不要結束系統程序或不明服務。

  3. 開啟參數設定

    使用傳統選單的 v2rayN,可進入「設定」→「參數設定」尋找本機監聽相關選項。6.x 傳統介面通常可在「Core:基礎設定」頁面查看「本機監聽連接埠」;其他介面請依實際顯示的 SOCKS、HTTP 或混合監聽欄位為準。

  4. 選擇未占用的連接埠

    可先將查詢指令中的數字改為 11808,11809,檢查候選連接埠。分離監聽設定中,請確認每個要啟用的入口都未被占用;如果 HTTP 連接埠會由基礎連接埠加 1 自動產生,也要檢查相鄰連接埠,不要假設兩項都能分開編輯。

  5. 儲存並重新啟動

    儲存參數,讓核心重新載入設定。若核心沒有自動重新啟動,可正常結束 v2rayN 後再開啟。重新查看記錄與 TCP 監聽清單,確認新連接埠是由預期目錄中的核心使用。

查不到占用程序,但仍然繫結失敗,該怎麼辦?

先依照記錄中的位址與連接埠重新查詢。若記錄顯示的是其他連接埠,只查 10808/10809 當然找不到;如果另一個程序在失敗當下也退出了,事後查詢可能同樣沒有結果。確認連接埠數字無誤後,若 Windows 出現 10013 權限相關錯誤,再檢查排除的連接埠範圍。

netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp

輸出內容會列出起始與結束連接埠。只有目標連接埠落在某個範圍內,才與這次繫結失敗有關;不要因為清單很長就認定系統故障。系統網路元件或虛擬化功能可能會保留這些範圍,直接刪除範圍或停用系統服務可能影響其他網路功能。建議改用範圍之外且沒有監聽程序的連接埠。

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* 檢查目前工作階段,再查看終端機啟動指令碼與工具本身的代理設定。變更永久環境變數後,通常需要重新開啟已啟動的終端機,才能讀取新值。

下載v2rayN