关于 openclash DNS 解析的疑问

2023-05-13 02:36:25 +08:00
 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 连接不是会很糟糕或者不稳定?

20404 次点击
所在节点    DNS
57 条回复
WoadZS
2023-05-24 11:22:34 +08:00
OpenClash 你可以使用 Clash Meta 内核,然后就可以继续使用 Redir-Host 了。如果你使用的是 Clash Meta 内核的 Redir-Host ,那么建议的配置和一些细节就是:

1. Nameserver Policy 可以指定国内域名走 223.5.5.5 或 119.29.29.29 等任意一家国内公共 DNS ,随你喜欢。这些域名会强制走你指定的公共 DNS 。
2. Nameserver 使用一个无污染的 DNS ,比如清华的 DNS 或者其他个人自建的服务。
3. 不需要 Fallback DNS 。
4. 如果能在远端服务器开嗅探,就开嗅探。

此时代理的情况是:
1. 国内域名,直接使用你指定的境内公共 DNS 解析结果进行直连;
2. 命中代理域名,直接发往远端进行解析访问;
3. 未命中域名规则,则通过无污染的 Nameserver DNS 解析,解析到国内 IP 则直连;解析到国外 IP 则将访问请求发送到远端(假设你配的就是非中国 IP 走代理),如果你的节点有开了域名嗅探,会提取客户端传递来的 IP 的实际访问域名重新在远端解析并建立连接;如果没有开嗅探,则会直接使用客户端传递过去的(无污染的 Nameserver DNS 解析的) IP 进行连接。

关于解析是否走通道的,Clash Meta 也可以单独配置某个 DNS 走特定的策略组(如 AUTO ),如果不配置,则默认直连。原版 Clash 是默认直连,没有指定代理的功能。

关于多个 DNS 返回的结果 Clash 使用谁,无论是原版还是 Meta 版本,都是取最快返回的结果。

上面详细的配置可以看 ClashMeta 的配置 wiki: https://wiki.metacubex.one/config/dns/
hongyichao
2023-06-02 13:59:47 +08:00
@a632079 大佬知道为啥开了 openclash 后,规则判断走代理,然后个别网站会无法打开,把代理关了就能打开。不是 DNS 的问题,感觉是代理的问题,我用 DOMAIN 域名 DIRECT 自定义规则走直连就能打开,这种到底算 clash 的问题还是机场节点问题?
a632079
2023-06-02 16:50:58 +08:00
@hongyichao 你可以直接在 Windows 或者其他 PC 操作系统,直接使用 V2ray 、SS 客户端使用机场的节点来判断是否是机场的问题。
排除了上面那个问题,可以使用 cfw 来测试,这一步可以排除是否是 Clash 的问题,都排除了的话,那就是 OpenClash 的配置问题。

P.S 我个人更倾向是机场节点的问题。我目前再用的机场,好多节点不能用于 github ssh 连接。所以我只好单独做了个 mixins ,让 github 都走 US 节点了。
xpn282
334 天前
@WoadZS
OpenClash 的 dns 用 Nameserver Policy 这个方案,好像最近开始流行起来。可以已经舍弃 fallback-filter 之类复杂的方式了,fallback 太过复杂,什么 Nameserver 解析等结果,然后不是 cn 的 IP 又怎么样。。又采用什么 fallback 的结果,什么时候采用 fallback 结果又要看 fallback- filter 的配置。。。太复杂了,难以理解。。


我现在也是采用了 Nameserver Policy 这种方法,Nameserver Policy 组设置国内域名指向国内运营商 dns ,Nameserver 组设置了国外 dns (走代理),这样分流起来,国内域名只会用国内 dns 解析(国外 dns 不参与解析),其他域名全部用国外 dns 解析(国内 dns 不参与解析),这样不会出现像 fallback 那样国内 dns+国外 dns 同时解析的现象,看着 dns 日志觉得冗长而复杂。。问题简单化
WoadZS
334 天前
@xpn282 更完美一点儿的做法是在你现在的基础上,Nameserver 配无污染且 ECS 准确的 DNS ,而不是境外 DNS 。如果 Nameserver 直接设置境外 DNS 的话,会导致同时拥有海内外节点的但又恰好不在境内域名列表里面的小众域名被指向境外节点,造成不必要的流量浪费和延迟增加。
zbatman
334 天前
@WoadZS 更完美一点儿的做法是前置一个 mosdns ,国内域名返回真实 ip ,其他域名走 clash 的 fakedns
这样国内域名可以真正的直连(不经过 clash )
xpn282
334 天前
@WoadZS
我看 mate 文档的配置例子,好像也是 Nameserver 用国外 dns 。。。我没有无污染的 dns……只能损失小众域名了。。。。

