给家庭网络配一个净化器!OESP轻NAS部署AdGuardHome打造广告过滤与隐私保护中心

在网络隐私日益受到重视的今天,搭建一个本地化的DNS服务器不仅能有效过滤广告、提升网页加载速度,还能保护家庭网络中所有设备的隐私安全。

Jony一直在提NAS对于现代家庭的必要性,今天就来介绍一个基于NAS部署的广告拦截与隐私保护程序 ADGuardHome。

作为一款开源的全网络广告和跟踪程序拦截软件,配合Docker容器化技术,它可以非常方便的为你创建一个安全的家庭网络环境,能自动拦截掉大部分广告和跟踪器,让你家电视看剧没广告、网页浏览更干净。

什么是AdGuardHome?

AdGuardHome是一个全网广告拦截与隐私保护中心,它能够:

  • 拦截广告和跟踪器:在全网络范围内拦截广告和隐私跟踪器,保护您的上网隐私
  • 家长控制功能:屏蔽成人内容,确保儿童安全上网
  • DNS加密服务:支持DNS-over-HTTPS(DoH)和DNS-over-TLS(DoT),提供安全的DNS查询
  • 数据分析:提供详细的DNS查询统计和分析报告
  • 自定义过滤规则:支持自定义域名过滤和重写规则

QQ_1756559627247.png

与浏览器插件不同,AdGuardHome在网络层级工作,能够保护网络中所有设备(包括智能手机、智能电视和IoT设备)的隐私安全。

如何部署安装AdGuardHome

AdGuardHome 有多种安装方式,Linux系统可以直接运行二进制文件,也可以通过Docker方式运行,推荐使用Docker运行,管理起来更方便。

一、准备工作

在开始部署前,请确保您的Armbian系统已满足以下条件:

  1. 已安装Docker和Docker Compose
  2. 具有sudo权限的用户账户
  3. 知道您的Armbian服务器设备的IP地址
  4. 检查NAS服务器53端口是否被占用

前三条是基础条件,这里就不详述了,需要重点关注一下第4条,ADGuard是基于DNS的拦截器,所以需要使用到标准DNS服务53端口 ,而很多Linux系统,默认53端口已经被系统自带的DNS服务systemd-resolved给占用了,这样ADGuard就没法使用标准53端口,导致安装时端口冲突或者类似其他面板类安装,自动修改端口导致ADGuard配置不生效。

如何解除systemd-resolved53端口占用详见文末扩展阅读部分。

二、使用1panel或casaos应用商店一键安装

对于成品NAS用户,想必各家的应用商店也都有这款著名的软件,直接安装就是。而使用各种ARM盒子搭建的Armbian轻NAS,也可以通过1panel面板或者casaos的应用商店一键安装。

QQ_1756532779927.png

点击安装后,需要设置端口映射,1panel会自动分配未使用的端口,但是注意这里普通DNS端口 是否为53,如果如下图是其他端口,那么回去检查准备工作第4步。确保53端口解除后,修改该处端口映射为53

QQ_1756533291539.png
容器名称可写可不写,需要勾选【端口外部访问】。

QQ_1756533821513.png

部署完成。

QQ_1756533905970.png

三、使用Docker Compose 部署

我们将使用Docker Compose来部署AdGuardHome,这是一种更易于管理和维护的方式。

创建部署目录和配置文件

首先创建一个专用目录来存储AdGuardHome的配置和数据文件:

1
2
3
mkdir -p /opt/DATA/adguardhome/conf
mkdir -p /opt/DATA/adguardhome/work
cd /opt/DATA/adguardhome

创建Docker Compose文件

创建docker-compose.yml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3'
services:
adguardhome:
image: adguard/adguardhome
container_name: adguardhome
restart: unless-stopped
volumes:
- /opt/DATA/adguardhome/work:/opt/adguardhome/work
- /opt/DATA/adguardhome/conf:/opt/adguardhome/conf
ports:
- "53:53/tcp" # DNS服务端口,用于替代路由器的DHCP功能
- "53:53/udp" # DNS服务端口,用于替代路由器的DHCP功能
- "67:67/udp" # DHCP服务端口 1,用于替代路由器的DHCP功能
- "68:68/tcp" # DHCP服务端口 2,用于替代路由器的DHCP功能
- "68:68/udp" # DHCP服务端口 2,用于替代路由器的DHCP功能
- "20080:80/tcp" # ADGuardHome服务网页端口,建议不要使用宿主机80端口
- "20443:443/tcp" # DOH服务端口,建议不要使用宿主机443端口
- "853:853/tcp" # DOT服务端口
- "3000:3000/tcp" # 初始设置网页端口
environment:
- TZ=Asia/Shanghai

部署并启动AdGuardHome

运行以下命令启动容器:

1
docker-compose up -d

如何配置AdGuardHome

