Docker部署AdGuard Home,给整个局域网装上一堵“无广告”墙

在互联网的汪洋大海里冲浪,最烦人的不是风浪,而是无处不在的广告弹窗和恶意追踪器。每次打开网页,先被各种“恭喜中奖”、“首充特惠”糊一脸,体验感瞬间归零。今天,我们不聊那些需要复杂配置的软路由,也不谈价格昂贵的商业防火墙,咱们就用最轻量、最优雅的方式——在Docker里部署一个AdGuard Home,为你的整个家庭或办公室网络,装上第一道“净网”防线。

这篇文章,笔者将带你从零开始,手把手在服务器(或NAS)上通过Docker部署AdGuard Home。全程干货,没有废话,每一步都有对应的代码和解释,保证你看完就能自己动手。

为什么是AdGuard Home + Docker?

简单来说,这套组合拳解决了三个核心痛点:

  • 全局屏蔽: 传统的浏览器插件只能管住你电脑上的一个浏览器。AdGuard Home部署在网关层,家里所有连上Wi-Fi的设备——手机、平板、智能电视、甚至智能灯泡——都能自动享受去广告服务。
  • 隐私保护: 它能拦截那些偷偷收集你浏览数据的追踪器,让你的上网行为不再被“裸奔”。
  • 轻量运维: Docker化的部署方式意味着环境隔离、一键启动、秒级更新。无论你的宿主机是Ubuntu、CentOS还是群晖,操作逻辑完全一致,学习成本极低。

准备工作:你需要什么?

别担心,门槛很低。你只需要满足以下三个条件:

  • 一台服务器或NAS: 可以是云服务器(推荐1核2G起步),也可以是家里的树莓派、旧电脑。系统建议使用Debian/Ubuntu或CentOS 7+。如果你还没有服务器,强烈建议选择靠谱的云服务商,比如阿里云、腾讯云或华为云。一台低配的轻量云服务器一年也就几百块,但能换来全家无广告的清爽体验,这笔投资很值得。
  • Docker环境: 确保已经安装了Docker和Docker Compose。如果还没装,可以执行以下命令快速安装:
    curl -fsSL https://get.docker.com | bash -s docker
    sudo systemctl enable docker && sudo systemctl start docker
  • 一个清醒的头脑: 懂得基本的Linux命令,比如cd、mkdir、vim/nano。

实战部署:一步步来

我们采用Docker Compose的方式部署,这样管理和升级都更方便。

第一步:创建目录结构

首先,我们需要一个干净的目录来存放AdGuard Home的配置和数据。在宿主机上执行:

mkdir -p /opt/adguard/work
mkdir -p /opt/adguard/conf
cd /opt/adguard

这里有两个关键目录:work存放AdGuard Home的运行数据(比如日志、过滤规则缓存),conf存放配置文件。把它们映射到宿主机,方便我们后期备份和恢复。

第二步:编写docker-compose.yml

/opt/adguard目录下,创建一个名为docker-compose.yml的文件:

version: "3.8"
services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "3000:3000/tcp"
      - "80:80/tcp"
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    environment:
      - TZ=Asia/Shanghai
    cap_add:
      - NET_ADMIN

⚠️ 几个关键点解释:

  • 端口映射: 53端口是DNS服务的核心,必须映射。如果宿主机本身已经跑了DNS服务(比如systemd-resolved),可能会冲突。我们稍后会处理。 3000是初始配置页面的端口,80是AdGuard Home管理界面的端口(你也可以改成其他端口,比如8080:80,避免与宿主机Web服务冲突)。
  • cap_add: NET_ADMIN:授予容器网络管理权限,这是AdGuard Home某些高级功能(比如DHCP服务器)所必需的。

第三步:启动容器并完成初始化

/opt/adguard目录下执行:

docker-compose up -d

等待几秒,容器启动后,打开浏览器访问 http://你的服务器IP:3000。你会看到AdGuard Home的初始化向导。

按照向导提示设置:

  • 设置Web管理界面的监听端口(默认80,如果冲突可以改成8080)。
  • 设置DNS监听端口(默认53)。
  • 设置一个管理员用户名和密码。

