Unbound + AdGuard Home + SmartDNS 三剑客部署指南
前言
在企业内网环境中,DNS服务面临着多重挑战:DNS劫持与污染、广告与恶意域名泛滥、国内外访问速度不均衡等。单一的DNS解决方案往往难以兼顾安全、体验与可管理性。
本文将介绍一套三合一的企业级DNS部署方案——Unbound + AdGuard Home + SmartDNS,通过三个开源组件的有机组合,打造一个兼具安全验证、广告过滤、智能分流能力的DNS基础设施。
方案概述
这套方案的核心思想是“各司其职,链路协作”。三个组件各自承担明确的职责,形成一条完整的DNS处理链:
数据流向

标准的企业部署位置
在企业内网中,理想的部署架构如下(以典型的三层架构为例)

为什么选择这个组合?
架构设计与端口规划
为了避免端口冲突,所有组件部署在同一台Linux服务器上,采用非标准端口错开服务:
环境要求
操作系统:Ubuntu 22.04 / Debian 11+ / CentOS 7+
硬件建议:2核CPU / 2GB内存 / 20GB磁盘(视内网规模调整)
网络:静态内网IP,防火墙放行相应端口
第一步:部署 Unbound
Unbound 是一个高性能的递归DNS解析器,支持DNSSEC验证,是本方案的安全基石(安全验证层)。
1.1更换系统apt源(以debain为例)
编辑sources.list文件
nano /etc/apt/sources.list
注释掉或删除CD-ROM行
#deb cdrom:[Debian GNU/Linux 12.6.0 Bookworm ...] bookworm main
添加Debian网络源(国内镜像/清华或阿里源)
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
#
deb https://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
按
Ctrl+X按
Y确认保存按
Enter退出
1.2 安装 Unbound
Ubuntu/Debian:
sudo apt update
sudo apt install unbound -y
CentOS/RHEL:
sudo yum install epel-release -y
sudo yum install unbound -y
1.3 配置 Unbound
编辑配置文件 /etc/unbound/unbound.conf:
server:
# 监听所有接口,端口设为 5335(避免与AGH抢占53端口)
interface: 0.0.0.0
port: 5335
# 访问控制:允许本机及内网网段查询
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/16 allow # 根据实际网段修改
access-control: 10.0.0.0/8 allow
# 安全加固
hide-identity: yes
hide-version: yes
use-caps-for-id: yes
# 性能优化:缓存预取
prefetch: yes
prefetch-key: yes
# 开启DNSSEC验证(自动信任锚)
auto-trust-anchor-file: "/var/lib/unbound/root.key"
val-permissive-mode: no
# 缓存大小(单位:字节,4MB)
msg-cache-size: 4m
rrset-cache-size: 8m
# 递归超时设置
outgoing-range: 4096
num-threads: 2
# 转发区域配置(可选):
# 如果不希望Unbound做完整递归,可以配置转发到公共DNS
# forward-zone:
# name: "."
# forward-tls-upstream: yes
# forward-addr: 1.1.1.1@853
生成 DNSSEC 信任锚并启动
# 生成root.key(首次启动会自动生成,也可手动)
sudo unbound-anchor -a /var/lib/unbound/root.key
# 启动并设置开机自启
sudo systemctl enable unbound
sudo systemctl restart unbound
# 验证服务状态
sudo systemctl status unbound
1.4 验证 Unbound
# 本地测试查询
dig @127.0.0.1 -p 5335 www.baidu.com
*如返回正确的IP地址,说明Unbound部署成功。

第二步:部署 SmartDNS
*SmartDNS 是一个智能DNS转发器,支持测速优选和国内外分流。
*更加具体的详细的smartDNS安装配置可以跳转连接 >>>SmartDNS智能解析<<< 查看配置
2.1 安装 SmartDNS
Ubuntu/Debian:
sudo apt install smartdns -y
*注意:如果官方源没有,可以从 SmartDNS GitHub Releases 下载 .deb 包手动安装。
2.2 配置 SmartDNS
# ===== 基础监听配置 =====
# 监听端口,接收来自AGH的请求
bind :6053
# ===== 上游 DNS 服务器 =====
# 核心:指向本机的 Unbound 服务
server 127.0.0.1:5335
# 可选:添加备用上游(Unbound宕机时兜底)
# server 223.5.5.5 # 阿里DNS
# server 119.29.29.29 # 腾讯DNS
# ===== 性能优化 =====
# 缓存大小(条数)
cache-size 16384
# 测速模式:同时使用ping和TCP 80端口
speed-check-mode ping,tcp:80
# 域名预加载
prefetch-domain yes
# 响应超时(秒)
response-timeout 3
# ===== 日志(可选) =====
# 日志级别:info / debug
# log-level info
2.3 启动 SmartDNS
sudo systemctl enable smartdns
sudo systemctl restart smartdns
# 查看状态
sudo systemctl status smartdns
2.4 验证 SmartDNS
# 通过SmartDNS查询
dig @127.0.0.1 -p 6053 www.baidu.com
显示下图,即成功

