配置 · Clash文档

Clash DNS

说明 Clash DNS 的 nameserver、fallback、fake-ip、nameserver-policy 与 IPv6 关系,帮助根据解析结果检查污染、分流误判和局域网域名异常。

  • fake-ip
  • DNS 污染
  • SCRIPT
  • GEOIP
  • IP-CIDR
配置

由于 Clash 的某些部分运行在第 3 层(网络层),因此其数据包的域名是无法获取的,也就无法进行基于规则的路由。

Enter 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