この記事の概要

コアの起動失敗やリスニングアドレスのバインド失敗が発生した場合、またはポート変更後にブラウザーがインターネットに接続できない場合は、まずPCのリスニングポートと使用中のプロセスを確認しましょう。そのうえで、重複して起動したインスタンスを終了するか、ポートを変更します。この記事では10808を10818に変更する例を使い、ログの確認、Windowsでのプロセス特定、v2rayNの設定変更、アプリのプロキシ設定更新までを説明します。ポート番号は操作例です。実際の設定に合わせてください。

ローカルのリスニングポート競合とノード接続エラーを見分ける

v2rayNは設定・管理用の画面で、PCからのプロキシ接続を受け付けるのは起動したコアです。ブラウザーからのリクエストはローカルのリスニングアドレスに送られ、コアがルーティングルールに従って転送します。ローカルポートをバインドできない場合、リクエストがリモートノードに届く前にこの経路が途切れます。サブスクリプションの更新やVMess、VLESSノードの変更では、通常解決できません。

ブラウザーのリクエストローカルリスニングポートコアのルーティングリモートノード接続先サイト

まずメイン画面のログを開き、起動失敗の直前と直後に出力されたエラーを確認します。以下はWindowsのソケットエラーでよく見られる英文です。ログには先頭にリスニングアドレス、ポート、コアの情報が付く場合があります。「接続に失敗しました」という表示だけで、ポート競合と判断しないでください。

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

原因と対処:通常はアドレスまたはポートが使用中で、Windowsのエラーコードは10048です。エラーに記載されたアドレスとポートを確認し、リスニング中のプロセスを特定してください。重複したインスタンスを終了するか、現在のインスタンスに空いているポートを割り当てます。

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

原因と対処:通常はWindowsのエラーコード10013で、システムのポート除外範囲、セキュリティポリシー、その他のソケットバインド制限が関係している可能性があります。通常のリスニングプロセスが見つからない場合は、ポート除外範囲も確認してください。ノードの問題と決めつけないようにしましょう。

ログにリモート接続のタイムアウト、認証失敗、ドメイン名の解決失敗だけが記録され、ローカルのリスニングが確立している場合は、ノードの設定、DNS、ネットワーク経路を確認してください。この記事ではPC上のポートバインドを扱います。インターネットに接続できない現象を、すべてポート競合のせいにするものではありません。

netstatでポートとPIDを確認する

まず「設定」→「パラメーター設定」を開き、現在のローカルリスニングポートを控えます。新しいバージョンでは通常、「Core: 基本設定」に「ローカル混合リスニングポート」が表示されます。バージョンによって項目名や配置が多少異なる場合があるため、実際の画面に表示された項目を確認してください。以下では具体的な値を例に使いますが、すべてのバージョンで同じ初期値とは限りません。

10808
例:確認する変更前のポート
10818
例:確認後に使用する新しいポート
127.0.0.1
PCのIPv4ループバックアドレス

Win + Rを押し、cmdと入力してEnterキーを押します。コマンドプロンプトで1つ目のコマンドを実行します。2つ目のコマンドは、変更先のポートを確認するために使います。

netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10818"
  • 「ローカル アドレス」列を確認し、コロンの後ろが対象のポート番号になっていることを確かめます。findstrはリモートアドレスや、より桁数の多い数値にも一致することがあるため、該当する行をすべて使用中の証拠とみなさないでください。
  • 状態がLISTENINGの行を確認します。最後の列はPID(プロセス識別子)で、ポート番号ではありません。
  • 0.0.0.0:10808や[::]:10808などのワイルドカードアドレスでのリスニングにも注意してください。127.0.0.1だけを検索してはいけません。実際に競合するかどうかは、バインドするアドレスやソケットのオプションによって異なります。
  • TIME_WAITは、アプリがまだポートをリスニング中であることを意味しません。この状態を理由に、無関係なプロセスを終了しないでください。

ポートを正確に絞り込むには、PowerShellで次のコマンドを実行します。TCPのリスニングポートだけを抽出します。OwningProcessが、引き続き確認するPIDです。何も表示されない場合、照会時点で該当するTCPリスニングが見つからなかったことを示します。ポートのバインドが必ず成功するという意味ではありません。

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

リソース モニターでプロセスを特定する

