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

v2rayNの起動時にポート使用中と表示される、またはシステムプロキシが機能しない場合に、Windowsのコマンドで10808・10809を使用中のプロセスを特定し、設定からローカル待ち受けポートを変更する方法を解説します。

この記事の要点

Windows版v2rayNでコアの起動に失敗する、「アドレスは既に使用されています」と表示される、またはポート変更後にブラウザーが接続できない場合に役立ちます。まず待ち受けアドレスとポートを確認し、次にプロセスを特定します。重複起動したアプリを安全に終了できる場合はポートを解放し、複数のアプリを同時に使う場合はローカルの受信ポートを変更します。最後にシステムプロキシとブラウザーの設定を合わせて動作を確認します。リモートノードのポートは変更しません。

10808・10809とノードのポートを区別する

ローカル待ち受けポートは、ブラウザーなどのアプリがv2rayNに接続するための入口であり、サーバー側のポートではありません。クライアントはローカルアドレスへのバインドに成功して初めてリクエストを受け付けます。ログにaddress already in useまたは「通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートを 1 つのみ使用できます」と表示された場合は、サブスクリプションの再インポート、ノードの変更、TLS設定の変更ではなく、まずローカルの競合を調べてください。

10808
一般的なローカルSOCKSまたは混合受信ポート。実際の設定を確認してください
10809
一部の古い設定で使われる専用HTTP受信ポート
20808
この記事での変更例。使用前にポートの使用状況を確認してください

受信設定は世代や画面のバージョンによって異なります。古い設定では10808をSOCKS用、10809をHTTP用として別々に使う場合があります。混合受信に対応した設定では、HTTPとSOCKSで同じポートを共有できます。ポート番号だけでプロトコルを判断せず、「設定」→「パラメータ設定」のローカル受信設定を確認し、起動ログも照合してください。

待ち受けプロセスを特定する:ローカルポートを確認してPIDを調べる

Windows PowerShellを開き、次のコマンドを実行します。接続の確認には通常、一般ユーザー権限で十分です。プロセスのパスを取得できない場合は、管理者としてターミナルを開いてください。このコマンドはTCPの待ち受け状態を確認するだけで、プロセスの停止やネットワーク設定の変更は行いません。

Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
  Where-Object { $_.LocalPort -in 10808,10809,20808 } |
  Select-Object LocalAddress,LocalPort,State,OwningProcess

LocalPortとOwningProcessを確認します。10808にプロセスIDが表示されたら、次のコマンドでプロセス名とパスを調べてください。以下の1234は例として示したPIDです。実行前に、検索結果で得た実際の数値に置き換えてください。PowerShellの$PIDは現在のPowerShell自身のプロセスIDを示すため、一時変数として使わないでください。

Get-Process -Id 1234 | Select-Object Id,ProcessName,Path

コマンドプロンプトを使う場合は、次のコマンドも実行できます。結果の「ローカル アドレス」列の末尾が対象ポートと一致し、状態がLISTENINGであることを確認してください。リモート接続に表示された10808をローカルの待ち受けと誤認しないようにします。TIME_WAITだけでは、プロセスがプロキシを提供中だとは判断できません。

netstat -ano -p tcp | findstr /C:":10808" /C:":10809"
tasklist /FI "PID eq 1234"

使用中のプロセスを確認する:重複起動を終了するか、ローカルポートを変更する

ポートを使用しているのは、別に起動したv2rayN、終了後に残ったコアプロセス、または停止できない別のサービスかもしれません。プロセス名が同じでも、現在表示中のウィンドウに属するとは限りません。特に、異なるフォルダーからクライアントを起動した場合は、プロセスのパスと起動時刻を実際のクライアントフォルダーと照合してください。

重複起動したクライアントを通常終了する

推奨

以前のウィンドウを使っていないことを確認してから、該当する通知領域アイコンのメニューで「終了」を選び、待ち受け状態を再確認します。コアプロセスが残っている場合は、タスクマネージャーでパスを確認してから終了し、使用するクライアントを再起動してください。

適したケース:クライアントを誤って2つ起動した、以前のインスタンスが完全に終了していない

ローカル待ち受けポートを変更する

既存のサービスを維持したまま、現在のクライアント用に未使用かつシステムの除外範囲外のポートを選びます。例:20808。その後、古いポートを参照しているローカルアプリもすべて更新してください。新しいコアは起動しているのに、ブラウザーが以前のインスタンスへ接続する事態を防げます。

適したケース:複数のサービスを同時に使う、元のポートが別の用途に使われている

v2rayNのローカルポートを変更してコアを再読み込みする