@zbatman
mosdns 好像也是根据 geosite:cn 来判断国内外域名进行分流。还是没有解决 45 楼说的小众域名国内节点的问题啊。。是我对 mosdns 理解不够吗。。。
zbatman
333 天前
@xpn282 这种小众域名直接忽略了,即使有,手动放到 mosdns 的直连 domain_set 里就行,也没几个。没必要为了这种域名费劲找无污染的国内 dns ,再说了,怎么保证这些 dns 一直是无污染的呢?
ANicePaw
321 天前
@WoadZS 可否请大佬帮我看看这样配置是您说的那种吗?

geodata-mode: true
geodata-loader: standard
tcp-concurrent: true
dns:
enable: true
ipv6: false
enhanced-mode: redir-host
listen: 0.0.0.0:7874
nameserver:
- https://doh.pub/dns-query
nameserver-policy:
geosite:cn,private,apple:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
geosite:geolocation-!cn:
- tls://8.8.4.4
- https://1.0.0.1/dns-query
sniffer:
enable: true
force-dns-mapping: true
parse-pure-ip: true
force-domain:
- "+.netflix.com"
- "+.nflxvideo.net"
- "+.amazonaws.com"
- "+.media.dssott.com"
skip-domain:
- "+.apple.com"
- Mijia Cloud
- dlg.io.mi.com
sniff:
TLS:
HTTP:
ports:
- 80
- 8080-8880
override-destination: true
WoadZS
321 天前
@ANicePaw
nameserver:
- https://doh.pub/dns-query

这里有问题,Nameserver 应该指定一个无污染的 DNS ,腾讯的 DNS 不算无污染的,可以考虑使用 https://doh.apad.pro/dns-query ,当然网上还有别的无污染的 DNS 可以选用,自己可以找找。

Nameserver 配置上述无污染的 DNS 后,后面不用针对 geolocation-!cn 配置 nameserver-policy ,毕竟你写那两个在境内直连的可靠性很成问题。
ANicePaw
320 天前
@WoadZS 谢谢!这样配置的结果就是 Clash 先判断域名是国内还是国外,国内域名会通过 geosite:cn 里的 DNS 解析,国外域名会通过 nameserver 里的无污染 DNS 解析吗?

这样的话我又有个地方不理解,geosite 是根据域名还是 ip 来判断国内外呀?如果是域名,那就好理解,直接交给对应 DNS 就行。如果是根据 ip ,那就得先解析一下获取 ip ,此时的解析是用是 nameserver 里的 DNS 吗?如果是国外 ip 就直接访问,如果是国内 ip 再交给 geosite:cn 的解析一遍?

还有个疑问,因为嗅探的存在,即使解析到的是错误 ip ,还是会被机场节点纠正过来,还是能正常访问,那这些配置的意义在哪里呢?提升速度减少延迟吗?
WoadZS
320 天前
@ANicePaw geosite 里面的数据是域名

还有个疑问,因为嗅探的存在,即使解析到的是错误 ip ,还是会被机场节点纠正过来,还是能正常访问,那这些配置的意义在哪里呢?提升速度减少延迟吗?
上面这个问题的意义在于,无污染的 DNS 可以解决 2 个问题:
1. 非常小众的域名解析问题,小众域名如果有污染可能会导致绕路或者分流错误,轻则速度变慢,重则无法访问;
2. DNS 隐私问题,无污染的 DNS ,特别是 DOH 或者 DOT 这类加密 DNS ,可以在保证准确度的情况下不让你的运营商知道你打算访问什么域名。
xpn282
319 天前
@WoadZS

我有一个问题想不通,我是日本 vps 节点,openclash 的 rules 规则是国内域名和 ip 走直连,其余全部走代理。
nameserver-policy 组用运营商 dns ,Nameserver 用了你说的 doh.apad.pro/dns-query