PIDが見つかったら、終了する前にプロセスを特定します。リスニングしているのは現在使用中のコアかもしれませんし、別のフォルダーにあるv2rayN、終了しきれていないプロセス、その他のローカルサービスかもしれません。プロセス名が同じというだけでは、どのインスタンスに属するか判断できません。

  1. リソース モニターを開く

    Win + Rを押し、resmonと入力してEnterキーを押します。「ネットワーク」タブを開き、「リッスン ポート」を展開します。ポート列で10808を探し、イメージ名、PID、プロトコルを確認してください。

  2. 実行ファイルの場所を確認する

    タスク マネージャーの「詳細」タブを開き、PIDで該当するプロセスを探します。右クリックして「ファイルの場所を開く」を選択してください。必要に応じて「コマンド ライン」列を表示し、起動フォルダーと引数が現在のv2rayNに属するものか確認します。

  3. 重複したインスタンスを終了する

    別のv2rayNインスタンスが使用中の場合は、そのインスタンスのタスクトレイメニューから「終了」を選ぶのが安全です。メインウィンドウを閉じてもタスクトレイに最小化されるだけで、プロセスが終了するとは限りません。

  4. リスニング状態を再確認する

    もう一度ポートを照会し、以前のリスニングが消えたことを確認してから、使用するインスタンスを起動します。すぐにリスニングが再開する場合は、タスク マネージャーの「スタートアップ アプリ」とタスク スケジューラで、重複した起動項目がないか確認してください。

コマンドラインでPIDからイメージ名を照会することもできます。例:tasklist /FI "PID eq 4321"。4321は書式を示す例にすぎないため、実際に確認したPIDに置き換えてください。数字をそのまま使ってプロセスを終了しないでください。また、ポートを空けるためにシステムサービスをむやみに終了しないようにしましょう。そのサービスを維持する必要がある場合は、v2rayNのポートを変更する方が適切です。

v2rayNのローカルリスニングポートを変更する

新しいポートを選ぶ前に照会し、競合するポートから別の競合ポートへ移ることがないようにします。ポート番号は1~65535の範囲で、この例では10818を使います。説明用の候補値であり、必ず空いている特別なポートではありません。変更するのはPCのインバウンドリスニングポートです。ノード編集画面にあるサーバーポートではありません。

  1. 現在の設定を控える

    現在のリスニングアドレス、ポート、システムプロキシのモードを控えておきます。ほかのソフトで手動プロキシを設定している場合は、種類とポートも記録してください。設定の更新や復元に役立ちます。

  2. パラメーター設定を開く

    「設定」→「パラメーター設定」→「Core: 基本設定」を開き、「ローカル混合リスニングポート」を探します。画面に「ローカルリスニングポート」などと表示されている場合は、元のポート番号と項目の説明を照合してください。ノードのアドレスやサブスクリプションのURLは変更しないでください。

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

    この例では10808を10818に変更し、設定を保存します。バージョンによってHTTPとSOCKSのリスニング項目が別々にある場合は、それぞれ確認してください。もう一方のポートが自動的に1増えると決めつけず、独立した2つのリスニングに同じポートを割り当てないようにしましょう。

  4. 再起動して確認する

    設定を再読み込みします。保存後にコアが再起動しない場合は、v2rayNを通常の手順で終了してから再度開いてください。起動ログを確認し、10818を照会して、リスニングが確立し、PIDが今回起動したコアのものか確認します。

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

コアが10818でリスニングするようになっても、10808を参照しているアプリは引き続き古いアドレスに接続しようとします。そのため、「コアは起動したのにWebページが開かない」という場合、ポートの変更先ではなく、接続元の設定が更新されていないことがよくあります。ノードを何度も変更するより、以下の項目を順に確認しましょう。

  • システムプロキシ:v2rayNのタスクトレイメニューで「システムプロキシ」→「システムプロキシをクリア」を選び、続けて「システムプロキシを自動設定」を選択します。その後、Windows 11の「設定」→「ネットワークとインターネット」→「プロキシ」を開き、設定されたポートが現在の値と一致するか確認してください。PACを使っている場合は、現在の設定も確認します。手動プロキシの項目だけを見て判断しないでください。
  • ブラウザー:システムプロキシを使うブラウザーは、通常、システム設定に合わせて更新されます。独自のプロキシ設定を使うブラウザーや拡張機能では、ポートを手動で変更してください。Firefoxでは「設定」→「一般」→「ネットワーク設定」→「接続設定」を開き、システムプロキシまたは手動プロキシの設定を確認できます。
  • プロキシの種類:HTTPプロキシとSOCKSプロキシは別のプロトコルです。混合リスニングでは、対応する種類の接続を受け付けられます。個別のリスニングを使う場合は、種類に合ったポートを指定してください。ポートに接続できるだけで、プロトコルが正しいとは限りません。
  • コマンドライン:現在のターミナルとユーザー環境変数にあるHTTP_PROXY、HTTPS_PROXY、ALL_PROXYを確認します。古いポートが設定されている場合は更新し、ターミナルを開き直してください。起動済みのプロセスには、通常、起動時の環境変数がそのまま使われます。

