V2RAY / CONFIGURATION REFERENCE
V2Ray 詳細設定ガイド
サブスクリプション、ルール、名前解決、通信の取り込みを分けて設定を解説します。まず設定の適用先を確認し、パラメーターを変更したらログで実際の通信経路を検証します。
サブスクリプションの初回インポート、サーバーの選択、接続の開始はクイックスタートをご覧ください。このページでは接続できる状態になった後の設定を解説します。デスクトップでは v2rayN、Android では v2rayNG を基本とし、コアに応じて v2flyNG を選択してください。インストール先はクライアントのダウンロードにまとめています。クライアントの管理設定をコアの JSON 設定と混同しないようにしましょう。
サブスクリプションのグループ分けとサーバーの絞り込み
サブスクリプションURLと接続設定を分けて管理する
v2rayN の「サブスクリプショングループ設定」を開き、まず専用のグループを作成してからサブスクリプションURLを登録します。グループには更新元、メモ、絞り込み条件を設定し、サーバー項目にはインポート後のプロトコル設定が保存されます。グループのメモを変更しても、リモートの接続情報は変わりません。サブスクリプションを更新しても、現在のサーバーが切り替わるわけではありません。更新後は、メイン画面で選択されている項目を確認してください。
グループ名には「普段使い」「互換性テスト」など、用途や提供元が分かる名前を付けましょう。サブスクリプションURLをメモやスクリーンショット、共有ドキュメントに記載しないでください。URLのパスやクエリパラメーターがアクセス権限を担っている場合があります。問題を調べるときは、URLの種類、応答ステータス、エラー文だけを記録し、URLの詳細は伏せてください。URLをコピーする際は元のエンコードを維持し、重複して見えるパラメーターも削除しないでください。
初回の更新では絞り込み条件を無効にし、サーバー一覧を取得できることを確認してから、条件を一つずつ追加します。「URLの応答が空」と「応答はあるが絞り込みで除外された」を分けて判断してください。前者ではサブスクリプションの有効性、ネットワーク到達性、応答形式を確認します。後者では絞り込み条件を確認します。何度も更新しても条件の誤りは直りません。かえって実際の応答内容を見落とすおそれがあります。
対象フィールドと一致方法を確認する
サーバーを絞り込む前に、設定項目の説明を確認してください。サーバーのメモ、プロトコルの種類、その他のどのフィールドを対象にするのか、また条件が通常の文字列、部分一致、正規表現のどれなのかを確認します。画面によって仕様が異なるため、同じルールだと決めつけないでください。正規表現に対応していることが明確な場合は、以下の式でメモに含まれる「テスト」または「予備」の目印に一致させられます。該当項目の仕様に応じて、一致した項目を残すか除外するかが決まります。
(テスト|予備)
最初から複雑な除外条件を組み合わせないでください。まず一致することが分かっているメモで試し、次に一致しないはずのメモを試し、最後に空のメモを確認します。正規表現の丸括弧、縦棒、ピリオドには特殊な意味があります。文字としてのピリオドに一致させるには、バックスラッシュを付けてください。大文字と小文字を区別するかどうかは、対象フィールドの実装に従います。画面に表示された文字の形だけで判断しないでください。
サブスクリプションごとに名前の付け方が異なる場合は、すべての名前を一つの式に詰め込まず、グループごとに絞り込み条件を設定しましょう。提供元がメモを変更すると、以前の条件ですべての項目が除外されることがあります。更新前に残るはずの名前の特徴を記録し、更新後もその特徴があるか確認してください。一覧の件数が変わっただけで、サービスの異常と判断しないでください。提供元側で内容が変更された可能性もあります。
更新による上書きと接続パラメーターの違いに注意する
サブスクリプションの項目は通常、リモートのデータから再生成されます。転送パラメーターを長期的に変更する場合は、クライアントに個別保存や手動項目へのコピー機能があるか確認してください。コピーした項目は別のグループに入れ、サブスクリプション更新が自動で反映されなくなることを明確にしておきます。サブスクリプションの項目を直接変更して、次回の更新後も変更が残ると思い込まないでください。まず更新を一度実行し、どの項目が上書きされるか確認しましょう。
「インポートには成功したが接続できない」場合は、プロトコル、サーバーアドレス、ポート、転送方式、TLS関連の設定を確認してください。インポートに成功したということは、クライアントが形式を認識できたというだけで、現在のコアがすべての機能に対応しているとは限りません。v2rayNG と v2flyNG は異なるコア系統を使用するため、見た目が似ているという理由だけで設定を使い回せません。必要なプロトコルを確認してから、クライアントを選びましょう。
サブスクリプションの更新に失敗した場合は、現在使える設定を保存し、すべてのグループをすぐに消去しないでください。URLの完全性、システム時刻、証明書エラー、更新時にプロキシを経由するかを順に確認します。詳しい手順はv2rayNのサブスクリプション更新失敗の対処法をご覧ください。提供元の問題を解決してから絞り込み条件を戻し、URLと絞り込みロジックを同時に変更しないようにしましょう。
最後に最小限の検証を行います。グループを一つ更新し、用途が分かっている項目を選んでコアを起動し、設定の解析エラーがログにないことを確認してください。検証に成功してから自動更新を有効にします。これにより、サブスクリプションの形式、絞り込み条件、接続パラメーターを切り分けられ、一度の一括操作で使える状態を失わずに済みます。
ルーティングルールの実践
ルールの適用順に整理する
まずリクエストがクライアントに入っていることを確認してから、ルーティングを調べます。システムプロキシ、アプリ内プロキシ、TUNのインバウンドはリクエストを受け取る役割を担います。ルーティングが処理するのは、コアが受信した接続だけです。システムプロキシを使っていないアプリは、ドメインルールを追加しても自動的に取り込まれません。ルールを試す前に、プロキシを明示的に設定したアプリを使い、通信を取り込む範囲の影響を除外してください。
v2rayN の「ルーティング設定」を開き、有効になっているプリセットとルールの順序を確認します。一般的なルールは上から順に評価され、最初に一致したルールがアウトバウンドを決めます。範囲の狭い例外を先に、範囲の広い分類を後に置きましょう。たとえば、特定のドメインを個別にプロキシ経由にする場合、そのドメインを含む広範な直接接続ルールを前に置いてはいけません。ルールが存在していても、評価されるとは限りません。
一つのルール内では、通常、異なるフィールドの条件をすべて満たす必要があります。一方、ドメインリスト内では、いずれかの項目に一致すればよい場合があります。「ドメインまたはポートに一致」を、ドメインとポートの両方を含む一つのルールとして書かないでください。独立した二つの条件を表す場合はルールを分け、それぞれの適用結果を確認します。変更後は保存して再読み込みしてください。既存の接続には、以前の経路が引き続き使われる場合があります。
ドメイン一致とIPアドレス一致を区別する
以下は Xray と一般的な V2Ray のルーティング設定で使われる項目の例です。既存の routing オブジェクトに統合する前に、アウトバウンドのタグとルール用のリソースが存在することを確認してください。例では、広告カテゴリ、ローカルドメイン、プライベートアドレスの順に処理します。ここでの block と direct は単なるタグです。実際の設定に対応するアウトバウンドが必要です。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"domain": ["domain:localhost"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
}
}
domain: はドメインとそのサブドメインの一致に、full: はドメイン全体の完全一致に、regexp: は正規表現による一致に使います。意味が明確な方法を優先し、複雑なパターンが必要な場合に限って正規表現を使いましょう。単なる部分一致をドメイン境界の一致と考えないでください。名前が似ている無関係な宛先にも一致し、気付きにくい誤った振り分けにつながることがあります。
geosite: と geoip: の利用には、実行環境に対応するデータファイルと、存在する分類名が必要です。ログに分類を読み込めないと表示された場合は、リソースと名前を確認してください。すべてのルールを削除して問題を覆い隠さないようにしましょう。クライアントが別のリソース方式で設定を生成する場合もあります。実際のコアの形式に従い、異なる形式のルールセットURLを混用しないでください。
| ドメイン戦略 | 一致時の動作 | 確認ポイント |
|---|---|---|
AsIs | 宛先の形式を維持し、ルーティングのためにドメインを能動的に名前解決しない | ドメインルールだけで十分にカバーできるか |
IPIfNonMatch | ドメインルールに一致しない場合、名前解決してからアドレスルールと照合する | 名前解決の結果とアドレスルールの順序 |
IPOnDemand | ルールの評価中、必要に応じてアドレスルールの前に名前解決する | 先行するアドレスルールが想定した経路を変えていないか |
デフォルト経路とスニッフィングの範囲を確認する
どのルールにも一致しない接続にもデフォルト経路が必要です。標準的な設定ではデフォルトのアウトバウンドが使われますが、クライアントがフォールバックルールを追加生成する場合もあります。ルール編集画面の末尾が空かどうかだけで判断せず、実際の実行時設定を確認してください。特にカスタムアウトバウンドを追加すると、並び順の変化によって未一致のリクエストの行き先が変わる場合があります。デフォルトの動作は、明示的なフォールバックルールで指定すると確認しやすくなります。
「トラフィックのスニッフィングを有効にする」と、対応する通信からドメイン情報を補えますが、あらゆるプロトコルのドメインを復元できるわけではありません。宛先アドレスが変更されるかどうかは、スニッフィングのオプションにも左右されます。アプリがアドレスに直接接続する場合、認識できない暗号化ハンドシェイクを使う場合、古い接続を再利用する場合は、ログ上の宛先がアドレスのままになることがあります。特定のドメインルールを適用させるためだけに、スニッフィングの範囲を無条件に広げないでください。
検証では一度に一つの宛先だけにアクセスし、宛先名、適用されたタグ、エラーが発生した段階を確認します。想定したルールに一致しない場合は、まずテストルールを前方に移動し、それ自体が機能することを確認してから通常の順序に戻してください。一致しているのに接続できない場合は、アウトバウンド接続とDNSを調べます。一致条件を変更し続けないでください。ルールが正しく一致することと、ネットワークに到達できることは別の確認事項です。
「グローバルプロキシ」も、文脈を分けて考える必要があります。システムプロキシはアプリを接続する方法であり、プリセットルーティングのグローバル設定はコア内部の出口選択に影響します。グローバルに切り替えても、すべてのプログラムがプロキシに入るとは限りません。用語を確認するには用語集をご覧ください。取り込まれていないアプリへの対処は、TUNの章で説明します。
DNS設定の最適化
実際の名前解決経路を把握する
アプリ、OS、クライアント、リモート側の出口に分けてDNSを確認します。ブラウザーが独自のセキュアDNSを有効にしている場合や、OSがLAN内のリゾルバーを使う場合があります。コアが独自のキャッシュを保持したり、プロキシサーバーが最終的な宛先を名前解決したりすることもあります。「DNS設定」を変更しても、その設定が処理するクエリにしか影響しません。すべてのアプリがすぐに新しいサーバーを使うと思い込まないでください。
まず、アプリがプロキシに渡すのがドメイン名かIPアドレスかを確認します。リモート側で名前解決できるプロキシ方式なら、アプリはドメイン名をプロキシに渡せます。アプリが先に自分で名前解決し、アドレスをクライアントに渡す場合、ドメインベースの振り分けに必要な元の情報が失われることがあります。その場合はアプリのプロキシ設定や通信の取り込み方法を確認してください。ドメインのDNSルールを追加するだけでは、失われた情報をすべて復元できません。
重要なクエリを二種類に分けて考えます。プロキシサーバー自身のアドレスを解決するクエリと、接続先の名前を解決するクエリです。前者はプロキシ接続の確立前に発生するため、単独で動作する経路が必要です。唯一の起動用リゾルバーを「プロキシの確立後にしかアクセスできない」設定にすると、起動時に循環が発生します。ドメイン名で指定する暗号化DNSサービスを使う場合も、そのサービス名の初回名前解決方法を考慮してください。
用途に応じてリゾルバーを使い分ける
以下は、これらの項目に対応する V2Fly または Xray の設定で使える、内蔵DNSの簡易例です。通常のクエリにはパブリックDNSを使い、ローカルドメインはシステムのリゾルバーに渡します。これはドメイン条件とクエリポリシーの説明用であり、パブリックDNSがあらゆるネットワークから利用できることを示すものではありません。実際に使う前にネットワーク要件に合わせて変更し、クライアントによって上書きされないかも確認してください。
{
"dns": {
"queryStrategy": "UseIP",
"servers": [
"1.1.1.1",
{
"address": "localhost",
"domains": ["domain:localhost"]
}
]
}
}
社内サービスは通常、LAN内DNSに登録されたプライベートレコードを利用します。すべてのクエリをパブリックDNSに送ると、必要なレコードが見つからなかったり、現在のネットワークに適さないアドレスが返されたりすることがあります。社内ドメイン、ルーターの管理用ホスト名、自前のサービスには、明確なローカル名前解決経路を用意してください。単一ラベルの名前をすべてパブリックドメインと見なさず、内部名を一つ解決するためにDNSの振り分け全体を無効にしないでください。
リゾルバーの通信方式と、クエリが実際に通る経路は別の問題です。暗号化DNSはその通信経路を保護しますが、プロキシを経由するかどうかはコアの実装、アウトバウンドルール、クライアントの設定生成方法によって異なります。ローカルDNSの一部の方式では、通常のルーティング処理を通らないことがあります。動作を確認する際は実行時設定と接続ログを調べ、アドレス文字列に暗号化方式の記載があるかどうかだけで経路を判断しないでください。
「期待するアドレス」などの条件は、応答がルールの想定に合うかを判断するためのもので、速度を上げる汎用スイッチではありません。有効にした結果、正当な応答が拒否されると、フォールバックのクエリが発生して問題の特定が難しくなることがあります。まず基本的な名前解決が成功することを確認し、その後で応答に条件を加えてください。条件を追加するたびに、比較用のドメインと想定されるアドレス範囲を記録しましょう。
アドレスファミリーとキャッシュを個別に検証する
IPv4とIPv6の両方に対応するネットワークでは、名前解決と接続をそれぞれ確認します。IPv6アドレスを取得できても、現在の出口でIPv6通信が利用できるとは限りません。アドレス選択後に接続が失敗する場合は、システムルートと出口の対応状況を確認してから、クエリポリシーを調整してください。IPv6の設定をすべて削除すると症状が一時的に変わるだけで、DNS自体に問題があった証拠にはなりません。
リゾルバーを変更しても、ブラウザー、OS、コアにそれぞれキャッシュが残る場合があります。テスト時は既存の接続を閉じ、テスト用アプリを再起動し、必要に応じて該当するキャッシュを消去してください。サーバーとクエリポリシーを同時に変更すると、結果の原因を特定できません。OSの名前解決ツールで確認できるのはシステムの名前解決経路です。コア内蔵DNSを通らない場合もあるため、ブラウザーの結果と異なっていても設定が反映されていないとは限りません。
切り分けでは、比較用に単純な名前解決経路を一つ残してください。まず複雑なフォールバックと応答フィルターを無効にし、基本的なクエリが完了することを確認してから、ドメイン分類、アドレスファミリーの優先設定、暗号化通信を戻します。ローカル名は解決できて外部名が失敗する場合は、外部リゾルバーへの到達性を確認してください。クエリが完了しているのに宛先へ接続できない場合は、ルーティングの章に戻ってアウトバウンドを確認し、リゾルバーをむやみに増やさないでください。
最後に、DNSログがプライバシーに与える影響を確認します。デバッグログにはアクセスした完全なドメイン名が含まれる場合があり、長期間保存すると詳細な通信履歴になります。検証後は通常のログレベルに戻し、エラー情報を共有するときは内部名やサブスクリプションとの関連情報を伏せてください。DNS設定の目的は経路を明確にし、結果を説明できるようにすることであり、上流のリゾルバーをできるだけ多く設定することではありません。
TUNモード
システムプロキシと仮想ネットワークインターフェースによる取り込みを区別する
システムプロキシが影響するのは、該当する設定に従うアプリだけです。TUNモードでは仮想ネットワークインターフェースでシステムの通信を受け取り、ユーザー空間のネットワークスタックや転送コンポーネントで処理します。より多くのアプリを取り込みたい場合に適しています。システムルート、インターフェースの権限、DNSの取り込みにも関わるため、通常のプロキシより影響範囲が広くなります。有効にする前に、システムプロキシで基本的な接続ができることを確認してください。
v2rayN の「TUNモード設定」はクライアントの管理機能です。V2Fly や Xray のネイティブ設定にある同名の項目と同じものだと考えないでください。どのコンポーネントがインターフェースを作成し、設定をどのように生成するかは、クライアントの実行情報で確認します。コアによってTUNインバウンドの形式も異なります。他のコア向けの項目を V2Ray の JSON に貼り付けても、自動変換されるわけではありません。
現在使える設定を保存し、システムルートを操作している他のツールを終了してから、クライアントの案内に従って必要な権限を許可します。初回は基本的な通信の取り込みだけを確認し、FakeDNS、自作のネットワーク範囲、複雑なプロセスルールを同時に追加しないでください。権限が足りない場合は、権限と起動方法を見直します。スイッチを何度も切り替えて仮想インターフェースが出現するのを期待したり、不要な高い権限を常用したりしないでください。
ルーティング、除外設定、プラットフォームごとの違いを確認する
デフォルトルートをどのように取り込むか確認し、プロキシサーバー自身への接続に適切な経路を確保してください。サーバーへの接続が同じTUNインターフェースに入るとループが発生し、接続を繰り返したりタイムアウトしたりすることがあります。クライアントはインターフェースへのバインド、ルートからの除外、その他の方法でループを防ぐ場合があります。カスタムルートを変更する前に既存の仕組みを確認し、不要に見える除外設定も削除しないでください。
LAN内の機器にアクセスする場合は、プライベートアドレスが直接接続されるか、ローカルネットワークへのシステムルートが残っているかを確認します。コアの直接接続ルールは、受信済み通信の出口を決めます。一方、システムルートは通信を最初にどこへ送るかを決めるため、両方が正しく設定されている必要があります。プリンター、NAS、リモート管理への接続は個別にテストし、ブラウザーで一つのサイトを開けただけでLAN全体が正常だと判断しないでください。
| プラットフォーム | 確認箇所 | よくある制約 |
|---|---|---|
| Windows | ネットワークアダプター、ルーティングテーブル、クライアントの権限表示 | セキュリティソフトや他の仮想ネットワークアダプターが通信の取り込みに影響する |
| macOS | システムのネットワーク設定、権限の確認、実行ログ | インターフェースの作成とルートの変更には適切な権限が必要 |
| Linux | TUNデバイス、ルーティングルール、サービスの実行権限 | デスクトップセッションとバックグラウンドサービスで権限の環境が異なる |
| Android | VPNの許可、アプリごとのプロキシ設定、バックグラウンド制限 | 通常、クライアントはOSのVPNインターフェースを使って通信を取り込む |
Android で v2rayNG または v2flyNG を使う場合、OSのVPN許可とデスクトップクライアントによる仮想ネットワークアダプターの管理は同じではありません。アプリごとのプロキシ対象リストを確認し、テストするアプリが取り込み対象に含まれていることを確かめてください。選択したアプリだけをプロキシする設定では、新しくインストールしたアプリが自動で追加されない場合があります。除外方式を選んでいる場合は、実際に使用しているブラウザーやバックグラウンドサービスが誤って除外されていないかも確認しましょう。
社内ネットワークツール、コンテナ、仮想マシンのソフトウェアが独自のルートを管理していることがあります。通信の取り込み後に一部のアドレスへ接続できなくなった場合は、有効化前後で対象のネットワーク範囲とインターフェース選択を比較してから、除外設定を追加してください。プライベートネットワークをすべてまとめてプロキシに送ったり、一つのコンテナのアドレスのために通信の取り込み全体を無効にしたりしないでください。ルールを明確にしておけば、ネットワークを元に戻す際に影響範囲を確認しやすくなります。
UDP、MTU、終了後の復元に対処する
Webページを開けることは、一部のTCP経路が使えるというだけで、UDPも正常とは限りません。リアルタイム通信、一部の名前解決、UDPを使うアプリには、アウトバウンドの対応、リモート側の対応、ローカルファイアウォールも関係します。特定のアプリだけに問題が出る場合は、まず使用しているトランスポートプロトコルを確認してから該当するログを調べ、すべてを仮想ネットワークインターフェースの作成失敗のせいにしないでください。
小さなリクエストは通るのに大きな応答が止まる場合は、原因の候補として経路MTUを調べられます。ただし、他の環境で使われている固定値をそのまま設定しないでください。DNS、ハンドシェイク、アウトバウンドのエラーを除外してから、クライアントで指定できる範囲内で少しずつ調整し、ほかの設定は変えないようにします。変更ごとに接続を確立し直し、症状が再現するか記録してください。根拠がなければ既定値に戻し、新たなパフォーマンス問題を招かないようにしましょう。
TUNを終了する際は、まずクライアントの通常の終了手順を使い、システムプロキシとDNSが復元されているか確認します。異常終了後すぐにネットワークインターフェースをすべて削除せず、まずクライアントを再起動してクリーンアップしてください。必要に応じてOSのネットワーク設定から復旧します。macOSの認証やネットワーク権限の問題についてはmacOSのインストールと権限設定の手順をご覧ください。モバイル端末のバックグラウンド動作は、バッテリー設定を別途確認してください。
FakeDNS
仮想アドレスとドメインの対応関係を理解する
FakeDNS は宛先の実アドレスを直接返すのではなく、専用のアドレスプールから仮想アドレスを割り当て、ドメイン名との対応関係を保存します。アプリがそのアドレスに接続すると、通信を取り込むコンポーネントが対応関係から元のドメイン名を復元し、ルーティングとアウトバウンドの処理を行います。アドレス形式で届く通信からドメインを識別するための仕組みであり、DNSの一連の処理を置き換える単独のパブリックDNSではありません。
設定が機能するには、一連の処理がつながっている必要があります。クエリがFakeDNSに届き、返された仮想アドレスが同じ通信取り込み経路に届き、対応関係が維持され、インバウンドで正しくドメイン名が復元されなければなりません。どれか一つでも欠けると、「名前解決はできるのにまったく開けない」という状態になります。まず通常のDNSとTUNを検証してからFakeDNSを追加し、安定していない通信取り込み経路に仮想アドレスの仕組みを重ねないようにしてください。
仮想アドレスをそのまま実ネットワークへ送らないでください。仮想アドレスは接続先サーバーの場所を示すものではなく、通常のネットワークからアクセスできないことがほとんどです。ログでアドレスプール内のアドレスへの接続が繰り返されている場合は、そのアドレスに接続できるプロキシを探すのではなく、対応関係の復元と通信の取り込み範囲を確認してください。元のドメイン名を復元して初めて、後続のドメインルールとリモートでの名前解決に正しい情報が渡ります。
コアの対応状況とインバウンド設定をそろえる
以下はFakeDNSに対応する Xray 設定の要素を示しています。アドレスプール、DNSサーバー、対象インバウンドのスニッフィング設定にそれぞれ対応します。これらは実際に実行する一つの設定内の正しい位置に統合する必要があり、自由に追加できる三つのトップレベルオブジェクトではありません。クライアントがすでに該当部分を生成している場合は、その設定を使い、項目の重複宣言や他の必須オプションの上書きを避けてください。
{
"fakedns": [
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
}
],
"dns": {
"servers": ["fakedns"]
}
}
{
"sniffing": {
"enabled": true,
"destOverride": ["fakedns"]
}
}
2つ目の例はインバウンド内部の sniffing オブジェクトです。既存のインバウンド設定全体と置き換えないでください。現在のインバウンドでHTTPやTLSのスニッフィングも必要な場合は、コアのドキュメントに従ってリストを統合します。元の内容を機械的に削除しないでください。仮想アドレスとスニッフィングの実装はコアによって異なる場合があります。v2flyNG で設定する前に、使用中のコアとクライアントが該当機能に対応していることを確認してください。
例のアドレスプールは仮想用途のネットワーク範囲ですが、ローカル環境やネットワークですでに使用されていないか確認してください。テスト環境、他のプロキシコンポーネント、ネットワーク診断ツールが同じ用途で使っている場合があります。アドレスが重複すると、ルートの意味が曖昧になります。空いているように見えるパブリックアドレス範囲を適当に選ばないでください。クライアントで変更できる場合は、その実装のアドレスプール要件に従い、ルートの除外設定もあわせて確認してください。
アドレスプールの容量が左右するのは、保持できる対応関係の数です。接続できるサーバー数や通信速度ではありません。容量が小さすぎるとドメイン数が多い場合に古い対応関係が早く破棄されることがありますが、むやみに大きくするとリソースを余計に使う場合があります。まず実装で用意されている妥当な既定値を使い、ログと再現条件から対応関係の破棄が原因だと判断できる場合にのみ調整してください。アプリの起動が遅いという理由だけで容量不足と決めつけないでください。
キャッシュとFakeDNSを経由しないアプリへの対処
FakeDNSを有効または無効にした後も、アプリやシステムに古いキャッシュが残ることがあります。アプリが仮想アドレスを保持したまま、再起動によって対応関係が消えると、断続的な接続失敗が起こります。切り替えをテストする際は、該当アプリの接続を閉じ、名前解決キャッシュを消去してからリクエストをやり直してください。コアだけを再起動してブラウザーに古いアドレスや接続を使い続けさせないでください。新旧の状態が混在してしまいます。
アプリ独自の暗号化DNSは想定したクエリの入口を通らないことがあります。また、固定アドレスへのアクセスにはドメイン名のクエリ自体がありません。これらの通信ではFakeDNSの対応関係を自動的に利用できません。アプリの実際の動作を確認してから、アプリのDNS設定、プロキシ方式、通信の取り込み範囲を調整するか判断してください。他のアプリが正常だからといって、問題のアプリも同じ名前解決経路を使っているとは限りません。
LAN内の名前や実アドレスを必要とするアプリには、通常のDNS経路を残してください。名前解決の結果を通信の取り込み対象外の別プロセスに渡すサービスもあります。そのプロセスでは仮想アドレスを使えない場合があります。このような場合は、仮想アドレスをシステムから広く参照できるようにするのではなく、対象名に明確な名前解決の例外を設定してください。アドレスをプロセス間で渡す動作は、アプリの構造に応じて判断する必要があります。
元に戻すときは、通常の名前解決を復元し、仮想アドレスのマッピングを無効にしてから、古いキャッシュを消去して接続を確立し直します。切り戻し後も仮想アドレスにアクセスしようとする場合は、サーバー設定をさらに変更せず、まずキャッシュの残存に対処してください。FakeDNSの利点は、ルーティング可能なドメイン情報を保持できることです。通常のドメイン名を使うインバウンドで要件を満たせる場合は、設定を複雑にするためだけに有効にする必要はありません。
複数サブスクリプションの管理
グループを分けて更新範囲を明確にする
提供元ごとにサブスクリプショングループを作り、用途に応じてメモと絞り込み条件を設定します。同じ提供元でも用途が異なる場合は管理上分けられますが、更新や項目の重複に注意してください。グループを追加しても接続能力が自動的に向上するわけではありません。実際に有効なのは、現在選択されているサーバー、ルーティングルール、設定内のアウトバウンドです。
「提供元の識別情報」「表示名」「接続パラメーター」を区別してください。メモが同じ二つの項目でもサーバーが異なることがあります。逆に、メモが違っても同じ接続の名前を変更しただけの場合があります。重複を削除するときは、名前だけで判断せず、プロトコル、アドレス、ポート、重要な転送パラメーターを確認してください。クライアントの重複削除機能を使う場合は、比較対象の項目を把握し、実行前に復元可能な設定のコピーを保存しましょう。
自動更新の目的は提供元の変更を反映することであり、一覧を頻繁に更新することではありません。サブスクリプションの更新頻度や利用状況に合わせて間隔を設定し、複数の提供元が同時に更新されて問題の特定が難しくなるのを避けます。問題の切り分け中は、対象グループの自動更新を一時停止してテスト環境を固定してください。解決後に再開すれば、ローカル設定の検証中にリモート側の変更が重なるのを防げます。
更新経路と接続経路を別々に検証する
サブスクリプションの更新は、クライアントの設定に応じて直接接続または現在のプロキシを経由します。現在のプロキシが特定のサブスクリプションに依存し、そのサブスクリプションの更新にも現在のプロキシが必要な場合は、事前に復旧可能な経路を用意してください。未検証のサーバーを唯一の更新経路に設定し、最後に使える項目を削除しないでください。管理経路と接続経路の両方が使えなくなるおそれがあります。
更新経路をテストするときは、一度に一つのグループだけを操作します。更新方式、エラーが発生した段階、既存の項目が保持されるかを記録してから、別の経路と比較してください。証明書エラーでは、検証を無効にするのではなく、システム時刻とネットワーク環境を確認します。ネットワークの認証画面、差し替えられた応答、誤ったリダイレクトによってインポートが失敗することがあります。クライアントに空の一覧が表示されても、それは結果であって原因ではありません。
更新後は現在選択されているサーバーの所属を確認してください。提供元で項目が削除または置換されると、クライアントが以前の選択を保持する場合や、選び直しを求める場合があります。「更新成功」だけで、接続に最新のパラメーターが使われているとは限りません。メイン画面で選択中の項目を確認し、接続を確立し直してから、ログに記録された宛先と設定の提供元を見て、実際に使われている項目を確認してください。
| 操作 | 主な影響 | 操作後の確認 |
|---|---|---|
| グループを一つ更新 | その提供元から生成されたサーバー項目 | 絞り込み結果、現在の選択、重要なパラメーター |
| グループの絞り込み条件を変更 | インポート後に表示・保持される項目の範囲 | 残すはずの項目が誤って除外されていないか |
| 現在のサーバーを切り替え | 以降に確立する接続のプロキシ出口 | アプリの接続を確立し直す必要があるか |
| サブスクリプションの提供元を削除 | 今後の更新可否と関連項目 | 現在の項目を管理・復元できるか |
手動項目とサブスクリプション項目は別々に管理してください。手動項目は、確認済みの特定パラメーターを保存するのに適していますが、提供元の修正は自動反映されないため、保守を続ける必要があります。変更理由と対象項目を記録し、メモに認証情報を保存しないでください。一時的なテストなら、検証後にテスト用のコピーを削除します。数カ月後にどの項目が提供元によって管理されているのか分からなくなるのを防げます。
バックアップ、移行、機密情報の保護を計画する
クライアント設定をバックアップする前に、エクスポート対象を確認してください。サブスクリプションURL、サーバーの認証情報、カスタムルーティング、画面設定が含まれる場合があります。バックアップは機密情報として扱い、アクセス制限のある場所に保存してください。問い合わせ用の資料は別途作成し、エラー情報と必要な項目だけを残します。エクスポートファイル全体を公開の掲示板にアップロードしたり、認証パラメーターを含むQRコードを表示したりしないでください。
別の端末へ移行する場合は、まず対象プラットフォームのクライアントをインストールし、必要最小限の範囲で設定を読み込みます。v2rayN のデスクトップ管理設定をAndroidクライアントで直接読み込めるとは限りません。共通のサブスクリプション内容とクライアント固有の設定も別のデータです。まず一つの提供元を復元して接続を検証し、その後でルーティング、DNS、通信の取り込み設定を移行してください。旧端末固有の経路や権限設定をまとめて引き継がないようにしましょう。
サブスクリプションURLが漏えいした可能性がある場合は、提供元の管理方法で認証情報を変更してから、ローカルの項目を更新してください。グループのメモを変更しても、古いURLでのアクセス権限は変わりません。URLの置き換え後は、すべての端末が更新されていることを確認し、古い自動タスクとキャッシュのコピーを無効にします。クライアントからサブスクリプション提供元のアクセス権限を取り消すことはできません。実際にURLを発行した側で管理操作を行う必要があります。
安定した保守の手順を整えます。提供元、絞り込み、接続の順に検証してください。複数のグループで同時に問題が起きた場合は、システム時刻、ネットワーク、現在のプロキシなど共通の要因を優先して確認します。一つのグループだけが失敗する場合は、URLと応答形式に絞って調べます。関連する問題はFAQでも、インストール・設定とトラブル対処の項目に分けて確認できます。提供元の問題をクライアント全体の故障と誤認しないようにしましょう。
カスタムアウトバウンド
タグでルーティングと出口を結び付ける
アウトバウンドはコアから外部への接続方法を定義し、ルーティングはタグを使ってアウトバウンドを選択します。タグは設定内で参照するための名前であり、特別な機能はありません。アウトバウンドに direct という名前を付けても、自動的に直接接続になるわけではありません。動作を決めるのはプロトコルとその設定です。まずアウトバウンドの定義を確認し、次にルーティングからの参照を確認してください。タグ名が一致することは正しい設定に必要ですが、それだけで十分ではありません。
GUIクライアントは通常、現在のサーバーに対応するプロキシアウトバウンドと、直接接続およびブロック用のアウトバウンドを生成します。カスタム項目を追加する場合は、クライアントの入力欄が「設定の一部を追加」「設定全体を置換」「専用のカスタム設定」のどれに当たるのか確認してください。部分的な設定を設定全体の入力欄に読み込むと、インバウンドなど必須の項目が不足します。逆に、設定全体を追加用の欄に入れると定義が重複する場合があります。
以下は、ネイティブな V2Ray または Xray の設定でよく使われる、直接接続とブロックのアウトバウンド例です。タグの構造を確認するために使ってください。統合する前に、同じタグがすでに存在しないか確認します。この例にはプロキシサーバーの認証情報は含まれておらず、クライアント設定全体でもありません。プロキシアウトバウンドは検証済みのサーバー項目から生成し、手作業で転送やセキュリティのパラメーターを漏らさないようにしてください。
{
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {}
}
]
}
まず単一ルールで試し、その後に組み合わせる
アウトバウンドを追加したら、まず範囲を絞った明確なルールを一つ使って参照します。管理できるテスト対象を選び、コアが起動すること、タグが存在すること、ルールが適用されることを確認してから、対象範囲を広げましょう。デフォルトの通信をすべて置き換えないでください。設定を誤るとすべてのアプリが同時に失敗し、比較できる情報が減るだけでなく、サブスクリプションの更新や問い合わせページへの接続もできなくなるおそれがあります。
直接接続アウトバウンドでも、名前解決とシステムネットワークの確認が必要です。ファイアウォールを迂回するわけでも、特定の物理インターフェースを使う保証があるわけでもありません。インターフェースのバインドや送信元アドレスを指定する場合は、現在のコアに対応するオプションがあり、OSの権限も満たしているか確認してください。また、指定するアドレスがローカル端末に割り当てられていることも確認します。他の端末のインターフェース名やアドレスをコピーしても、同じ経路にはなりません。接続に失敗することがあります。
プロキシチェーンとは、複数のプロキシアウトバウンドを並べることではありません。明示的な転送関係を設定して初めて、接続が複数の段階を経由します。通常のルーティングでは、複数の出口から一つを選ぶだけです。チェーンを組む前に各段階が単独で使えることを確認し、名前解決、転送プロトコル、認証の要件も段階ごとに確認してください。一つでも失敗するとチェーン全体に影響します。ログは段階ごとに読み取り、最後のタイムアウトだけで判断しないでください。
特にUDPと多重化の動作を確認してください。あるアウトバウンドでWeb通信ができても、すべてのデータグラム通信に適しているとは限りません。また、プロトコルが多重化に対応していても、有効にすることであらゆるアプリにメリットがあるわけではありません。まず既定値を維持し、接続確立のオーバーヘッドや互換性の問題を実際に確認できた場合に限って比較テストを行います。Muxを無条件に速度を上げる機能として扱ったり、異なるコアの多重化項目を混用したりしないでください。
デフォルトアウトバウンド、ループ、互換性に対処する
明示的なフォールバックルールがない場合、デフォルトアウトバウンドがオブジェクトの順序に左右されることがあります。新しいオブジェクトを挿入すると、既存のルールが変わっていなくても、どのルールにも一致しない通信の経路が変わる場合があります。変更前にデフォルトの動作を記録し、変更後は先行ルールに一致しない対象を一つテストしてください。デフォルトの動作を安定して指定するには、現在のコアが対応するフォールバック方式を使い、偶然の並び順に依存しないようにします。
アウトバウンド同士が互いを参照するループや、アウトバウンドの接続がローカルのプロキシ入口に再び取り込まれる状態を避けてください。前者はコア設定内の転送関係で発生し、後者はシステムプロキシ、TUN、アプリのプロキシ設定が原因になる場合があります。いずれも接続が繰り返されてタイムアウトすることがあります。切り分けでは、各段階の次の接続先を実際のネットワーク出口まで書き出します。出発点に戻る矢印があれば、その理由を説明できる必要があります。
コアを切り替える前に設定を保存し、プロトコル、転送方式、セキュリティのオプション、リソース形式を一つずつ確認してください。V2Fly と Xray は一部の設定概念を共有していますが、すべての拡張機能に互換性があるわけではありません。v2rayNG と v2flyNG も、名前が似ているだけで同じ実行環境だとは限りません。コアが未対応の項目を報告した場合は、実際の対応範囲に合わせて修正してください。エラー行を単に削除し、その行が担っていた機能を無視しないでください。
カスタム設定を保守する際は、厳密なJSONにコメントを追加して解析エラーを起こさないよう、各タグの用途を別の場所に記録してください。保存前に括弧、カンマ、文字列の引用符、キーの重複を確認します。一度に変更するのは一つの論理単位だけにし、起動に成功したらネットワークを検証してください。構文が正しくても、出口に到達できるとは限りません。クライアントを変更する場合はダウンロードページに戻り、プラットフォームとコアの用途を確認してください。
カスタムアウトバウンドを元に戻す際は、まずそれを参照するルールを削除または変更し、その後でアウトバウンドを削除して、最後にデフォルト経路を確認します。アウトバウンドだけを削除してタグ参照を残すと、起動時やルール適用時に失敗します。切り戻し後はテスト接続を確立し直し、クライアントが想定した設定生成方法に戻っていることを確認してください。画面上の設定だけが戻り、実行ファイルが古い状態のまま残るのを防げます。
設定の検証と段階的な切り戻し
再利用できる検証の基準を記録する
詳細設定を変更する前に、正常に動作することを確認した組み合わせを残します。使用中のクライアントとコア、サーバー項目、システムプロキシの状態、ルーティングのプリセット、DNS方式を記録してください。用途と重要な選択肢だけを記録し、公開ドキュメントに機密性の高いアドレスを保存する必要はありません。基準は比較用であり、将来も常に使える保証ではありません。提供元が変更されたら再検証し、どの条件が変わったかを記録してください。
設定は段階を分けて変更します。まずサブスクリプションとサーバー、次にルーティング、DNS、最後に通信の取り込みと仮想マッピングを確認します。各段階の検証に成功してから次へ進んでください。コアの切り替え、TUNの有効化、FakeDNSの追加、ルールの置き換えを同時に行うと、失敗した原因をほとんど特定できなくなります。詳細設定を効率よく進めるには、パラメーターを一度に増やすのではなく、変数を絞り込みましょう。
固定のテスト対象を用意します。直接接続する対象、プロキシ経由にする対象、LAN内のサービス、実際に問題が起きているアプリを一つずつ選びます。毎回同じ対象を使い、古い接続が再利用されていないことを確認してください。テスト結果には、クライアントに通信が入ったか、名前解決が完了したか、どのアウトバウンドに一致したか、どの段階で失敗したかを記録します。根拠のない速度推定や体感だけに基づく結論は記録しないでください。
接続のライフサイクルに沿って失敗箇所を特定する
まずコアが正常に起動するか確認します。設定の解析エラー、リソースの読み込み失敗、リッスンポートの競合は、外部接続を確立する前に起きます。この段階でサーバーを変更しても解決しません。直近に変更した設定項目と、ログに最初に記録されたエラーを確認し、最初に失敗した箇所から修正してください。後に続く再試行のログは連鎖的な結果の場合があります。末尾に繰り返し表示されるメッセージだけに惑わされないでください。
起動に成功したら、アプリの通信がクライアントに入っているかを確認します。対応するインバウンドの記録がない場合は、アプリのプロキシ設定、システムプロキシの状態、TUNのルート、アプリごとの対象リストを確認してください。リクエストが入ったことを確認してから、名前解決とルールの適用を調べます。ログレベルによっては接続ごとの情報が表示されません。必要に応じて一時的に詳細度を上げますが、「表示されない」ことを「発生していない」と即断しないでください。
リクエストが入ったら、名前解決エラー、接続エラー、ハンドシェイクエラーを区別します。名前解決のタイムアウトはリゾルバーの経路を示唆します。宛先への接続失敗にはアドレス、ポート、出口、ファイアウォールが関係する場合があります。TLSエラーではサーバー名、システム時刻、証明書チェーンも確認してください。エラーを回避するために検証を無効にしないでください。接続のセキュリティ条件を変えるだけで、元の設定が失敗した理由は分かりません。
| 確認できた現象 | 優先して確認する項目 | 今は変更しない項目 |
|---|---|---|
| コアを起動できない | 設定の構文、リソース、ポートの競合 | リモートサーバーの選択 |
| アプリのリクエストが取り込まれない | プロキシ入口、通信の取り込み範囲、アプリの設定 | ドメイン分類ルール |
| 名前解決はできるが出口が異なる | ルールの順序、デフォルトアウトバウンド、ドメイン名の復元 | サブスクリプションURL |
| ルールは正しいがハンドシェイクに失敗する | プロトコルの設定、時刻、転送方式、証明書 | 検証済みの一致条件 |
| 終了後もシステムに異常が残る | プロキシ設定の残存、DNS、仮想インターフェース、ルート | サーバー項目すべて |
一部のアプリだけに問題がある場合は、独自DNS、固定アドレス、UDP、異なるプロキシプロトコルを使っていないか確認してください。バックグラウンドでのみ問題が起きる場合は、システムのスリープ、ネットワークの切り替え、バックグラウンド制限を確認します。Androidで継続動作しない場合はv2rayNGのバッテリー最適化とバックグラウンド動作設定をご覧ください。アプリのライフサイクルの問題を、すべての接続パラメーターを再入力する必要がある問題と混同しないでください。
最小限の範囲で切り戻し、状況を整理する
直近の変更から逆の順に元に戻します。まず追加したルールやカスタム設定を取り消し、次に名前解決方式を戻し、最後にTUNを終了します。FakeDNSを使っている場合は仮想アドレスのキャッシュも処理してください。システムプロキシを使っている場合は、OS上の実際の状態を確認します。一つ戻すたびにすぐテストし、症状が解消したら、その設定と依存関係に原因を絞ってください。使える設定をほかにも削除し続けないようにしましょう。
正常に終了した後もネットワークが復旧しない場合は、まずシステムプロキシが終了済みのローカルポートを指していないか確認し、次にDNSとデフォルトルートを確認します。ネットワーク設定をすべて消去しないでください。固定アドレス、社内ネットワーク、仮想マシン環境にも影響します。まずクライアントの通常のクリーンアップ手順を使い、必要であればOSの設定を一つずつ戻してください。比較できるよう、変更前の値を必ず残しておきます。
最終的に有効だった変更を短く記録します。変更した設定項目、変更理由、検証した対象、元に戻す方法を書いてください。由来を説明できない設定ファイルを一つ保存するだけでは不十分です。今後クライアントの画面やコアの動作が変わったとき、この記録があれば設定を組み直せます。古い項目がいつまでも同じ意味を持つと考える必要はありません。
トラブル対処が終わったら、通常のログレベルに戻し、一時的なテスト記録を削除して、必要な自動更新を再開します。基本的な手順はクイックスタートで確認できます。用語の意味は用語集、よくある現象はFAQをご覧ください。設定経路を明確にし、検証と切り戻しができる状態に保ってから、用途を一つずつ追加しましょう。