请教下 clash 的 DNS 是这么配置么?

86 天前
 shuiguomayi

Clash dns

请教下 clash 的 dns 的配置,用下面这个配置持续出现报错说 dns 解析失败,是这些 dns 服务器全被封了?求一下能用的 DNS 或者正确的配置。

dns:
    enable: true
    listen: '0.0.0.0:53'
    default-nameserver:
      - 119.29.29.29
      - 223.5.5.5
    use-hosts: true
    nameserver:
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query
    fallback:
      - 'https://doh.dns.sb/dns-query'
      - 'https://dns.cloudflare.com/dns-query'
      - 'https://dns.twnic.tw/dns-query'
      - 'tls://8.8.4.4:853'
      - 'https://dns.alidns.com/dns-query'
    fallback-filter:
      geoip: true
      geoip-code: CN
      ipcidr:
        - '240.0.0.0/4'
        - '0.0.0.0/32'
3222 次点击
所在节点    问与答
20 条回复
icaolei
85 天前
default-nameserver 是用来解析 nameserver 和 fallback 里面的域名的
nameserver 是用来解析规则没有命中(也就是墙内域名)的
fallback 是用来解析墙外域名的
fallback-filter 是用来直接让这些域名走 fallback 解析的(也就是放在这里的默认就是需要翻墙解析)

所以你这里的问题有:
1. 没有看到 enhanced-mode ,需要加上
2. fallback 里不应该出现墙内 DNS
3. geoip-code: CN 需要去掉
4. 建议把 use-hosts 也去掉(我不知道 use-hosts 是干嘛的)
5. 建议删除单引号(对 yaml 语法不太熟,不知道这样混用单引号会不会报错)
6. 建议多写点 DNS ( clash 的机制是同时向所有 DNS 发起解析请求,用返回最快那个,后续的直接丢弃)

给你一个我自己用的 DNS 配置参考:

dns:
enable: true
listen: 127.0.0.1:53
ipv6: true
enhanced-mode: fake-ip
default-nameserver:
- 223.5.5.5
- 8.8.8.8
- 8.8.4.4
- 1.0.0.1
- 119.29.29.29
nameserver:
- https://223.6.6.6/dns-query
- https://dns.alidns.com/dns-query
- tls://dns.alidns.com:853
- https://dns.pub/dns-query
- https://doh.pub/dns-query
- tls://dot.pub:853
fallback:
- https://1.0.0.1/dns-query
- tls://one.one.one.one:853
- https://public.dns.iij.jp/dns-query
- https://dns.google/dns-query
- tls://dns.google:853
- https://dns.quad9.net/dns-query
- tls://dns.quad9.net:853
- https://doh.sb/dns-query
- tls://dot.sb:853
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
- 0.0.0.0/32
- 127.0.0.1/32
domain:
- +.google.com
- +.facebook.com
- +.youtube.com
- +.xn--ngstr-lra8j.com
- +.google.cn
- +.googleapis.cn
xpn282
85 天前
不用搞那么复杂的,直接放弃 fallback 这种复杂而过时的东西,用下面 2 组设置就可以搞定了,并且实现国内外 dns 分流,思路就是:
nameserver-policy 用运营商 dns (让国内 cn 走运营商的 dns )
nameserver 用国外的 dns

dns:
enable: true
ipv6: true
enhanced-mode: redir-host
listen: 0.0.0.0:7874
nameserver:
- tls://8.8.4.4
- tls://208.67.222.222
nameserver-policy:
geosite:cn,apple:
- 运营商 dns
shuiguomayi
85 天前
@icaolei
@xpn282

请收下我诚挚的感谢。
daisyfloor
84 天前
@xpn282 @shuiguomayi @icaolei

这是一个可用的简单配置:

dns:
enable: true
prefer-h3: true
listen: :1053
enhanced-mode: fake-ip
fake-ip-range: 28.0.0.1/8
fake-ip-filter:
- "*"
- "+.lan"
- "+.local"
nameserver:
- https://101.101.101.101/dns-query
- https://1.1.1.1/dns-query
nameserver-policy:
"geosite:cn,private":
- https://223.5.5.5/dns-query#h3=true
- https://223.6.6.6/dns-query#h3=true

