自建AdGuard Home教程:搭建属于自己的私人DNS服务器

自建AdGuard Home教程:搭建属于自己的私人DNS服务器

234
234
2026-10-01 / 0 评论 / 2 阅读 / 4293 字 / 正在检测是否收录...
TL;DR:想拥有完全可控的私人DNS?你需要一台VPS、一个域名和一张TLS证书。用AdGuard Home官方脚本一键安装,在Web面板里配好上游DNS和加密协议(DoT端口853 / DoH端口443),就能让手机、电脑通过自己的域名连接私人DNS,全程广告拦截、防跟踪、零日志都由你说了算。

搭建私人DNS之前需要准备什么?

自建AdGuard Home不是装个软件就完事,你需要先备齐三样东西:

  1. 一台有公网IP的VPS:国内可选阿里云、腾讯云轻量服务器,海外可选Vultr、DigitalOcean等。最便宜的入门款就够跑AdGuard Home。如果你担心服务器账单失控,可以参考本站这篇阿里云2元/月服务器防天价账单。
  2. 一个域名:你需要一个域名来申请TLS证书,也是客户端连接私人DNS的地址。域名可以在Namesilo、阿里云、Cloudflare等平台注册,一年几十块钱。
  3. TLS证书:DoT和DoH都基于TLS加密,必须要有证书。推荐用Let's Encrypt免费申请,配合certbot自动续期。

如果你刚买了一台轻量服务器不知道怎么初始化,本站有一篇Alpine轻量服务器初始化清单可以参考,里面涵盖了系统更新、防火墙、SSH加固等基础步骤。

方法一:用官方脚本一键安装AdGuard Home

AdGuard Team官方提供了一键安装脚本,支持绝大多数Linux发行版。以root身份执行以下命令:

wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

如果你用的是FreeBSD或其他带fetch工具的系统,可以换成:

fetch -o - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

脚本会自动下载最新版AdGuard Home二进制文件、创建系统服务并启动安装向导。安装完成后,AdGuard Home会作为系统服务自动运行。

方法二:用Docker部署(适合已有Docker环境的用户)

官方也提供了Docker镜像 adguard/adguardhome。如果你更习惯容器化部署,可以用这条命令启动:

docker run -d \
  --name adguardhome \
  --restart unless-stopped \
  -v /your/host/workdir:/opt/adguardhome/work \
  -v /your/host/confdir:/opt/adguardhome/conf \
  -p 53:53/tcp -p 53:53/udp \
  -p 80:80/tcp \
  -p 443:443/tcp -p 443:443/udp \
  -p 853:853/tcp -p 853:853/udp \
  -p 3000:3000/tcp \
  adguard/adguardhome:latest

注意:Docker安装的AdGuard Home不会自动更新,需要你手动拉取新镜像并重启容器。这一点和脚本安装版不同,脚本版支持自动检测更新。

安装后第一次配置:打开Web管理面板

安装完成后,打开浏览器访问 http://你的服务器IP:3000,进入初始化设置向导。

第一步:创建管理员账号

设置用户名和密码,这是登录Web管理面板的凭据,务必用强密码。

第二步:设置监听端口

AdGuard Home默认监听以下端口,你需要确保防火墙放通:

端口协议用途
53UDP/TCP明文DNS服务
3000TCPWeb管理面板(初始化阶段)
80TCPWeb面板(可选,改完后建议关闭)
853TCP/UDPDNS-over-TLS / DNS-over-QUIC
443TCP/UDPDNS-over-HTTPS

第三步:配置上游DNS

在「设置 → DNS设置」里,填上上游DNS服务器地址。推荐用加密的公共DNS作为上游,比如:

  • https://dns.cloudflare.com/dns-query(Cloudflare 1.1.1.1 DoH)
  • https://dns.google/dns-query(Google Public DNS DoH)
  • tls://dns.adguard-dns.com(AdGuard DNS DoT)

