因为现在很多 App 会内置 resolver,只会跟系统的 DNS 请求一个它的 HTTPDNS 服务器的地址,后续就不会请求系统的 DNS 了,导致 DNS 广告过滤会失效。不想24小时开着 Surge,但是又想制裁广告的话,就只能用类似 SNI 阻断的方式了。
很久之前就听闻过 OpenGFW 的大名,这次终于找到了使用它的场景。恰好 AUR 里面有人已经做好了 PKGBUILD,直接一键安装就行。但是 service 文件得自己写,简单写一个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Unit] Description=OpenGFW After=network.target nftables.service
[Service] Type=simple WorkingDirectory=/run/OpenGFW RuntimeDirectory=OpenGFW ExecStart=/usr/bin/OpenGFW -c /etc/OpenGFW/config.yaml /etc/OpenGFW/rules.yaml ExecReload=/bin/kill -HUP $MAINPID TimeoutStopSec=5s PrivateTmp=true ProtectSystem=strict NoNewPrivileges=true Restart=always RestartSec=5s [Install] WantedBy=multi-user.target
|
最简单的屏蔽就是使用 geosite:category-ads-all
来确定哪些是广告域名了。我们针对 HTTP、TLS 以及最潮最 IN 的 QUIC 进行判断,可以写以下规则到 rules.yaml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| - name: block tls ad geosite action: block log: true expr: geosite(string(tls?.req?.sni), "category-ads-all")
- name: block http ad geosite action: block log: true expr: geosite(string(http?.req?.headers?.host), "category-ads-all")
- name: block quic ad geosite action: block log: true expr: geosite(string(quic?.req?.sni), "category-ads-all")
|
如此一来就可以 start/enable
了。试过确实好,不过不建议对路由器本机生效,也就是 config.yaml
的 local
要设置成 false
。我对 0.4.1 版本进行的 speedtest 测试发现,对本机生效的话,延迟从 1 ms 提高到了 11 ms,下载和上传从 900 Mbps 分别降低到了 800 Mbps 和 600 Mbps,损失很大。