ルールをドメイン名でマッチさせるには、クライアントが「この接続に対応するドメイン名は何か」を把握できることが前提です。特別な処理を有効にしていない場合、システムは解決済みのIPだけをClashに渡し、ドメイン情報はすでに失われてしまっているため、ルールがドメイン名でマッチできないのは当然です。これこそが、DNS設定がルールの精度を左右する重要な理由です。

enhanced-mode:2つのモードの本質的な違い

モード仕組みトレードオフ
fake-ip まずアプリに仮想IPを返し、接続確立時にその仮想IPから実際のドメイン名を逆引きしてルール照合に使う 速度が速く、ドメイン情報を早い段階で取得できる。実IPの返却に依存する一部のケースでは例外処理が必要になる場合がある
redir-host 実際の解決結果をそのまま返し、トラフィック層でのドメイン名スニッフィングやリダイレクトでドメインを取得する 互換性は高いが、実際のDNSクエリに依存するため速度もプライバシー面もfake-ipに劣る

現在の主流な推奨設定はfake-ipです。互換性の問題は、「DNSクエリ結果が実IPであること」に依存する一部のLANプロトコル(たとえば一部のデバイス検出やキャスト系プロトコルなど)で発生することが主です。こうした問題に遭遇した場合は、該当するドメインをfake-ip-filterの例外に追加すれば十分で、個別のケースのためにfake-ip全体のメリットを放棄する必要はありません。

そのまま使えるDNS設定例

dns.yaml
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'        # LAN内デバイスのドメインは実解決を使い、検出プロトコルの異常を防ぐ
    - '*.local'
  default-nameserver: [223.5.5.5, 119.29.29.29]   # DoH/DoTのドメイン自体を解決するための基礎DNS
  nameserver: ['https://doh.pub/dns-query', 'tls://dot.pub:853']
  fallback: ['https://1.1.1.1/dns-query', 'https://dns.google/dns-query']
  fallback-filter:
    geoip: true
    geoip-code: CN   # あくまで例:特定の国コード(ここではCN)で判定。自分の地域・ISPに合わせて変更すること

DoH / DoTが解決する課題とは

従来のDNSクエリは平文のUDPパケットなので、通信事業者や経路上の中間ネットワーク機器がどのドメインを問い合わせているかを見ることができ、さらに結果を改ざんすることも可能です(いわゆる「DNS汚染」)。DoH(DNS over HTTPS)とDoT(DNS over TLS)はクエリの過程を暗号化し、中間ネットワーク機器による覗き見や改ざんを防ぎます。

fallback-filter:正確な汚染対策

fallback-filterの仕組みはこうです。まずnameserver内のサーバーで解決を行い、その結果のIPが指定した地域に属さないと判定された場合(例えばgeoip-code: CNを有効にしている場合、そのIPが該当地域に属さないと判定されたとき)、代わりにfallbackで設定したサーバーで再解決し、そちらの結果を採用します。

この仕組みは主に、「汚染されたDNSサーバーが実際とは異なるローカルっぽいIPを返してしまい、本来のサイトは別の場所にホストされている」という状況を回避するためのものです。この設定を有効にしておけば、メインのDNSが汚染されて誤った結果を返しても、別経路のDNS解決結果へ自動的に補正されます。

よくあるトラブルシューティングの流れ

  1. 特定サイトのルールを正しく書いたはずなのに効かない?まずenhanced-modeが有効になっているか、あるいはDNS設定全体が反映されているか(システムのDNSキャッシュがクリアされていないなど)を確認しましょう。
  2. あるサイトへのアクセスが間欠的に失敗し、乗っ取られているように見える?ほとんどの場合DNS汚染です。nameserverfallbackそれぞれのサーバー群で解決結果が一致するか個別に確認してみましょう。
  3. LAN内デバイス(NAS、スマートスピーカーなど)の検出がおかしい?まずfake-ip-filterに該当ドメインが例外として追加されているか確認してください。
DNS設定は頻繁に変更する必要はほとんどありません——このロジックに沿って一度設定してしまえば、多くの「アクセス異常」はそもそも発生しなくなります。