## 为什么不用浏览器插件而用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



暂无评论内容