
🏅SmartDNS + AdGuard Home完整实战:防DNS泄露、自动更新规则和定时任务配置

🏅SmartDNS + AdGuard Home完整实战:防DNS泄露、自动更新规则和定时任务配置
开场 — 实践完结篇 + 三件套前置
1. 三件套前置与 script 脚本概览
视频是 SmartDNS 系列的最后一集,假设你已完成理论篇和环境搭建篇。所有运维脚本集中在 script/ 目录(可向 MMH 志愿者索取源码):
| 文件 | 作用 |
|---|---|
cleancache.sh |
重启 SmartDNS 前清除缓存 |
docker-compose.yml |
AdGuard Home + SmartDNS 容器定义 |
restart_adguardhome.sh |
定时重启 AdGuard(如每天 3:22) |
restart_smartdns.sh |
定时重启 SmartDNS(如每天 3:20) |
update_domestic_domainlist.sh |
从 GitHub 拉取国内域名列表 |
update_oversea_domainlist.sh |
从 GitHub 拉取被墙域名列表 |
smartdns.conf |
SmartDNS 分流与上游配置模板 |
script 文件夹 — 全套脚本概览
2. smartdns 工作目录与域名列表脚本
在 media/ 下创建 smartdns/,拷贝 restart 与 update 脚本。两个 update 脚本逻辑相同:
- 国内列表:GitHub 公开源 → 正则清洗 →
domestic_domainlist.conf - 海外列表:GFW 被墙域名 → 清洗 →
oversea_domainlist.conf
smartdns 工作目录与脚本拷贝
国内域名 update 脚本逻辑
海外被墙域名 update 脚本
3. restart 重启脚本
restart_smartdns.sh
执行顺序:更新国内 + 海外列表 → 重启 SmartDNS 容器 → 清除缓存 → 写日志。
restart_smartdns.sh 重启流程
restart_adguardhome.sh
与 SmartDNS 版类似,但只重启 AdGuard Home 容器,切换路径不同。
restart_adguardhome.sh
4. smartdns.conf 分流与上游配置
核心配置项:
| 配置 | 说明 |
|---|---|
| 监听端口 | Docker 映射 1053(UDP/TCP),conf 中需一致 |
| 国内上游 | 阿里 ×3 + 腾讯 ×2 + ISP + 114 = 8 台 |
| 海外上游 | Cloudflare + Google TLS 等 = 5 台 |
| 分流规则 | domestic 标签 → 国内组;oversea → 海外组 |
| 默认策略 | 不在列表中的域名 → 走海外 |
| 日志 | 生产用 info;演示用 debug |
smartdns.conf 分流策略配置
docker-compose 端口 1053 映射
国内 / 海外上游 DNS 服务器
domestic / oversea 分流规则
5. Docker Compose 部署与 dig 测试
cd media/script
docker compose up -d
docker ps # 确认 smartdns + adguardhome 运行中
docker compose up 启动双容器
SmartDNS 外部端口 1053,用 dig 验证分流:
# 国内域名 — 应走 domestic 组
dig @127.0.0.1 -p 1053 taobao.com
# 被墙域名 — 应走 oversea 组
dig @127.0.0.1 -p 1053 facebook.com
# 另开终端查看日志
docker logs smartdns
dig 测试淘宝 domestic 分流
6. AdGuard Home 安装
- 云防火墙放行 3000 端口(演示用;家内网部署无需公网暴露)
- 浏览器访问
http://VPS_IP:3000 - 初始化向导 → 创建管理员 → 进入仪表盘
防火墙放行 AdGuard 3000 端口
AdGuard Home 安装向导
7. AdGuard DNS 设置 — 防 DNS 泄露
核心步骤:
- 查 Docker 网络 IP:
docker network inspect media_dns-net - SmartDNS 通常为
172.19.0.2:1053 - AdGuard → 设置 → DNS 设置:上游填 SmartDNS 内网地址 + 端口 1053
- 删除所有默认后备 DNS(防泄露关键!)
- 后备 DNS 也指向 SmartDNS → 测试上游 → 应用
AdGuard DNS 上游 + 防泄露设置
8. 分流验证与 crontab 定时任务
在 AdGuard 查询日志搜索 facebook.com,应看到:AdGuard → SmartDNS → oversea 组 → 5 台海外上游 → 正确 IP。
Facebook oversea 分流验证
Linux 计划任务(crontab -e):
15 3 * * * /path/media/smartdns/update_domestic_domainlist.sh
15 3 * * * /path/media/smartdns/update_oversea_domainlist.sh
20 3 * * * /path/media/smartdns/restart_smartdns.sh
22 3 * * * /path/media/adguardhome/restart_adguardhome.sh
顺序:先更新列表 → 重启 SmartDNS → 重启 AdGuard。保存:ESC → Shift+ZZ。
crontab 定时任务配置
9. 生产环境调优
| 项 | 建议 |
|---|---|
| 平均响应时间 | 缓存充足后约 40–65ms |
| 上游显示 | 仪表盘应只有 1 个 SmartDNS 上游 |
| 日志保留 | 常规设置 → 日志和统计 → 1 天 |
| 广告黑名单 | 推荐 半条命 + ANTI-AD 两个 DNS 黑名单 |
FAQ
Q1:没看理论篇可以直接跟做吗?
A:建议先看 #76 理论篇 和 #75 环境篇,否则不理解「为什么要删后备 DNS」。
Q2:脚本源码哪里获取?
A:视频提到可向 MMH 志愿者索取完整 script/ 目录。
Q3:必须每天重启吗?
A:重启 + 更新列表可确保分流规则与缓存始终最新;时间可自定,建议凌晨低峰。
Q4:部署在家内网还是 VPS?
A:推荐家内网常开设备;视频用 VPS 演示,演示后会删除。
Q5:只搭 SmartDNS 不搭 AdGuard 行吗?
A:可以,但 AdGuard 提供广告过滤 + 图形界面;组合方案更完整。
Q6:如何确认没有 DNS 泄露?
A:AdGuard 上游和后备 DNS 全部指向 SmartDNS,删除所有公共 DNS;用 dnsleaktest.com 验证。
结语
完整链路:AdGuard Home(过滤 + 入口)→ SmartDNS(测速分流)→ 国内/海外上游 DNS。配合 crontab 自动更新域名列表,系统可长期稳定运行。
📺 完整视频: YouTube 实战篇(41 分钟)
📚 系列: #76 理论篇 · #75 环境篇 · 致新同学信
