v2rayNのローカルポート競合を解決|10808の使用状況確認と待受ポート変更

起動時にポート競合が発生したら、netstatまたはlsofで10808/10809を使用中のプロセスを特定し、v2rayNの設定でローカル待受ポートを変更。システムプロキシとブラウザーの設定も更新します。

この記事の概要

この記事は、v2rayNの起動時にコアの起動に失敗する、ログにbindエラーが出る、またはポート変更後もブラウザーが接続できない場合に役立ちます。まず待受アドレスとポートを確認し、使用中のプロセスを調べます。そのうえで、重複したインスタンスを終了するか、ローカルポートを変更します。WindowsではnetstatとPowerShell、macOS・Linuxではlsofを使用します。変更後はシステムプロキシ、ブラウザー、コマンドライン環境も更新してください。

まずローカル待受の失敗か確認

v2rayNはデスクトップクライアントで、実際にローカルで待ち受けるのは起動したプロキシコアです。ブラウザーがローカルのプロキシ入口に接続し、コアがルーティングルールに従って通信を転送します。入口ポートのバインドに失敗した場合、リクエストはまだリモートへの接続段階に達していません。この状態でサブスクリプションを更新したり、VMessやVLESSの設定を切り替えたりしても、通常はポート競合を解決できません。

ブラウザーからのリクエスト ローカル待受 ルーティング判定 リモート接続 レスポンス

v2rayNのメイン画面でログ欄を開き、エラー行に記載されたプロトコル、待受アドレス、ポートを控えます。以下の2種類のエラーはいずれもバインド失敗を示しますが、OSやコアによって表現が異なります。ログの前後に時刻、インバウンド名などの情報が付く場合もあります。

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

原因:Windowsで指定されたアドレスとポートが、すでに別の待受プロセスに使用されています。対処:ログに記載されたポートからPIDを調べ、プロセスを確認してから、重複したインスタンスを終了するかv2rayNのローカル待受ポートを変更します。

bind: address already in use

原因:macOS・Linuxで指定されたアドレスとポートが使用中です。対処:lsofで待受プロセスを調べ、競合するサービスを停止するか、v2rayNに未使用のポートを割り当てます。

Windows:待受ポートからプロセスを特定

PowerShellまたはコマンドプロンプトで次のコマンドを実行します。netstatの検索結果にはローカルアドレスとリモートアドレスの両方が含まれることがあるため、行全体を確認してください。ローカルアドレスが対象ポートで、状態がLISTENINGの行を探します。最後の列に表示されるのが待受プロセスのPIDです。リモートアドレスに10808が含まれている接続を、ポートの使用プロセスと誤認しないでください。

netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"

出力が多い場合は、PowerShellでローカルポートと待受状態を指定して絞り込めます。2つ目のコマンドは、取得したPIDをGet-Processに渡し、対応するプロセス名を表示します。

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

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty OwningProcess -Unique |
  ForEach-Object { Get-Process -Id $_ }
  1. まず、起動中のv2rayNを終了します。トレイメニューから終了を選んでください。メインウィンドウを閉じただけでは、プログラムが終了していない場合があります。その後、ポートを再確認します。
  2. 待受が消えた場合:元の待受は現在のインスタンスによるものだった可能性が高いです。v2rayNを1つだけ起動し、再発するか確認してください。コアのプロセスを直接終了する必要はありません。
  3. 待受が残っている場合:タスクマネージャーの「詳細」タブでPIDからプロセスを探し、実行ファイルの場所とコマンドラインを確認します。必要に応じて、列の選択から該当項目を有効にしてください。
  4. プロセスの所属先を確認してから対処します。重複して起動したv2rayNは通常の手順で終了できます。停止できない別のサービスが待受中なら、強制終了せず、現在のクライアントのポートを変更してください。

