ローカルDNSマッピング
ChuteはローカルでカスタマイズしたDNSマッピングをサポートしています。これは/etc/hostsと同等ですが、ワイルドカード、エイリアス、DNSサーバーの割り当てなど、より強力な機能を備えています。
[Host]
abc.com = 1.2.3.4
*.dev = 6.7.8.9
foo.com = bar.com
bar.com = server:8.8.8.8
注意: ここで説明するマッピング行は、DNSサーバーオプションと並べて
[DNS]セクションに書くこともできます。DNSセクションを参照してください。ただしShadowrocketのssid:形式(ネットワークごとのDNS)は例外で、認識されるのは[Host]の中だけです。[DNS]に書くと、決して現れない名前に対するマッピングとして読み込まれます。
マッピングには複数のアドレスを、IPv4とIPv6を混在させて並べられます: dns.google = 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888。Aの問い合わせにはIPv4アドレスで、AAAAの問い合わせにはIPv6アドレスで応答します。アドレス以外のものを含むリストは設定エラーになります。一方のアドレスファミリーだけにマッピングされた名前は、もう一方のファミリーの問い合わせに空の応答(NODATA)を返し、アップストリームのサーバーには問い合わせません。同じ名前を2行に分けて、IPv4とIPv6を別々にマッピングすることもできます。設定の再読み込みやモジュールで追加されたマッピングはすぐに有効になります。[Host] のマッピングまたはエイリアスが優先する名前では、アップストリームからのNXDOMAIN応答をキャッシュしません。
ワイルドカード
*プレフィックスを使用して全てのサブドメインをワイルドカード指定できます。Chuteは単純な文字列マッチを使用することに注意してください。例えば、*google.comはgoogle.com、foo.google.com、bargoogle.comにマッチします。また、*.google.comはgoogle.comにマッチしません。
[Host]
*.dev = 6.7.8.9
エイリアス
CNAMEレコードと同等です。
[Host]
foo.com = bar.com
エイリアスされた名前へのAまたはAAAAルックアップには、ターゲットのアドレスが返されます。クライアント自身がエイリアスを辿る必要はありません。問い合わせられたアドレスファミリーのアドレスがターゲットにない場合は、別のファミリーのレコードではなく空の応答が返されます。Chuteはルールの読み込み時にターゲットを解決します。まだ解決されていない場合はCNAMEレコードを応答し、次回のルックアップに備えてターゲットを解決します。
DNSサーバーの割り当て
指定したDNSサーバーを1つ以上のドメインに割り当てることができます。
[Host]
bar.com = server:8.8.8.8
server:はDoH URLも受け付けるため、指定したDoHエンドポイントをドメインに直接割り当てることができます。
[Host]
*.example.com = server:https://doh.example/dns-query
server:はカンマ区切りのサーバーリストを受け付けます。利用可能なエントリはすべて保持されて同時に問い合わせられ、最初の応答が採用されます。エントリには、ポート付きも可能なIPアドレス(8.8.8.8:5353、[2001:db8::1]:5353)、system、syslib(force-syslibも同じ)、DoH URLを指定できます。末尾に#proxyサフィックスを付けられるのはIPアドレスとDoH URLだけで、systemやsyslibにこれを付けて書くと警告を出して破棄されます。システムリゾルバーはポリシー経由で送れないからです。tcp://IP[:port]のエントリは、そのサーバーにDNS over TCPで問い合わせます。
[Host]
bar.com = server:8.8.8.8, 8.8.4.4
システムDNSサーバーを1つ以上のドメインに割り当てることができます。ChuteはこれらのドメインのクエリにシステムDNS設定のみを使用します。
[Host]
devs = server:system
Chuteは独自のDNSクライアント実装を持っているため、一部のホスト名が解決に失敗する場合があります。server:syslibを使用してシステムに解決を任せることができます。
[Host]
Macbook = server:syslib
DoHサービスの割り当て
指定したDoHサービスを1つ以上のドメインに割り当てることができます。
[Host]
bar.com = doh:cloudflare
デフォルトでは、サフィックス.localを持つホスト名へのAとAAAAの問い合わせはシステムによって解決されます。それ以外のタイプの問い合わせ — PTR、SRV、TXT — は、設定されたアップストリームサーバーへ送られます。
DoTサービスの割り当て
指定したDoT(DNS-over-TLS)サービスを1つ以上のドメインに割り当てることができます。
[Host]
bar.com = dot:dns.google
dot:のエントリには#proxyサフィックスを付けられません。
DoQサービスの割り当て
指定したDoQ(DNS-over-QUIC)サービスを1つ以上のドメインに割り当てることができます。
[Host]
bar.com = doq:dns.adguard.com
エントリの末尾には#proxyサフィックスを付けられます。たとえばbar.com = doq:dns.adguard.com#proxy=HKと書くと、クエリはそのポリシーを経由して送信されます。ポリシー名は書かれたとおりに保持されます。
DoH3サービスの割り当て
指定したDoH3(DNS-over-HTTP/3)サービスを1つ以上のドメインに割り当てることができます。
[Host]
bar.com = doh3:https://dns.google/dns-query
DoQのエントリと同じく、末尾に#proxyサフィックスを付けられます。
ルールセットのキー
キーにはドメインパターンの代わりにルールセットを指定できます:
[Host]
RULE-SET:https://example.com/cn-domains.list = server:223.5.5.5
RULE-SET:MyProvider = server:https://doh.pub/dns-query
DOMAIN-SET:https://example.com/ad-hosts.txt = 0.0.0.0
RULE-SET:<ソース>にはURLまたはルールプロバイダーの名前を、DOMAIN-SET:<ソース>にはURLを指定します。照合に使われるのはセット内のドメイン系ルールだけで、IPなどほかの種類のルールは無視されます。セットは[Rule]の行で使う場合と同じ方法でダウンロード・更新され、セットにマッチしたドメインにはすべて右辺の値が適用されます。組み込みのSYSTEMとLANセットはここでは使えません。
DNSスクリプト
[Host]
*.corp.example = script:CorpResolver
script:<名前>は、マッチしたドメインの名前解決をその名前のtype=dnsスクリプトに任せます。アプリが送る問い合わせにも、Chute自身の名前解決にも適用されます。スクリプトがアドレスを返さない場合や、その名前の有効なdnsスクリプトがない場合は、通常どおり名前解決されます。
ネットワークごとのDNS(Shadowrocket)
[Host]
ssid:Home WiFi = server:192.168.1.1
Shadowrocketのssid:<ネットワーク名> = server:<サーバー>は、そのWi-Fiネットワーク用の[SSID Setting]のDNS上書きとして読み込まれます。デバイスがそのネットワークに接続している間、これらのサーバーがメインプールの通常のリゾルバーを置き換えます。ネットワーク名には空白を含められます。ここで有効なのは通常のリゾルバー — ポートを付けてもよいアドレス、system、syslib — だけです。DoH URLは[Host]のほかの箇所ではserver:に指定できますが、ここでは通知を出して破棄されます。
システムのhostsファイル
[General]
read-etc-hosts = false
macOSとAndroidでは、Chuteはシステムのhostsファイル(/etc/hosts)も読み込み、そのエントリを[Host]の行より先にこのテーブルへ追加します。そのため、同じ名前が両方にある場合はhostsファイルのアドレスが優先されます。[General]のread-etc-hostsでこれを切り替えられ、デフォルトはオンです。ファイルを読み込まないようにするにはfalseに設定してください。Chute iOSとtvOSはhostsファイルを読み込みません。
組み合わせ使用
全ての機能を組み合わせて使用できます。例:
[Host]
*.dev = foo.com
*.bar.com = server:system
Macbook = server:syslib
*.foo.com = doh:cloudflare
*.local = dot:dns.google
api.internal = doq:dns.adguard.com
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。