这样你的AdGuard Home → 上游DNS这一段也是加密的,整条链路更安全。

启用DoT和DoH:让客户端用加密方式连你的私人DNS

这一步是自建私人DNS的核心——只有开了加密协议,手机才能在系统「私人DNS」设置里填你的域名。

1. 先准备好TLS证书

用certbot从Let's Encrypt申请一张免费证书。假设你的域名是 dns.example.com,证书文件通常在:

  • 证书文件:/etc/letsencrypt/live/dns.example.com/fullchain.pem
  • 私钥文件:/etc/letsencrypt/live/dns.example.com/privkey.pem

2. 在AdGuard Home面板里开启加密

进入「设置 → 加密设置」:

  1. 勾选「启用加密协议」
  2. 服务器名称填你的域名,比如 dns.example.com
  3. 证书路径填 fullchain.pem 的完整路径
  4. 私钥路径填 privkey.pem 的完整路径
  5. 确认端口:DoT默认853,DoH默认443
  6. 点击「保存」

保存后,AdGuard Home就会同时在853端口提供DoT服务、在443端口提供DoH服务。你可以用 openssl s_client -connect dns.example.com:853 测试连通性。

客户端怎么接入?安卓私人DNS填什么?

配好DoT之后,安卓手机就可以用系统自带的「私人DNS」功能连接你的自建服务器了:

  1. 打开安卓「设置 → 网络和互联网 → 私人DNS」
  2. 选择「指定私人DNS提供商」
  3. 输入你的域名,比如 dns.example.com
  4. 保存

连上之后,你手机的所有DNS查询都会通过TLS加密发到你自己的AdGuard Home,再由它去查询上游。

不同品牌手机的设置入口略有差异,本站整理了全系列的私人DNS设置教程合集,小米、华为、OPPO、vivo、三星、iPhone各机型都有对应的图文步骤。

自建之后你需要承担的维护责任

自建私人DNS不是一劳永逸的,你需要对自己的服务器负责:

  • 软件更新:AdGuard Home会持续更新功能和修复漏洞,记得定期更新。脚本安装版可以在Web面板首页看到更新提示。
  • 证书续期:Let's Encrypt证书有效期90天,务必配置certbot自动续期(certbot renew --dry-run 测试一下)。证书过期后DoT/DoH会直接断连。
  • 安全加固:Web管理面板不要暴露在公网随便让人访问,建议改默认端口、加IP白名单,或者只通过SSH隧道访问。
  • 上游DNS稳定性:如果上游DNS挂了,你的私人DNS也会跟着挂。建议配置多个上游做故障转移。

常见问题

Q:自建私人DNS和直接用公共加密DNS有什么区别?
A:最大的区别是「控制权」。自建的话,过滤规则你自己选、查询日志你自己管、用不用零日志由你定。公共加密DNS方便但依赖服务商的信誉。

Q:我的VPS只有几十M带宽,跑AdGuard Home够吗?
A:DNS查询的数据量非常小,即使是入门款VPS也能轻松带得动几个人日常使用。真正吃带宽的是网页浏览和视频,不是DNS。

Q:为什么我开了私人DNS还是能看到广告?
A:DNS层面的广告过滤只能拦截「域名级」的广告请求。网页内嵌的JS广告、视频贴片广告是和正文同域名下发的,DNS层拦不住。想深入了解可以看这篇用私人DNS拦截广告的原理与局限。

参考来源

  1. AdGuard Home 官方GitHub仓库 - 安装说明 — 支撑官方安装脚本命令与Docker镜像信息
  2. AdGuard DNS知识库 - DNS加密配置 — 支撑DoT/DoH证书配置与端口说明
  3. AdGuard DNS知识库 - Docker部署 — 支撑Docker端口映射与部署参数
  4. AdGuard DNS知识库 - 入门指南 — 支撑安装端口要求与初始化流程
0个赞
取消