解释一下:
- IPv6 我之前一直是 true ,最近打算关掉试一试,因为看到有说法是这个打开后有时候会影响上网体验。待验证。
- prefer-h3: true 要打开,这个对于支持 http3 的 Doh 会启动并发查询,如果对方支持,速度更快,那就起飞
- nameserver 部分没有开强制 h3 ,原因是,这部分请求会出去,而出国的 udp 通常可能体验不好,默认并发即可。
- policy 部分,增加了#h3=true ,让国内的域名解析强制开启 http3 的 Doh (目前阿里是支持的),理论上可以起飞。
- 去掉了 default-nameserver ,因为下面的请求地址用的都是 ip ,不是域名,不需要再解析了。

另外就是,enhanced-mode 这部分到底怎么用我还没搞清楚,fake-ip 部分是我最近加上去的。我不是在网关上用,就是客户端上用。所以我不知道有没有用。或者说有没有负作用。目前也是测试待验证。

以上。
Nin
84 天前
dns:
enable: true
ipv6: true
listen: 0.0.0.0:5453
enhanced-mode: fake-ip # or redir-host
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '+.lan'
- '+.local'
use-hosts: true
nameserver:
- tcp://127.0.0.1:1054

我选择不让它处理,交给 mosdns
icaolei
84 天前
@xpn282 #2 我看了下 clash.meta 的文档,解析流程似乎和原版 clash 不一致。

clash.meta 的 nameserver 和 fallback 是并发查询的,原版 clash 是只把 fallback-filter 命中了的(墙外的)交给 fallback 解析,没有命中的(墙内的)交给 nameserver 解析。

相当于用 fallback-filter 来分流。


按 clash.meta 这个解析流程:

nameserver-policy 相当于原版的 fallback-filter ,用于分流,但在这里加入了命中时(墙内的)交给哪个 DNS 解析这个逻辑。也可以延申出更多更个性化的 DNS 分流,而不像 fallback-filter 一样,只能区分是否要用 fallback 解析。
nameserver 相当于原版的 fallback ,在分流没有命中时(墙外的),交给这些 DNS 来解析。

结论就是:如果使用的是 clash.meta 内核的话,确实可以不配置 fallback 。
icaolei
84 天前
@icaolei #1 更正一下:

3. geoip-code: CN 这个不需要去掉。我以为这个配置的意思 CN 的 IP ,但其实是除了 CN 以外的 IP 。
icaolei
84 天前
@daisyfloor #4 这个配置可以。我现在也是用的 clash.meta 了,看到文档描述的解析流程,确实没有必要上 fallback 了。

我准备加上 ipv6: true 和 default-nameserver 两个配置,再加上我那一堆 DNS 来用了。

- 加上 ipv6 是因为我比较喜欢 ipv6 ,毕竟我家宽带没有独立 ipv4 公网 ip ,但 ipv6 是真公网。

- 加上 default-nameserver 和那一堆 DNS 是因为我想增加一点容错,除了纯 IP 的 DNS 外,可以配置一些域名的 DNS ,多配点没关系,就怕少了万一除啥问题导致网出问题。
xpn282
84 天前
对啊,用 Meta 内核,直接 nameserver-policy 和 nameserver 对 dns 分流了,简单明了

我是用 OpenClash Meta ,IPv6 我也一直都是全开的,没一点问题,要使用 ipv6 就要让 clash 接管 ipv6 的所有流量。那些开了 v6 ,但是只让 clash 接管 v4 而已,出国绝对会出问题

请问现在的 Meta 内核文档在哪里找?之前文档被作者删除了
daisyfloor
84 天前
@icaolei @xpn282

有个地方我可能没有说明白,ipv6: true 有两处,一个是全局的,一个是 dns 项里的。

dns 里的默认是 true 。全局的好像也是,而且一般 app 会在 GUI 里有开关控制,它们的区别是:

-全局的 :是否处理 ipv6 流量
-dns 里的 :是否丢弃 AAAA

