2026年10月21日 · DNS 応用 · 約10分

V2Ray FakeDNSとは?仮想IPの割り当て・スニッフィングとの連携・活用場面

FakeDNSが予約済みアドレス帯の仮想IPを使ってドメイン情報を保持する仕組みや、sniffing・TUNモードとの連携を解説。導入が有効なケースと注意点も紹介します。

この記事の要点

FakeDNSは、透過的な通信制御で「接続先がIPアドレスだけになり、ドメインベースのルールを適用できない」という問題を補う機能です。汎用的な通信速度向上の設定ではありません。仮想IP、対応表、インバウンドでの復元の関係を整理し、Xrayの設定例、TUNの確認項目、元に戻す手順を紹介します。接続が安定しており、DNSやルーティングを調整したい方が対象です。初めて設定する場合は、まず通常のプロキシ接続を確認してください。

FakeDNSの仕組み:仮想IPでドメイン情報を保持

通常のDNSは、ドメインを接続可能な実IPアドレスに変換します。一方FakeDNSは、処理対象のAまたはAAAAクエリに仮想IPを割り当て、「ドメインと仮想IP」の対応をローカルに保存します。アプリは通常の名前解決結果を受け取ったように見え、そのアドレスへ接続します。プロキシコアが接続を受け取ると、対応表から元のドメインを復元し、ルーティングとアウトバウンド処理に渡します。

アプリがドメインを問い合わせる 仮想IPを割り当てる 宛先への接続を捕捉する 対応表からドメインを復元する ルーティングでアウトバウンドを選ぶ

ここでいう「復元」は、ローカルの対応表を参照する処理であり、パブリックDNSにPTR逆引きを問い合わせることではありません。たとえばアプリが example.com を問い合わせてプール内のアドレスを受け取った場合、コアはアプリがそのアドレスへ接続したとき、同じ対応表から example.com を特定できます。割り当てられるアドレスは実行時の状態によって異なるため、特定の仮想IPを固定値としてルールに書き込まないでください。

仮想IPは、この端末内で通信を捕捉するための目印であり、Webサーバーの実アドレスではありません。別の端末からそのままアクセスすることはできず、通常のゲートウェイ経由でインターネットへ送っても宛先から応答は得られません。最終的にDIRECTアウトバウンドを選ぶ場合も、先にドメインを正しく復元し、その後で適切な名前解決と接続処理を行う必要があります。

アドレスプールとポート:3つの数値を区別する

198.18.0.0/15
この記事で使うIPv4仮想アドレスプールの例
4096
この記事で使うpoolSize設定の例
53
従来型DNSのサービスポート

198.18.0.0/15 は 198.18.0.0 から 198.19.255.255 までを含む、ベンチマーク用に予約されたアドレス帯です。一般的なプライベートLAN用アドレス帯ではありません。通常のインターネット上の宛先として使われない点を利用して仮想IPプールにできますが、企業ネットワーク、検証環境、ほかのトンネルでも使われる場合があります。利用前にルートの競合がないか確認してください。

poolSize は対応表の容量を表し、DNSキャッシュの保持時間や同時接続数の上限ではありません。ここでの 4096 は設定例にすぎず、すべての端末に適した推奨値ではありません。容量不足や、アプリが古いアドレスを保持したまま対応情報が削除されることにより、復元に失敗する場合があります。ブラウザーのキャッシュだけを消し、コア側の対応表やシステムDNSキャッシュの寿命を見落とさないようにしてください。

FakeDNS・sniffing・TUN:それぞれの役割

TUNは仮想ネットワークインターフェースへルーティングされたIP通信を受け取りますが、すべての接続でドメインが分かるとは限りません。通常のsniffingは、HTTP HostやTLSハンドシェイクなど、対応するプロトコル情報からドメインを特定します。FakeDNSは、先に作成された対応情報を使ってドメインを復元します。どちらもドメイン情報を補えますが、情報源が異なり、同じものではありません。

FakeDNSによる対応情報の復元

情報源
ローカルの仮想IP対応表
必要な条件
問い合わせが対応するFakeDNSを経由する
インバウンド設定
対応するfakedns復元を有効にする
宛先の処理
ドメインを復元してルーティングとアウトバウンドへ渡す

仮想IPの割り当てから対応情報の復元まで、一連の処理を成立させる必要があります。

一般的なプロトコルスニッフィング

情報源
対応するアプリケーション層のハンドシェイク
主な対象
HTTP Host、TLS SNI
制約
暗号化されたハンドシェイク、プロトコルの違い、情報不足
TUNの役割
通信を捕捉する機能であり、ドメインの特定を代行するものではありません

スニッフィングはすべてのプロトコルに対応するわけではなく、通信内容を復号する機能でもありません。