现在打个比方,比如访问某个国外网站或者说某个服务:
doh.apad.pro/dns-query 把它解析得到了香港 ip ,链路应该是:我的设备---日本节点-----香港 ip 。
如果我把 dns “doh.apad.pro/dns-query ”通过日本节点代理解析的话,解析得到的是日本 IP ,链路应该是:我的设备---日本节点-----日本 IP 。
那像这种情况,是不是把 dns 代理解析更加有效率?

也就是说虽然 doh.apad.pro/dns-query 是无污染的 dns ,解析到最近的香港 IP ,但是我的 openclash 的 rules 规则是把国外全部走日本节点代理,是不是把 dns 代理解析,更加容易得到日本 IP ,这样访问起来更加科学一些?

还有就是,dns 代理解析的话,有什么弊端?
WoadZS
319 天前
@xpn282 apad 的 DNS 是 ECS 友好的,意味着他会返回距离你发起 DNS 请求更近的 IP 地址。
在你的问题里面,DNS 是否走代理对应着你请求 DNS 的时候,对 DNS 服务器来说你发起请求的地址是不一样的,直连的情况下是你境内的 IP 地址(所以根据 ECS 返回了距离大陆更近的香港 IP ),走代理的时候是用的日本 IP 在请求 DNS (所以返回的是距离日本请求地址更近的日本 IP )

Apad 这个 DNS 是大陆有节点的,我建议是直连。好处是他能根据你真实的 IP 地址给你在直连情况下最合理的 IP 。
如果你访问的目标同时有境内外节点,你如果 DNS 解析走代理了(拿到的是境外 IP 地址),那就是实际访问时会舍近求远。

在回到你自己的情况,如果你访问的目标只有国外节点,本地解析拿到香港 IP 会对日本 VPS 实际访问有影响吗?取决于你的 VPS 上有没有开启嗅探。
如果开启了嗅探,那么本地解析拿到香港 IP 的用处仅仅是分流(告诉代理这个通信应该走代理),VPS 拿到这条通信时,会嗅探出来你实际想访问的域名并再次解析,此时由于是 VPS 直接请求 DNS ,所以一定是拿到距离日本 VPS 更近的 IP 用于实际链接,不会对你实际访问造成绕路。
但如果你服务器上代理程序没有开启嗅探,那么自然也不知道你想访问的域名是什么,代理就会直接使用发起请求时用的 IP (香港 IP )进行连接,此时就有绕路的问题。
xpn282
319 天前
@WoadZS
非常感谢不厌其烦的解答。
ANicePaw
314 天前
@WoadZS 反复折腾,两种都用了一段时间,谈下实际使用体验。

https://doh.apad.pro/dns-query ,一个问题是主观上感觉不够快,虽然 ping 只多了 20ms ,不知道是不是心理作用。另一个问题因为小众域名绕路的问题,导致部分节点测速延迟高的离谱,不知道实际访问会不会受影响,不过这个可以通过把节点域名添加进 nameserver-policy 解决。

又用了 https://doh.pub/dns-query 一段时间,主观感觉速度更流畅了,也没发现有什么不能访问的问题。好像理论上除了某种极端的污染状况,其他都不影响正常访问?毕竟国内域名都走了我 nameserver-policy 设置的运营商 DNS ,国外域名实际上都是要到节点重新解析的。至于隐私问题,DNS 泄露导致腾讯知道我访问的外网域名,好像对我来说不是什么问题。感觉夸大 DNS 泄露的严重性好像有点贩卖焦虑,正常的梯子用户用不着担心这个问题。

综上,我就继续这么配置了,以后遇到问题再说吧。
nameserver:
- https://doh.pub/dns-query
nameserver-policy:
geosite:cn,private,apple:
- 202.103.225.68
- 202.103.224.68
xpn282
300 天前
@ANicePaw
这个思路是正确的,我最终折腾了很久,也是这么分配的。
nameserver-policy 用运营商 dns 。
nameserver 的话,我不用 https://doh.apad.pro/dns-query 了,用国外公共 dns (代理到节点解析)。用了大半个月,感觉很好,使用起来没发现有什么不妥。哪些所谓的 dns 泄漏测试,全过,全部显示的是节点国家。

nameserver-policy:
geosite:cn,apple,private:
- 运营商 dns

nameserver:
- tls://8.8.4.4#DNS
- tls://208.67.222.222#DNS

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

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

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

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

© 2021 V2EX