コアのプロセス名が表示されても、残存プロセスだとは限りません。使用中の別インスタンスが同じコアを起動している場合もあります。ファイルの場所、親プロセス、実行中のクライアントを先に確認してください。プロセスのパスを調べる際に権限不足となった場合は、管理者権限でターミナルを開き直して確認できます。ただし、「管理者として実行」することをポート競合の一般的な解決策と考えないでください。

macOS・Linux:lsofで待受プロセスを確認

ターミナルで次のコマンドを実行します。-nPはアドレスとポートを数値のまま表示し、名前解決を避けます。-sTCP:LISTENはTCPの待受だけを表示します。出力のCOMMAND、PID、NAMEから、プロセス名、プロセスID、待受アドレスを確認できます。

lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN

v2rayNのローカル待受ポートを変更

使用中のポートを別の用途で維持する必要があると確認できたら、v2rayNの設定を変更します。元のポートとシステムプロキシの状態を控えておくと、元に戻す際に便利です。画面によって項目名が「ローカル混合待受ポート」だったり、SOCKSとHTTPが別々に表示されたりします。実際にある項目を変更し、古い手順に載っている存在しないHTTP入力欄を探さないでください。

  1. 新しいポートを確認

    前述のコマンドで11808の使用状況を確認します。設定で2つのプロトコルを別々に待ち受ける場合は、11809も確認してください。待受が見つからなくても、現時点で未使用というだけで、今後ほかのプログラムが使わない保証にはなりません。

  2. 設定画面を開く

    メイン画面から「設定」→「パラメーター設定」→「Core 基本設定」と進み、ローカル待受ポートの項目を探します。画面のグループ名が多少異なる場合は、ローカルポートや待受アドレスを設定するページを確認してください。

  3. 新しいポートを入力

    混合待受の場合は11808に変更します。SOCKSとHTTPを別々に待ち受ける場合は、それぞれ11808、11809に変更します。変更するのはローカルのインバウンドポートです。サーバー編集画面のリモートポートは変更しないでください。

  4. 保存して再起動

    設定を保存し、クライアントに反映されるまで待ちます。ログに再起動の表示がない場合は、トレイから通常の手順で終了してからインスタンスを1つ起動し、新しいログにbindエラーが出ていないか確認してください。

  5. 待受を再確認

    11808の待受PIDを調べ、今回起動したコアのプロセスであることを確認します。古い10808を別のサービスが引き続き使っていても問題ありません。v2rayNが新しいポートで正常に待ち受けていることが重要です。

クライアントが自動生成する実行用設定ファイルを直接編集して、ポート変更を保持しようとしないでください。ノード切り替え、設定の保存、コアの再起動などでファイルが再生成される場合があります。カスタム設定を使っている場合は、カスタムインバウンドのlisten、port、protocolも確認してください。画面の設定だけを変更しても、古いインバウンドが読み込まれている可能性があります。

システムプロキシとアプリのプロキシ先を更新

ポート変更後も、ブラウザーが古い127.0.0.1:10809に接続しようとする場合があります。この場合、コアは正常に起動していますが、アプリが正しい入口に接続できていません。ノードを切り替えるのではなく、プロキシ設定を1つずつ更新してください。

接続元 確認する項目 変更例
v2rayNのシステムプロキシ トレイの「システムプロキシ」で選択中の項目と、設定されているアドレス まず「システムプロキシを解除」を選び、次に「システムプロキシを自動設定」を選択して、実際のアドレスを確認
システムプロキシを使うブラウザー 個別の手動プロキシ設定ではなく、システムプロキシを実際に使用しているか システムのHTTPプロキシがHTTPまたは混合待受ポートを指しているか確認
ブラウザー個別のプロキシ設定 手動設定のプロトコル、アドレス、ポート SOCKS5は127.0.0.1:11808に設定。HTTPは実際のHTTPまたは混合待受ポートを指定
コマンドラインツール HTTP_PROXY、HTTPS_PROXY、ALL_PROXYなどの環境変数 古いポートの設定を削除。環境変数を永続的に変更した場合は、ターミナルを開き直す
その他のアプリ ダウンロードツールや開発ツールに個別に保存されたプロキシアドレス 古いポートを1つずつ置き換え、ブラウザー以外の接続も確認

