关于 Clash DNS 的几个问题

348 天前
 journalist

我希望 Clash:

  1. 遇到需要代理的域名,使用代理服务器请求 DNS 。
  2. 遇到直连的域名,使用系统默认或者某个指定的服务器。
  3. 遇到基于 IP 的规则,使用系统默认或者某个指定的服务器。

我不需要靠 Clash 应对 DNS 污染,能不能直接关闭内置的 DNS ?

dns:
	enable: false

另外,在使用 TUN 模式时,是否必须开启 DNS ,为什么?

TUN 模式的参数 dns-hijack 通常被设置为 any:53,作用是什么?

8817 次点击
所在节点    DNS
20 条回复
mohumohu
348 天前
你这需求单独跑一个 DNS 服务更直接清晰,clash 的 DNS 并没有太多自定义的选项。
Rookie01
348 天前
借楼同问,有没有什么办法让 Hosts 文件的优先级拉到最高,而不让 Clash 等代理工具覆盖 DNS ?
我有几个域名需要修改 Hosts ,总是被覆盖,或者有没有类似的工具之类的……
journalist
348 天前
@mohumohu 你说的很对,我就是用了 mosdns 才问这个问题
missdeer
348 天前
Kanye
348 天前
无论怎样都要解析一次才能判断这个域名是否需要代理
journalist
348 天前
@Kanye 基于域名的规则不用请求两次啊 https://blog.skk.moe/post/what-happend-to-dns-in-proxy/
Kanye
348 天前
@journalist 对如果直接把域名写进规则里面,是由代理服务器解析和访问的,所以问题不存在
y1y1
348 天前
@journalist 那不就好办了,把走 clash 的分流规则再加到 clash 的规则里面?
SenLief
348 天前
clash.meta 内核支持 geosite 域名分流 dns ,可以实现这个功能。
dode
348 天前
套两个 clash 可以吗
journalist
348 天前
@SenLief 我不想要分流,我用的规则里面没有 IPCIDR ,只有域名。https://www.v2ex.com/t/879229 Clash 默认就是远程解析代理域名的。我想搞明白的是,我开内置 DNS ,把 nameserver 设置为本地 DNS ,和直接把内置 DNS 关了有什么区别。
mritd
348 天前
zbatman
348 天前
rmdbbs
348 天前
遇到需要代理的域名,使用代理服务器请求 DNS 。
---这个核心是要避免本地 DNS 解析,启用 dns 配置里的 fakeip 参数,或者路由规则对所有 ip 类规则加入 no-resolve 参数

遇到直连的域名,使用系统默认或者某个指定的服务器。
---这个使用 meta 的 DNS 某些配置选项可以实现,看下面的例子

遇到基于 IP 的规则,使用系统默认或者某个指定的服务器。
---这个使用 meta 的 DNS 某些配置选项可以实现,看下面的例子

我不需要靠 Clash 应对 DNS 污染,能不能直接关闭内置的 DNS ?
---关闭 Clash 的 DNS ,上述需求应该就没法实现了,关闭后,所有的请求都走 system 的 dns ,且无法配置策略


clash.meta 的配置例子,供参考:

dns:
enable: true
listen: 0.0.0.0:53
default-nameserver:
- 223.5.5.5
nameserver:
- tls://8.8.4.4
- tls://1.1.1.1
nameserver-policy:
"geosite:cn,private":
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query

看你说的你的规则里没有 IPCIDR ,只有域名,那就意味着,只有两种情况
1 ,交给代理的域名,默认都会去代理上进行 dns 解析,这个不需要设置
2 ,直连的域名,由你的配置文件决定,配置文件设置的 dns 策略,那就由规则决定(如上例子),如果开启 dns 开关,那就交给系统

上面的设置之后,在处理你那些要直连的域名的时候就会进入这个逻辑:
1 ,看看域名是不是 cn 或者 private 的,如果是,交给 dns.alidns.com 和 doh.pub 解析;
2 ,如果不是,那么交给 tls://8.8.4.4 和 tls://1.1.1.1 解析
3 ,解析好了后,用得到的 ip 直连出去。
结束

简单将就是你关了内置 DNS 开关,所有的请求都到了 system 的 dns ,就做不到“按需解析” ,
rmdbbs
348 天前
@rmdbbs 写错了一句话“如果开启 dns 开关,那就交给系统”

应该是 如果没有开启 dns 开关
journalist
348 天前
@rmdbbs 实际上我说的需求可能说复杂了,所有没有命中代理域名规则的,都走系统默认 DNS 就可以了,不需要 nameserver-policy ,分流已经由自建 DNS 处理好了。https://github.com/Fndroid/clash_for_windows_pkg/wiki/DNS%E6%B1%A1%E6%9F%93%E5%AF%B9Clash%EF%BC%88for-Windows%EF%BC%89%E7%9A%84%E5%BD%B1%E5%93%8D 根据这篇文章,下面这个配置和关闭内置 DNS ,直接设置系统 DNS 没有什么差别。

dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- "自建 DNS"
SenLief
348 天前
@journalist 你的想法错了,你是想 clash 只做代理吧?然后利用 上游 dns 分流。这个是可以的,但是有个问题就是上游 dns 服务器需要代理才能解析 1.1.1.1 这类的 dns 服务,所以又在套娃了。
journalist
347 天前
@SenLief 这是可以避免的,在另一个实例专门代理这个 DNS 。
x308989414q
315 天前
@rmdbbs 你好,想请教一下。
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- https://dns.alidns.com/dns-query
fallback:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query

上面的配置 clash tun 模式下,处理那些直连的域名的逻辑是不是如下?
1 ,dns 并发请求 nameserver 、fallback ,取 nameserver 中返回的最快的 ip ,判断这个 ip 是不是中国的,
如果是,直连
2 ,如果不是,那么取 fallback 中最快的 ip ,直连。
journalist
304 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX