ルールをドメイン名でマッチさせるには、クライアントが「この接続に対応するドメイン名は何か」を把握できることが前提です。特別な処理を有効にしていない場合、システムは解決済みの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: 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)はクエリの過程を暗号化し、中間ネットワーク機器による覗き見や改ざんを防ぎます。
- nameserverにはDoH/DoTのアドレスを優先的に設定し、クエリが汚染されるリスクを減らすことを推奨します。
- default-nameserverは必ず従来のDNS(直接IP指定)にする必要があります。DoH/DoTのサーバー自体もドメイン名であり、まずそれを解決してIPを得る必要があるためで、そうしないと「DoHのドメインを解決するのにDNSが必要」という循環に陥ってしまいます。
fallback-filter:正確な汚染対策
fallback-filterの仕組みはこうです。まずnameserver内のサーバーで解決を行い、その結果のIPが指定した地域に属さないと判定された場合(例えばgeoip-code: CNを有効にしている場合、そのIPが該当地域に属さないと判定されたとき)、代わりにfallbackで設定したサーバーで再解決し、そちらの結果を採用します。
この仕組みは主に、「汚染されたDNSサーバーが実際とは異なるローカルっぽいIPを返してしまい、本来のサイトは別の場所にホストされている」という状況を回避するためのものです。この設定を有効にしておけば、メインのDNSが汚染されて誤った結果を返しても、別経路のDNS解決結果へ自動的に補正されます。
よくあるトラブルシューティングの流れ
- 特定サイトのルールを正しく書いたはずなのに効かない?まずenhanced-modeが有効になっているか、あるいはDNS設定全体が反映されているか(システムのDNSキャッシュがクリアされていないなど)を確認しましょう。
- あるサイトへのアクセスが間欠的に失敗し、乗っ取られているように見える?ほとんどの場合DNS汚染です。nameserverとfallbackそれぞれのサーバー群で解決結果が一致するか個別に確認してみましょう。
- LAN内デバイス(NAS、スマートスピーカーなど)の検出がおかしい?まずfake-ip-filterに該当ドメインが例外として追加されているか確認してください。
DNS設定は頻繁に変更する必要はほとんどありません——このロジックに沿って一度設定してしまえば、多くの「アクセス異常」はそもそも発生しなくなります。