AdGuard Home DNS广告过滤:自建DNS去广告方案

## 为什么不用浏览器插件而用DNS过滤 浏览器广告拦截插件(uBlock Origin等)只针对HTTP/HTTPS流量,且依赖浏览器运行。DNS层面的广告过滤在设备发起DNS查询时就拦截了广告域名,覆盖所有应用、所有协议,包括: – 手机App内的广告(无法装插件的环境) – 智能电视、IoT设备的广告 – 系统级广告(Windows/Android系统推送) – 游戏内广告 AdGuard Home就是做这个的——一个开源的DNS服务器,内置广告域名列表,收到DNS查询时匹配列表则返回NXDOMAIN(域名不存在)或指向黑页IP。 ## 部署方式 最简单的是用Docker跑,一台低配云服务器就行。我用的是雨云的2核2G云服务器,跑AdGuard Home加上其他几个服务完全够用,月费不到30,性价比确实可以。
docker run --name adguardhome \
  -v /opt/adguardhome/work:/opt/adguardhome/work \
  -v /opt/adguardhome/conf:/opt/adguardhome/conf \
  -p 53:53/tcp -p 53:53/udp \
  -p 80:80/tcp -p 3000:3000/tcp \
  --restart unless-stopped \
  -d adguard/adguardhome:latest
参数说明: – 53端口是DNS服务,TCP和UDP都要暴露 – 80端口是Web管理界面 – 3000是初始安装向导端口,配置完成后可以关掉 启动后访问 `http://服务器IP:3000` 走完初始设置。设置管理员密码、监听端口保持默认(0.0.0.0:53)、DNS端口也默认。 ## 核心配置 ### 上游DNS服务器 AdGuard Home本身不解析域名,它只是过滤,真正的解析要转发给上游DNS。推荐用加密DNS避免被运营商劫持:
tls://dns.alidns.com
tls://dns.google
https://doh.pub/dns-query
在Web管理界面 -> 设置 -> DNS设置 -> 上游DNS服务器 填入,一行一个。 ### DNS缓存 勾选”启用DNS缓存”,缓存大小设为默认的4MB够用。缓存命中率一般在60%-80%,能减少上游DNS查询次数。 ### 广告过滤规则 默认自带的规则已经够用,但可以加几个强力的: 在”过滤器” -> “DNS黑名单” 中点击”添加黑名单”,填入以下列表:
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
AdGuard官方的SDN过滤器覆盖最广,cjx-annoyance主要针对国内视频网站和App的广告,StevenBlack是经典hosts源。 ### 查询日志 默认开启,保留24小时。如果想省磁盘,在”设置” -> “常规设置” 中把日志保留时间改成7天或关闭。日志用来排查误杀很方便,比如某个App打不开,去日志里看域名是否被拦截了。 ## 客户端配置 DNS过滤要生效,设备必须把DNS服务器指向AdGuard Home的IP。 方式一:路由器改DNS 在路由器DHCP设置中,把DNS服务器改成AdGuard Home的IP。这样局域网所有设备自动生效,不需要逐台配置。 方式二:设备手动设置 – Windows: 网络适配器属性 -> IPv4 -> 手动DNS,填IP – macOS: 系统偏好设置 -> 网络 -> 高级 -> DNS – Android: Wi-Fi长按 -> 修改网络 -> IP设置改为静态 -> DNS填IP – iOS: 设置 -> 无线局域网 -> 配置DNS -> 手动 如果不方便改每台设备,路由器方式最省事。 ## 测试效果 部署完后访问 `http://服务器IP:80` 进管理面板,看”仪表盘”的统计数据: – 查询数量:每秒处理的DNS请求数 – 过滤占比:被拦截的请求百分比,正常应该在10%-30% – 上游DNS响应时间:一般在10-50ms 手动测试:在浏览器访问 `https://doubleclick.net` ,正常应该打不开。或者ping一个广告域名:
nslookup ad.doubleclick.net AdGuardHome_IP
应该返回 `server can’t find ad.doubleclick.net: NXDOMAIN` ## 常见问题 某些网站图片加载不出来 -> 去查询日志搜索该网站域名,如果被拦截,加到白名单。在”过滤器” -> “DNS白名单” 添加。 AdGuard Home挂了导致上不了网 -> 客户端DNS配置要设置备用DNS,比如8.8.8.8或114.114.114.114。或者在路由器DNS设置里填两个,第一个是AdGuard Home,个是公共DNS。 国内视频App看不了 -> 部分视频App的广告域名和视频CDN域名混在一起,粗暴拦截会导致视频加载失败。可以在”过滤器”中禁用cjx-annoyance列表,或者把视频App的域名加到白名单。 内存占用 -> 默认配置下内存占用约50-80MB,日志量大会增加。在”设置” -> “常规设置” 中关闭”启用查询日志的统计”可以减少内存占用。 ## 进阶玩法 – 搭配Pi-hole做二级过滤,Pi-hole负责统计和可视化,AdGuard Home负责实际过滤 – 在AdGuard Home前面加一层Nginx反代,用域名访问管理界面而不是IP:端口 – 用AdGuard Home的DHCP功能替代路由器DHCP,可以更精细控制客户端分组 AdGuard Home跑起来后基本不用管,偶尔看看过滤比例,更新下规则列表就行。比起浏览器插件,这种方案对所有设备无差别拦截,一劳永逸。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容