关于 openclash DNS 解析的疑问

353 天前
 lxnelly

我没有任何软件及编程基础。我想知道我理解的对不对哈。 假设我用的是 Redir host 兼容模式,启动了本地劫持(dnsmasq )并仅选择了自定义上游 dns 选项,nameserve 假设为 114 加腾讯,fallback 为谷歌,1111,9999

我有这些疑问 1.当我打开一个域名时,clash 的逻辑是不是先交给 114 和腾讯,查到 ip 后比对规则,然后选择直连或者走通道?

2.在我打开一个域名时,clash 是给我 114 和腾讯之间更快返回的那个 ip ,还是他俩都查到后比对结果一致再给我 ip?

3.如果打开一个境外域名,两个解析错误但结果一致,而且是非保留地址或者 0000 之类的,接着是丢给 fallback dns 继续解析还是直接给我打开网站了?

4.主 dns 和 fallback 的 dns 解析会走通道吗?还是都走本地?还是它会自己选择走本地还是走通道?如果不走通道,那么有些 fallback 的 dns 连接不是会很糟糕或者不稳定?

18614 次点击
所在节点    DNS
57 条回复
dogfight
352 天前
clash 最大问题就是 DNS 。我搞了很久换回 PSW2
xpn282
352 天前
@dogfight
我和你正好相反,之前用 Passwall ,发现 dns 有问题,同样的节点,在手机的小火箭上能打开 ChatGPT ,但是 Passwall 上就是不行,怎么设置都不行,而且 Passwall 会出现经常打不开 V2EX 的现象,有时候不得已都要开手机小火箭才能上 v2ex……真的是受够了……

后来换 OpenWrt 用 fake-ip 模式,这些现象都消失了……和手机小火箭一样能驾驭 ChatGPT v2ex……等等
xpn282
352 天前
op 这些问题我也很想知道,但是估计只有 OpenClash 作者才能更清楚的回答这些问题
SenLief
352 天前
如果你不用 clash dns 应该关闭 clash 的 dns ,选择 dnsmasq 作为上游 dns 分流,clash 只做规则匹配。简单的来说就是 dnsmasq 区分国内国外,国内匹配直接请求,国外流量给 clash ,clash 不再做 dns 解析,而是直接规则匹配了。
coorey
352 天前
1.nameserver 和 fallback 同时查,如果是国外 IP 信任 fallback
2.最先返回的 IP
3.如果是 4 个 0 选择 fallback 结果
4.本地,clash 会把 ip 还原成域名发送到 VPS
fatelight
352 天前
用 fake-ip+绕过中国 ip
Holodusk
352 天前
1. Clash 的 DNS 和代理两个模块是独立的。什么时候用 namerserver 和 fallback 取决于 fallback-filter ,和 rules 无关。对于 TCP 流量,DNS 解析的结果不是实际连接的 IP ,Clash 会传递域名在代理服务器上解析。UDP 流量则用本地解析的结果。
2. 取最快返回的结果
3. 同 1 ,取决于 fallback-filter 的 ipcidr
4. 不走通道,要尽量保证 fallback dns 能连通且无污染。使用 Fake-IP 配合详尽的规则更好对抗 DNS 污染,因为 Fake-IP 模式下,命中域名规则走代理不需要 DNS 解析。

个人建议:OpenClash 用 Meta 内核。用原版就老老实实用 Fake-IP ,原版 Clash 早就不支持 redir-host 了。
BABYMETAL
352 天前
1 、只是启动了本地劫持(dnsmasq)的话只是将 dnsmasq 的 dns 转发到 clash 解析,具体解析过程看 nameser 和 fallback 的 dns 和 fallback-filter 的策略。
2 、返回最快解析的结果
3 、这种是看 fallback-filter 设置的策略,默认的我记得非 geoip: cn 、个别保留地址和个别网站都用 fallback 组的 dns 解析结果,如果两个组解析的 ip 地址都打不开网站了就不属于目前 clash 的 dns 解析的范畴了,因为之前版本删除了 Redir host ,现在的兼容模式其实也是 fake-ip 模式
4 、没看懂
om2mo
352 天前
Clash 的 DNS 部分只是用来判断,并不走远程代理
om2mo
352 天前
*远程解析
mohumohu
352 天前
其实可以把 DNS 部分和 open clash 分离开来,然后 clash 全部跑 fakeip 就好了。
mohumohu
352 天前
如果 OP 能跑 docker 的话,这个可以试试: https://hub.docker.com/repository/docker/sliamb/paopaodns
Kinnice
352 天前
通过你的问题,可以认为你几乎完全没有认知 clash 的 DNS

