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

2022-09-11 09:12:19 +08:00
 vocaloidchina

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

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

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

11056 次点击
所在节点    宽带症候群
19 条回复
yanyumihuang
2022-09-11 10:23:48 +08:00
使用 fakeIP 模式并且把你的 IP 规则放到域名后面
paradoxs
2022-09-11 10:29:50 +08:00
surge 默认开启了 force-remote-dns ,不用加。
yov123456
2022-09-11 10:31:30 +08:00
clash 实际坐请求的时候都是 force-remote-proxy 的 本地请求的 ip 只用来匹配 ip 规则。
dcty
2022-09-11 10:39:45 +08:00
换 meta 内核
WoadZS
2022-09-11 12:56:42 +08:00
我研究过这个问题。
如果是 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
2022-09-11 14:25:29 +08:00
nameserver-policy
connorzone
2022-09-11 14:38:12 +08:00
clash 的 dns 只是用于匹配规则,实际的代理是通过 fqdn 到远程服务器再重新解析的。如果觉得 dns 慢,不妨在上游套一个 mosdns 或 adguardhome ,开启 lazy cache 或乐观缓存。
pH
2022-09-13 10:54:43 +08:00
@lovedoing 正解呀 = =
fvladlpa
2022-09-13 21:14:27 +08:00
DOMAIN, example.com,your_proxy_name
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
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
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
2022-10-17 13:48:05 +08:00
@lbyo 我的理解应该是先看 GEOSITE ,如果是!CN (即非 CN )域名,就直接向 fallback DNS 发起查询,拿到解析判断是否最终要走代理,这次查询在 Meta 下面支持走代理。这个判断是优先于 GEOIP 的,如果根据这次判断发现确实要走代理,就把域名发到远端在 VPS 上进行最终解析和访问。

所以理论上,访问 geosite 非 CN 的域名,从本地只会向 fallback DNS 发起一个通过代理的查询进行规则判断,最后的正式访问还是远端解析。所以从本地 ISP 和境内 DNS 服务商来说,他们都没有收到过由你发出的非 CN 域名的解析请求,因此避免了 DNS 泄露。
gcphym
2022-12-12 22:41:50 +08:00
@WoadZS 你好,请问一下,按照你这样配置,访问 cn 类的域名时,比如 baidu.com ,会是 nameserver 和 fallback 里的 DNS 进行并发请求? nameserver 和 fallback 都得到结果后再进行 ip 判断?
WoadZS
2022-12-13 15:03:58 +08:00
@gcphym 我的理解是,如果设置了 geosite: cn ,那么像 baidu.com 这样的 cn 网站,也会同时向 nameserver 和 fallback 的 DNS 进行请求,但最终并不会采用 fallback 返回的值。而并不是会像你说的一样再进行 IP 判断。
gcphym
2022-12-16 10:16:53 +08:00
@WoadZS 了解了。那么,访问 baidu.com 的时候,nameserver 中的服务器只需要几 ms 就能返回结果,但由于是同时请求,所以还是要等 fallback 返回结果后,再采用 nameserver 返回的 ip ?是这么理解吗? fallback 里面都是国外的服务器,可能需要几十甚至上百 ms
WoadZS
2022-12-16 18:02:20 +08:00
@gcphym 不会等 fallback 的结果返回,你可以通过 Chrome 开发者工具观察境内外网站首次访问时的 DNS 消耗时间,理论上需要代理的网站 DNS 查询耗时都会显著长于境内直连网站。
WoadZS
2022-12-16 18:04:26 +08:00
@gcphym 境内常用网站的域名的 DNS 查询耗时基本上都不会超过 10ms ,如果你配置得当的话。个别节点数量少的公共 DNS 可能会到几十毫秒。
Kobayashi
2023-03-01 12:39:25 +08:00
你的理解错了,本地解析是为了分流(如 CN IP 直连),远程依然解析一次。本地解析了说明没有命中域名规则,或者是域名规则前边的 IP 规则没有 no-resolve 提前触发了本地解析。

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

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

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

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

© 2021 V2EX