まずローカルのTCP接続を確認し、次にプロキシ経由のリクエストをテストします。1つ目のコマンドで確認できるのは、ポートへのTCP接続が確立するかどうかです。プロキシプロトコルやノードが利用可能かどうかは確認できません。2つ目のコマンドはHTTPプロキシを明示的に指定します。HTTPに対応していることを確認済みの混合リスニングまたはHTTPリスニングで使えます。

Test-NetConnection -ComputerName 127.0.0.1 -Port 10818
curl.exe --proxy http://127.0.0.1:10818 --connect-timeout 10 --max-time 20 --head https://example.com/

どちらのコマンドもPowerShellで実行できます。1つ目が失敗した場合は、リスニング状態とプロセスを再確認してください。1つ目が成功して2つ目が失敗した場合は、プロキシの種類、コアのログ、ノードへの接続を確認します。プロキシを明示したリクエストに応答があるのにブラウザーで接続できない場合は、ブラウザー独自の設定、システムプロキシ、既存の接続キャッシュを重点的に確認してください。このテスト結果だけで、すべてのサイトにアクセスできるとは判断できません。

ポートを使用中のプロセスが見つからない場合は、システムの予約範囲を確認する

エラー10013が発生し、通常のリスニング照会で結果が見つからない場合は、管理者権限のターミナルでWindowsのポート除外範囲を確認できます。仮想化やコンテナーのネットワーク機能がポート割り当てに影響する場合があります。関係があるかどうかは、PC上で実行したコマンドの結果で判断してください。機能をインストールしたことがあるというだけで原因と決めつけないようにしましょう。

netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=tcp
  • 開始ポートと終了ポートを照らし合わせ、10808または変更候補のポートが範囲内に含まれていないか確認します。実際にリスニングするアドレスファミリーも考慮してください。
  • 候補のポートが除外範囲内にある場合は、範囲外で、かつリスニング中でないポートに変更して保存し、動作を確認してください。システムの除外範囲を削除するコマンドを、そのまま実行しないでください。
  • ポートがリスニング中でもなく、該当する除外範囲にも含まれていない場合は、セキュリティソフトのログ、組織のポリシー、カスタム設定内の重複したインバウンドを確認してください。
  • 起動時だけ競合が発生する場合は、その時点のログ全体を保存し、すぐにプロセスを照会してください。プロセスが終了した後では、先ほどポートを使用していたプロセスを確認できないことがあります。

ファイアウォールを無効にすることを最初の対処法にしないでください。ファイアウォールによる通信許可、リスニングのバインド、リモート接続はそれぞれ別の段階です。通常のインバウンド通信をブロックするルールがあっても、プロセスがポートを使用中とは限りません。管理者権限を使っても、競合している2つのリスニングが共存できるようにはなりません。ログに権限やポリシーの問題が明記されている場合に限り、該当する原因を調べてください。

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

ポートを変更するとサブスクリプションやノードに影響しますか?

通常、ローカルリスニングポートを変更してもサブスクリプションの内容やリモートノードのサーバーポートは変わりません。更新が必要なのは、PC上のプロキシに接続するアプリです。カスタム設定を使っている場合は、固定値で指定されたインバウンドポートも確認し、画面上の設定と実際の設定が食い違わないようにしてください。

使用中のプロセスがXrayなら、そのまま終了してもよいですか?

まずPID、ファイルの場所、コマンドラインを使って、どのインスタンスに属するか確認します。現在正常に動作しているコアの場合もあれば、別のインスタンスの場合もあります。該当するv2rayNから終了するのが先です。管理プログラムを終了した後もコアだけが残っていると確認できた場合は、タスク マネージャーでそのプロセスを終了し、リスニング状態を再確認してください。

PCの起動後にまた競合します。毎回ポートを変更する必要がありますか?

何度もポートを変える必要はありません。PCの起動後すぐにポートを照会してPIDを確認し、別々のフォルダーにあるv2rayNが同時に自動起動していないか、別の常駐サービスが先にポートを使っていないか調べてください。必要な起動項目だけを残し、共存させる必要があるプログラムには別々のポートを割り当てることで、次回のサインイン時に同じ問題が起きるのを防げます。

TUNを有効にすれば、この問題を回避できますか?

TUNをポート競合の解決策として使うことはできません。TUNによる通信経路はシステムプロキシとは異なりますが、設定によってはローカルリスニングが残ります。競合しているインバウンドが起動し続ければ、エラーも解消しない可能性があります。まずポートのバインドを解決し、その後、アプリがシステムプロキシを参照するかどうかに応じてTUNが必要か判断してください。詳しくはマニュアルのTUNの項目をご覧ください。

v2rayNクライアントをダウンロード

お使いのシステムとアーキテクチャに合ったクライアントを選んでください。初期設定は、チュートリアルを見ながらサブスクリプションの追加とシステムプロキシの設定を進められます。