第三步:部署 AdGuard Home
AdGuard Home 提供广告过滤、恶意域名拦截和可视化查询日志功能。
3.1 安装 AdGuard Home
使用官方一键脚本安装:
curl -s -S -L https://raw.githubusercontent.com/
AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
3.2 释放系统 53 端口
系统默认的 systemd-resolved 会占用53端口,需要先停用:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# 修改系统DNS配置(让服务器自身能正常解析)
sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
3.3 Web 初始化配置
通过浏览器访问 http://<你的服务器IP>:3000 进入初始化向导。并设置管理员用户名和密码。





设置Web管理端口:3000(默认即可)。
设置DNS服务端口:务必设置为 53。

3.4 配置上游 DNS 服务器
登录 AGH 管理后台,进入 设置 → DNS 设置:
点击 测试上游 验证连通性,确认无误后保存。

3.5 添加广告拦截规则
在 过滤器 → DNS 拦截列表 中添加规则:
推荐规则源:
AdGuard 官方规则:
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txtEasyList China:
https://easylist-downloads.adblockplus.org/easylistchina.txt乘风广告过滤:
https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt

3.6 启动 AdGuard Home
sudo systemctl enable AdGuardHome
sudo systemctl restart AdGuardHome
第四步:打通企业完整链路
逐层测试,确保每一级都能正常转发:
# 1. 测试 Unbound(最底层)
dig @127.0.0.1 -p 5335 www.baidu.com
# 2. 测试 SmartDNS(中间层)
dig @127.0.0.1 -p 6053 www.baidu.com
# 3. 测试 AdGuard Home(最外层)
dig @127.0.0.1 -p 53 www.baidu.com
注意:如果三层都返回正确的解析结果,说明整个DNS链已经打通。
4.2 检查 AGH 查询日志
登录 AGH Web 管理界面,进入 查询日志,应该能看到来自客户端的查询记录。
第五步:客户端接入配置
方案A:DHCP统一配置(推荐)
在公司路由器或核心交换机的DHCP服务中,将 首选 DNS 服务器 设置为部署了本方案的Linux服务器IP。
华为交换机示例:
dns-list <你的Linux服务器IP>
OpenWrt示例:
网络 → DHCP/DNS → 基本设置 → DNS转发:填写 <你的Linux服务器IP>#53
方案B:手动配置(测试/临时)
Windows:网络设置 → 手动DNS → 填入服务器IP
macOS:系统偏好设置 → 网络 → DNS → 添加服务器IP
Linux:修改 /etc/resolv.conf,添加 nameserver <服务器IP>
验证与测试
广告过滤测试
访问测试页面 AdBlock Test Page,页面会显示广告拦截率。
安全防护测试
尝试访问一个已知恶意域名(或使用 nslookup 查询),验证是否被拦截。
速度体验
分别使用公共DNS和本方案DNS访问国内外网站,感受速度差异。


常见问题与解决方案
问题1:53端口被占用
现象:AdGuard Home启动失败,提示端口被占用。
解决:
# 查看占用端口的进程
sudo lsof -i :53
# 停止 systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
问题2:内网域名无法解析
现象:公司内部域名(如 erp.company.local)解析失败。
解决:在 AdGuard Home 的 设置 → DNS 设置 → 私有反向 DNS 服务器 中,添加内网DNS服务器的转发规则。
问题3:防火墙拦截
现象:客户端无法查询,AGH日志无记录。
解决:确保Linux服务器防火墙放行相关端口:
# Ubuntu (ufw)
sudo ufw allow 53/udp
sudo ufw allow 53/tcp
sudo ufw allow 3000/tcp
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
问题4:SmartDNS 无法启动
现象:systemctl status smartdns 显示失败。
解决:查看日志定位具体错误:
sudo tail -f /var/log/smartdns/smartdns.log
总结
通过 Unbound + AdGuard Home + SmartDNS 三者的组合,实现了:
这套方案不仅提升了企业内网的DNS安全水位,还显著改善了用户的访问体验,同时提供了友好的管理界面,是中小型企业DNS基础设施建设的优秀实践。
本文档为技术实践分享,具体配置请根据实际网络环境调整。