設定 · Clash ドキュメント

Clash DNS

Clash DNS の nameserver、fallback、fake-ip、nameserver-policy と IPv6 の関係を説明し、名前解決の汚染、誤った振り分け、LAN 内ドメインの異常を確認します。

  • fake-ip
  • DNS 汚染
  • SCRIPT
  • GEOIP
  • IP-CIDR
設定

Clash の一部は第 3 層(ネットワーク層)で動作するため、パケットのドメイン名を取得できず、ルールベースのルーティングを行えません。

fake-ip の登場:ルールベースのルーティングに対応し、DNS ポイズニング攻撃の影響を最小限に抑えながら、場合によっては大幅にネットワーク性能を向上させます。

fake-ip

「fake IP」という概念は RFC 3089 に由来します:

「fake IP」アドレスは、対応する「FQDN」情報を照会するためのキーとして使われます。

fake-ip プールの既定の CIDR は 198.18.0.1/16 です(予約済みの IPv4 アドレス空間で、dns.fake-ip-range から変更できます)。

DNS クエリが Clash DNS に送られると、Clash コアは内部のドメイン名と fake-ip アドレスの対応を管理し、プールから未使用の fake-ip アドレスを割り当てます。

ブラウザーで http://google.com にアクセスする場合を例にします。

  1. ブラウザーは Clash DNS に google.com の IP アドレスを問い合わせます

  2. Clash は内部の対応表を確認し、198.18.1.5 を返します

  3. ブラウザーは 198.18.1.580/tcp ポートへ HTTP リクエストを送信します

  4. 198.18.1.5 宛てのインバウンドパケットを受信すると、Clash は内部の対応表を参照し、クライアントが実際には google.com 宛てに送信していることを特定します

  5. 適用されるルールに応じて、次のように処理されます:

    1. Clash はドメインだけを SOCKS5 や shadowsocks などのアウトバウンドプロキシへ渡し、プロキシサーバーとの接続を確立する場合があります

    2. または Clash が SCRIPTGEOIPIP-CIDR ルールに基づくか、DIRECT の直接接続アウトバウンドを使って、google.com の実際の IP アドレスを問い合わせます

分かりにくい概念なので、cURL で http://google.com にアクセスする場合を例に説明します:

txt
$ curl -v http://google.com
<---- cURL 向您的系统 DNS (Clash) 询问 google.com 的 IP 地址
----> Clash 决定使用 198.18.1.70 作为 google.com 的 IP 地址, 并记住它
*   Trying 198.18.1.70:80...
<---- cURL 连接到 198.18.1.70 tcp/80
----> Clash 将立即接受连接, 并且..
* Connected to google.com (198.18.1.70) port 80 (#0)
----> Clash 在其内存中查找到 198.18.1.70 对应于 google.com
----> Clash 查询对应的规则, 并通过匹配的出口发送数据包
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-ahELFt78xOoxhySY2lQ34A' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
< Date: Thu, 11 May 2023 06:52:19 GMT
< Expires: Sat, 10 Jun 2023 06:52:19 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 0
< X-Frame-Options: SAMEORIGIN
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact