この記事の要点

FakeDNSは、透過プロキシ環境でドメイン情報を保持したい場合に役立ちますが、DNSやルーティング設定全体を単独で置き換えるものではありません。この記事では、IPアドレスの割り当て、TUNによる通信の取り込み、Xrayの設定、トラブルの切り分けを順に解説します。利用中のクライアントに必要な機能がそろっているかを確認し、ログやキャッシュのクリアで設定を検証する方法も紹介します。設定スイッチだけで動作を推測する必要はありません。

FakeDNSの仕組み:一時的なIPアドレスでドメインを保持

FakeDNSが返すのはローカルで対応付けられたIPアドレスであり、Webサーバーの実際のIPアドレスではありません。通常のDNSはドメイン名を実際のIPアドレスに変換しますが、FakeDNSはあらかじめ用意されたアドレスプールからIPアドレスを割り当て、「ドメイン名と一時アドレス」の対応を記録します。アプリは通常どおりそのアドレスに接続し、プロキシが通信を取り込んだ後、対応情報からドメイン名を復元して、後続のルーティングやアウトバウンド処理に渡します。

ドメイン名を検索 偽アドレスを割り当て アプリが接続 TUNで取り込み ドメイン名を復元 アウトバウンドを選択

Xrayでよく使われるIPv4アドレスプールの例は 198.18.0.0/15 で、範囲は 198.18.0.0 から 198.19.255.255 です。これはベンチマーク用に予約されたアドレス範囲であり、インターネット上のサーバーアドレスでも、一般的な家庭内LANのプライベートアドレス帯でもありません。正しく構成されたFakeDNSの経路で、アプリがこのようなアドレスを受け取るのは正常です。

この仕組みの要点は「IPアドレスからドメイン名を復元できる」ことです。アプリが偽アドレスに接続する際にプロキシを迂回したり、通信を取り込むコアに対応情報がなかったりすると、偽アドレスでは正常にアクセスできません。DNS設定にアドレスプールを指定するだけで、接続の取り込みや復元を設定していない場合、これまでアクセスできていたサイトも接続タイムアウトになることがあります。

FakeDNSとTUN:通信の取り込みとDNSの取り込みは別

TUNはネットワークパケットをプロキシに渡し、FakeDNSはその過程でドメイン情報を復元できるようにします。よく併用されますが、同じ機能ではありません。TUNを有効にしてアプリの接続が取り込まれていても、DNSクエリはルーターや企業のDNS、またはブラウザー独自の暗号化DNSに送られている場合があります。この場合、返るのは実際のIPアドレスで、FakeDNSの対応情報は作成されていません。

処理段階 必要な条件 条件が欠けた場合
DNSの入口 対象のクエリが設定済みのFakeDNSに届く 実際のIPアドレスが返り、偽アドレスとの対応を確認できない
接続の取り込み アドレスプール宛ての通信が適切なTUNまたは透過プロキシのインバウンドに届く アプリが予約済みアドレスに直接接続し、タイムアウトする
ドメイン名の復元 接続を処理するコアが対応情報を参照できる ルーティングが偽アドレスしか認識できず、ドメイン名で振り分けられない
最終アウトバウンド 復元された接続先を直接接続またはプロキシで処理できる ルールに一致しているのに接続できない

ドメイン名の復元と通信のスニッフィングは区別が必要です。HTTPのHostやTLSのサーバー名などは一部の接続の識別に役立ちますが、すべての接続からドメイン名を読み取れるわけではありません。FakeDNSは事前のDNSクエリで記録した対応情報からドメイン名を復元するため、アプリ層のデータだけに依存しません。ただし、アプリがIPアドレスを直接使う場合や、対象のDNS入口を通らない場合、元のドメイン名を自動で補うことはできません。

判断のポイント:4つの段階を確認してからFakeDNSを有効にする

DNSの入口、アドレスプール宛ての通信経路、対応情報の復元、アウトバウンド処理が一連の経路としてつながっている必要があります。TUNのアイコンが有効になっているだけでは不十分です。ログで復元された接続先ドメインと選択されたアウトバウンドを確認してから、ドメイン別ルーティングが実際に機能しているか判断しましょう。

Xrayの設定:アドレスプールとインバウンドでの復元を別々に確認

XrayのFakeDNSでは、アドレスプールの設定と実際のDNS利用方法を組み合わせる必要があります。以下は説明用のトップレベル設定例で、そのまま動作するクライアント設定一式ではありません。IPv4の偽アドレスプールと内蔵DNSのサーバー選択のみを示しています。実際の設定にはインバウンド、ルーティング、アウトバウンドも必要で、アプリのクエリが確実にこのDNSモジュールへ届くようにしなければなりません。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": [
      "fakedns"
    ]
  }
}

