v2rayNのローカルポート競合

v2rayNの起動時にポート使用中と表示されたら、システムコマンドで10808などを使用しているプロセスを特定し、設定からローカル待ち受けポートを変更してシステムプロキシを再設定します。

この記事の要点

Windowsでv2rayNを起動した後に、待ち受けの失敗、コアの終了、システムプロキシへの接続不能が発生する場合に役立ちます。まずログで競合しているアドレスを確認し、ポートに対応するプロセスIDから該当プログラムを特定します。重複起動したインスタンスを終了できる場合は終了し、ポートを解放できない場合はローカル待ち受け設定を変更します。最後にシステムプロキシと手動設定のアプリを更新します。調査対象はPC内の接続口に絞り、サブスクリプションやノードのプロトコルを先に変更する必要はありません。

1. エラーがローカル待ち受け時に発生しているか確認する

v2rayNのメイン画面にあるログ欄を開き、サービスを再起動して最新のエラーに記録されたアドレス、ポート、時刻を確認します。よく使われるローカルアドレスは 127.0.0.1:10808 ですが、実際のログを優先してください。旧設定では10808をSOCKS、10809をHTTPの接続口として個別に使う場合があります。混合ポートの設定では、同じポートで両方のプロトコルを受け付けることもあるため、ポート番号だけで種類を判断しないでください。

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

原因と対処:Windowsからアドレスがすでに使用中と通知されています。同じクライアントを重複して起動した場合や、別のプログラムが同じアドレスとポートで待ち受けている場合によく発生します。そのポートを待ち受けているプロセスを調べ、実行元を確認してから重複インスタンスを終了するか、現在のクライアントに空いているポートを割り当ててください。

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

原因と対処:システムによってバインドが拒否されています。除外ポート範囲やセキュリティポリシーが関係している可能性があり、必ずしも別のプログラムがポートを使用しているとは限りません。まず待ち受けプロセスを調べ、次にシステムの予約範囲を確認してください。何度も管理者権限で起動することだけを解決策にしないでください。

エラー:connectex: No connection could be made because the target machine actively refused it.

原因と対処:接続先から拒否されたことを示すエラーで、待ち受けポートの競合を直接示すものではありません。接続先がローカルプロキシの場合は、コアが終了していないか、アプリが古いポートを参照していないか確認してください。接続先がリモートサーバーの場合は、別途リモート接続を調査します。

ローカル待ち受けの失敗は、リクエストがプロキシコアに届く前に発生します。VMessやVLESSのノードを変更したり、サブスクリプションを再インポートしたりしても、通常はPC内のポートは解放されません。まず問題をローカルの接続口に限定してください。ルーティング、DNS、アウトバウンド設定も同時に変更すると、どの操作が有効だったのか分からなくなります。

2. 10808を使用しているプロセスを特定する

Win + R を押し、cmd と入力してEnterキーを押します。次のコマンドを実行してください。ログに別のポートが表示されている場合は、10808を実際の番号に置き換えます。コマンドではポート番号の後に半角スペースを入れ、108080などの数字まで誤って一致しないようにします。

netstat -ano -p tcp | findstr /C:":10808 "

ローカルアドレスと状態の列を確認してください。任意の行が見つかっただけで判断を終えないようにします。以下は各項目の見方を示す例で、実際のプロセス番号ではありません。ローカルアドレスが対象ポートと一致し、状態が LISTENING の記録がある場合に限り、TCPの待ち受けプロセスが存在すると判断できます。

TCP    127.0.0.1:10808    0.0.0.0:0    LISTENING    6420

PIDが6420だった場合は、次の検索を実行します。別のPIDが表示された場合は数字を置き換えてください。次に「タスク マネージャー」→「詳細」タブを開き、PIDでプロセスを探します。右クリックして「ファイルの場所を開く」を選び、どのプログラムまたはクライアントのフォルダーに属しているか確認してください。

tasklist /FI "PID eq 6420"

PowerShellでローカルのTCP待ち受けポートを直接絞り込む方法もあります。何も表示されなければ、今回の検索で該当する待ち受けは見つかりませんでした。アクセス許可エラーが表示された場合は、まず検索権限を解決してください。ポートが空いていると判断してはいけません。

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

3. 重複インスタンスを終了してからポート変更を判断する

プロセス名が分かっても、すぐに強制終了しないでください。XrayやV2Flyのコアプロセスは、使用中のv2rayNから管理されている場合があります。終了すると既存の接続が切断されます。特に旧版と新版のフォルダー、スタートアップ項目が残っている場合は、現在のメイン画面がどのプログラムに対応しているかを先に確認してください。

  1. 競合元を記録する

    待ち受けアドレス、ポート、PID、プログラムのパスを記録します。メイン画面が2つ開いている場合は、通知領域の各インスタンスも確認し、使用中の接続を誤って終了しないようにしてください。

  2. 古いインスタンスを通常終了する

    古いインスタンスの通知領域メニューから「終了」を選びます。ウィンドウを閉じただけでは通知領域に隠れる場合があり、コアの待ち受けポートが解放されたとは限りません。

  3. 待ち受けを再確認する

    ポート検索をもう一度実行します。古いPIDが消えていたら、残すv2rayNのインスタンスを起動して動作を確認してください。この段階では、トラブル調査のためだけにポートを変更する必要はありません。

  4. 残留プロセスを処理する

    該当クライアントが終了済みで、そのプロセスが残留していると確認できた場合に限り、「タスク マネージャー」→「詳細」タブから終了してください。コアプロセスをまとめて終了したり、正体の分からないシステムサービスを終了したりしないでください。

