CentOS 8 上搭建 AdGuard Home:自建去广告 DNS 服务器完整指南

前言

你是否厌倦了网页上无处不在的广告?是否希望在整个家庭网络中实现无广告的浏览体验?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

按照向导完成设置:

  1. 选择语言:简体中文。
  2. 设置管理界面端口:保持默认 <code>3000</code>,后续可通过 <code>http://IP:3000</code> 访问。
  3. 选择 DNS 监听接口:选择服务器的实际网卡(如 <code>eth0</code>、<code>ens33</code>),或选“所有接口”。
  4. 设置管理员账号和密码:这是登录 AdGuard Home 后台的凭据,请妥善保管。
  5. 选择黑名单:这一步可以先跳过,因为部分在线规则源可能超时导致无法保存。我们将在进入后台后手动添加。

完成向导后,你会看到 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)、开启家长控制等。希望这篇博客能帮助你轻松入门,打造属于自己的无广告网络。


参考链接