前言
你是否厌倦了网页上无处不在的广告?是否希望在整个家庭网络中实现无广告的浏览体验?AdGuard Home 是一个开源、功能强大的 DNS 服务器,它可以在网络层面拦截广告和跟踪域名,支持 Web 管理界面、自动更新过滤规则,并且完全可以在自己的服务器上部署。
本文将手把手教你如何在 CentOS 8 上搭建 AdGuard Home,并详细介绍其配置与使用方法。无论你是新手还是有一定经验的运维人员,都能从中找到可落地的步骤。
环境准备
- 一台安装 CentOS 8 的服务器(物理机或虚拟机均可)
- 拥有 root 权限或 sudo 权限
- 服务器可以访问互联网
- 一个局域网,便于后续将 DNS 指向这台服务器
首先,更新系统并安装必要工具:
sudo dnf update -y
sudo dnf install -y curl wget tar
处理 53 端口冲突
CentOS 8 默认可能启用了 <code>systemd-resolved</code>,它会占用 53 端口,导致 AdGuard Home 无法启动。先检查:
sudo ss -tulnp | grep :53
如果看到 <code>systemd-resolved</code> 或 <code>127.0.0.53:53</code>,请停用并禁用它:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
然后重新配置本机 DNS,避免系统自身无法解析域名:
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
注意:如果服务器使用静态 IP,建议将 <code>1.1.1.1</code> 替换为你的上游 DNS,如 <code>8.8.8.8</code> 或运营商 DNS。
安装 AdGuard Home
方法一:官方一键脚本(推荐)
AdGuard Home 官方提供了安装脚本,可以自动检测系统架构并完成安装:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
如果 <code>curl</code> 下载缓慢,也可以使用 <code>wget</code>:
wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
安装完成后,脚本会提示你使用以下命令管理服务:
sudo /opt/AdGuardHome/AdGuardHome -s install # 注册为系统服务
sudo /opt/AdGuardHome/AdGuardHome -s start # 启动服务
sudo /opt/AdGuardHome/AdGuardHome -s status # 查看状态
方法二:手动下载二进制包
访问 AdGuard Home Releases 下载对应架构的压缩包,然后:
tar -zxvf AdGuardHome_linux_amd64.tar.gz
cd AdGuardHome
sudo ./AdGuardHome -s install
sudo systemctl start AdGuardHome
sudo systemctl enable AdGuardHome
防火墙配置
AdGuard Home 需要用到以下端口:
- 53/tcp 和 53/udp:提供 DNS 服务
- 3000/tcp:初始 Web 配置界面(配置完成后可关闭)
在 CentOS 8 上执行:
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload
初始配置
在浏览器中访问:
http://你的服务器IP:3000
按照向导完成设置:
- 选择语言:简体中文。
- 设置管理界面端口:保持默认 <code>3000</code>,后续可通过 <code>http://IP:3000</code> 访问。
- 选择 DNS 监听接口:选择服务器的实际网卡(如 <code>eth0</code>、<code>ens33</code>),或选“所有接口”。
- 设置管理员账号和密码:这是登录 AdGuard Home 后台的凭据,请妥善保管。
- 选择黑名单:这一步可以先跳过,因为部分在线规则源可能超时导致无法保存。我们将在进入后台后手动添加。
完成向导后,你会看到 AdGuard Home 的仪表盘。
添加广告过滤规则
进入后台,点击 过滤器 → DNS 阻止列表,点击“添加阻止列表”,填入以下经过验证的规则 URL(任选其一或多个):
推荐规则源
-
anti-AD(中文广告过滤,更新及时)
https://anti-ad.net/adguard.txt -
AdGuard 官方 DNS 过滤器
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt -
1Hosts Lite(轻量级)
https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt如果 GitHub 访问不稳定,可使用加速镜像:
https://ghproxy.net/https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt
添加后,AdGuard Home 会自动下载并解析规则。如果某个源超时,换下一个即可。你可以在列表页面点击“检查更新”手动刷新。
常见问题:无法保存黑名单
如果你在初始向导或后台添加规则时遇到类似 <code>Error: control/filtering/add_url | ... 524: A timeout occurred</code> 的错误,说明该规则源服务器暂时不可用(通常是 Cloudflare 524 超时)。解决办法是跳过该源,更换其他可用规则源。
使用与验证
1. 在本机测试 DNS
nslookup example.com 你的服务器IP
如果返回正常解析结果,说明 DNS 服务已在 53 端口工作。
2. 将局域网设备指向 AdGuard Home
- 单设备:在网络设置中,将 DNS 服务器改为 CentOS 8 服务器的 IP。
- 全网络:登录路由器管理后台,将 DHCP 下发的 DNS 服务器改为该 IP。
这样,所有经过这台 AdGuard Home 的 DNS 查询都会被过滤,广告域名将无法解析。
3. 查看拦截效果
在 AdGuard Home 仪表盘上,你可以实时看到查询总数、被拦截的域名、拦截比例等统计信息。点击 查询日志 可以查看具体请求。
常见问题与解决
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 服务无法启动 | 53 端口被 <code>systemd-resolved</code> 占用 | 停用并禁用 <code>systemd-resolved</code>,重建 <code>/etc/resolv.conf</code> |
| 添加黑名单失败,提示 524 | 规则源服务器超时 | 更换其他规则源,或稍后重试 |
| Web 界面无法访问 | 防火墙未放行 3000 端口 | 执行 <code>firewall-cmd</code> 放行端口 |
| 客户端无法解析域名 | 客户端 DNS 未指向 AdGuard Home | 检查客户端或路由器的 DNS 设置 |
| 想修改管理端口 | 默认 3000 不习惯 | 在 <code>AdGuardHome.yaml</code> 中修改 <code>http.address</code>,或重新运行向导 |
总结
通过本文的步骤,你已经成功在 CentOS 8 上搭建了一个功能完整的 AdGuard Home DNS 服务器。它不仅能够过滤广告和跟踪域名,还提供了直观的 Web 管理界面和自动更新的过滤规则。将局域网设备的 DNS 指向它,即可享受干净、安全的网络环境。
AdGuard Home 的配置非常灵活,你可以根据自己的需求添加更多规则列表、设置上游 DNS(如 DoH/DoT)、开启家长控制等。希望这篇博客能帮助你轻松入门,打造属于自己的无广告网络。
参考链接