一直使用 openclash + mihomo (原 clash meta) 内核运行在路由器上, 最近似乎规则有些问题, 谷歌的 cdn 总是直连. 过一会又发现它在走代理, 而且基本都是这几个域名:
ssl.gstatic.com
www.gstatic.com
*.googleapis.com
最早怀疑是 IPv6 的问题, 因为我最近把它打开了, 后面发现不是.
然后是怀疑 geoip 出了问题, 我用的是 https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat 这个只有 cn 和 private 的 dat, 关键代码如下:
geodata-mode: true
geox-url:
geoip: "https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat"
geosite: ~
mmdb: ~
asn: ~
因为它是 dat, 内容不可见, 我就换成了纯文本的 ipcidr + rule-set 的形式, 这种规则的好处是, ip 段可见, 方便排查. 代码如下:
rule-providers:
CN4:
type: http
path: cn4.txt
url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china.txt"
interval: 604800
proxy: Tunnels
behavior: ipcidr
format: text
CN6:
type: http
path: cn6.txt
url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china6.txt"
interval: 604800
proxy: Tunnels
behavior: ipcidr
format: text
rules:
- IP-CIDR,255.255.255.255/32,REJECT,no-resolve
- IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT,no-resolve
- GEOIP,PRIVATE,DIRECT,no-resolve
- RULE-SET,CN4,DIRECT,no-resolve
- RULE-SET,CN6,DIRECT,no-resolve
- MATCH,Tunnels
像上面这样的配置, 跑了几天, 依旧不行, 有时候使用谷歌正常, 也有时候浏览器在转, 一转我就知道这二币又去直连了:
然而我的 ipv4 段里面, 根本没有 172.217.31.10:
172.81.192.0/18 = 172.81.192.0 - 172.81.255.255
那特码的就怪了, 没有规则你凭什么匹配成 DIRECT 直连? 排查过 openclash 的运行配置, 和我写的 rules 一样, 就那么几条, 没有加别的.
后来被折腾得烦了, 直接上 rule-set 看看吧, 于是就多加了一段, 代码如下:
rule-providers:
GOOGLE:
type: http
path: google.yaml
url: "https://******/google.yaml" #配置在下面, 自己简单写的, 本地加载的话上面改成 type:file 具体看配置手册
interval: 604800
proxy: Tunnels
behavior: classical
format: yaml
rules:
- IP-CIDR,255.255.255.255/32,REJECT,no-resolve
- IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT,no-resolve
- GEOIP,PRIVATE,DIRECT,no-resolve
- RULE-SET,GOOGLE,Tunnels
- RULE-SET,CN4,DIRECT,no-resolve
- RULE-SET,CN6,DIRECT,no-resolve
- MATCH,Tunnels
写在了 cn4 和 cn6 (或者是 geoip,cn) 的上面, 观察了几天, 问题解决了, 那几个撒币域名解析的香港地址也不直连了...
不想去 github 提 issue 了, 我觉得他们肯定也懒得回我😂
以下是谷歌配置 google.yaml:
payload:
- DOMAIN-SUFFIX,ytimg.com
- DOMAIN-SUFFIX,amp.dev
- DOMAIN-SUFFIX,android.com
- DOMAIN-SUFFIX,api.ai
- DOMAIN-SUFFIX,app-measurement.com
- DOMAIN-SUFFIX,app-measurement.net
- DOMAIN-SUFFIX,appspot.com
- DOMAIN-SUFFIX,material.io
- DOMAIN-SUFFIX,recaptcha.net
- DOMAIN-SUFFIX,gstatic.com
- DOMAIN-SUFFIX,google.com
- DOMAIN-SUFFIX,googleapis.com
- DOMAIN-SUFFIX,g.co
- DOMAIN-SUFFIX,flutter.dev
- DOMAIN-SUFFIX,flutterapp.com
- DOMAIN-SUFFIX,firebaseapp.com
- DOMAIN-SUFFIX,firebaseio.com
- DOMAIN-SUFFIX,blogspot.com
- DOMAIN-SUFFIX,youtube.com
- DOMAIN-SUFFIX,youtu.be
- DOMAIN-SUFFIX,g.co
- DOMAIN-SUFFIX,withgoogle.com
- DOMAIN-SUFFIX,googleusercontent.com
- DOMAIN-SUFFIX,ggpht.com
- DOMAIN-SUFFIX,googlevideo.com
- DOMAIN-KEYWORD,gvt
- DOMAIN-KEYWORD,ampproject
- DOMAIN-REGEX,^gvt\d\.com
- DOMAIN-REGEX,^.*\.goog
以上是我根据自己的使用习惯和需求写的, 参考了 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/Google/Google_No_Resolve.yaml 但没有完全使用, blackmatrix 作者的这个版本算是懒人配置, 里面还有 cn 域名. 我为了防止自己的服务器送中, 把所有谷歌大陆域名都屏蔽掉了, 还有一些广告域名也是. 规则这个东西, 千人千面, 根据自己的需求来我觉得最好不过了.
对了, 上面的规则里有正则 DOMAIN-REGEX, ≤1.18.1 的版本是用不了的. 发布博文时, 使用的版本是 1.18.7