V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vocaloidchina
V2EX  ›  宽带症候群

在 clash 中,是否有办法强制让指定域名走远端 dns 解析?

  •  
  •   vocaloidchina · 2022-09-11 09:12:19 +08:00 · 13004 次点击
    这是一个创建于 836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如 iOS 的小火箭和 surge 都提供了 force-remote-dns 参数

    但 clash 并没有该参数,如果仅仅指定域名走代理并不能实现远端 dns 解析(抓包还是会在本地进行解析)

    不想用 doh/dot 因为境外的 dns 服务实在太慢

    19 条回复    2023-03-01 12:39:25 +08:00
    yanyumihuang
        1
    yanyumihuang  
       2022-09-11 10:23:48 +08:00 via Android   ❤️ 1
    使用 fakeIP 模式并且把你的 IP 规则放到域名后面
    paradoxs
        2
    paradoxs  
       2022-09-11 10:29:50 +08:00
    surge 默认开启了 force-remote-dns ,不用加。
    yov123456
        3
    yov123456  
       2022-09-11 10:31:30 +08:00 via iPhone
    clash 实际坐请求的时候都是 force-remote-proxy 的 本地请求的 ip 只用来匹配 ip 规则。
    dcty
        4
    dcty  
       2022-09-11 10:39:45 +08:00   ❤️ 2
    换 meta 内核
    WoadZS
        5
    WoadZS  
       2022-09-11 12:56:42 +08:00   ❤️ 5
    我研究过这个问题。
    如果是 1.8.0 之后的原版 Clash ,可以像一楼一样使用 fakeip ;
    如果是 Meta 内核的 Clash ,除了 fakeip ,redirhost 可以打开 Sniffer 域名嗅探器来达到这个目的;

    如果想在此基础上尽可能防止 DNS 泄露,可以使用 Meta 内核+fallback-filter 设置 geosite 为!cn ,同时指定 fallback DNS 为走代理的 DNS ,比如这样"tls://1.1.1.1#PROXY"
    如此一来请求逻辑就会是 geosite 为 cn 的域名全部走 nameserver 的设置,不为 cn 的域名通过代理走 tls://1.1.1.1 查询做一次规则判断,确认需要代理就会直接将域名发送到远端服务器,使用远端服务器的 DNS 进行解析和访问。
    lovedoing
        6
    lovedoing  
       2022-09-11 14:25:29 +08:00
    nameserver-policy
    connorzone
        7
    connorzone  
       2022-09-11 14:38:12 +08:00
    clash 的 dns 只是用于匹配规则,实际的代理是通过 fqdn 到远程服务器再重新解析的。如果觉得 dns 慢,不妨在上游套一个 mosdns 或 adguardhome ,开启 lazy cache 或乐观缓存。
    pH
        8
    pH  
       2022-09-13 10:54:43 +08:00
    @lovedoing 正解呀 = =
    fvladlpa
        9
    fvladlpa  
       2022-09-13 21:14:27 +08:00
    DOMAIN, example.com,your_proxy_name
    lbyo
        10
    lbyo  
       2022-10-13 19:39:41 +08:00
    @WoadZS #5
    > 可以使用 Meta 内核+fallback-filter 设置 geosite 为!cn

    请问是写成这样吗?
    fallback-filter:
    geoip: false
    geosite:
    - !cn
    domain:
    - +.example.com
    ipcidr:
    - 0.0.0.0/32
    WoadZS
        11
    WoadZS  
       2022-10-13 21:01:44 +08:00
    @lbyo 供参考,记住仅限 Meta 内核有效

    fallback-filter:
    geoip: true
    geoip-code: CN # 当 nameserver 域名的 IP 查询 geoip 库为 CN 时,不使用 fallback 中的 DNS 查询结果
    #配置强制 fallback ,优先于 IP 判断,具体分类自行查看 geosite 库
    geosite:
    - "!cn"
    ipcidr:
    - 240.0.0.0/4
    domain:
    - '+.google.com'
    - '+.facebook.com'
    - '+.youtube.com'
    - '+.telegram.org'
    lbyo
        12
    lbyo  
       2022-10-17 10:34:33 +08:00
    @WoadZS #11 谢谢,我最后写的是这样:

    ```
    fallback-filter:
    geoip: true
    geoip-code: CN
    geosite:
    - "geolocation-!cn"
    ipcidr:
    - 240.0.0.0/4
    domain:
    - "+.google.com"
    - "+.facebook.com"
    - "+.youtube.com"
    ```

    > # 当 nameserver 域名的 IP 查询 geoip 库为 CN 时,不使用 fallback 中的 DNS 查询结果
    > # 配置强制 fallback ,优先于 IP 判断,具体分类自行查看 geosite 库

    我理解的就是:先在 geoip 里找,看是不是为 CN ,如果是就直接走 nameserver 的解析。如果不是,就去 geosite 里找是这样吗?
    WoadZS
        13
    WoadZS  
       2022-10-17 13:48:05 +08:00   ❤️ 1
    @lbyo 我的理解应该是先看 GEOSITE ,如果是!CN (即非 CN )域名,就直接向 fallback DNS 发起查询,拿到解析判断是否最终要走代理,这次查询在 Meta 下面支持走代理。这个判断是优先于 GEOIP 的,如果根据这次判断发现确实要走代理,就把域名发到远端在 VPS 上进行最终解析和访问。

    所以理论上,访问 geosite 非 CN 的域名,从本地只会向 fallback DNS 发起一个通过代理的查询进行规则判断,最后的正式访问还是远端解析。所以从本地 ISP 和境内 DNS 服务商来说,他们都没有收到过由你发出的非 CN 域名的解析请求,因此避免了 DNS 泄露。
    gcphym
        14
    gcphym  
       2022-12-12 22:41:50 +08:00
    @WoadZS 你好,请问一下,按照你这样配置,访问 cn 类的域名时,比如 baidu.com ,会是 nameserver 和 fallback 里的 DNS 进行并发请求? nameserver 和 fallback 都得到结果后再进行 ip 判断?
    WoadZS
        15
    WoadZS  
       2022-12-13 15:03:58 +08:00
    @gcphym 我的理解是,如果设置了 geosite: cn ,那么像 baidu.com 这样的 cn 网站,也会同时向 nameserver 和 fallback 的 DNS 进行请求,但最终并不会采用 fallback 返回的值。而并不是会像你说的一样再进行 IP 判断。
    gcphym
        16
    gcphym  
       2022-12-16 10:16:53 +08:00 via Android
    @WoadZS 了解了。那么,访问 baidu.com 的时候,nameserver 中的服务器只需要几 ms 就能返回结果,但由于是同时请求,所以还是要等 fallback 返回结果后,再采用 nameserver 返回的 ip ?是这么理解吗? fallback 里面都是国外的服务器,可能需要几十甚至上百 ms
    WoadZS
        17
    WoadZS  
       2022-12-16 18:02:20 +08:00
    @gcphym 不会等 fallback 的结果返回,你可以通过 Chrome 开发者工具观察境内外网站首次访问时的 DNS 消耗时间,理论上需要代理的网站 DNS 查询耗时都会显著长于境内直连网站。
    WoadZS
        18
    WoadZS  
       2022-12-16 18:04:26 +08:00
    @gcphym 境内常用网站的域名的 DNS 查询耗时基本上都不会超过 10ms ,如果你配置得当的话。个别节点数量少的公共 DNS 可能会到几十毫秒。
    Kobayashi
        19
    Kobayashi  
       2023-03-01 12:39:25 +08:00 via Android
    你的理解错了,本地解析是为了分流(如 CN IP 直连),远程依然解析一次。本地解析了说明没有命中域名规则,或者是域名规则前边的 IP 规则没有 no-resolve 提前触发了本地解析。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.