ここでは一般的な「設定」→「パラメータ設定」から変更する方法を説明します。クロスプラットフォーム版と従来版では項目名や配置が異なる場合があります。「ローカル待ち受けポート」「SOCKSポート」「HTTPポート」または混合受信の項目を確認し、サブスクリプションに含まれるノードのサーバーポートは変更しないでください。

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

    現在の待ち受けアドレス、ポート、システムプロキシの状態を記録します。たとえば、現在の設定が127.0.0.1:10808で、古い設定にHTTPポート10809もある場合です。ローカルの設定項目だけを記録し、サブスクリプションURLやノードの認証情報をコピーする必要はありません。

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

    先ほどのPowerShellコマンドで、20808を待ち受けているプロセスがないことを確認します。HTTP受信を独立させる場合は、使用予定の20809も確認してください。検索結果に何も表示されなくても、それは確認時点でTCPの待ち受けがないという意味です。システムによる予約範囲にも注意してください。

  3. 受信ポートを変更する

    「設定」→「パラメータ設定」を開き、実際に使用しているローカル待ち受けポートを10808から20808に変更します。独立したHTTP項目があり、変更が必要な場合は10809を20809に変更します。混合受信の場合は、別の接続口を追加する必要はありません。

  4. 保存して再起動する

    設定を保存し、クライアントに変更が反映されるまで待ちます。ログに新しいポートでの待ち受けが表示されない場合は、通知領域から通常の手順で終了してv2rayNを再起動します。その後、20808の待ち受けPIDを確認し、現在のクライアントが起動したコアであることを確かめてください。

  5. システムプロキシを設定し直す

    通知領域の「システムプロキシ」メニューで、まず「システムプロキシを解除」を選び、続けて「システムプロキシを自動設定」を選びます。画面によってメニューの文言は異なりますが、古いポートを残すのではなく、現在のHTTPまたは混合受信アドレスをシステムプロキシに再設定してください。

ローカルアプリ専用なら、ループバックアドレスのままにしてください。ポート競合の解決を目的に「LANからの接続を許可」を有効にしないでください。待ち受け範囲が変わるだけで、使用中のポートが解放されるとは限りません。ポートはクライアントの受信設定に属する項目です。VMessやVLESSのノードを切り替えることや、別のルーティングルールを選ぶこととは、設定のレイヤーが異なります。

システムプロキシ、ブラウザー、コマンドラインを同期する

ポート変更後に見落としやすいのは、接続する側の設定です。Windowsのシステムプロキシ、ブラウザーの手動プロキシ、ターミナルの環境変数には、それぞれ古い値が残る場合があります。v2rayNだけを変更しても、すべてのアプリが自動更新されるわけではありません。結果が混乱しないよう、次の順に一つずつ確認し、ノード、DNS、ルーティングは同時に変更しないでください。

PowerShellで現在のプロセスの環境変数を確認できます。出力にアカウント情報が含まれる場合は、ローカルで確認し、公開の掲示板などにそのまま貼り付けないでください。

Get-ChildItem Env: |
  Where-Object { $_.Name -match '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY)$' }

修復を確認する:ローカルの接続口とリモート接続を区別する

まずTCP接続を確認し、次にプロキシプロトコルをテストします。最初のコマンドが成功しても、ローカルポートに接続できたことを示すだけで、ノードの有効性までは確認できません。実際の受信方式に合わせて、HTTPまたはSOCKS5のテストコマンドを選んでください。両方を実行する必要はありません。

Test-NetConnection 127.0.0.1 -Port 20808

# HTTPまたは混合受信向け
curl.exe --noproxy "" --proxy http://127.0.0.1:20808 --connect-timeout 5 --max-time 20 -I https://1v2ray.com/

# SOCKS5または混合受信向け
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:20808 --connect-timeout 5 --max-time 20 -I https://1v2ray.com/

curl.exeと明示すると、一部のPowerShell環境でcurlが別のコマンドとして解釈されるのを防げます。socks5hを使うと、接続先のドメイン名をプロキシ側で解決します。接続タイムアウトの5秒と全体のタイムアウトの20秒はテスト用の設定であり、通信速度を保証するものではありません。独立したHTTPポート20809を使用する場合は、HTTPのテストコマンドも合わせて変更してください。

ポートの使用状況に問題が見つからない場合のよくある疑問

待ち受け中のプロセスがないのに、なぜバインドに失敗するのですか?

「アドレスは既に使用されています」と「ソケットへのアクセス権が拒否されています」を区別してください。後者は、Windowsの除外ポート範囲、セキュリティポリシー、バインド先アドレスが関係している可能性があります。以下のnetshコマンドで範囲を確認してください。新しいポートが範囲内なら、システムの予約項目を削除せず、範囲外の空きポートを選んでください。

アプリを終了しても10808が待ち受け中の場合はどうすればよいですか?

OwningProcessを再確認し、タスクマネージャーの「詳細」タブでPIDとファイルの場所を照合します。終了済みクライアントのコアプロセスが残っていると確認できてから、プロセスを終了してください。終了後すぐに再び現れる場合は、別のクライアント、スタートアップアプリ、または自動起動させるサービスを確認します。

20808に変更したら、ブラウザーだけ使えなくなったのはなぜですか?

まずcurl.exeで新しいポートを明示してテストします。成功した場合は、ブラウザーに10808が残っていないか、手動プロキシ拡張機能がシステム設定を上書きしていないかを確認し、Windowsの「プロキシ」画面も照合してください。ひとつのアプリに設定が反映されていないからといって、ノードの設定を再変更しないでください。

再起動のたびにポートが競合します。ずっとポートを変え続ける必要がありますか?

再起動後は2つ目のクライアントを手動で起動せず、元のポートのPIDを直接確認してください。タスクマネージャーの「スタートアップ アプリ」と、普段使うクライアントのフォルダーを調べ、起動方法を一つに統一します。複数のインスタンスを同時に使う必要がある場合は、それぞれに重複しない固定のローカルポートを設定してください。

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

修復完了の目安は、新しいポートを想定どおりのコアが待ち受け、明示的なプロキシテストで応答があり、システムと各アプリのプロキシ設定が正しい接続口を参照していることです。解決しない場合は、ローカルポート、プロセス名、エラーの原文、発生手順を記録し、トラブル診断で引き続き原因を調べてください。記録にサブスクリプションURLやノードの認証情報を含める必要はありません。

v2rayNをダウンロード