v2rayNのローカルポート競合:10808の使用プロセス特定と待ち受けポート変更

起動時にポート使用中と表示される場合の対処法を解説。Windowsのコマンドで使用プロセスを特定し、設定でローカル混合待ち受けポートを変更したうえで、ブラウザーとシステムプロキシも更新します。

この記事の要点

Windowsでv2rayNの起動後に待ち受けに失敗する、コアが終了する、ブラウザーの接続が拒否される場合に役立ちます。まずログで競合するポートがローカルの10808であることを確認し、PIDから使用中のプロセスを特定します。不要な旧プロセスを安全に終了できる場合はポートを解放し、複数のインスタンスを並行稼働させる場合は空き状況を確認したうえで10818に変更します。システムプロキシ、ブラウザー拡張機能、ターミナルの環境変数も更新し、ローカルの待ち受けと実際のアクセスをそれぞれ確認します。サブスクリプションやリモートノードは先に変更しないでください。

エラーの見分け方:ローカルの待ち受け失敗はノードの障害ではない

v2rayNのメイン画面を開き、下部のログ欄でlisten、bind、ローカルアドレスを含む行を確認します。失敗箇所が127.0.0.1:10808なら、コアがこの接続口を確立できていません。ブラウザーのリクエストはまだコアに届いていないため、この段階でVMessやVLESSのノードを切り替えたり、サブスクリプションを何度も更新したりしても、ローカルポートは解放されません。

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

原因と対処:同じ待ち受けアドレスとポートを、通常は別のプロセスがすでに使用しています。この行のアドレスをもとにPIDを調べ、使用プロセスを確認してから、重複して起動したインスタンスを終了するか、v2rayNの待ち受けポートを変更してください。

エラー:bind: An attempt was made to access a socket in a way forbidden by its access permissions.

原因と対処:システム予約ポート、排他的バインド、セキュリティポリシーなどが関係している可能性があり、通常のプロセスによるポート使用とは限りません。まず待ち受け一覧を確認し、次にWindowsの除外ポート範囲を調べてください。セキュリティソフトを安易に無効化しないでください。

エラー:Failed to connect to 127.0.0.1 port 10808

原因と対処:アクセス元からローカルプロキシに接続できていない状態を示します。このエラーだけではポート競合とは断定できません。コアが動作しているか、クライアントの実際の待ち受けポートが10808のままかを確認してください。

この記事では、Windows 10・Windows 11とv2rayN 7.xの中国語UIを例に、混合待ち受けの設定を説明します。細かなバージョンによって設定項目のグループ分けが異なる場合があるため、現在の画面に表示されている項目を確認してください。古い設定ではSOCKSとHTTPのポートが別々の場合もあります。10808と10809がすべてのバージョンで共通の固定値とは限りません。

10808を待ち受けているプロセスと実行ファイルのパスを調べる

まずPowerShellで次のコマンドを実行します。このコマンドはTCPの待ち受け状態を調べるだけで、プログラムを終了させることはありません。結果が表示されない場合、確認時点でこのポートを待ち受けているTCPプロセスは見つかっていません。結果が表示された場合はOwningProcessを控え、ローカルアドレスがループバックアドレスかワイルドカードアドレスかも確認してください。

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

検索結果のPIDが6420だった場合は、次のコマンドでプロセス名、パス、コマンドラインを確認できます。6420は説明用の例なので、実行時にはこのPCで取得したPIDに置き換えてください。通常の権限ではパスを確認できない場合は、管理者としてPowerShellを開いて再確認できますが、その理由だけでクライアントを管理者権限で実行しないでください。

Get-Process -Id 6420 | Select-Object Id, ProcessName, Path
Get-CimInstance Win32_Process -Filter "ProcessId = 6420" |
  Select-Object ProcessId, ExecutablePath, CommandLine

コマンドプロンプトを使う場合は、次のコマンドでも確認できます。findstrはテキストを絞り込むだけです。ローカルアドレス欄のポートが10808で、状態がLISTENINGであることを必ず確認してください。リモート側のポートや確立済みの接続を、待ち受けの競合と取り違えないようにしましょう。

