TL;DR:想拥有完全可控的私人DNS?你需要一台VPS、一个域名和一张TLS证书。用AdGuard Home官方脚本一键安装,在Web面板里配好上游DNS和加密协议(DoT端口853 / DoH端口443),就能让手机、电脑通过自己的域名连接私人DNS,全程广告拦截、防跟踪、零日志都由你说了算。
搭建私人DNS之前需要准备什么?
自建AdGuard Home不是装个软件就完事,你需要先备齐三样东西:
- 一台有公网IP的VPS:国内可选阿里云、腾讯云轻量服务器,海外可选Vultr、DigitalOcean等。最便宜的入门款就够跑AdGuard Home。如果你担心服务器账单失控,可以参考本站这篇阿里云2元/月服务器防天价账单。
- 一个域名:你需要一个域名来申请TLS证书,也是客户端连接私人DNS的地址。域名可以在Namesilo、阿里云、Cloudflare等平台注册,一年几十块钱。
- 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默认监听以下端口,你需要确保防火墙放通:
| 端口 | 协议 | 用途 |
|---|---|---|
| 53 | UDP/TCP | 明文DNS服务 |
| 3000 | TCP | Web管理面板(初始化阶段) |
| 80 | TCP | Web面板(可选,改完后建议关闭) |
| 853 | TCP/UDP | DNS-over-TLS / DNS-over-QUIC |
| 443 | TCP/UDP | DNS-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面板里开启加密
进入「设置 → 加密设置」:
- 勾选「启用加密协议」
- 服务器名称填你的域名,比如
dns.example.com - 证书路径填
fullchain.pem的完整路径 - 私钥路径填
privkey.pem的完整路径 - 确认端口:DoT默认853,DoH默认443
- 点击「保存」
保存后,AdGuard Home就会同时在853端口提供DoT服务、在443端口提供DoH服务。你可以用 openssl s_client -connect dns.example.com:853 测试连通性。
客户端怎么接入?安卓私人DNS填什么?
配好DoT之后,安卓手机就可以用系统自带的「私人DNS」功能连接你的自建服务器了:
- 打开安卓「设置 → 网络和互联网 → 私人DNS」
- 选择「指定私人DNS提供商」
- 输入你的域名,比如
dns.example.com - 保存
连上之后,你手机的所有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拦截广告的原理与局限。
参考来源
- AdGuard Home 官方GitHub仓库 - 安装说明 — 支撑官方安装脚本命令与Docker镜像信息
- AdGuard DNS知识库 - DNS加密配置 — 支撑DoT/DoH证书配置与端口说明
- AdGuard DNS知识库 - Docker部署 — 支撑Docker端口映射与部署参数
- AdGuard DNS知识库 - 入门指南 — 支撑安装端口要求与初始化流程