この記事は、Windowsでv2rayNを使い、Xrayコアを選択した際に起動できなくなった場合のトラブル対処ガイドです。まず起動ログを一通り保存し、設定の読み込み、ローカルポート、ルーティング用リソース、フィールドの互換性を順に確認します。最後に、設定テストと実際のリクエストでそれぞれ動作を確認します。記載のポート番号は説明用で、すべての環境の標準設定を示すものではありません。
1. コアの終了と通信リクエストの失敗を見分ける
v2rayNは管理用の画面で、Xrayはプロキシ設定を実行するコアです。画面が開いていても、コアが正常に動作しているとは限りません。また、特定のサイトがタイムアウトしても、コアの起動失敗とは限りません。起動に失敗した場合はローカル設定や実行環境を確認し、サイトへの接続に失敗した場合はノード、DNS、接続先までの経路を確認します。
画面に最後に表示されたメッセージだけで判断しないでください。メイン画面の情報またはログ欄を開き、古い記録を消してから、現在の設定で再起動します。設定の読み込みからプロセス終了までのログを続けて保存してください。ログ画面の名称や場所はバージョンによって異なるため、実際の画面で確認してください。
- 起動時の失敗:設定の解析失敗、リソースファイルを開けない、待ち受けアドレスのバインド失敗などがログに記録され、その後プロセスが終了します。この場合、ノードを変更してもローカルの問題は解決しません。
- 実行中の失敗:コアは動作し続け、リクエストを送信した後にタイムアウト、接続拒否、ハンドシェイク失敗などが発生します。まずリクエストがどのアウトバウンド経由で送信されたかを確認し、その後サーバー側の設定を調べます。
- コアが実行されていない:実行ファイルが見つからない、またはプロセスを作成できないというメッセージが表示され、Xrayからの出力がありません。まずコアのパス、ファイルが隔離されていないか、実行権限があるかを確認してください。ルーティングルールから変更する必要はありません。
2. ログレベルとエラーの連鎖から原因を探す
Xrayのログレベルには、debug、info、warning、error、noneがあります。noneは通常のログ出力を無効にする設定のため、一時的なトラブル対処には向きません。通常はinfoから確認し、リクエストの経路が分かりにくい場合に限り、一時的にdebugへ変更します。調査後は元に戻し、接続の詳細が大量に出力され続けないようにしてください。
該当する設定項目があるv2rayNでは、「設定」→「パラメーター設定」からログ関連の設定を探して保存し、現在の設定を再起動します。カスタムJSONを使っている場合は、ファイル内のlogセクションも確認してください。画面側の設定が必ず反映されるとは限りません。設定の解析中に発生したエラーはプロセスのコンソールにのみ出力される場合もあるため、画面に表示されるコアの出力も保存してください。
| レベルまたは出力 | 分かること | 次の操作 |
|---|---|---|
debug | 実行状況やルーティングの手がかりを詳しく確認できる | 問題を一度だけ再現して記録し、元のレベルに戻す |
info | 起動時と通常動作時の情報を記録する | コアのバージョン、設定ファイルのパス、起動状況を確認する |
warning | 単発の接続エラーや実行時の異常の可能性がある | 発生時刻とプロセスの状態から、本当に終了したかを判断する |
error | 重大な処理エラーを記録する | レベル名だけをコピーせず、エラーの連鎖全体を確認する |
| コンソールの起動エラー | 設定の初期化が完了していない可能性がある | パス、構文、読み込みに失敗したリソースを優先して確認する |
エラーの連鎖では、複数のコンテキストが>でつながっていることがあります。以下は典型的な構成例です。実際のモジュール名やメッセージはコアのバージョンによって異なる場合があります。外側のメッセージが「読み込みに失敗した」ことを示し、その内側で「設定内容を読み込めない」と説明され、末尾に構文上の直接的な手がかりが示されます。
Failed to start: main: failed to load config files: [config.json]
> infra/conf/serial: failed to read config file
> invalid character '}' looking for beginning of object key string
結論:まず最も内側にある、対処可能なエラーを修正する
このようなエラーの連鎖が表示されたら、DNSの変更やノードの切り替えではなく、閉じ波括弧の前に余分なカンマがないかを確認してください。修正して再起動し、新しいログに表示された次の問題に対処します。
3. ポート競合:待ち受けアドレスと使用中のプロセスを確認する
ローカルのインバウンドは、アドレスとポートを指定して待ち受けます。同じ待ち受けエンドポイントを複数のプロセスが同時に使用することはできません。コアの二重起動、別のプロキシプロセス、同じ設定内で重複して定義されたインバウンドなどが競合の原因になります。ログに記録された実際のポートを確認し、ガイドに書かれた標準値を推測して使わないでください。
エラー:Only one usage of each socket address (protocol/network address/port) is normally permitted.
原因:Windowsでよく見られるアドレスのバインド競合エラーです。コアが使用しようとしたポートは、すでに別のプロセスに使用されています。
対処法:そのポートを使用しているプロセスを調べ、用途を確認したうえで、重複するプロセスを正常に終了するか、ローカルのインバウンドポートを変更します。変更した場合は、アプリのプロキシ設定も合わせて更新してください。
PowerShellで次のコマンドを実行すると、例として使用しているTCPポート10808の待ち受けプロセスを確認できます。プロセス名とパスを調べてから終了するか判断してください。プロセスIDが表示されたからといって、すぐに強制終了しないでください。
Get-NetTCPConnection -State Listen -LocalPort 10808 |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetTCPConnection -State Listen -LocalPort 10808 |
ForEach-Object { Get-Process -Id $_.OwningProcess } |
Select-Object Id, ProcessName, Path
- 使用中のプロセスが古いXrayなら、まずそのプロセスを起動したクライアントから正常に終了します。プロセスが終了したことを確認してから、v2rayNを再起動してください。
- 終了できない別のプログラムがポートを使用している場合は、ローカルのインバウンド設定で空いているポートを指定してください。カスタム設定を使っている場合は、すべての
inboundsも確認し、ポートの重複がないようにしてください。 - ポートを変更した後は、ブラウザーの手動プロキシ設定とシステムプロキシ設定が古いポートを参照していないか確認してください。コアが正常に起動しても、アプリが古いポートに接続し続けると、別の接続エラーが発生します。
forbidden by its access permissionsと表示されても、すぐにポート競合と判断しないでください。netsh interface ipv4 show excludedportrange protocol=tcpを実行してシステムの予約範囲を確認し、セキュリティポリシーもあわせて調べてください。
4. JSON構文エラー:実際に起動時に使われるファイルをテストする
ノード編集画面で保存できても、すべてのカスタム設定を組み合わせたJSONが有効とは限りません。よくある原因は、最後の項目の後に余分なカンマがある、全角の引用符をコピーした、文字列の閉じ引用符がない、Windowsのパスに含まれるバックスラッシュをJSON内にそのまま記述した、といったものです。パスにはスラッシュを使うか、文字列内のバックスラッシュを\\と記述してください。
エラー:unexpected EOF
原因:構文解析中、必要な内容を読み終える前にファイル末尾に達しています。オブジェクト、配列、文字列が閉じられていないか、書き出されたファイルが途中で切れている可能性があります。
対処法:ファイル末尾と直近の変更箇所を確認し、構造を正しく閉じてから再テストしてください。末尾に波括弧を機械的に追加するだけでは解決しない場合があります。
エラー:invalid character '}' looking for beginning of object key string
原因:オブジェクト内でカンマの後に有効なキー名がありません。最後のフィールドの後にカンマが残っている場合によく発生します。
対処法:余分なカンマを削除し、キー名を半角の二重引用符で囲んでから、ファイル全体の設定テストを実行してください。
Xray実行ファイルのあるフォルダーでPowerShellを開き、今回実際に使用する設定ファイルのコピーをconfig.jsonという名前で保存してから、次のコマンドを実行します。ファイルが別の場所にある場合は、実際の絶対パスを指定してください。古いバックアップだけをテストしても、v2rayNが直近の起動時に生成した設定を確認したことにはなりません。
.\xray.exe version
.\xray.exe run -test -config .\config.json
run -testは、現在のコアで設定を読み込めるか確認するためのコマンドです。通常の待ち受けテストや、接続先への疎通確認の代わりにはなりません。テスト時はクライアントと同じリソースディレクトリや環境変数を使ってください。手動テストでgeoファイルが見つからなくても、クライアントの起動時にも見つからないとは限りません。自動生成されたファイルは次回起動時に上書きされることがあります。最終的な修正は、ノード編集項目、ルーティング設定、またはカスタム設定の元ファイルに反映してください。
5. geoファイルが見つからない:ファイルパスとルール分類を確認する
geoip:privateやgeosite:cnは、設定に書くだけで自動的に展開される通常の文字列ではありません。Xrayがこれらのルールを読み込むには、対応するデータファイルが必要です。ファイルの不足、作業ディレクトリの違い、リソースパスの誤設定、分類名の不一致などがあると、設定を構築できない場合があります。JSONだけを別の場所にコピーすると、必要なリソースが抜けてしまうこともよくあります。
エラー:failed to load GeoIP
原因:このメッセージを含むエラーの連鎖は、GeoIPルールの読み込み失敗を示しています。データファイルがない、読み取れない、または分類名が一致しない可能性があります。
対処法:続くメッセージに記載されたファイル名、システムエラー、分類名を確認し、リソースディレクトリ、読み取り権限、ルールの内容をそれぞれ調べてください。
エラー:The system cannot find the file specified.
原因:同じエラーの連鎖にgeosite.datまたはgeoip.datが明記されている場合、その検索時に該当ファイルが見つからなかったことを示します。
対処法:クライアントが使用するリソースディレクトリにデータファイルを戻し、カスタム起動環境で誤ったリソースパスが設定されていないか確認してください。
- まず、参照されたパスを確認:ログに記録された実際のパスを基準にしてください。ダウンロードフォルダーに同名のファイルがあるだけでは、必要なリソースが揃っているとは限りません。
- 次に、リソース設定を確認:カスタム実行環境の
XRAY_LOCATION_ASSETはリソースの検索先に影響します。想定したディレクトリを指しているか確認してください。 - ファイル不足と分類不足を区別:「ファイルが見つからない」ことと「ファイルに指定された分類がない」ことは別の問題です。後者の場合は分類名を修正するか、その分類を含むデータを使用してください。同じファイルを繰り返しコピーしても解決しません。
- 必要なリソースだけを復元:クライアントに用意されているリソース更新機能で、使用するファイルを復元してください。切り分けのために関連ルールを一時的に削除する場合は、事前にバックアップを取り、テスト後に元のルーティング設定へ戻してください。
6. フィールド名と階層:有効なJSONでも設定が誤っている場合がある
JSON構文のテストに成功しても、括弧や引用符などの形式が解析できることしか分かりません。フィールドの場所や値が正しいか、使用中のコア機能に対応しているかは別に確認が必要です。特に、コピーした設定例がどのコア向けの形式なのか確認してください。v2rayNの画面設定とXrayネイティブJSONも別の形式です。画面設定ファイルをそのままXrayに渡して実行することはできません。
ルーティングを例にすると、domainStrategyはroutingに属し、rules内の個々のルールには属しません。以下はルーティング部分のみの例です。完全な設定内でdirectという名前の直結アウトバウンドが定義され、必要なgeoデータを読み込めることを前提としています。このままでは起動できる完全な設定ではありません。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
}
]
}
}
- 大文字・小文字を確認:
outboundTagは、名前を適当に変更したフィールドと同じではありません。アウトバウンドタグの値も、定義した内容と一致させてください。 - データ型を確認:
rulesは配列である必要があります。ルール内のdomainやipには、それぞれのフィールドで求められる形式を指定してください。他のソフト用のルールテキストをJSONにそのまま貼り付けないでください。 - バージョンの対応状況を確認:
xray.exe versionを実行して実際の出力を記録し、使用するトランスポートやセキュリティ関連のフィールドがそのコアでサポートされているか確認してください。クライアント画面のタイトルからコアのバージョンを推測しないでください。 - 設定の反映を確認:不明なフィールドは必ずしもエラーにならず、無視される場合があります。設定テストに成功した後も、実行ログとリクエスト結果を確認し、ルールが実際に反映されているか確かめてください。
結論:「読み込めること」と「期待どおりに動くこと」は分けて確認する
まず設定テストで構造上のエラーがないことを確認します。次に通常起動してポートの待ち受けを確認し、最後にリクエストを送信してアウトバウンドの選択を確認します。各段階で確認する対象を一つに絞ると、フィールドが反映されていない問題をノード障害と誤認しにくくなります。
7. 修正後の動作確認とよくある質問
毎回、原因が明確な項目を一つだけ修正し、再起動後に新しいログを保存してください。コアの更新、ポートの変更、ルーティングの変更、ノードの切り替えを同時に行うと、接続が復旧しても、どの操作が有効だったのか判断できません。復旧を確認したら、一時的に変更したログレベルを元に戻し、正常に動作する設定のコピーを保存してください。
- 設定の確認:現在のコアで実際に使う設定をテストし、読み込み、フィールド、リソースに関するエラーが出ないことを確認します。
- プロセスの確認:正常起動後もプロセスが動作し続け、想定したローカルポートで待ち受けていることを確認します。起動直後に終了してはいけません。
- リクエストの確認:アプリが新しいポートを使って対象にアクセスするよう設定します。ログでリクエストがコアに届いたことを確認し、新たなリモート接続エラーが発生していないか確認してください。
- 設定の保持を確認:v2rayNを終了してから再度開き、自動生成された設定に修正内容が上書きされていないことを確認します。
v2rayNを再インストールしても起動しません。もう一度インストールすべきですか?
同じ問題のある設定を使い続けていないか、古いプロセスが同じポートを使用していないか、まず確認してください。元の設定をバックアップし、カスタム項目を最小限にして一度だけ再現させ、新しいログをもとに対処します。再インストールを繰り返しても、システムのポート競合は自動的に解消されません。
管理者として実行したら直りました。このまま使い続けてもよいですか?
通常のループバックプロキシの待ち受けに、管理者権限は基本的に必要ありません。まずログをもとに、ファイルやフォルダーの権限、セキュリティソフトによるブロックを確認してください。権限が必要なTUN機能を有効にしている場合は、いったん無効にして通常のローカルインバウンドだけを確認し、権限の問題は別途調査してください。
設定テストは成功したのに、ブラウザーで接続を拒否されます。どうすればよいですか?
コアを通常起動し、実際に待ち受けているポートを確認してから、ブラウザーとシステムのプロキシ設定を確認してください。テストコマンドを実行してもプロキシサービスは起動したままになりません。テストだけを実行してコアを起動していない場合、アプリからローカルポートへの接続は拒否されます。
ログにtimeoutとあります。コアが起動していないということですか?
いいえ。まずタイムアウトが起動中に発生したのか、アプリがリクエストを送信した後に発生したのかを確認してください。コアが待ち受けを続け、ログにリクエスト処理の記録がある場合は、サーバーアドレスの名前解決、リモートポート、トランスポート設定を調べてください。ローカルJSONの構文を何度も変更する必要はありません。