V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shuiguomayi
V2EX  ›  问与答

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

  •  2
     
  •   shuiguomayi · 318 天前 · 12997 次点击
    这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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'
    
    25 条回复    2024-09-04 03:24:24 +08:00
    icaolei
        1
    icaolei  
       317 天前   ❤️ 7
    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
        2
    xpn282  
       317 天前
    不用搞那么复杂的,直接放弃 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
        3
    shuiguomayi  
    OP
       317 天前
    @icaolei
    @xpn282

    请收下我诚挚的感谢。
    daisyfloor
        4
    daisyfloor  
       317 天前
    @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
        5
    Nin  
       317 天前
    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
        6
    icaolei  
       317 天前
    @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
        7
    icaolei  
       317 天前
    @icaolei #1 更正一下:

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

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

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

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

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

    请问现在的 Meta 内核文档在哪里找?之前文档被作者删除了
    daisyfloor
        10
    daisyfloor  
       316 天前
    @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
        11
    daisyfloor  
       316 天前
    刚知道 google 的 Doh 可以这样配置:

    https://8.8.8.8/dns-query

    那么就完全不需要 default-nameserver 了。
    shuiguomayi
        12
    shuiguomayi  
    OP
       315 天前
    @icaolei ,@xpn282 请问,你用的 clash.meta 是 https://github.com/clash-verge-rev/clash-verge-rev 这个项目么?我目前在用 clash-linux-armv7-v1.18.0 ,原版仓库应该被删除了,我这是某个 github 上面的 fork 项目里找来的,不知道这个是否支持 meta 内核。
    xpn282
        13
    xpn282  
       315 天前
    @shuiguomayi 这个我也不是很清楚,我是在 OpenWrt 上使用 OpenClash ,OpenClash 可以使用 Meta 内核
    icaolei
        14
    icaolei  
       315 天前
    icaolei
        15
    icaolei  
       315 天前
    @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
        16
    shuiguomayi  
    OP
       314 天前
    @icaolei 请收下我诚挚的感谢。
    shuiguomayi
        17
    shuiguomayi  
    OP
       314 天前 via iPhone
    @icaolei 请教用 ipv6 是有什么使用场景?
    icaolei
        18
    icaolei  
       314 天前
    @shuiguomayi #17 本地和代理服务器均有 IPv6 时,可通过 IPv6 通信,没什么特殊的。现在大部分服务器都是至少有 IPv4 ,一部分是双栈,极少数只提供 IPv6 。

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

    (我还发现有些时候通过 IPv6 翻墙时走的路由不太一样,也许会没那么拥挤?瞎猜的)
    BABYMETAL
        19
    BABYMETAL  
       313 天前
    折腾很久看完文档的表示同意 9 楼说法,直接设置 nameserver-policy 和 nameserver 对 dns 分流,我是喜欢 nameserver-policy 解析 gfw 域名,剩下域名走 nameserver ,简洁高效
    daisyfloor
        20
    daisyfloor  
       311 天前   ❤️ 2
    经过我多天测试,在我这边的网络环境下,需要关掉 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
    815169876
        21
    815169876  
       172 天前
    @icaolei 这部分文档写在哪里了呢。。抱歉没找到
    icaolei
        22
    icaolei  
       172 天前 via Android
    @815169876 #21 哪部分文档?
    815169876
        23
    815169876  
       167 天前
    @icaolei 就是你前面说的这部分


    nameserver-policy 相当于原版的 fallback-filter ,用于分流,但在这里加入了命中时(墙内的)交给哪个 DNS 解析这个逻辑。也可以延申出更多更个性化的 DNS 分流,而不像 fallback-filter 一样,只能区分是否要用 fallback 解析。
    nameserver 相当于原版的 fallback ,在分流没有命中时(墙外的),交给这些 DNS 来解析。
    icaolei
        24
    icaolei  
       166 天前 via Android
    borsalinolllll
        25
    borsalinolllll  
       114 天前 via Android
    玛德要是早点搜到这一篇帖子就好了,几位大神已经讲透了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1318 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:40 · PVG 01:40 · LAX 09:40 · JFK 12:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.