比如某域名经过这样的规则(暂不探讨客户端直接对 ip 发起请求情况):
rules:
# 所有的规则都没有命中, 并且前面没有 IP-CIDR
- IP-CIDR,203.205.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT,no-resolve
- MATCH,PROXY
这样域名不会 dns 解析, 直接走到兜底的代理, 这样国内正常的请求如果没有被前面匹配到, 则会走节点.
如果将 no-resolve
去掉, 域名会 dns 解析成 ip, 如果是国内的正常网站, 则匹配到 GEOIP 会走直连; 如果是被墙的网站, 则会返回一个污染的 ip, 此 ip 不在国内, 会走兜底的代理.
所以理论上, GEOIP
是否添加 no-resolve
与兜底策略中是否走直连和代理有关系? (当然增加一次 dns 解析也不会影响很大的网络延迟)
综上, 有两种搭配的策略:
- GEOIP,CN,DIRECT,no-resolve
- MATCH,DIRECT
这样国内的请求会走直连没问题, 但国外的请求可能称为漏网之鱼导致无法访问. 而且再反过来看, 这样 GEOIP 就失去了意义, 去掉 GEOIP 这条规则是一样的.
- GEOIP,CN,DIRECT
- MATCH,PROXY
这样进行了一次 dns 解析, 国内正常请求不会被误伤, 而国外的都会走代理, 看起来是完美解决?
所以你们都是怎么搭配的呢?
1
Cormic 2023-03-20 16:43:49 +08:00 via iPhone
不知道是谁先开始说什么 no-resolve 可以避免 dns 泄漏的,一堆人自己也没搞懂就瞎转。
geoip 搭配 no-resolve 是给那些直接发起 IP 请求的场景设计的,告诉代理工具不要去尝试反解析 IP 为域名。 按第一种配置方法,因为对没命中规则的域名不做解析,所以 geoip 规则根本不起作用(不解析,你连 IP 都没有,geoip 和你有什么关系),连国内域名都会交给兜底规则走代理,如果前置规则很少,几乎就等于全局代理了。这个自己试试就知道了。 |
2
loca1h0st 2023-03-20 16:50:52 +08:00
如果加上 no-resovle ,域名会跳过 GEOIP 这一段直接到 PROXY 阶段,此时浏览器会把域名信息给到本地的 socks5 代理,一同传到远端的服务器上进行解析和访问。
此时有些网站在海外部署了 CDN 的,会返回一个海外的 IP 地址结果,导致你本可以走国内的变成走国外了,同时,存在一定概率类似某些音乐视频网站因解析到海外节点导致版权问题没法播放。 看了你的博客的第一篇文章,fake-ip 这块也是讲述有点模糊,其实这块感兴趣可以重头看看原理和理论。 另外你再想想,DNS 污染是谁污染了什么网站?这些网站在国内是否有部署运营节点? |
3
AoEiuV020CN 2023-03-20 17:40:13 +08:00
不会,我是 2 ,
我前面的分流规则不带 no-resolve 否则影响速度, geoip 再 no-resolve 就白 geoip 了, |
4
liu938651469 30 分钟前
@loca1h0st https://en.clash.wiki/configuration/configuration-reference.html 官方配置文档有一段注释 # optional param "no-resolve" for IP rules (GEOIP, IP-CIDR, IP-CIDR6)
|