システムプロキシを設定しても、アプリごとの個別設定がすべて上書きされるわけではありません。また、すでに起動しているターミナルの環境変数も自動では書き換わりません。Windowsでは「設定」→「ネットワークとインターネット」→「プロキシ」で、実際に設定されているアドレスを確認できます。PACモードの場合は、PACが返すプロキシポートも更新されているか確認してください。切り分けの際は、まず手動で指定したプロキシ入口を使って検証すると、原因を絞り込みやすくなります。

ローカル入口とリモートへのリクエストを順に確認

検証では、「ローカルTCP接続ができるか」と「プロキシ経由のリクエストが完了するか」を分けて確認します。Windows PowerShellで新しい待受ポートを確認してください。TcpTestSucceededがTrueでも、TCP接続を受け付けるプロセスが存在するという意味にとどまり、ノード、DNS、TLS、ルーティングがすべて正常とは限りません。待受プロセスが正しいかも確認してください。

Test-NetConnection -ComputerName 127.0.0.1 -Port 11808

次に、curlでプロキシを明示して、システムプロキシの設定状態に左右されずに確認します。以下はSOCKS5を使う例で、SOCKSまたは混合待受に適しています。socks5hでは、接続先のドメイン名をプロキシ側で名前解決します。Windows PowerShellではcurl.exe、macOS・Linuxではcurlを使い、同じ引数で実行してください。

curl.exe --proxy socks5h://127.0.0.1:11808 --connect-timeout 10 --max-time 30 -I https://v2rayopenwrt.com/

例にある接続タイムアウト10秒と全体のタイムアウト30秒は、コマンドの引数であり、性能テストの結果ではありません。また、1つのサイトでHTTPステータスが返ってきても、すべての接続先にアクセスできるとは限りません。ここでは、リクエストが正しいローカル入口を通っているか、どの段階でエラーが発生するかを確認します。

よくある質問と再発時の対処

使用中のプロセスが見つからないのに、なぜエラーが出ますか?

まず、10808を固定で調べるのではなく、エラー行に記載されたポートを確認してください。エラーが「address already in use」ではなく「ソケットへのアクセスが許可されていない」場合は、Windowsでnetsh interface ipv4 show excludedportrange protocol=tcpを実行し、システムの除外ポート範囲を確認できます。システムの予約範囲を直接削除しないでください。範囲内に含まれず、ほかのプロセスにも使われていないポートに変更するのが安全です。

11808に変更した場合、サブスクリプションを再インポートする必要はありますか?

必要ありません。ローカル待受ポートはアプリからプロキシに接続する入口です。サブスクリプションに含まれるサーバーアドレスとリモートポートは別の設定です。ローカル設定を保存してコアを再起動し、アプリのプロキシ設定を更新してください。ローカルの競合を解決するために、サブスクリプションの内容を変更する必要はありません。

PCの再起動後にまた競合します。恒久的に解決するには?

再起動後、v2rayNを手動で起動する前にポートを確認し、スタートアップサービスが先にポートを使用していないか調べます。v2rayNの自動起動が重複して有効になっていないかも確認してください。インスタンスを1つにするか、同時に動かす必要があるサービスに別のポートを割り当て、その後、起動から接続までの手順をもう一度確認します。

UDPポートも変更したり、ファイアウォールを無効にしたりする必要はありますか?

まずログに記載されたtcpまたはudpを確認し、それぞれ別に調べてください。TCPとUDPのポート空間は別です。この記事のコマンドは主にTCPの待受を調べます。UDPのバインド失敗が明らかな場合、WindowsではGet-NetUDPEndpoint、macOS・LinuxではlsofのUDP検索を使用できます。バインド競合を解決するために、ファイアウォール全体を無効にしないでください。

クライアントをダウンロードプラットフォームに合ったインストーラーを選択