Clash: [Feature Request] 内建 DNS 支持 白名单/黑名单

Created on 3 Mar 2019  ·  14Comments  ·  Source: Dreamacro/clash

目前内建的 dns 采用的是并发解析,得到非 CN 结果后取 fallback 的解析。感觉有两点不太好,第一是 maxmind 的库不够精准,尤其对于一些国人服务商,归属是 CN,但实际上服务器在国外;第二就是无为增加并发请求?

个人的建议是,增加 overture 那样的白名单、黑名单,白名单可以自行设置为 dnsmasq-china-list,遇到这些域名,直接用 nameserver 的设置解析,黑名单可以自行设置为 gfwlist,遇到这些,则直接采用 fallback 的设置解析。

这样似乎更为高效一些,也能有效避免一些误解析。

Most helpful comment

@Dreamacro
并不是按顺序解析域名规则作为 DNS 解析,而是通过 force-fallback-dnsforce_nameserver-dns 作为扩展字段、在启动 Clash 后将带有这些字段的域名规则单独解析成一个 DNS 解析的黑白名单,当 Clash DNS 收到域名解析请求时先在列表中进行域名比对,然后选择是否直接使用 nameserver 或者 fallback,从而避免为了 DNS 额外维护一份列表。

换句话说,新增两个字段、并让 Clash 把配置文件解析成 DNS 黑白名单 和 代理规则组 两份规则列表,分别用于决定 Clash DNS 的解析使用哪一组上游、和流量的分流。

All 14 comments

有了这个可以直接抛弃 dnsmasq 和 overture 了 :)

105 你要的是这个吗

不是这个哦

overture 的 PrimaryDNS 相当于 clash 的 nameserver, AlternativeDNS 相当于 fallback

  "DomainFile": {
    "Primary": "./domain_primary_sample",
    "Alternative": "./domain_alternative_sample"
  },

domain_primary_sample 就是我说的白名单,一般是 dnsmasq-china-list ,这里面的域名,只用 Primary 解析,domain_alternative_sample 对应黑名单,一般是 gfwlist ,只用 Alternative 解析。不需要根据解析出来的 GEO 是选取结果。

其实你可以在clash上游接overtrue,应该效果还可以。

但是我现在就这么干的,好像还是有点问题,偶尔浏览器还是会报告找不到域名,我还没查清楚。

其实你可以在clash上游接overtrue,应该效果还可以。

但是我现在就这么干的,好像还是有点问题,偶尔浏览器还是会报告找不到域名,我还没查清楚。

我猜是死循环了?overture 国外 dns 的解析是不是回到 clash? 还是通过其他方式出去?

可以考虑引入 Surge force-remote-dns 的概念(Clash 可以实现成 force-fallback-dns作为黑名单,force_nameserver-dns 作为白名单),将 Clash 的域名规则组变成 DNS 的黑白名单而不是引入新的额外列表。

@SukkaW 这两个是不一样的,举个最简单的例子

Rule:
- IP-CIDR,127.0.0.1/32,DIRECT # 触发 ip 解析
- DOMAIN,a.com,Proxy,force-fallback-dns # 已经解析完 IP 了,不会再解析一次

@Dreamacro
并不是按顺序解析域名规则作为 DNS 解析,而是通过 force-fallback-dnsforce_nameserver-dns 作为扩展字段、在启动 Clash 后将带有这些字段的域名规则单独解析成一个 DNS 解析的黑白名单,当 Clash DNS 收到域名解析请求时先在列表中进行域名比对,然后选择是否直接使用 nameserver 或者 fallback,从而避免为了 DNS 额外维护一份列表。

换句话说,新增两个字段、并让 Clash 把配置文件解析成 DNS 黑白名单 和 代理规则组 两份规则列表,分别用于决定 Clash DNS 的解析使用哪一组上游、和流量的分流。

@SukkaW 如果是这样就不应该放在 Rule 里,就像 Final 一样,他是一个 “不明确” 的操作

@Dreamacro

我设想的就是:

  • Clash 启动、开始解析配置文件和 IP 库
  • 将包含 force-fallback-dnsforce_nameserver-dns 字段的域名规则分别解析成一个「黑名单」和一个「白名单」
  • 当 Clash 的 DNS Server 收到解析请求时,Clash 将请求的域名分别在「白名单」和「黑名单」里进行比对,如果匹配到「白名单」就直接采用 nameserver 的上游 DNS 返回的结果、同理匹配到「黑名单」的直接采用 fallback 里的上游 DNS 返回的结果;只有都没有匹配到才 FINAL 到 Clash 现在使用的判断机制。

就像 Final 一样,他是一个 “不明确” 的操作

在逻辑上说的确应该分开,但是和域名规则组放在一起(或者说直接扩展 域名规则组)可以 简化 配置文件编写。

分开比较合适,clash 的 dns 还能当成一个无污染的 dns 服务

Rules 现在实现方式是按条测试, 匹配就返回。在这之中插入 DNS 的规则会比较令人困惑。因为他只是在 YAML 解析前写在一起,解析后就是分开的了,和 Rules 里的其他条目没有顺序逻辑关系。还是分开比较合适。

另外@soffchen overture 最近也稳定了不少

Rules 现在实现方式是按条测试, 匹配就返回。在这之中插入 DNS 的规则会比较令人困惑。因为他只是在 YAML 解析前写在一起,解析后就是分开的了,和 Rules 里的其他条目没有顺序逻辑关系。还是分开比较合适。

另外@soffchen overture 最近也稳定了不少

嗯,我提这个需求也就是为了覆盖 overture 的功能,少用一个软件。

也许现在 hosts 和 filter 可以满足了

Was this page helpful?
0 / 5 - 0 ratings

Related issues

OneHappyForever picture OneHappyForever  ·  3Comments

xdaniel9 picture xdaniel9  ·  3Comments

wangxin6 picture wangxin6  ·  4Comments

hongyi-zhao picture hongyi-zhao  ·  4Comments

mchotdograp picture mchotdograp  ·  5Comments