1. 当访问一个域名时,会从第一条规则往下开始匹配,

1.1 如果是域名类规则,则不会触发任何 DNS 解析

1.2 如果是 IP 类规则且加了 no-resolve 标签,则不会触发任何 DNS 解析,例如 example.com 解析为 1.1.1.1 你的规则为匹配 1.1.1.1 IP ,都不会命中该规则

1.3 如果是 IP 类规则且没有加 no-resolve 标签,则会触发 DNS 解析,解析会同时对 nameserver 和 fallbackserver 中所有的 DNS 进行发起请求,获取最快的那个 DNS 解析返回的结果(无论是 fallback 还是 namesever ),(在默认配置下)如果为国内 IP ,则无视 fallback ip ,若为国外 IP ,则等待 fallback 组的返回结果,并以该结果进行规则匹配,这也就是为什么要求 fallback 为什么要无污染,同时也是为什么有些时候,有些站点在国内国外都有 CDN ,但是不小心命中国外的。

无论是 1.1 还是 1.2 1.3 发送给代理服务器的都是原域名,并非是解析到的 IP ,因此真正的解析并连接是发生在代理服务器的。

在官版中 clash 访问 dns 均不会走代理,但是 clash.meta 实现了可以走代理,有需求可以选这个内核

另外 clash 官版已经删除了 redir-ip (上面 DNS 服务器真实解析到的 IP )模块,因此程序得到的 ip 是 fake-ip (由 clash 生成的虚假 IP ,仅用来建立本地程序与 clash 的连接。

所以大致来说,Clash 的 DNS 解析设计是来做规则匹配的,不是真的给到你一个 IP 。
a632079
352 天前
这个其实是 Clash 设计的问题,它默认认为 DNS 是可信的,所以按照一般的配置是这样的,优先使用 114 DNS 请求 IP (除非直接碰到了 filter 设定的域名,这会直接转交给 fallback DNS ),如果这个 IP 符合一定规则,再使用 fallback DNS 再请求一次。

**这通常是有效的。**
但是当遇到运营商墙中墙,比如江苏屏蔽了 mypikpak (直接把 DNS 的 A 记录污染到国内 IP ,这种情况不会 fallback ),亦或者新的 GFW Domains (直接返回本地 IP 、国内 IP )。这种策略会出一些问题。

为了解决这个问题,我在软路由同机器跑的 ArchLinux 起了个基于 Mosdns 4 的 easymosdns 来解决这个问题——这个方案也不太完美,内置的域名列表,IP 段太少了,导致很多域名和 Passwall 一样,直接拿到了境外站的 IP ,比如说 ipip.net 。但目前算是好用的解决方案了。
jinqzzz
352 天前
同上,将 mosdns 作为 openclash 的上游 dns ,国内 IP 、域名用国内 DNS 直连查询,其他走 8.8.8.8 1.1.1.1 通过代理服务器查询,简洁明了。 (别研究 openclash 的 dns 了,折磨自己)
mohumohu
352 天前
@a632079 可以试试这个: https://github.com/kkkgo/PaoPaoDNS ,用的 mosdns5 。
v2exe2v
351 天前
不要用 clash 的 dns 分流,直接劫持了转交给 mosdns 或者 smartdns
lxnelly
351 天前
@coorey 感谢回复,这两天已经补课相关知识,切换到了 fake ip 模式
lxnelly
351 天前
@fatelight 感谢回复,已经切换到 fake ip 模式。但是新的坑又挖出来了。绕过中国 ip 这个功能的开关与否似乎不对配置文件进行任何修改。我尝试开关它后比对配置文件似乎两者没有任何区别。那么问题来了,它是在进行哪个步骤时以何种方式确认这个域名是不是中国 ip 呢? 它要不要进行一次额外 dns ?还是说它只进行域名的比对,命中就走国内 dns ,没命中就继续走规则找匹配呢?
lxnelly
351 天前
@Holodusk 学到了,感谢。已经开启了 fake ip 。

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

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

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

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

© 2021 V2EX