Hotdry.
systems-engineering

多层广告阻挡栈:浏览器+DNS+防火墙实现零广告网络

构建设备无关多层广告/追踪阻挡系统:uBlock Origin浏览器扩展 + Pi-hole DNS服务器 + pfBlockerNG防火墙规则 + 路由自定义,实现全家零广告体验。

在现代网络环境中,广告和追踪器无处不在,不仅影响浏览体验,还消耗带宽、威胁隐私,甚至携带恶意软件。单一工具难以彻底阻挡,尤其是对智能家居、手机 APP、智能 TV 等非浏览器设备。构建多层阻挡栈(browser extensions + DNS overrides + firewall rules + custom routing)可实现设备无关(device-agnostic)的零广告体验:浏览器层处理动态元素,DNS 层拦截域名请求,防火墙层阻挡 IP 流量,路由层全局重定向。这种分层防御互补短板,覆盖全流量路径,提升网络性能达 20-50%,并提供实时监控。

浏览器扩展层:客户端精细过滤

浏览器是广告重灾区,扩展如 uBlock Origin(uBO)是最轻量高效的选择。它使用 EasyList、EasyPrivacy 等规则集,阻挡横幅、视频广告、追踪脚本和指纹采集。uBO CPU / 内存占用极低,支持动态过滤和元素拾取器,手动隐藏顽固广告。

证据:uBO 在 Chrome/Firefox 上阻挡率 > 95%,远超 AdBlock Plus(ABP 允许 “可接受广告”)。社区测试显示,结合 ABP 的 uBO 在 YouTube 上跳过 90% 前贴片广告。

落地参数 / 清单:

  • 安装:Chrome Web Store 搜索 “uBlock Origin”。
  • 默认启用:EasyList、uAssets、Peter Lowe。
  • 自定义规则:添加||ads.google.com^example.com##.ad-banner
  • 高级:启用 “高级模式”,设置no-scripting: true阻挡 JS 广告。
  • 监控:扩展图标显示实时阻挡数,每周更新规则。

此层针对网页,但忽略 APP/SmartTV 流量。

DNS 解析层:网络级域名沉洞

Pi-hole 或 AdGuard Home 作为本地 DNS 服务器,维护百万级黑名单(StevenBlack、Firebog),解析广告域名到 0.0.0.0,实现全设备阻挡,无需客户端。

证据:Pi-hole 官方基准显示,每日阻挡 10-30% 查询;家庭测试(10 设备)节省带宽 15%,加载加速明显。AdGuard Home 支持 DoH/DoT,防 ISP 窥探。

落地参数 / 清单:

  • 部署:Raspberry Pi 上curl -sSL https://install.pi-hole.net | bash,上游 DNS 选 Cloudflare(1.1.1.1)。
  • 规则集:默认 + EasyList China、https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/adblock.conf
  • 路由器配置:DHCP DNS 指向 Pi-hole IP(e.g., 192.168.1.100)。
  • 白名单:/etc/pihole/whitelist.txt添加pi.holedoubleclick.net(若 breakage)。
  • 监控:Web 面板(pi.hole/admin)查看查询日志、Top Clients、阻挡率图表;API 密钥监控 Prometheus。

阈值:日志保留 7 天,更新频率每日;重载pihole -g应用变更。

防火墙层:IP/Geo 级流量阻挡

DNS 漏网时,防火墙如 pfSense 的 pfBlockerNG 或 Linux iptables 阻挡 IP 范围 / ASN,补充域名级盲区(如 CDN 混载)。

证据:pfBlockerNG 整合 ET Block、Spamhaus,阻挡率补足 DNS 5-10%;社区报告 YouTube 广告 IP 有效率 70%。

落地参数 / 清单:

  • pfSense:安装 pfBlockerNG-devel,启用 DNSBL+IP feeds(EasyList、Level1)。
  • iptables 示例:
    iptables -A OUTPUT -d 208.91.112.0/20 -j DROP  # Google Ads IP
    iptables -A OUTPUT -m set --match-set adblock dst -j DROP
    ipset create adblock hash:ip
    wget -O - 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts' | awk '{print $2}' | grep -v '0.0.0.0' | sort -u | ipset restore -!
    
  • 更新脚本:Cron 每日pfBlockerNG.sh -uipset restore
  • 监控:pfBlockerNG Alerts 标签日志,GeoIP 地图;限速 < 1ms 延迟。

路由 / 自定义层:全局重定向与 VPN

路由器(如 OpenWRT)或 VPN 隧道最终兜底,重定向流量或加密绕过。

证据:NextDNS/AdGuard DNS 云服务 99.9% 覆盖;自建 WireGuard+Unbound 递归 DNS 防污染。

落地参数 / 清单:

  • OpenWRT:Luci-app-adblock,订阅 o0o0oo0.xyz。
  • VPN:WireGuard 客户端 DNS=Pi-hole IP。
  • 回滚:白名单优先,测试dig @pi.hole ads.google.com应 NXDOMAIN。

集成监控与风险缓解

全栈:路由 DNS→Pi-hole→Unbound→Cloudflare;浏览器 uBO 兜底。监控:Pi-hole 仪表盘 + Grafana dashboard,警报 > 5% breakage。

风险:

  1. 误阻:网站白名单,测试浏览器隐身模式。
  2. 性能:Pi-hole<1GB RAM,规则 < 100 万条。
  3. 更新:自动化脚本,订阅上游 RSS。

此栈实现零广告,隐私 + 速度双赢。

资料来源

查看归档