DNSの設定が不十分だと何が起きるか
クライアントが通信の転送だけを引き継ぎ、DNSクエリまでは引き継いでいない場合、ドメイン解決のリクエストはそのままローカルの回線事業者のDNSに送られてしまうことがあります。これには2つの問題があります。1つは解決結果が汚染されて誤ったIPが返され、本来プロキシ経由になるはずのサイトに接続できなくなること。もう1つは、通信自体はプロキシを通っていても、DNSクエリそのものによってどのドメインにアクセスしているかが漏れてしまうこと――いわゆる「DNS漏洩」です。
fake-ip:現在もっとも主流な解決方法
enhanced-mode: fake-ipの考え方はこうです。クライアントはDNSクエリを横取りし、実際のIPを返す代わりに専用の仮想アドレス帯(fake-ip-range)から仮のIPをアプリケーションに割り当てます。アプリケーションがこの仮IPで接続を試みると、クライアントはネットワーク層で実際のドメインを復元し、ルールに従ってプロキシか直接接続かを判断します。この処理はアプリケーションに対して完全に透過的で、互換性と速度の両面で現時点では最も優れた方式です。
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "localhost.ptlogin2.qq.com"
fake-ip-filterは、仮IPの仕組みを使う必要がないドメインを除外するためのものです。代表的なのはLAN内のデバイス探索や内部サービスなど、実際のIPを取得しないと正常に動作しないケースで、フィルタに一致したドメインはそのまま本来の解決結果が返されます。
ドメインごとに解決先を振り分ける:nameserver-policy
1組のDNSサーバーだけで全てのドメインを解決するのは最適とは言えません。国内・地域内向けのドメインは近いDNSの方が速く解決できることが多く、それ以外のドメインは汚染されにくいDNSサーバーに任せた方が安全です。nameserver-policyを使うと、ドメインの分類(GeoSiteと組み合わせる)に応じて解決先を個別に指定できます。
dns:
nameserver:
- https://dns.google/dns-query
- https://1.1.1.1/dns-query
fallback:
- https://1.0.0.1/dns-query
- https://dns.quad9.net/dns-query
nameserver-policy:
"geosite:private": [192.168.1.1]
"geosite:geolocation-!cn": [https://1.1.1.1/dns-query]
nameserver-policyに一致しないドメインは、既定のnameserverリストで解決されます。さらに解決結果が信頼できるかどうかを判定したい場合は、fallbackと後述のfallback-filterを組み合わせて使います。
fallback-filter:解決結果が信頼できるか判定する
fallback-filterは、どのような場合に既定のDNSの結果を見送ってfallbackリストで再解決するかを決めるための項目で、最も一般的な判定基準はgeoipです。
dns:
fallback-filter:
geoip: true
geoip-code: JP
これを有効にすると、既定のDNSが返したIPがgeoip-codeで指定した地域(ここでは日本)に属していない場合、クライアントはその結果を信頼できないと判断し(汚染された環境で誤った海外IPが返されるケースなどで発生します)、fallbackリストのより信頼できるDNSサーバーで再解決を試みます。
確認すべきチェックリスト
dns.enableがtrueになっているか確認する。これがオフだとDNS設定全体が無効になります;enhanced-modeがfake-ipに設定されているか確認する(他のモードを使う明確な理由がある場合は別です);- LAN内のデバイス探索がうまく動かないときは、該当ドメインを
fake-ip-filterに追加する必要がないか確認する; - 解決結果の汚染が疑われるときは、
fallbackとfallback-filterが正しく設定されているか確認する。
DNS設定が完全なconfig.yamlのどこに位置づけられるかをもっと詳しく知りたい方は、上級者向けドキュメントをご覧ください。Clashを使い始めたばかりであれば、多くのクライアントの初期DNS設定で十分に安定して動作するため、手動で変更する必要はありません。
DNSの設定が済んだら、あとは使い始めるだけ
Clashクライアントをダウンロードしてサブスクリプションリンクを貼り付ければ、数分でインストールから接続まで完了します。