ポートを使用しているのが継続して動かす必要のある別のプログラムなら、そのまま残し、v2rayNのローカル接続口を変更してください。PCを再起動するたびに再発する場合は、「タスク マネージャー」→「スタートアップ アプリ」を確認し、ログイン時に2つのプログラムが同じポートを取り合わないよう、重複した起動項目を整理します。

4. 待ち受けポートを変更してシステムプロキシを再設定する

ここでは10808を10818に変更する例を紹介します。10818は候補の一つであり、すべてのPCで空いているとは限りません。変更前に同じコマンドで使用状況を調べてください。旧設定でHTTPの接続口を別に使っている場合は10819も確認できますが、独立した2つの待ち受けに同じポートを指定しないでください。

  1. プロキシ接続を一時停止する

    まずv2rayNの通知領域にある「システムプロキシ」メニューから「システムプロキシを解除」を選択します。通常のローカルプロキシ接続を調べる場合は、観察に影響しないようTUNもオフにしてください。

  2. 待ち受け設定を開く

    「設定」→「パラメータ設定」を開き、基本設定にある「ローカル待ち受けポート」または該当するSOCKS、HTTPの待ち受け項目を探します。バージョンによって項目の分類や名称が異なる場合があるため、現在の項目とログに記録されたポートを照らし合わせて変更してください。

  3. 新しいポートを保存する

    待ち受けポートを10808から10818に変更して設定を保存し、サービスを再起動します。専用の再起動項目がない場合は、クライアントを通常終了してから再度開いてください。画面上の数値を変更しただけでコアが再読み込みされていないと、古いポートで待ち受けが続くことがあります。

  4. システムプロキシを再設定する

    新しいポートで待ち受けが始まったことを確認してから、「システムプロキシ」→「システムプロキシを自動設定」を選びます。Windowsの「設定」→「ネットワークとインターネット」→「プロキシ」を開き、手動プロキシのポートがクライアントのHTTPまたは混合ポートと一致するか確認してください。

  5. 手動設定のアプリを更新する

    ブラウザー拡張機能やダウンロードツールなど、手動でプロキシを設定しているアプリを一つずつ確認します。SOCKS5を使うアプリにはSOCKSまたは混合ポートを、HTTPを使うアプリにはHTTPまたは混合ポートを指定してください。数字だけを変更してプロトコルの種類を見落とさないようにします。

5. 使用中のプロセスが見つからない場合は予約範囲を確認する

アクセス許可に関するバインドエラーがログに繰り返し表示される一方、待ち受けプロセスが見つからない場合は、管理者ターミナルを開いてWindowsの除外ポート範囲を確認します。仮想化やネットワーク関連のコンポーネントによって、一般のプログラムがバインドできないポートが生じることがあります。この場合、PIDを探しても原因が分からないことがあります。

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

待ち受けアドレスを 0.0.0.0 に変更しても、汎用的な解決策にはなりません。アクセスできる範囲が広がる可能性があるうえ、ワイルドカードアドレスによる競合を確実に回避できるわけでもありません。プロキシをPC内だけで使う場合は、ループバック待ち受けを維持すると接続口を制限しやすくなります。

6. 接続経路に沿って修復結果を確認する

アプリのプロキシ設定ローカル待ち受けルート判定リモート接続ページの応答

修復後は、まず最初の2段階を確認してからノードの利用可否を判断します。10818を再検索し、該当するコアのPIDで待ち受けていることを確認してください。ログにバインドエラーが繰り返し表示されなくなれば、ローカル待ち受けは確立しています。ただし、それだけではリモート接続が正常とは判断できません。

ローカル待ち受けが正常になった後で、ログにリモート側のハンドシェイクエラーや接続タイムアウトが表示される場合、問題は次の段階に移っています。その場合はノードのアドレス、リモートポート、システム時刻、ネットワーク環境を確認してください。異なる2つの問題を「10808が使用中」という一つの原因にまとめないようにします。

7. ポート競合に関するよくある質問

10818に変更したのに、ブラウザーが接続できないのはなぜですか?

まず10818で正しいプロセスが待ち受けていることを確認し、「システムプロキシ」→「システムプロキシを自動設定」をもう一度実行します。ブラウザー拡張機能に127.0.0.1:10808が手動設定されている場合、システムプロキシの変更は拡張機能に反映されません。個別に変更し、HTTPまたはSOCKS5の種類も一致させてください。

使用中のプロセスがXrayです。強制終了してもよいですか?

まずPIDとファイルの場所から、どのクライアントに属するか確認し、該当する通知領域のインスタンスから通常終了してください。クライアント終了後もプロセスが残っている場合に限り、プロセスの終了を検討します。動作中のコアがローカルポートを使用するのは正常です。

10818をルーターのポートフォワーディングに追加する必要がありますか?

PC内のアプリがループバックプロキシに接続する場合、ルーターのポート転送は不要です。ルーターの外部向けポートをローカルプロキシに転送しても待ち受けの競合は解消せず、アクセス範囲を広げるおそれがあります。127.0.0.1での待ち受けを維持し、PC内のポートとプロセスの関係を調べてください。

クライアントを再インストールしても直らないのはなぜですか?

ポートの使用状況は、実行中のプロセスやシステムルールによって決まり、クライアントのファイルを入れ替えても自動的には解放されません。まず待ち受けPID、重複した起動項目、除外範囲を確認してください。原因を特定してから待ち受け設定を変更するほうが、有効な設定を維持しながら問題を見つけやすくなります。

v2rayNをダウンロード