アプリがIPアドレスを直接使う場合、捕捉されない暗号化DNSを使う場合、または有効化前に取得した実アドレスを再利用する場合、FakeDNSは対応情報を作成できません。このとき接続がIPルールで処理されても、機能が動作していないとは限りません。逆に、DNS問い合わせだけがFakeDNSに届き、宛先への接続がTUNや透過型インバウンドを迂回すると、アプリは仮想IPへの接続に失敗します。

要点:DNS問い合わせと接続が同じ処理経路に入るか確認する

仮想IPが返されるのにページを開けない場合は、まず宛先への通信が対応表を参照できるコアへ戻っているか確認してください。すぐにノードを変更したり、ルーティングをすべてプロキシ経由にしたりする必要はありません。

Xray設定例:仮想IPの割り当てとインバウンドでの復元を両方設定

以下はXray形式の設定項目の関係を示す例であり、完全な実行用設定ではありません。V2Rayは広く使われている呼称ですが、実際の設定項目と動作は利用中のコアに従ってください。v2rayNはクライアント、v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用します。画面上の名称が似ているだけで、異なるコア向けのJSONを流用しないでください。

最初はトップレベルの設定例です。IPv4プールを定義し、内蔵DNSでFakeDNSを使うよう指定します。必要な関係だけを示した最小例であり、ノードサーバーのドメイン解決、LAN内ドメインの例外、IPv6、DNS通信の受け入れ口は含みません。クライアントが生成した完全な設定をこの内容で置き換えないでください。

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

2つ目は、仮想宛先への接続を受け取るインバウンドオブジェクトに属する設定で、対応表からドメインを復元します。必要な設定関係が分かるよう、ここでは fakedns のみを記載しています。HTTPやTLSなどのスニッフィング種別を加える場合は、使用するコアが対応しているか確認してください。このオブジェクトを単独のトップレベル設定として扱ったり、宛先接続を受け取れないインバウンドに誤って追加したりしないでください。

{
  "sniffing": {
    "enabled": true,
    "destOverride": [
      "fakedns"
    ]
  }
}

活用場面:透過接続では効果的、通常のシステムプロキシではシンプルに

利用場面推奨確認ポイント
TUNで通信を捕捉しているが、ドメインルールが頻繁に適用されない設定をバックアップしてから試すDNSの入口、対応情報の復元、宛先ルーティングが一連の処理になっているか
ブラウザーがHTTPプロキシへドメイン名を渡している通常は追加で有効にする必要なしプロキシが接続先のドメイン名を受け渡しているか確認
社内ドメインと企業専用の名前解決実際の名前解決結果を優先して使う社内DNS、ルーティング、仮想IPプールが競合していないか
アプリがIP許可リストを使う、または名前解決結果を検証するアプリごとに動作を確認し、必要なら例外を設定アプリが仮想IPを異常と判定しないか
アプリ内蔵の暗号化DNS問い合わせが通信捕捉を通っているか確認53番ポートの通信捕捉だけで、すべてのDNSを処理できるとは限りません

HTTPプロキシや、リモートDNS解決に対応したSOCKSリクエストは、ドメイン名をそのままプロキシに渡せます。この場合、FakeDNSを追加しても新たな問題の解決につながらないことがあります。透明接続ではIPパケットだけを受け取り、ドメイン情報が失われやすいため、FakeDNSがよく使われます。有効化する前に不足しているのがドメイン情報なのか、ノード接続、アウトバウンドでの名前解決、ルーティング順なのかを確認してください。

FakeDNSはDNSの暗号化機能ではなく、すべてのDNS通信がプロキシを通ることを保証するものでもありません。アプリに返す名前解決結果を変えるだけです。その後の実アドレスの解決場所や通信方式は、アウトバウンドとDNSのポリシーで決まります。VMessやVLESSなどのノードプロトコルだけでFakeDNSの可否が決まるわけではなく、この設定のためにサブスクリプションを再インポートする必要もありません。

確認手順:名前解決結果から最終的なアウトバウンドまで追う

  1. 基準となる状態を保存。まず通常のプロキシモードで同じノードから目的のサイトに接続できることを確認し、現在の設定をバックアップします。サブスクリプション、ルーティングルール、DNSを同時に変更しないでください。
  2. 通信の入口を確認。選択したTUNまたは透過接続を有効にし、アプリのDNS問い合わせと後続の接続が想定した経路に入っているか確認します。Windowsでは「設定」→「ネットワークとインターネット」で現在のネットワークインターフェースを確認できます。ただし、物理ネットワークアダプターに表示されるDNSだけを根拠に、通信捕捉の成功と判断しないでください。
  3. 古いキャッシュを削除。テストするアプリを終了します。Windowsではコマンドプロンプトで ipconfig /flushdns を実行してシステムキャッシュを消去し、アプリを起動し直します。ブラウザー独自のキャッシュや暗号化DNSの設定も別途確認してください。
  4. 実際の問い合わせを確認。アプリから名前解決を発生させ、DNSログで返されたアドレスが設定したプールに含まれるか確認します。nslookup example.com は補助的に使えますが、ブラウザーとは異なる経路で問い合わせる場合があります。一度の結果だけで、すべてのアプリの動作を判断しないでください。
  5. 復元とルーティングを確認。利用可能なログで、元の仮想宛先、復元後のドメイン、適用されたルール、アウトバウンドのタグを確認します。記録できる詳細さはコアやクライアントによって異なります。必要に応じて一時的にログレベルを上げ、テスト後に元へ戻してください。
  6. 例外を確認。社内サイト、IPv6の宛先、DIRECTルールをそれぞれテストします。プロキシ経由のサイトが1つ開けただけでは、DNSポリシー全体が正しいとは言えません。