netstat -ano -p tcp | findstr ":10808"
tasklist /FI "PID eq 6420"

旧インスタンスを終了するか、ローカル混合待ち受けポートを変更する

まず「二重起動」なのか「並行稼働が必要」なのかを切り分けます。使用していない旧インスタンスがポートを使用している場合は、タスクトレイのメニューから「終了」を選び、数秒待ってから再度確認してください。メインウィンドウを閉じてもタスクトレイに最小化されるだけの場合があり、待ち受けポートは解放されません。

  1. 現在の設定を記録する

    「設定」→「パラメーター設定」を開き、現在の待ち受けポート、待ち受けアドレス、LAN接続の設定を記録します。元に戻せるよう、10808の値も控えてください。ノード編集画面のサーバーポートは変更しないでください。

  2. 変更先のポートを確認する

    先ほどのPowerShellコマンドで10818を調べます。-LocalPort 10808を-LocalPort 10818に置き換えてください。待ち受けが見つからなかった場合も、後述の方法で除外範囲を確認してください。10818は例であり、すべてのPCで空いているとは限りません。

  3. 待ち受けポートを変更する

    「設定」→「パラメーター設定」→「Core: 基本設定」を開き、「ローカル混合待ち受けポート」を見つけて10808から10818に変更します。バージョンによってSOCKSとHTTPの項目が別々の場合は、それぞれの値を記録して設定し、以降の設定にも実際のプロトコルに対応するポートを入力してください。

  4. 保存して再読み込みする

    「OK」をクリックし、コアの再読み込みログを確認します。再起動を求められた場合は、案内に従ってv2rayNを完全に終了してから起動し直してください。新たなバインド失敗がないことを確認した後、10818が待ち受け状態になっているか調べます。

  5. 接続口を確認する

    新しいポートに対応するPIDが、現在使用中のクライアントフォルダーに属していることを確認します。PC内だけで使用する場合はループバックでの待ち受けを維持してください。競合を解決するために「LANからの接続を許可」を有効にしないでください。待ち受け範囲を広げても、ポート競合は解消されません。

システムプロキシ、ブラウザー、コマンドラインの接続設定を更新する

ローカル混合ポートでは、HTTPとSOCKSのリクエストに同じ接続口を使えますが、各アプリの個別設定までは自動で書き換わりません。10818に変更した後もブラウザー拡張機能やターミナルが10808を参照していると、「コアは動作しているのにウェブページを開けない」という別の問題が起きます。

アプリのプロキシ設定 ローカル待ち受けポート コアのルーティングルール リモートノードへの接続 接続先サイトの応答
  1. システムプロキシを更新:v2rayNのメイン画面下部にある「システムプロキシ」で、まず「システムプロキシを解除」を選び、続けて「システムプロキシを自動設定」を選択します。これにより接続先の設定が書き直されますが、すべてのアプリがシステム設定に従うわけではありません。
  2. Windowsの設定を確認:Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」を開きます。手動プロキシを使っている場合はアドレスとポートを確認してください。自動構成スクリプトを使っている場合は、古いスクリプトのアドレスが残っていないか確認し、過去の設定を併用しないようにしましょう。
  3. ブラウザー拡張機能を確認:拡張機能でプロキシを管理している場合は、HTTPまたはSOCKSの接続先を127.0.0.1:10818に変更するか、いったんシステムプロキシを使う設定に戻してテストします。拡張機能に古いポートが残っていると、システム設定よりもそちらが優先されます。
  4. ターミナルの環境変数を確認:HTTP_PROXY、HTTPS_PROXY、ALL_PROXYに10808が残っていないか確認します。アプリ独自のプロキシ設定ファイルも確認してください。

以下の操作で変更されるのは現在のPowerShellセッションだけで、環境変数が永続的に保存されることはありません。混合待ち受けが有効な場合は、HTTPの接続先を使って2つの変数を設定できます。HTTPS_PROXYはHTTPSリクエストで使うプロキシを示す変数であり、プロキシのアドレス自体が必ずhttps://で始まる必要はありません。

