OpenGFW Experience

于 2024-10-31 发布

因为现在很多 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.yamllocal 要设置成 false我对 0.4.1 版本进行的 speedtest 测试发现,对本机生效的话,延迟从 1 ms 提高到了 11 ms,下载和上传从 900 Mbps 分别降低到了 800 Mbps 和 600 Mbps,损失很大。

目录