v2rayNでXrayの起動失敗が表示される、起動直後に終了する、またはカスタム設定を読み込めない場合に役立つ手順です。まずエラーの全体を保存し、待ち受けポートを確認します。実際に使用されているコアで設定をテストし、最後に項目名とバージョンを照合します。Windowsでポートを調べるコマンドと、ローカル環境で使う最小構成も紹介し、クライアントの生成設定・設定内容・システム環境のどこに原因があるかを切り分けます。
1. 起動失敗か接続失敗かを見分ける
「Webページが開かない」からといって、「コアが起動していない」とは限りません。Xrayは起動時に設定を読み込み、インバウンドとアウトバウンドを構成して、待ち受けポートを開きます。このいずれかに失敗すると、プロセスがすぐ終了することがあります。コアの起動後に発生する接続先へのタイムアウト、認証失敗、TLSハンドシェイクエラーは、別の手順で確認します。まず問題が起きた段階を見分ければ、正しいノード設定を何度も変更せずに済みます。
v2rayNはクライアントの画面を提供し、実際の接続処理はXrayコアが行います。画面が動作していても、コアが正常とは限りません。バージョンによってメニューの位置が変わる場合があるため、以下ではWindowsデスクトップ版の一般的な画面を例に説明します。同じ名前の項目が見つからないときは、括弧内の機能を目印にしてください。他のクライアントのメニューをそのまま当てはめないようにしましょう。
-
エラーを保存する
メイン画面の下部にある情報またはログ欄を開き、今回の起動時刻を記録します。
Failed to startから始まるエラー全体をコピーし、後続の>で区切られた内容も残してください。通常、最後の階層により具体的な原因が示されています。 -
コアを確認する
「設定」→「パラメーター設定」→「Coreの種類」を開き、現在のノードのプロトコルに合ったコアが選択されているか確認します。バージョンによっては「Coreの種類の設定」というタブ名の場合もあります。次に起動ログの実行ファイルのパスを確認し、実際にXrayが呼び出されていることを確かめます。
-
一度だけ再現する
TUNを一時的に無効にし、v2rayNを1つだけ起動した状態で、元のノードを選んでサービスを一度再起動します。ノードを次々に切り替えてログを流さないでください。再起動の前後約10秒分のログを残すと、エラーが同じ起動処理で発生したか判断しやすくなります。
-
変更点を記録する
最後に正常起動してから変更した項目を記録します。ローカルポート、ルーティングルール、カスタム設定、コアファイルなどが該当します。現在の設定をバックアップし、1回のテストで変更するのは1項目だけにして、結果も記録してください。
2. ポート競合:待ち受けプロセスを調べてからポートを変更する
エラーにfailed to listenやaddress already in useが含まれる場合は、接続先の443番ポートではなく、まずローカルの待ち受けポートを確認します。WindowsではOnly one usage of each socket addressと表示されることもあります。よくある原因は、前回のコアプロセスが終了していない、クライアントを複数起動している、または別のプログラムが同じアドレスとポートを使用していることです。
以下ではTCPポート10808を検索例に使いますが、すべてのv2rayNでこの値が標準とは限りません。まず「設定」→「パラメーター設定」→「基本設定」で実際のローカル待ち受けポートを確認し、コマンド内の数字を置き換えてください。混合インバウンドを使う場合、1つのポートで複数のプロキシプロトコルを受け付けられるため、無理に2つのポートに分ける必要はありません。
netstat -ano -p tcp | findstr ":10808"
powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 10808 | Select-Object LocalAddress,LocalPort,OwningProcess"
netstatの出力から、「ローカルアドレス」が:10808で終わり、状態がLISTENINGになっている行を探します。一番右の列がPIDです。TIME_WAITだけでは、待ち受けポートの競合があるとは判断できません。- PIDが
4260だった場合は、tasklist /FI "PID eq 4260"を実行してプロセス名を確認します。このPIDは例なので、実際の操作では見つかった値を使ってください。 - 別のv2rayNが起動したコアであれば、まず該当するクライアントのタスクトレイメニューから正常に終了し、もう一度調べてください。どのプロセスがどのクライアントに属するか確認せず、同じ名前のプロセスをすべて終了しないようにしましょう。
- ポートを使用中のプログラムを終了できない場合は、ローカル待ち受けポートを未使用の
10818に変更し、保存してサービスを再起動します。手動でプロキシを設定しているアプリでも、ポートを同じ値に変更してください。
エラー:bind: address already in use
原因と対処:対象の待ち受けアドレスとポートが使用中です。エラーに表示された実際のポートからPIDを調べ、使用中のプログラムを正常終了するか、現在のインバウンドポートを変更して再起動してください。
エラー:bind: permission denied
原因と対処:システムがバインドを拒否しています。別のプロセスが待ち受けているとは限りません。待ち受けアドレス、ポートのアクセス権、安全ソフトによるブロックを確認してください。Windowsでアクセス権に関するメッセージが出た場合は、システムの除外ポート範囲も調べましょう。プロセスを何度も終了するだけでは解決しないことがあります。
Windowsで待ち受けプロセスが見つからないのにソケットへのアクセス拒否が表示される場合は、netsh interface ipv4 show excludedportrange protocol=tcpを実行してIPv4 TCPの除外範囲を確認します。使用したいポートが範囲内にある場合は、範囲外の利用可能なポートを選んでください。システムの予約項目を直接削除しないでください。TUNや権限に関する記録がログにある場合に限り、該当する権限設定を確認します。
3. JSON形式:実際に使うコアでオフラインテストする
テキストエディターで設定ファイルを開けても、Xrayが読み込めるとは限りません。カンマの抜け、全角の引用符、閉じていない括弧があると、解析が中断します。構文エラーには行番号や文字位置のほか、invalid character、unexpected EOFなどのメッセージが含まれることがあります。具体的な文言はコアのバージョンや読み込み方法によって異なります。
クライアントで関連サービスを停止した後、ログに記載されたXrayのプログラムフォルダーに移動し、そのフォルダー内の実行ファイルで保存した設定のコピーをテストします。以下はWindows PowerShellでの例です。check.jsonは今回テストするファイル名です。テストではプロキシの待ち受けを開始しませんが、設定から参照される証明書やルールデータなどのローカルファイルが読み込まれる場合があります。
.\xray.exe version
.\xray.exe run -test -config .\check.json
| エラーの手がかり | まず確認する箇所 | 対処方法 |
|---|---|---|
invalid character | エラー箇所とその1行前 | 半角の英語ダブルクォーテーションに置き換え、キーと値の間のコロン、および項目間のカンマを確認します。 |
unexpected EOF | ファイル末尾とコピー範囲 | ファイルが途中で切れていないことを確認し、オブジェクトの波括弧と配列の角括弧が階層ごとに対応しているか調べます。 |
cannot unmarshal | 値のデータ型 | 文字列、数値、真偽値、オブジェクト、配列を区別します。句読点だけを変更して済ませないでください。 |
| テストは成功するのに起動後に終了する | 実行時に必要なリソース | ポートのバインド、ファイルのアクセス権、実際に読み込まれるパスを引き続き確認します。テストに成功しても、待ち受けができるとは限りません。 |
行番号は多くの場合、解析器が問題を検出した位置を示しており、最初に問題が発生した位置とは限りません。24行目のエラーなら、まず23行目もあわせて確認してください。認証情報を含む設定ファイル全体をオンラインの整形ツールに貼り付けないでください。ローカルエディターの括弧対応機能とコアのテストコマンドで、通常は十分に確認できます。
ポイント:テスト結果が有効なのは、テストしたファイルだけ
手動テストに成功してもクライアントが起動しない場合は、起動ログに記録された設定ファイルのパス、コアのパス、作業ディレクトリをすぐに照合してください。別の設定ファイルでの成功を根拠に、クライアントが現在生成している設定も正しいと判断しないでください。
4. 設定項目のエラー:階層を確認し、名前だけに注目しない
JSON構文を通過した後は、Xrayの設定構造に合っているか確認します。inboundsとoutboundsは配列です。プロトコル固有のパラメーターは対応するsettingsに、通信方式やセキュリティのパラメーターは通常streamSettingsに記述します。項目を誤った階層に置くと、JSONとしては有効でも、設定の構築に失敗したり、指定が反映されなかったりすることがあります。
あるコア向けの設定例を、別形式の設定にそのまま貼り付けないでください。v2rayNのノード編集フォームは、Xrayの設定JSON全体と同じものではありません。クライアントはノード、ルーティング、全体設定に基づいて実行用設定を生成します。特にVLESSとVMessではプロトコルのパラメーターが異なります。どちらもユーザー識別情報を使うからといって、settings全体を入れ替えることはできません。
- キー名を確認:
streamSettingsのSは大文字です。routing.rulesでアウトバウンドのタグを指定するキーはoutboundTagです。キー名の大文字・小文字は、使用するコアの設定仕様に合わせてください。 - タグを確認:ルールの
outboundTagは、いずれかのアウトバウンドのtagと一致している必要があります。タグを間違えると、ルールに一致した後のアウトバウンド選択に影響します。テストに成功しただけで、ルーティングが機能していると判断しないでください。 - 値を確認:
protocol、通信方式、セキュリティ方式には、現在のコアが認識できる値を指定します。説明文をパラメーター値として入力すると、未知のプロトコルや種類のエラーが発生します。 - リソースを確認:
geoip.dat、geosite.dat、証明書ファイルの読み込みに失敗する場合は、リソースのフォルダー、ファイル名、アクセス権を確認します。相対パスは実際の作業ディレクトリに左右されるため、実行するフォルダーを変えると結果も変わることがあります。
エラー:unknown config id
原因と対処:エラーに含まれるプロトコルまたは設定タイプが、現在のビルドで認識されていません。直後に表示される具体的な値を確認し、綴り、設定階層、コアの対応範囲を照合してください。JSONの括弧だけを変更しても解決しません。
エラー:no such file or directory
原因と対処:設定で参照されているファイル、または起動に必要なリソースが見つかりません。エラー内容から具体的なパスを特定し、実行環境にファイルが存在することを確認してください。ログにルールデータが記載されている場合は、ルーティングを変更する前にリソースのパスを調べます。
注意点として、一部の解析処理では未知の項目が無視され、エラーにならない場合があります。そのため「エラーがない」ことから分かるのは、現在の検査を通過したことだけで、手入力したすべての項目が反映されたとは限りません。ルーティングを変更した後は、具体的な対象ドメインでアウトバウンドの選択を確認してください。Webページが1つ開けるだけでは、十分な検証になりません。
5. 最小構成:環境の問題とノードの問題を切り分ける
設定全体が長い場合は、まず以下の内容をcheck.jsonとして保存してください。ローカルの127.0.0.1:10818でSOCKSインバウンドだけを提供し、接続先へ直接接続します。リモートプロキシノードは含まれず、サブスクリプションが使えるかどうかの確認にも使えません。現在のXrayが設定を読み込み、アウトバウンドを構築し、ローカルポートを開けるかを調べるためのものです。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-check",
"listen": "127.0.0.1",
"port": 10818,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}
- まず
.\xray.exe run -test -config .\check.jsonを実行します。失敗した場合は出力を保存し、現在のコアとファイルの内容を優先して確認してください。実際のノードのパラメーターは追加しないでください。 - テストに成功したら、
.\xray.exe run -config .\check.jsonを実行します。プロセスが動作し続け、127.0.0.1:10818が待ち受け中であることを確認できれば、バインドのテストは成功です。画面にしばらく新しい出力がなくても、フリーズしたとは限りません。 Ctrl+Cでテストプロセスを停止し、元の設定を少しずつ戻します。まずノードのアウトバウンド、次に通信方式とセキュリティの設定、最後にルーティングとルールデータを追加します。追加するたびにテストしてください。- 最小構成では起動し、設定の一部を戻した後に失敗する場合は、原因を追加した項目や依存ファイルに絞れます。同じテストでノード、ポート、コアをまとめて変更しないでください。
6. バージョンの互換性:実際に使われているファイルを確認する
クライアントのバージョンとコアのバージョンは別です。v2rayN本体を更新しただけでは、Xrayも更新されたとは限りません。コアのファイルを手動で上書きしても、クライアントがそのファイルを使うとは限りません。起動ログのパスとxray.exe versionの出力を確認し、プロセッサーのアーキテクチャも記録してください。
新しい項目や通信方式、仕様が変更された既存の項目は、コアのバージョンによって利用できないことがあります。その場合は、起動できるバージョンと設定のコピーを保存してから、クライアントの更新機能またはダウンロードセンターで対応するコンポーネントを入手してください。設定を無理に起動させるために項目を次々と削除し、必要な接続動作まで変えてしまわないようにしましょう。
- 設定の互換性がない:プログラムが起動して設定エラーを出力する場合は、そのバージョンでサポートされている項目とパラメーターを重点的に確認します。コアのテスト結果を参考に原因を特定し、公開日だけで対応状況を推測しないでください。
- プログラムを実行できない:システムに実行できない、または実行ファイル形式が正しくないと表示される場合は、Windowsとプロセッサーのアーキテクチャ、ダウンロードが完了しているか、安全ソフトに隔離されていないかを確認します。この段階では、まだJSONの解析に進んでいません。
- 更新後に元へ戻す:まずクライアントと残っているコアを終了し、関連するバックアップ一式を復元します。新しいクライアントが新形式の設定を生成する場合、古いコアに戻すだけでは引き続き失敗することがあります。
- Android版との違い:v2rayNGはXrayコアを使用し、v2flyNGはv2flyコアを使用します。対応範囲は互いに代用できません。また、Windowsのプロセス検索コマンドをAndroidでそのまま使うこともできません。
ポイント:再現可能な診断情報をまとめる
クライアントのバージョン、実際に使われているコアのバージョン、設定の読み込みパス、最初に発生したエラー全体、最後に変更した内容を記録してください。最小構成で起動できる場合は、どの設定を追加した後に失敗したかも添えましょう。これらの情報は、「起動失敗」とだけ表示されたスクリーンショットより、原因の特定に役立ちます。
7. 起動失敗についてよくある質問
生成された設定を編集しても、再起動すると元に戻るのはなぜですか?
v2rayNはノードと全体設定に基づいて実行用の設定を生成します。「設定」→「パラメーター設定」、ノード編集、またはルーティング設定で元の設定を変更してください。JSON全体を手書きする必要がある場合は、クライアントのカスタム設定機能を使い、実際に読み込まれるファイルのパスを確認します。
設定のテストに成功したのに、起動失敗と表示されるのはなぜですか?
run -testの成功は、ポートの待ち受けに成功したことを意味しません。まず実際のインバウンドポートを調べ、クライアントが呼び出すコアと設定がコマンドラインでのテストと一致しているか確認します。次にログファイルやルールデータなどのパスへのアクセス権を確認し、最後にその他のシステム環境へ範囲を広げて調べてください。
別のノードなら動く場合、サブスクリプションに問題がありますか?
必ずしもそうとは限りません。ノードごとにプロトコルや通信方式のパラメーターが異なり、クライアント内で別のコアに割り当てられている場合もあります。問題のノードは削除せずに残し、ノード編集画面でプロトコル、通信方式、セキュリティ方式、Coreの選択を比較してください。設定エラーを引き起こすパラメーターの組み合わせを特定できれば、サブスクリプショングループ全体を削除する必要はありません。
管理者として実行したら直りました。ずっとこの方法で使うべきですか?
まず、通常のローカル待ち受けとTUNの初期化のどちらで失敗しているか確認してください。一般に、ループバックの高い番号のポートを使うだけなら管理者権限は不要です。ファイルやフォルダーのアクセス権に問題がある場合は、権限を適切に修正します。TUNに権限が必要な場合に限り、クライアントの指示に従って許可してください。すべてのエラーを管理者権限で覆い隠さないようにしましょう。