$env:HTTP_PROXY = "http://127.0.0.1:10818"
$env:HTTPS_PROXY = "http://127.0.0.1:10818"
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue

アプリがもともとSOCKSを使っている場合は、対応状況に応じてsocks5h://127.0.0.1:10818を使ってください。すべてのコマンドラインアプリが同じ環境変数に対応しているとは限りません。システム画面から環境変数を永続的に保存していた場合は、保存済みの値も更新してターミナルを開き直してください。

使用プロセスが見つからない場合は、除外ポートと待ち受け設定を確認する

ログに権限関連のバインドエラーがあるのに、待ち受けの検索結果が空の場合は、Windowsの除外ポート範囲も確認してください。仮想化機能やネットワークサービスの影響で、通常の方法ではバインドできないポートがあります。待ち受け一覧が空でも、そのポートが必ず使えるとは限りません。

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

ローカルのバインド失敗を回避するために、リモートノードのサーバーポートを変更しないでください。サーバーポートは外向き接続の設定、ローカル混合ポートは内向きの待ち受け設定であり、両者を同じ値にする必要はありません。また、最初からネットワーク全体をリセットしたり、クライアントを再インストールしたりしないでください。変更範囲が広がる一方で、ポートの使用プロセスが変わるとは限りません。

2段階で確認:待ち受けを確認してからリクエストをテスト

変更後は、まず10818が待ち受け状態であることを確認し、次にプロキシを明示してリクエストをテストします。「コアが起動していない」「アプリが古いポートを使っている」「リモート接続に失敗している」を切り分けられます。タスクトレイのアイコンだけで修正完了と判断しないでください。

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

curl.exe --noproxy "" --proxy http://127.0.0.1:10818 --connect-timeout 5 --max-time 15 -I https://example.com/

ここではcurl.exeを使います。古いWindows PowerShellでcurlが別のコマンドとして解釈されるのを防ぐためです。--noproxy ""は、既存のプロキシ除外リストによって今回のテストが迂回されるのを防ぎます。5秒は接続タイムアウト、15秒はリクエスト全体のタイムアウトです。いずれもテスト用の設定で、実測した遅延ではありません。例示したサイトはリクエスト経路の確認用です。最終的には、実際にアクセスする必要があるサイトでもテストしてください。

よくある質問:ポート変更後に見落としやすい設定

10808は必ず10818に変更する必要がありますか?

いいえ。10818は比較しやすい例にすぎません。待ち受け状態と除外範囲を確認してから、使用可能なポートを選んでください。ポート番号を大きくしても接続速度は上がりません。選択後は、アクセスする各アプリで同じポートを使うようにします。

PCを再起動するたびに競合します。どうすればよいですか?

エラー発生後に使用中のPIDを調べ、プロセスのパスを確認してください。Windowsの「設定」→「アプリ」→「スタートアップ」とタスクスケジューラを確認し、古いフォルダーから起動する項目が残っていないか調べます。想定した起動方法だけを残し、二重起動を隠すためにポートを何度も変更しないでください。

混合ポートを変更した場合、サブスクリプションとノードも再入力が必要ですか?

ローカルポートの変更を理由に、ノードを再入力する必要はありません。リモートサーバーのアドレス、ポート、認証情報はそのままにし、ローカル接続口を参照するアプリの設定だけを更新してください。サブスクリプションの更新にプロキシを使う場合は、更新リクエストが新しい接続口を使っていることも確認します。

管理者として起動すれば解決しますか?

管理者権限でも、同じ接続口を複数のプロセスで同時に使うことはできません。管理者権限が必要になるのは、アクセス制限されたプロセス情報の確認やシステム診断などです。ポートの競合は、旧インスタンスを終了するか、ポートを変更して解決してください。

作業の最後に、使用する待ち受けポート、対応するプロセスのパス、個別のプロキシ設定を使っているアプリの3点を記録しておきましょう。次回のアップデートやフォルダー移行後にこの3点を確認すれば、問題がローカルの接続口にあるのか、その先の通信経路にあるのかを素早く判断できます。

v2rayNをダウンロードOSとインストーラーを選択