这 2 个任意一个改为 false ,就会无法使用 ipv6 进行网络访问,可以通过 https://ipw.cn/测试。这个根据自己的需求来。如果你没有 ipv6 就建议关掉。 有 ipv6 的话想用就开,比如有些网络电视用的是 ipv6 地址。

回到 DNS 优化的问题:
除了 DNS 配置项目问题,规则才是关键。因为 dns 优化的核心是要避免本地进行“不必要的 DNS 解析”,使用 Fake-ip 就是一种策略,还有一个策略就是要在规则里,尽量避免使用 IP 规则,如果有,也建议放在排序的后面,并且加上 no-resolve 。

这样,就避免(减少)了一次或多次为了匹配规则而进行的 DNS 请求。
daisyfloor
84 天前
刚知道 google 的 Doh 可以这样配置:

https://8.8.8.8/dns-query

那么就完全不需要 default-nameserver 了。
shuiguomayi
83 天前
@icaolei ,@xpn282 请问,你用的 clash.meta 是 https://github.com/clash-verge-rev/clash-verge-rev 这个项目么?我目前在用 clash-linux-armv7-v1.18.0 ,原版仓库应该被删除了,我这是某个 github 上面的 fork 项目里找来的,不知道这个是否支持 meta 内核。
xpn282
83 天前
@shuiguomayi 这个我也不是很清楚,我是在 OpenWrt 上使用 OpenClash ,OpenClash 可以使用 Meta 内核
icaolei
82 天前
icaolei
82 天前
@shuiguomayi #12 clash-verge 只是一个基于 clash 内核和 clash.meta 内核的 GUI 客户端而已,目前 clash-verge 使用的是 clash.meta ( mihomo v1.18.1 )内核。

你说的 clash-linux-armv7-v1.18.0 我理解也是一个内核?

要找 clash.meta 内核去 https://github.com/MetaCubeX/mihomo/tree/Meta

PC 三大系统的 GUI 客户端去 https://github.com/clash-verge-rev/clash-verge-rev

安卓的 GUI 客户端去 https://github.com/MetaCubeX/ClashMetaForAndroid
shuiguomayi
82 天前
@icaolei 请收下我诚挚的感谢。
shuiguomayi
81 天前
@icaolei 请教用 ipv6 是有什么使用场景?
icaolei
81 天前
@shuiguomayi #17 本地和代理服务器均有 IPv6 时,可通过 IPv6 通信,没什么特殊的。现在大部分服务器都是至少有 IPv4 ,一部分是双栈,极少数只提供 IPv6 。

如果服务器只有 IPv6 ,那本地必须有 IPv6 ,并且在 clash 中配置好 IPv6 才可以代理成功。

(我还发现有些时候通过 IPv6 翻墙时走的路由不太一样,也许会没那么拥挤?瞎猜的)
BABYMETAL
81 天前
折腾很久看完文档的表示同意 9 楼说法,直接设置 nameserver-policy 和 nameserver 对 dns 分流,我是喜欢 nameserver-policy 解析 gfw 域名,剩下域名走 nameserver ,简洁高效
daisyfloor
79 天前
经过我多天测试,在我这边的网络环境下,需要关掉 ipv6: true 和 #h3=true

上面两个任意一个打开,都会造成国内 DNS 解析缓慢。现象就是微信打开后,连接中..-> 收取中.. 要转很久很久。

全部关闭后。秒开。

prefer-h3: true 这一项还是打开了。因为有可能别的 isp 网络环境下,dns over HTTP3 会比 doH 要快。这选 true 那么下面的 dns 查询就是 dns over HTTP3 和 doH 并发 谁快用谁。我之前强制 #h3=true 就不行了。

最终配置如下:
dns:
enable: true
prefer-h3: true
listen: :1053
enhanced-mode: fake-ip
fake-ip-range: 28.0.0.1/8
fake-ip-filter:
- "*"
- "+.lan"
- "+.local"
nameserver:
- https://8.8.8.8/dns-query
- https://1.1.1.1/dns-query
nameserver-policy:
"geosite:cn,private":
- https://223.5.5.5/dns-query
- https://223.6.6.6/dns-query

@icaolei @shuiguomayi @Nin @xpn282 @BABYMETAL

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

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

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

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

© 2021 V2EX