完成后,页面会自动跳转到 http://你的服务器IP:80(或你设置的其他端口),用刚才的账号密码登录。

第四步:解决端口冲突(重要!)

很多Linux系统默认的systemd-resolved服务会占用53端口。如果你启动容器时提示端口被占用,需要先停掉它:

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

然后修改/etc/resolv.conf,把DNS指向一个公共DNS(如114.114.114.114)或直接指向AdGuard Home的IP:

sudo nano /etc/resolv.conf
# 内容改为:
nameserver 114.114.114.114

注意: 这一步操作后,你的服务器自身的DNS解析将依赖你设置的公共DNS,而不是AdGuard Home。如果你希望服务器本身也走AdGuard Home过滤,可以在/etc/resolv.conf里填写127.0.0.1,但需要确保容器网络模式为host,或者做更复杂的网络配置。对于新手,建议先让服务器走公共DNS,客户端设备走AdGuard Home。

配置与优化:让屏蔽效果最大化

部署只是开始,真正的威力在于配置。

添加DNS过滤规则

登录管理界面后,点击左侧菜单的“过滤器” -> “DNS黑名单”。AdGuard Home内置了一些规则列表,建议全部勾选。此外,推荐添加几个第三方知名规则:

  • Anti-AD: 国内用户的神器,针对国内App和网站广告优化。添加地址:https://anti-ad.net/easylist.txt
  • AdGuard DNS filter: AdGuard官方维护的通用规则。

添加后,点击“检查更新”并“应用”。

设置上游DNS

在“设置” -> “DNS设置”中,上游DNS服务器建议填写多个,保证解析速度和可靠性:

类型 地址
国内首选 https://dns.alidns.com/dns-query
国内备用 https://doh.pub/dns-query
海外备用 https://dns.google/dns-query

同时,勾选“并行请求”,让AdGuard Home同时向多个上游DNS发起查询,取最快的结果返回,提升速度。

如何让全家设备生效?

AdGuard Home部署好了,怎么让家里的手机、电脑都用上它?两种主流方式:

  • 手动修改设备DNS: 最直接,但每台设备都要改。在设备的网络设置中,把DNS改为你服务器IP。
  • 修改路由器DNS: 一劳永逸的方法。登录你的路由器后台,在“DHCP服务器”设置中,把默认DNS改为你服务器的IP。这样所有通过路由器获取IP的设备,都会自动使用AdGuard Home进行DNS解析。

笔者强烈推荐第二种方式。只要路由器设置一次,全家所有设备(包括新加入的访客手机)都会自动享受去广告服务。

进阶技巧:查询日志与监控

AdGuard Home最迷人的地方在于它的“查询日志”。登录后台,点击“查询日志”,你可以看到每一台设备的每一次DNS请求。哪些App在偷偷联网、哪些程序在疯狂请求广告域名,一目了然。你可以直接点击“屏蔽”按钮,把不想看到的域名加入黑名单,实现定制化过滤。

此外,仪表盘上的“处理时间”和“缓存命中率”能帮你判断AdGuard Home的性能表现。如果发现处理时间变长,可以尝试增加缓存大小(在“DNS设置”中调整)。

写在最后:一些掏心窝的建议

AdGuard Home不是万能的。它主要屏蔽的是DNS层面的广告,对于视频App内嵌的广告(比如优酷、爱奇艺的片头广告)效果有限(因为那些广告域名和视频内容域名是同一个)。但它能帮你屏蔽掉90%的网页广告、App开屏广告和恶意追踪器,带来的体验提升是立竿见影的。

最后提醒两点:

  • 如果你用的是云服务器,务必在云服务商的安全组/防火墙中,只开放必要的端口(比如80、53、3000),不要暴露其他高危端口。
  • 定期备份/opt/adguard/conf目录,那是你的配置文件。万一容器挂了,重新部署后导入配置,一切恢复原样。

好了,去享受一个没有广告骚扰的互联网世界吧。如果你在部署中遇到任何问题,欢迎在评论区留言交流。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部