テスト結果から、DNSが何を返したか、接続がどこへ向かったか、どのルールが適用されたかを確認できるようにしてください。ping だけではWebサイトへのプロキシ接続を判断できません。仮想IPがICMPに応答する必要はなく、Webアクセスでは別の接続経路が使われるためです。また、仮想IPを取得するまでの速度をWebサイトの応答時間として扱わないでください。異なる指標です。

よくあるトラブル:仮想IPが残る、社内ネットワークに接続できない、ルーティングが効かない

198.18で始まるアドレスが返りました。DNSのエラーですか?

まず現在のプールが 198.18.0.0/15 か確認してください。一致する場合、問い合わせがFakeDNSに届いた可能性があります。次に、そのアドレスへの接続が正しいインバウンドに戻っているか、対応情報を復元できるか調べます。このアドレスだけを見て接続の正常・異常を判断しないでください。

TUNを無効にしたら、かえってどのサイトも開けなくなりました。どうすればよいですか?

アプリに仮想IPがキャッシュされている可能性があります。DNSとプロキシの設定を元に戻し、テスト中のアプリを終了して、システムDNSキャッシュを消去してから起動し直してください。それでも古い接続を再利用する場合は、アプリのバックグラウンドプロセスも終了して再試行します。仮想IPプールを通常のゲートウェイへルーティングし続けないでください。

インターネット上のサイトは開けるのに、社内サイトに接続できません。

社内ドメインの名前解決を企業DNSに戻し、利用中のクライアントの方式に合わせてFakeDNSの例外とDIRECTルートを設定してください。両方を確認する必要があります。ルートだけDIRECTに変えても、実アドレスを必要とするアプリに仮想IPが返されていれば、問題は解消しないことがあります。

ドメインルールを設定したのに、なぜデフォルトのアウトバウンドが使われるのですか?

まずログでインバウンドがドメインを復元できているか確認し、その後でルールの順番を調べます。先に設定されたフォールバックルールが適用されている可能性があります。アプリ内蔵DNSや古いキャッシュのため、対応情報が作られていない場合もあります。上流での情報不足を、重複ルールの追加で覆い隠さないでください。

コアの再起動後だけ問題が起きる場合は、対応情報とアプリのキャッシュが同期していない可能性があります。アプリに古い仮想IPが残っている一方、新しいプロセスにはその対応情報がありません。この場合は、ノードを何度も切り替えるより、アプリを再起動して名前解決し直すほうが効果的です。プール容量を増やしても繰り返し発生するなら、DNSを処理するコンポーネントが複数ないか確認してください。容量を際限なく増やしても、トラブルシューティングの代わりにはなりません。

元に戻す手順:DNSを復元し、キャッシュを消して通常のプロキシ接続を確認

現在のネットワーク環境に合わないと判断した場合は、保存しておいた設定に戻してください。仮想IPの割り当てと、それに依存する通信捕捉の設定を両方解除し、処理経路を中途半端に残さないことが重要です。クライアントの更新で設定生成方法が変わる場合もあるため、どのスイッチを有効にしたか推測せず、保存した設定を基準に戻してください。

覚えておきたいポイントは、FakeDNSはドメイン情報を必要とするルーティング経路を補う機能だということです。すでにドメインを安定して渡せる環境では、設定を増やして複雑にする必要はありません。透過接続でドメイン情報が不足している場合に、アドレスプール、DNS問い合わせの入口、インバウンドでの復元、アウトバウンドでの名前解決を順に整えてください。設定項目の詳しい関係は設定リファレンスのDNS設定を、基本的な接続の問題は接続トラブルの対処方法を確認してください。

クライアントとプラットフォームの選び方

OSに合わせてv2rayN、v2rayNG、v2flyNGを選び、まずサブスクリプションをインポートして通常のプロキシ接続を確認します。その後、実際に使うコアに合わせてDNSとTUNを設定してください。

v2rayN をダウンロード