カーネルの起動失敗、再起動後にプロキシが使えない、ローカルポートを変更してもWebページを開けないといった問題に直面しているデスクトップユーザー向けです。待ち受けの失敗とプロキシの接続先設定ミスを切り分け、WindowsやmacOSのコマンドでプロセスを特定したうえで、ポートを変更して接続を再確認します。サブスクリプションの削除やクライアントの再インストールは不要です。
エラーがローカル待ち受けによるものか確認する
ローカル待ち受けポートは、ブラウザーなどのアプリからプロキシカーネルへリクエストを渡す入口です。サブスクリプションに登録されたノードのリモートポートとは異なります。たとえば 127.0.0.1:10808 は、ローカルループバックアドレス上の入口を示します。一方、ノードのアドレスに続く 443 は通常、サーバー側の接続先ポートです。リモートポートを変更してもローカルのバインド失敗は解決せず、正常なノード設定を壊すおそれがあります。
まずv2rayNのメイン画面でログを開き、サービスを再起動して、起動時刻付近に出たエラーを確認します。待ち受けアドレス、ポート、失敗の原因を記録してください。以下はよくあるエラーメッセージです。実際のログには先頭にカーネルモジュール名が付く場合があり、ポート番号も設定によって異なります。
エラー:bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
原因と対処:Windowsで対象のアドレスとポートが別の待ち受けプロセスに使用されています。まず該当ポートのPIDを調べ、使用中のアプリを正常終了するか、ローカルポートを変更してください。
エラー:bind: address already in use
原因と対処:macOSなどでバインド先のアドレスとポートが競合しています。lsofで待ち受けプロセスを特定し、別のクライアントが起動したままになっていないか確認してください。
エラー:bind: An attempt was made to access a socket in a way forbidden by its access permissions.
原因と対処:Windowsでバインドが拒否されています。ポートが除外範囲に含まれている、またはセキュリティポリシーが原因の可能性があり、必ずしも使用中のプロセスがあるとは限りません。待ち受け状況とシステムの予約範囲を確認し、利用可能な空きポートを選んでください。
ログにノードへの接続タイムアウト、認証失敗、ドメイン名の解決失敗しかなく、ローカルの入口が正常に待ち受けている場合は、ノード、DNS、ルーティングの問題を調べます。「接続できない」というだけでポートを変更せず、接続がどの段階で失敗しているかを確認してください。
Windows:待ち受けポートから使用中のプロセスを特定する
ここでは 10808 を例にします。実際にはログに記録されたエラーのポート番号に置き換えてください。すべてのバージョンで同じデフォルト値が使われているとは限りません。PowerShellで次のコマンドを実行します。プロセスのパスを確認できない場合は、管理者としてPowerShellを開き直してください。ただし、クライアントを常に管理者として実行する必要はありません。
Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, State, OwningProcess
OwningProcess列でPIDを確認したら、そのPIDの詳細を調べます。次の 6240 は例示用の数字なので、直前のコマンドで実際に表示された値に置き換えてください。プロセス名だけで判断するより、プログラムのパスを見て別々のフォルダーにあるv2rayNを区別するほうが確実です。
Get-Process -Id 6240 | Select-Object Id, ProcessName, Path
コマンドプロンプトで次の2つのコマンドを実行する方法もあります。1つ目の検索結果にはリモートポートや似た数字が含まれることがあるため、「ローカル アドレス」列を確認し、状態が LISTENING の行を探してください。末尾の数字が、その待ち受けを使用しているPIDです。
netstat -ano -p tcp | findstr ":10808"
tasklist /FI "PID eq 6240"
- 別のv2rayNまたはそのカーネル:該当するプログラムのトレイメニューから正常に終了してから、ポートを再確認してください。ウィンドウを閉じただけでは、トレイに最小化されただけの場合があります。
- 引き続き使う必要がある別のソフト:そのソフトは終了せず、v2rayNに別の空きポートを割り当ててください。起動のたびに同じ入口を取り合うのを防げます。
- 名前に見覚えのないシステムサービス:強制終了せず、まずサービスの正体を確認してください。特に、ログに同じPIDが繰り返し表示されるからといって、安易に終了してはいけません。
macOS:待ち受けプロセスを特定して正常終了する
「ターミナル」を開き、lsofでTCPの待ち受けを調べます。HTTPおよびSOCKSプロキシの入口は、まずTCPを確認すれば十分です。ログにUDPのバインド失敗が明記されている場合に限り、UDPも調べてください。TCPとUDPではポート空間が異なるため、結果を混同しないようにしましょう。
lsof -nP -iTCP:10808 -sTCP:LISTEN
出力の COMMAND はプログラム名、PID はプロセスID、NAME は待ち受けアドレスです。権限不足で他のユーザーの待ち受けを確認できない場合は、sudo lsof -nP -iTCP:10808 -sTCP:LISTENを実行します。起動コマンドを確認するには、次の例の数字を実際のPIDに置き換えてください。
ps -p 6240 -o pid,ppid,command
- メニューバーまたはアプリケーションメニューから、もう一方のクライアントを正常に終了します。ウィンドウを閉じただけでバックグラウンドのサービスが残らないようにしてください。
lsofを再実行し、元の待ち受けがなくなったことを確認します。すぐに別のPIDが表示される場合は、そのプログラムのログイン項目や自動再起動の設定を調べてください。- 使用するv2rayNを起動し、同じポートを再確認して、待ち受けているのが現在のインスタンスのカーネルであることを確認します。
同じポートにIPv4とIPv6の2行が表示されても、まずPIDを比較してください。同じプログラムが2つのアドレスで待ち受けている可能性があり、クライアントが2つ起動しているとは限りません。行数だけで判断せず、アドレスファミリー、バインドアドレス、ログをあわせて確認しましょう。
設定でローカル待ち受けポートを変更する
元のポートを解放できない場合は、たとえば 11808 にローカルの入口を変更できます。先に前述のコマンドで、新しいポートを使用中のプロセスがいないことを確認してください。例示したポートが必ず空いているとは限りません。変更前の値を記録しておくと、問題が起きたときに元に戻せます。
-
変更前の設定を記録する
「設定」→「パラメーター設定」を開き、ローカル待ち受けポートに関する項目を探します。ポート、待ち受けアドレス、入口の種類を記録してください。バージョンによって「ローカル待ち受けポート」や「ローカル混合待ち受けポート」など表示が異なる場合があるため、現在の画面を基準にしてください。
-
変更先のポートを調べる
検索コマンドの
10808を11808に置き換えます。待ち受けが見つからないことを確認するのが第一歩です。Windowsでアクセス権に関するエラーが出る場合は、システムのポート除外範囲も確認してください。 -
保存して再起動する
該当する入口のポートを
11808に変更し、設定を保存してサービスを再起動します。画面に再起動項目がない場合は、クライアントを正常に終了してから起動し直してください。その後、新しいログを開き、バインドが成功したことを確認します。 -
システムプロキシを再設定する
トレイメニューの「システムプロキシ」で、まず「システムプロキシをクリア」を選び、次に「システムプロキシを自動設定」を選択します。その後、OSのプロキシ設定を開き、HTTPとHTTPSに設定されたアドレスとポートが更新されていることを確認してください。
-
アプリ側の設定も更新する
ブラウザーの手動プロキシ設定、コマンドラインの環境変数、古いポート番号を固定で指定しているアプリも更新してください。SOCKS5とHTTPは、それぞれのプロトコルに対応した入口を指定します。ポート番号が同じというだけで共用できると判断しないでください。
変更後、2段階でシステムプロキシを確認する
「ポートが待ち受けていること」と「ブラウザーがそのポートを使っていること」は別の問題です。まず 11808 を待ち受けるプロセスを再確認し、次にプロキシを明示したリクエストを実行してから、ブラウザーを確認します。ノード自体に接続できないときに、ローカルポートの設定を何度も変更するのを防げます。
| 確認項目 | 確認方法 | 結果の見方 |
|---|---|---|
| ローカルの入口 | 新しいポートのLISTEN状態とPIDを確認する | 待ち受けがない場合は、まずカーネルの起動を確認します。待ち受けがある場合は、プロトコルとリクエストを確認してください。 |
| プロキシを明示した接続 | curlでローカルプロキシを明示して実行する | 接続先から応答があれば、そのリクエストのプロキシ経路は利用可能です。接続を拒否された場合は、まず入口のアドレスとポートを確認してください。 |
| システムプロキシ | システム設定のプロキシアドレス、ポート、モードを確認する | プロキシを明示した接続は成功するのにブラウザーで失敗する場合は、アプリがシステムプロキシを使っているか、バイパスルールがどう設定されているかを優先して確認してください。 |
WindowsのPowerShellでは、コマンドのエイリアスによる違いを避けるため curl.exe を使います。11808 がHTTPまたは混合入口の場合は、次のコマンドを実行してください。macOSではコマンドの先頭を curl に変更します。ここで指定する公開Webページはリクエスト先の例であり、特定の速度測定サイトを推奨するものではありません。
curl.exe --proxy http://127.0.0.1:11808 --connect-timeout 5 --max-time 15 -I https://example.com/
入口がSOCKS5のみを受け付ける場合は、次の形式を使います。socks5hは、接続先のドメイン名をプロキシ側で解決する指定です。そのため、ローカルで名前解決するテストとは経路が異なります。HTTPレスポンスヘッダーを受信できれば、少なくともリクエストが応答元まで届いたことを示しますが、1回成功しただけですべてのWebサイトやルーティングルールが正常とは判断できません。
curl.exe --proxy socks5h://127.0.0.1:11808 --connect-timeout 5 --max-time 15 -I https://example.com/
- ローカルアドレスにすぐ接続できない:待ち受けプロセス、ポート、HTTP/SOCKSの種類を再確認してください。
- ローカル接続後にタイムアウトする:カーネルログでノードへの接続、DNS、ルーティングの結果を確認します。ローカルポートをむやみに変更し続けないでください。
- コマンドは成功するのにブラウザーで失敗する:ブラウザー独自のプロキシ設定、拡張機能、バイパスリストを確認し、古い
10808または10809が残っていないか調べてください。
よくある質問:使用中のプロセスが見つからない、再起動後に再発する、複数起動
使用中のプロセスが見つからないのに、なぜポートを使えないと表示される?
まず、ログに記録されたポートを調べているか確認し、エラーがTCPとUDPのどちらに関するものかも確認してください。Windowsでアクセス権の制限が表示される場合は、次のコマンドでIPv4 TCPの除外範囲を確認できます。IPv6の待ち受けを調べるには、ipv4をipv6に置き換えてください。対象ポートが除外範囲内にある場合は、範囲外で待ち受けのないポートに変更します。システムの予約項目を安易に削除しないでください。
PCの再起動後に競合が再発します。サブスクリプションに問題がありますか?
ローカルのバインドは通常、サブスクリプションの内容とは関係ありません。競合が起きたらすぐにPIDとプログラムのパスを調べ、別々のフォルダーにあるクライアントが2つとも自動起動に設定されていないか確認してください。自動起動は1つだけ残し、再起動して再確認します。終了できないソフトがポートを使用している場合は、2つのプログラムに別々のポートを割り当ててください。
v2rayNを2つ起動して、それぞれ別のノードに接続できますか?
それぞれに独立した設定フォルダーを使い、有効にするすべてのローカル待ち受けポートが重複しないようにしてください。入口を1つ変更しても、ほかのHTTP、SOCKS、自作のインバウンドが重複する可能性があります。システムプロキシは同時に1つのインスタンスだけが管理するようにします。もう一方はアプリごとの手動プロキシで使ってください。そうしないと、後から起動したインスタンスが先のプロキシ設定を上書きすることがあります。
v2rayNを終了したらWebページも開けなくなりました。どうすれば戻せますか?
クライアントをまだ操作できる場合は、「システムプロキシ」→「システムプロキシをクリア」を選んでから終了してください。すでに終了している場合は、OSのプロキシ設定を開き、停止したローカル入口を参照する手動プロキシをオフにします。今回の問題に関係する設定だけを削除し、職場や学校のネットワークで必要なプロキシ設定を上書きしないでください。直接接続に戻してから、クライアントを起動して確認します。
netsh interface ipv4 show excludedportrange protocol=tcp
最終的に、次の3点を確認できれば完了です。新しいポートを現在のカーネルが待ち受けていること、プロキシを明示したリクエストに応答があること、ブラウザーとシステム設定が古いポートを参照していないことです。変更前後のポートと使用中のプログラムのパスを記録しておけば、次に起動時の競合や古いインスタンスの残存が起きたとき、同じ手順で原因を追えます。