例如 iOS 的小火箭和 surge 都提供了 force-remote-dns 参数
但 clash 并没有该参数,如果仅仅指定域名走代理并不能实现远端 dns 解析(抓包还是会在本地进行解析)
不想用 doh/dot 因为境外的 dns 服务实在太慢
1
yanyumihuang 2022-09-11 10:23:48 +08:00 via Android 1
使用 fakeIP 模式并且把你的 IP 规则放到域名后面
|
2
paradoxs 2022-09-11 10:29:50 +08:00
surge 默认开启了 force-remote-dns ,不用加。
|
3
yov123456 2022-09-11 10:31:30 +08:00 via iPhone
clash 实际坐请求的时候都是 force-remote-proxy 的 本地请求的 ip 只用来匹配 ip 规则。
|
4
dcty 2022-09-11 10:39:45 +08:00 2
换 meta 内核
|
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 进行解析和访问。 |
6
lovedoing 2022-09-11 14:25:29 +08:00
nameserver-policy
|
7
connorzone 2022-09-11 14:38:12 +08:00
clash 的 dns 只是用于匹配规则,实际的代理是通过 fqdn 到远程服务器再重新解析的。如果觉得 dns 慢,不妨在上游套一个 mosdns 或 adguardhome ,开启 lazy cache 或乐观缓存。
|
9
fvladlpa 2022-09-13 21:14:27 +08:00
DOMAIN, example.com,your_proxy_name
|
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 |
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' |
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 里找是这样吗? |
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 泄露。 |
14
gcphym 2022-12-12 22:41:50 +08:00
|
15
WoadZS 2022-12-13 15:03:58 +08:00
|
16
gcphym 2022-12-16 10:16:53 +08:00 via Android
|
17
WoadZS 2022-12-16 18:02:20 +08:00
@gcphym 不会等 fallback 的结果返回,你可以通过 Chrome 开发者工具观察境内外网站首次访问时的 DNS 消耗时间,理论上需要代理的网站 DNS 查询耗时都会显著长于境内直连网站。
|
18
WoadZS 2022-12-16 18:04:26 +08:00
@gcphym 境内常用网站的域名的 DNS 查询耗时基本上都不会超过 10ms ,如果你配置得当的话。个别节点数量少的公共 DNS 可能会到几十毫秒。
|
19
Kobayashi 2023-03-01 12:39:25 +08:00 via Android
你的理解错了,本地解析是为了分流(如 CN IP 直连),远程依然解析一次。本地解析了说明没有命中域名规则,或者是域名规则前边的 IP 规则没有 no-resolve 提前触发了本地解析。
|