容器启动后,可以通过浏览器访问AdGuardHome的Web管理界面进行初始配置。打开AdGuardHome初始化设置网页(例如:http://192.168.1.100:3000

QQ_1756534159746.png

按照安装向导完成初始设置,分别是:

  • 配置管理界面端口,即映射的容器内部80端口对应的宿主机端口,上例中1panel安装时设置的HTTP 网页端口23000,或创建docker compose时的20080端口。
  • 设置管理员用户名和密码。
  • 配置DNS服务器设置。

要让所有网络设备受益于AdGuardHome,有两种DNS配置方式:

第一种是直接在家庭主路由器中,设置DNS为ADGuardHome所在服务器的ip地址,推荐使用此方式,这样其他设备都不需要再额外做任何配置。

QQ_1756534631998.png

QQ_1756534770270.png

第二种是不设置主路由器DNS,而是在各个设备上分别设置DNS地址为ADGuardHome所在服务器的ip地址,以Windows为例:

QQ_1756539237220.png

其他设备可参考初始化设置页面第4步其他设备设置说明。


配置AdGuardHome功能

1. DNS设置优化

在【设置】 →【DNS设置】中,建议进行以下配置:
上游DNS服务器:添加多个可靠的DNS服务器,国内使用大厂的DNS比较快:

1
2
3
223.5.5.5 # 阿里DNS
119.29.29.29 # 腾讯DNS
tls://dns.pub # DNSPod DoT

QQ_1756537700525.png

Bootstrap DNS服务器:设置为您的运营商DNS或公共DNS,如 223.5.5.5

DNS缓存配置:根据您的设备内存大小调整缓存大小。小白也可以不改动。

填好可以点下面的测试上游,通过没有问题会有提示,每项填好记得点应用保存。

QQ_1756537997163.png

2. 配置过滤器

AdGuardHome的强大之处就在于其DNS过滤功能。在【过滤器】 →【DNS黑名单】中,可以添加多个过滤列表,推荐以下几个,配置两三条即可,不需要太多否则可能拉慢网速:

1
2
3
4
5
6
7
8
9
基础广告过滤:
-AdGuard DNS filter: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt

中文区广告过滤:
-EasyList China: https://easylist-downloads.adblockplus.org/easylistchina.txt
-Anti-AD: https://anti-ad.net/easylist.txt

隐私保护:
-AdGuard Tracking Protection: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/tracking.txt

可以手动自定义输入,也可以从列表中选择:

QQ_1756538247229.png

从列表中选择,拉到【区域】部分,找到两个CHN开头的,勾选即可。(注意这个地址是Github网站,github容易抽风,可能有时候会报错,可以等一等,或者找不是github.io地址的,如上代码块中中文区广告过滤地址)

QQ_1756538358480.png

3. 设置DNS重写规则

在”过滤器” → “DNS重写”中,您可以添加自定义域名解析规则,例如:

  • 将广告域名重定向到 0.0.0.0 实现屏蔽
  • 为本地网络设备设置自定义域名解析
  • 解决特定网站无法访问的问题

4. 自定义过滤规则

当你启用了过滤器黑名单,可能会导致有时候你希望看到的内容被拦截,或者有时候有的网站不在拦截黑名单而你希望拦截它,这时你就可以利用自定义过滤规则,单独解除或者阻止某些网站。

注意要严格按示例说明的格式来写,否则不生效。

QQ_1756538912658.png

踩坑与填坑

  1. 端口冲突问题:如果端口53、80或3000已被占用,可以修改Docker Compose文件中的端口映射或停止冲突服务,其他端口可以通过修改映射宿主机端口解决,53端口需要解除占用,否则影响ADGuardHome使用体验。
  2. DNS解析失败:检查上游DNS服务器设置是否正确,网络连接是否正常。
  3. 性能问题:如果设备资源有限,可以减少过滤规则数量或调整DNS缓存大小。
  4. 某些网站无法访问:检查过滤规则是否过于严格,尝试禁用部分规则或添加白名单。

扩展阅读

如何解除53端口占用?

使用sudo lsof -i :53命令查询53端口是否被占用:

1
2
3
4
OESP-Armbian:~:# sudo lsof -i :53                                               
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 765 systemd-resolve 13u IPv4 1470 0t0 UDP localhost:domain
systemd-r 765 systemd-resolve 14u IPv4 1471 0t0 TCP localhost:domain (LISTEN)

如果如上面显示,则表示被占用。
编辑/etc/systemd/seve.conf 文件,

QQ_1756544733252.png

取消DNS=DNSStubListener=yes 两处注释,并编辑内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# See resolved.conf(5) for details.

[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9: 9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
DNS=223.5.5.5 119.29.29.29 114.114.114.114
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=no-negative
#CacheFromLocalhost=no
DNSStubListener=no
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no

使用sudo systemctl restart systemd-resolved.service 重启服务解除53端口占用。

再次使用sudo lsof -i :53命令查询,如果没有内容输出,说明已经成功解除。

通过在NAS系统上部署AdGuardHome,您不仅获得了强大的全网广告拦截和隐私保护能力,还能通过集中管理提升家庭网络的安全性和性能。容器化部署使得安装、更新和备份变得简单可靠,即使系统出现问题也能快速恢复服务。

现在,享受一个更加清洁、快速和安全的网络环境吧!如果您在部署过程中遇到任何问题,欢迎在评论区留言讨论。