正常的方法是用 Quantumult X, 但是这篇讲的是 Cloudflare Zero Trust.
更新
发现曾经的“知乎极速版”变成了“知乎盐选版”,装这个就成。 此贴终结。(bushi
TLDR 总结
前置条件:使用 Zero Trust 模式的 Cloudflare WARP, 并且你信任 Cloudflare.
并且你知道“安装根证书”是有风险的。
- 生成一个根证书。
- 安装根证书。
- 在 Gateway > Firewall policies > HTTP 里面添加 Policy, 只解密知乎的 traffic.
- 条件为 Traffic, Domain, is not,
zhihu.com
- Action 设置为 Do Not Inspect.
- 条件为 Traffic, Domain, is not,
- 打开 TLS 解密, 然后再添加屏蔽知乎广告的 HTTP policy.
- 具体规则有两个:
- URL, matches regex,
https?://api.zhihu.com/commercial_api/launch_v2?
- URL, matches regex,
https?://api.zhihu.com/commercial_api/real_time_launch_v2?
- 应该就大功告成了。
前因
最近刷知乎比较多,渐渐觉得开屏广告(特别是摇一摇)很烦人。 从后台切换回去都展示开屏广告,有点欺人太甚。
重点是知乎会员不免广告,要是免的话我还会考虑一下。
于是搜索 知乎 开屏 广告,得知 iOS 可以通过 Quantumult X 等网络管理软件屏蔽广告。
但我已经在用 Cloudflare WARP, 不想 VPN 叠叠乐,遂有此文。
移植
该网站列举了一些 Quantumult X 的规则仓库,顺着找到了 blackmatrix7/ios_rule_script
.
以哲也为例,其含有 server
文件夹,看来是屏蔽付费内容用的。
不知道是在 Quantumult X 里跑还是别的地方。
规则文件也在这个目录里面,有多种不同的文件扩展,就拿 zheye.snippet
举例。
经过一番实验,发现在 Cloudflare Zero Trust 上能用的格式如下:
原规则: ^https?:\/\/api\.zhihu\.com\/commercial_api\/launch_v2\?
Zero Trust: https?://api.zhihu.com/commercial_api/launch_v2?
Cloudflare 自己对于 RegEx 的陈述在此,虽然不知道怎么才算起作用了。
我还部署了第三个规则: URL, in list, Zhihu ads, 然后在 list 里面放了一些 URL,也不知道有没有用。
(Lists 在侧边栏的 My team 下面)。
结果
打开 TLS decryption 后,我的设备全部连不上网了(因为没装证书),并且还关不掉(因为连不上网),这才知道要先安装好根证书。 还好下载了一份,于是在 Firefox 里安装之,然后关上了解密。
用 LocalSend 传了证书后怎么也打不开,于是仔细阅读说明,发现需要用 Safari 下载。
幸好 Zero Trust 有大内网,在文件夹里开了个 python -m http.server
解决。
起初是能用的,没有了开屏广告。但推荐页的图片和头像加载不出来。
经过多次测试,我发现本地似乎在我测试时加载好了广告,于是卸载,然后重新安装之。
于是我发现 App Store 打不开了!这也难怪,Apple 肯定为了安全做了 Certificate pinning.
于是网上搜索一番,才得知可以设置 Do Not Inspect 规则。
WARP 不解密 TLS 的时候也是可以知道 hostname 的,所以可以做一些 DNS 层面的屏蔽。 但根据 Path 拦截就需要通过根证书解密 TLS 了。
重装之后,推荐页的图片和头像居然也好了。不知道为啥。
题外话
Zero Trust 也可以做一些 DNS 屏蔽。(当然 NextDNS 或者 AdGuard Home 也可以。)
这里推荐 NextDNS 的 native-tracking-domains 列表,我添加了小米、Windows 和 Apple 的跟踪域名列表。
方法也很简单,按照说明下载 CSV, 然后添加需要的域名就行。
这些都是为了使用 WARP 的 VPN 绕的弯路,但从 WARP 的体验上讲,个人感觉还是值得的。