poolSize は対応情報を格納するプールの容量を示すもので、DNSの待ち受けポートや通信速度の設定ではありません。例の 65535 は、サイトが同時接続を65535件処理できるという意味ではありません。FakeDNSのDNS設定だけですべての名前解決を担うこともできません。実際のIPアドレスが必要な直接接続先、プロキシサーバーのドメイン名、特殊な社内ドメインには、それぞれ実際の名前解決経路を用意してください。接続先の決定段階で、直接使えない偽アドレスが返る事態を防げます。

アドレスプールとDNS

トップレベルの項目
fakedns
IPv4アドレスプール
198.18.0.0/15
設定例の容量
65535
DNSサーバー項目
fakedns

まずクエリがこのモジュールに届いていることを確認し、返されたアドレスが設定したプールの範囲内か確認します。

Xrayインバウンドでの復元

インバウンドの項目
sniffing
有効化
enabled: true
対象の上書き
destOverride: ["fakedns"]
確認する対象
偽アドレス宛ての接続を実際に受け取るインバウンド

ここでは復元に関係する項目のみ示しています。ほかのスニッフィング設定は、既存の設定に合わせて統合してください。

この仕組みに対応したXrayインバウンドでは、sniffing.destOverride の fakedns を使って対応情報を検索し、接続先を復元します。この項目をほかのコアの設定にそのまま貼り付けたり、TUNの通信を受け取らないインバウンドだけを変更したりしないでください。クライアントが設定を自動生成する場合、一時ファイルを手動で変更しても次回起動時に上書きされることがあります。クライアントが提供する設定画面や設定方法を優先してください。

使いどころ:ドメイン別ルーティングを優先し、LANの名前解決は例外として維持

FakeDNSは、「通信を透過的に取り込みながら、ドメイン名に応じてアウトバウンドを選びたい」場合に適しています。たとえば、システムのHTTPプロキシを使わないアプリでは、TUNを有効にしても接続先IPアドレスしか見えないことがあります。FakeDNSで対応情報を保持すれば、ルーティングでドメイン名を条件にできます。改善するのは接続先を識別する経路であり、サブスクリプションのノード品質が上がるわけでも、VMessが自動的にVLESSへ変換されるわけでもありません。

利用シーン 推奨 設定のポイント
TUN環境でドメイン別ルーティングが必要 必要な条件がそろっていれば有効化できる 対応情報が復元されてからドメインルールに一致することを確認
明示的なHTTPプロキシまたはSOCKSプロキシのみを使用 まず接続先がすでにドメイン名として扱われているか確認 ドメイン名を取得できているなら、通常は偽アドレスを追加する必要はない
企業内ネットワークや家庭内機器の検出 実際の名前解決を優先して維持 社内ドメインは適切なDNSに問い合わせ、必要に応じてLAN通信を迂回
アプリが実際のIPアドレスやアドレスの所属を確認 まずアプリ単位で互換性をテスト 必要に応じて、そのアプリまたはドメインに実際の名前解決を使う例外を設定

LANプリンター、社内サービス、ローカル機器の検出に依存するアプリを、一律にFakeDNSへ通すのは避けてください。マルチキャストによる検出と通常のユニキャストDNSは別の仕組みです。まず既存の名前解決経路を維持し、通信を取り込む範囲を段階的に広げましょう。社内ドメインをパブリックDNSに問い合わせる設定にすると、FakeDNSを無効にしてもアクセスできないことがあります。

設定の進め方:通常のDNSとTUNを安定させてから、偽アドレスの対応付けを追加

新しい設定では、まず直接接続、プロキシ経由、社内ネットワークへのアクセスの3種類を検証します。ドメイン名を識別できない問題が実際に起きた場合に限り、FakeDNSを追加して同じ3種類を再テストしてください。DNSの問題をノード、権限、ルーティングの問題と切り分けやすくなります。

検証とトラブルシューティング:名前解決、接続先、アウトバウンドの順に確認

