Xrayコアが起動しないときの対処法:ポート競合・JSON構文・設定項目を確認

起動直後に終了する場合は、ポート競合、設定ファイルの形式、項目名、コアのバージョンを順に確認し、エラー箇所を特定します。

この記事の概要

v2rayNでXrayの起動失敗が表示される、起動直後に終了する、またはカスタム設定を読み込めない場合に役立つ手順です。まずエラーの全体を保存し、待ち受けポートを確認します。実際に使用されているコアで設定をテストし、最後に項目名とバージョンを照合します。Windowsでポートを調べるコマンドと、ローカル環境で使う最小構成も紹介し、クライアントの生成設定・設定内容・システム環境のどこに原因があるかを切り分けます。

1. 起動失敗か接続失敗かを見分ける

「Webページが開かない」からといって、「コアが起動していない」とは限りません。Xrayは起動時に設定を読み込み、インバウンドとアウトバウンドを構成して、待ち受けポートを開きます。このいずれかに失敗すると、プロセスがすぐ終了することがあります。コアの起動後に発生する接続先へのタイムアウト、認証失敗、TLSハンドシェイクエラーは、別の手順で確認します。まず問題が起きた段階を見分ければ、正しいノード設定を何度も変更せずに済みます。

v2rayNはクライアントの画面を提供し、実際の接続処理はXrayコアが行います。画面が動作していても、コアが正常とは限りません。バージョンによってメニューの位置が変わる場合があるため、以下ではWindowsデスクトップ版の一般的な画面を例に説明します。同じ名前の項目が見つからないときは、括弧内の機能を目印にしてください。他のクライアントのメニューをそのまま当てはめないようにしましょう。

  1. エラーを保存する

    メイン画面の下部にある情報またはログ欄を開き、今回の起動時刻を記録します。Failed to startから始まるエラー全体をコピーし、後続の>で区切られた内容も残してください。通常、最後の階層により具体的な原因が示されています。

  2. コアを確認する

    「設定」→「パラメーター設定」→「Coreの種類」を開き、現在のノードのプロトコルに合ったコアが選択されているか確認します。バージョンによっては「Coreの種類の設定」というタブ名の場合もあります。次に起動ログの実行ファイルのパスを確認し、実際にXrayが呼び出されていることを確かめます。

  3. 一度だけ再現する

    TUNを一時的に無効にし、v2rayNを1つだけ起動した状態で、元のノードを選んでサービスを一度再起動します。ノードを次々に切り替えてログを流さないでください。再起動の前後約10秒分のログを残すと、エラーが同じ起動処理で発生したか判断しやすくなります。

  4. 変更点を記録する

    最後に正常起動してから変更した項目を記録します。ローカルポート、ルーティングルール、カスタム設定、コアファイルなどが該当します。現在の設定をバックアップし、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"

エラー: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全体を入れ替えることはできません。

エラー: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": {}
    }
  ]
}
  1. まず.\xray.exe run -test -config .\check.jsonを実行します。失敗した場合は出力を保存し、現在のコアとファイルの内容を優先して確認してください。実際のノードのパラメーターは追加しないでください。
  2. テストに成功したら、.\xray.exe run -config .\check.jsonを実行します。プロセスが動作し続け、127.0.0.1:10818が待ち受け中であることを確認できれば、バインドのテストは成功です。画面にしばらく新しい出力がなくても、フリーズしたとは限りません。
  3. Ctrl+Cでテストプロセスを停止し、元の設定を少しずつ戻します。まずノードのアウトバウンド、次に通信方式とセキュリティの設定、最後にルーティングとルールデータを追加します。追加するたびにテストしてください。
  4. 最小構成では起動し、設定の一部を戻した後に失敗する場合は、原因を追加した項目や依存ファイルに絞れます。同じテストでノード、ポート、コアをまとめて変更しないでください。

6. バージョンの互換性:実際に使われているファイルを確認する

クライアントのバージョンとコアのバージョンは別です。v2rayN本体を更新しただけでは、Xrayも更新されたとは限りません。コアのファイルを手動で上書きしても、クライアントがそのファイルを使うとは限りません。起動ログのパスとxray.exe versionの出力を確認し、プロセッサーのアーキテクチャも記録してください。

新しい項目や通信方式、仕様が変更された既存の項目は、コアのバージョンによって利用できないことがあります。その場合は、起動できるバージョンと設定のコピーを保存してから、クライアントの更新機能またはダウンロードセンターで対応するコンポーネントを入手してください。設定を無理に起動させるために項目を次々と削除し、必要な接続動作まで変えてしまわないようにしましょう。

ポイント:再現可能な診断情報をまとめる

クライアントのバージョン、実際に使われているコアのバージョン、設定の読み込みパス、最初に発生したエラー全体、最後に変更した内容を記録してください。最小構成で起動できる場合は、どの設定を追加した後に失敗したかも添えましょう。これらの情報は、「起動失敗」とだけ表示されたスクリーンショットより、原因の特定に役立ちます。

7. 起動失敗についてよくある質問

生成された設定を編集しても、再起動すると元に戻るのはなぜですか?

v2rayNはノードと全体設定に基づいて実行用の設定を生成します。「設定」→「パラメーター設定」、ノード編集、またはルーティング設定で元の設定を変更してください。JSON全体を手書きする必要がある場合は、クライアントのカスタム設定機能を使い、実際に読み込まれるファイルのパスを確認します。

設定のテストに成功したのに、起動失敗と表示されるのはなぜですか?

run -testの成功は、ポートの待ち受けに成功したことを意味しません。まず実際のインバウンドポートを調べ、クライアントが呼び出すコアと設定がコマンドラインでのテストと一致しているか確認します。次にログファイルやルールデータなどのパスへのアクセス権を確認し、最後にその他のシステム環境へ範囲を広げて調べてください。

別のノードなら動く場合、サブスクリプションに問題がありますか?

必ずしもそうとは限りません。ノードごとにプロトコルや通信方式のパラメーターが異なり、クライアント内で別のコアに割り当てられている場合もあります。問題のノードは削除せずに残し、ノード編集画面でプロトコル、通信方式、セキュリティ方式、Coreの選択を比較してください。設定エラーを引き起こすパラメーターの組み合わせを特定できれば、サブスクリプショングループ全体を削除する必要はありません。

管理者として実行したら直りました。ずっとこの方法で使うべきですか?

まず、通常のローカル待ち受けとTUNの初期化のどちらで失敗しているか確認してください。一般に、ループバックの高い番号のポートを使うだけなら管理者権限は不要です。ファイルやフォルダーのアクセス権に問題がある場合は、権限を適切に修正します。TUNに権限が必要な場合に限り、クライアントの指示に従って許可してください。すべてのエラーを管理者権限で覆い隠さないようにしましょう。

v2rayN をダウンロード