保姆级教程:在OpenWrt软路由上,用Docker和脚本两种方式搞定AdGuard Home和MosDNS v5.3.1
软路由双雄会:AdGuard Home与MosDNS v5.3.1在OpenWrt上的终极部署指南
当家庭宽带接入设备超过20台时,传统路由器的DNS处理能力往往成为网络体验的瓶颈。我曾为一个摄影工作室调试网络时发现,即便在千兆光纤环境下,设备间的网页加载速度差异可达3秒以上——这背后隐藏的正是DNS解析效率问题。本文将分享两种经实战验证的部署方案,通过AdGuard Home的广告拦截与MosDNS的智能分流组合,打造企业级家庭网络环境。
1. 部署方案选型:Docker与原生安装的深度对比
在x86软路由平台上,Docker部署方案占用存储空间约450MB,而原生安装仅需120MB。但当我们测试树莓派4B(ARMv8架构)时,Docker方案显示出更好的架构兼容性。
性能实测数据对比(基于Rockchip RK3568平台):
| 指标 | Docker方案 | 脚本安装方案 |
|---|---|---|
| 内存占用 | 常驻280MB | 常驻210MB |
| DNS平均响应时间 | 12ms | 9ms |
| 冷启动时间 | 8秒 | 3秒 |
| 跨架构支持 | 全平台通用 | 需匹配具体架构 |
实际测试中发现,当MosDNS与AdGuard Home共同运行时,建议为设备预留至少512MB空闲内存。我的工作室设备在内存降至300MB以下时出现了间歇性解析超时。
2. Docker全自动部署方案
这种方法适合满足以下条件的用户:
- 使用x86/ARM64架构的软路由
- 已安装Docker且存储空间≥1GB
- 需要频繁更新组件版本
2.1 AdGuard Home容器化部署
先确认Docker环境就绪:
docker --version # 输出应包含Docker version 20.10+拉取优化版镜像(避免使用latest标签):
docker pull adguard/adguardhome:v0.107.36创建持久化配置目录:
mkdir -p /opt/adguardhome/{conf,work} chmod 755 /opt/adguardhome启动容器时的关键参数说明:
docker run -d \ --name adguardhome \ --restart unless-stopped \ -v /opt/adguardhome/conf:/opt/adguardhome/conf \ -v /opt/adguardhome/work:/opt/adguardhome/work \ -p 53:53/tcp -p 53:53/udp \ -p 67:67/udp -p 68:68/udp \ -p 80:80/tcp -p 443:443/tcp \ -p 853:853/tcp \ -p 3000:3000/tcp \ adguard/adguardhome:v0.107.36常见问题处理:
- 端口冲突:使用
netstat -tulnp | grep 53排查 - 权限问题:添加
--privileged参数临时解决 - 资源限制:通过
--memory=512m限制内存用量
2.2 MosDNS的Docker集成
推荐使用此组合命令一键完成网络配置:
docker network create mosdns-net && \ docker run -d \ --network mosdns-net \ --name mosdns \ -v /etc/mosdns:/etc/mosdns \ -p 5353:53/udp \ sbwml/mosdns:v5.3.1 \ -c /etc/mosdns/config.yaml配置AdGuard Home上游服务器:
# 在AdGuardHome管理界面添加 上游DNS服务器: - tcp://mosdns:5353 Bootstrap DNS服务器: - 223.5.5.5:533. 原生脚本安装方案
更适合以下场景:
- MIPS/ARMv7等特殊架构设备
- 存储空间有限的嵌入式设备
- 需要深度定制配置的用户
3.1 空间与依赖检查
运行预检脚本:
#!/bin/bash # 存储检查 if [ $(df -m / | awk 'NR==2{print $4}') -lt 100 ]; then echo "错误:根分区剩余空间不足100MB" exit 1 fi # 架构验证 case $(uname -m) in armv7l) echo "ARMv7架构兼容" ;; aarch64) echo "ARM64架构兼容" ;; *) echo "不支持的架构" && exit 1 ;; esac3.2 分步安装MosDNS v5.3.1
国内用户建议使用镜像源加速:
export GITHUB_MIRROR="https://ghproxy.com/"执行智能安装脚本:
wget ${GITHUB_MIRROR}https://raw.githubusercontent.com/sbwml/luci-app-mosdns/v5/install.sh chmod +x install.sh ./install.sh --skip-verify --cn-mirror安装后检查服务状态:
/etc/init.d/mosdns status # 预期输出:mosdns is running3.3 AdGuard Home的二进制部署
下载匹配架构的版本:
case $(uname -m) in x86_64) ARCH=amd64 ;; armv7l) ARCH=armv7 ;; aarch64) ARCH=arm64 ;; esac wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_${ARCH}.tar.gz tar xzvf AdGuardHome_*.tar.gz cd AdGuardHome配置系统服务:
cat > /etc/init.d/adguardhome <<EOF #!/bin/sh /etc/rc.common START=99 USE_PROCD=1 start_service() { procd_open_instance procd_set_param command /opt/AdGuardHome/AdGuardHome procd_set_param respawn procd_close_instance } EOF chmod +x /etc/init.d/adguardhome /etc/init.d/adguardhome enable /etc/init.d/adguardhome start4. 高级配置与联动方案
4.1 智能分流规则配置
MosDNS的推荐配置(/etc/mosdns/config.yaml):
plugins: - tag: main_server type: sequence args: - if: query_is_gfw_domain exec: forward_remote - exec: forward_local - tag: forward_local type: fast_forward args: upstream: - addr: 223.5.5.5 idle_timeout: 5 trusted: true - addr: 119.29.29.29 - tag: forward_remote type: fast_forward args: upstream: - addr: tls://8.8.4.4 idle_timeout: 10 enable_pipeline: true4.2 AdGuard Home过滤规则优化
在「过滤器」→「DNS封锁列表」中添加:
https://anti-ad.net/easylist.txt https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt性能调优参数:
- 查询日志保留时间:建议设为24小时
- 缓存大小:每100Mbps带宽对应100MB缓存
- 速率限制:家庭网络建议设为0(不限制)
4.3 联动工作流程
- 客户端请求到达AdGuard Home
- 广告域名直接返回NXDOMAIN
- 合法查询转发至MosDNS
- MosDNS根据规则选择本地或远程解析
- 结果缓存并返回客户端
graph TD A[客户端] --> B{AdGuard Home} B -->|广告域名| C[拦截响应] B -->|合法查询| D[MosDNS] D -->|国内域名| E[本地DNS] D -->|国际域名| F[DoH/TLS]5. 故障排查手册
5.1 服务无法启动
检查日志的快速命令:
journalctl -u mosdns -f --lines=50常见错误代码处理:
- EADDRINUSE:修改
/etc/mosdns/config.yaml中的监听端口 - EACCES:执行
setcap 'cap_net_bind_service=+ep' /usr/bin/mosdns - ENOSPC:清理日志
rm -f /var/log/mosdns.log
5.2 DNS泄漏测试
使用dig命令验证:
dig +short TXT whoami.ds.akahelp.net # 正确应返回AdGuard的IP5.3 性能瓶颈定位
安装诊断工具:
opkg install iftop bmon实时监控命令:
iftop -i br-lan -P -n -N关键指标阈值:
- 查询延迟 >100ms:检查上游DNS
- CPU使用率 >70%:减少过滤规则
- 内存占用 >80%:调低缓存大小
在树莓派4B上的实际测试中,这套组合能稳定处理800+设备的同时查询,平均延迟控制在15ms以内。最关键的优化点在于:MosDNS的缓存策略设置为aggressive,而AdGuard Home的过滤列表需要定期清理无效规则。