FakeDNSの検証は、Webページが表示されるかどうかだけで判断できません。既存の接続、キャッシュ、ブラウザー独自のDNSによってページが表示されている可能性があり、新しい設定が有効になった証拠にはならないためです。設定は一度に1項目だけ変更し、変更前後のDNS応答、接続先、アウトバウンドの表示を記録しましょう。以下の手順は特定のクライアントバージョンに依存せず、メニュー名もすべてのバージョンで共通とは限りません。

  1. 実際に使われているコアを確認。v2rayNのコア選択画面や実行ログで、起動しているコアを確認し、クライアントとコアのバージョンを記録します。設定に「未知の項目」というエラーが出た場合は、サブスクリプションのノードを何度も切り替えるのではなく、その項目がどのコアに属するか確認してください。
  2. DNSの入口を確認。通常のDNSはUDPまたはTCPの 53 番ポートを使うことが多いものの、内蔵DNSモジュールがシステム上でこのポートを待ち受けているとは限りません。クライアントのDNS取り込み設定とシステムのDNSアドレスを確認し、127.0.0.1:53 が使えると決めつけないでください。
  3. 古いキャッシュを削除。テストするアプリを終了してシステムのDNSキャッシュを削除し、アプリを再起動します。ブラウザーには独自のDNSキャッシュやセキュアDNS設定がある場合もあるため、別途確認してください。
  4. アドレスと復元結果を確認。DNSの応答が設定したアドレスプールの範囲内にあり、接続ログに復元後のドメイン名または対応する処理記録が表示されるか確認します。198.18.x.x が表示されたというだけでは、アウトバウンド接続が成功した証拠にはなりません。
  5. 実際の名前解決とルーティングを確認。直接接続先やプロキシサーバーのドメイン名から実際のIPアドレスを取得できるか確認し、ドメインルールで選ばれたアウトバウンドを調べます。トラブルシューティングが終わったら通常のログレベルに戻し、接続情報を大量に長期間保存しないようにしましょう。

Windowsでは次のコマンドでシステムのDNSキャッシュを削除し、各ネットワークインターフェースに設定されたDNSサーバーを確認できます。2つ目のコマンドはPowerShellで実行してください。これらはDNSの入口を調べるためのもので、クライアントのルールを自動変更したり、アプリ内部のすべてのキャッシュを削除したりするものではありません。

ipconfig /flushdns

Get-DnsClientServerAddress -AddressFamily IPv4

テストツールが実際のIPアドレスを返した場合は、まずどのDNSサーバーに問い合わせているか確認してから、FakeDNSが動作していないか判断します。偽アドレスが返るのに接続がタイムアウトする場合は、アドレスプール宛ての通信が適切なインバウンドに届いているか、対応情報がまだ有効かを重点的に確認してください。コアを再起動すると、アプリが古い偽アドレスを使い続ける一方で、新しいコアには対応情報が残っていないことがあります。その場合は、ノードを何度も切り替えるより、アプリの再起動とキャッシュの削除が有効です。

よくある質問:有効化、遅延、無効化後の復旧

FakeDNSを有効にしても、ドメイン名が実際のIPアドレスに解決されるのはなぜ?

まず、テスト対象のアプリが使うDNSの入口を確認してください。ブラウザーのセキュアDNS、システム既定のDNS、クライアントで設定した実際の名前解決の例外などが、実際のIPアドレスを返している可能性があります。同じドメイン名について、システムのDNSクエリとアプリのアクセスログを確認し、FakeDNSに割り当てられているか調べましょう。偽アドレスを表示させるために、必要な社内ドメインやサーバーの例外を削除しないでください。

198.18で始まるアドレスが返りました。DNSが汚染されていますか?

まずアドレスプールの設定を確認してください。198.18.0.0/15 が設定されている場合、この範囲の応答はFakeDNSの想定どおりかもしれません。続けて、対応情報の復元とアウトバウンドのログを確認します。この機能を有効にした覚えがないのに該当アドレスが表示される場合は、現在のDNSサーバーやネットワーク内のほかの通信取り込み設定を調べてください。

FakeDNSでノードの遅延を減らしたり、ダウンロード速度を上げたりできますか?

接続先までのネットワーク品質を直接改善することはできません。偽アドレスの割り当てにより、アプリが実際の名前解決を待つ工程を省ける場合はありますが、その後に名前解決や接続確立が必要になることもあります。テストでは同じノード、同じ接続先、同じネットワークを使い、初回接続と継続的なデータ転送の結果を別々に記録してください。ページを一度開いたときの速さだけで判断しないようにしましょう。

FakeDNSを無効にしたのに、アプリがまだ開けないのはなぜ?

アプリが偽アドレスをキャッシュしているか、古い接続を維持している可能性があります。該当するアプリを終了し、DNSと通信の取り込み設定を元に戻してから、Windowsで ipconfig /flushdns を実行し、アプリを再起動してください。それでも解決しない場合は、ルーティングとDNSサーバーも復元されているか確認します。TUNだけを無効にして、キャッシュ内の偽アドレスがプロキシを迂回する状態にしないでください。

最終的には接続経路全体を確認してください。アプリがどのアドレスを取得し、どのインバウンドが接続を取り込み、ドメイン名を復元できるか、ルールがどのアウトバウンドを選択したかを順に調べます。ルーティングやプロキシモードをさらに調整する場合は詳細ガイドを参照してください。クライアントを初めて設定する場合は、まず利用ガイドに沿って基本的な接続を確認し、その後FakeDNSを追加しましょう。

プラットフォーム別にクライアントをダウンロード

Windows、macOS、Android、Linux向けのクライアントを選び、サブスクリプションの追加と基本接続を確認してから、コアとDNSの取り込み設定を確認してください。