在 VPS 上部署 AdGuard Home 并将其用于 Android 9+ 的 “私人 DNS”(Private DNS)功能,核心关键在于启用 DNS-over-TLS (DoT)。Android 的原生私人 DNS 功能只支持 DoT 协议,而不支持 DoH(DNS-over-HTTPS)。

很多人关心的速度,目前放在美帝的 vps 上,

详细的步骤指南。


准备工作

  1. 一台 VPS: 建议使用 Ubuntu 20.04/22.04 或 Debian 11/12。
  2. 一个域名: 你需要拥有一个域名(例如 example.com),并为其设置一个子域名(例如 dns.example.com)。
  3. SSH 工具: 用于连接 VPS。


设置域名解析 (DNS Records)

在你的域名注册商(如 Cloudflare, GoDaddy, AliYun 等)后台,添加一条 A 记录

  • Type: A
  • Name: dns (即你的子域前缀)
  • Content: 你的VPS IP地址
  • Proxy status: 如果是用 Cloudflare,请关闭小云朵(仅 DNS,不代理),否则 SSL 证书申请和端口连接会出问题。


处理端口冲突 (Ubuntu/Debian 常见问题)

Ubuntu 系统默认的 systemd-resolved 会占用 53 端口,导致 AdGuard Home 无法启动 DNS 服务。我们需要先释放它。

  1. 停止并禁用 systemd-resolved:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

  1. 手动设置系统的 DNS(防止 VPS 没网):
    编辑 /etc/resolv.conf
sudo nano /etc/resolv.conf

将其内容改为(或者把原来的 nameserver 127.0.0.53 删掉,换成下面的):

nameserver 8.8.8.8
nameserver 1.1.1.1

Ctrl+O 保存,Ctrl+X 退出。


安装 AdGuard Home

AdGuard Home 官方提供了一键安装脚本,非常方便。

  1. 运行安装命令:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s - -v

  1. 放行防火墙端口:
    如果你的 VPS 有防火墙(如 UFW),需要放行以下端口:
  • 80/tcp (申请证书验证用)
  • 3000/tcp (初始安装向导)
  • 853/tcp (关键:Android 私人 DNS 专用端口)
  • 443/tcp (HTTPS/DoH)
  • 53/tcp+udp (普通 DNS)
# UFW 示例 sudo ufw allow 80/tcp
sudo ufw allow 3000/tcp
sudo ufw allow 853/tcp
sudo ufw allow 443/tcp
sudo ufw allow 53/tcp
sudo ufw allow 53/udp


初始化配置 AdGuard Home

  1. 打开浏览器,访问 http://你的VPS_IP:3000
  2. 点击 “开始配置”。
  3. 网页管理界面:建议端口保持 3000 或改为 8080不要设为 80,留给申请证书用)。
  4. DNS 服务器:端口必须是 53
  5. 设置管理员账号密码,完成配置。


申请 SSL 证书

为了使用 Android 的私人 DNS (DoT),必须有合法的 SSL 证书。我们将使用 certbot 来申请免费的 Let’s Encrypt 证书。

  1. 安装 Certbot:
sudo apt update
sudo apt install certbot -y

  1. 申请证书:
    (确保此时没有其他程序占用 80 端口)
# 请将 dns.example.com 替换为你真实的域名 sudo certbot certonly --standalone -d dns.example.com

如果成功,你会看到证书存放路径,通常在 /etc/letsencrypt/live/dns.example.com/ 下。

  • fullchain.pem (公钥 / 证书)
  • privkey.pem (私钥)


在 AdGuard Home 中启用加密

  1. 回到浏览器,访问 http://你的VPS_IP:3000 并登录。
  2. 点击顶部的 “设置” (Settings)“加密设置” (Encryption settings)
  3. 勾选 “启用加密” (Enable encryption)
  4. 服务器名称 (Server name):输入你的域名 dns.example.com
  5. HTTPS 自动重定向:如果你的管理面板不在 80/443,可不勾选。
  6. 证书部分
    AdGuard Home 可能没有权限直接读取 /etc/letsencrypt 目录。你可以选择以下两种方法之一:
  • 方法 A(直接粘贴内容,推荐新手):
    使用 cat 命令在 VPS 上查看文件内容,然后复制粘贴到网页框里。

  • 证书文件路径:运行 cat /etc/letsencrypt/live/dns.example.com/fullchain.pem,复制所有内容粘贴到 AGH 的 “证书” 框。

  • 私钥文件路径:运行 cat /etc/letsencrypt/live/dns.example.com/privkey.pem,复制所有内容粘贴到 AGH 的 “私钥” 框。

  • 方法 B(填写路径):
    直接填写路径 /etc/letsencrypt/live/dns.example.com/fullchain.pem/etc/letsencrypt/live/dns.example.com/privkey.pem。如果提示无权限,你需要修改证书目录权限(不推荐,安全性降低)或更改 AGH 的运行用户。

  1. 点击 “保存配置”


在 Android 手机上设置

现在服务端已经配置好了,接下来配置手机。

  1. 确保你的 Android 版本是 9 或更高。
  2. 打开 “设置”“网络和互联网” (或 “连接与共享”)。
  3. 找到 “私人 DNS” (Private DNS)
  4. 选择 “私人 DNS 提供商主机名” (Private DNS provider hostname)
  5. 输入你的域名:dns.example.com
  6. 点击保存。

验证成功:
如果下方没有出现 “无法连接” 的报错,且你能正常上网,说明配置成功!你可以回到 AdGuard Home 的后台 “仪表盘”,刷新一下,应该能看到来自你手机 IP 的 DNS 查询请求,且协议显示为 DoT


高级提示与避坑

  1. 关于公网 DNS 的风险
    将 DNS 开放到公网可能会被扫描并用于 DNS 放大攻击。AdGuard Home 允许你限制访问来源。
  • 设置 → DNS 设置 → 允许的客户端:如果不填,则允许所有。
  • 注意:手机在移动网络下 IP 是变动的,无法通过 IP 白名单限制。
  • 折中方案:不要把你的 dns.example.com 告诉别人,并在 AdGuard Home 中配置 “访问限制”,限制请求频率(Rate Limit),防止被滥用。
  1. 证书续期
    Let’s Encrypt 证书有效期 90 天。你需要设置自动续期。
    如果是用 --standalone 模式,续期时需要占用 80 端口。你可以写个简单的脚本放到 crontab 里:
certbot renew --pre-hook "systemctl stop adguardhome" --post-hook "systemctl start adguardhome" 

(注:如果你的 AGH 没占用 80 端口,不需要 stop/start,直接 certbot renew 即可)
3. 延迟问题
VPS 的物理距离决定了 DNS 解析的延迟。如果 VPS 在美国,你在国内使用,DNS 解析会有 150ms+ 的延迟,会感觉打开网页变慢。建议使用香港、日本或国内(需备案)的 VPS。


📌 转载信息
原作者:
justincnn
转载时间:
2026/1/1 20:29:49

标签: VPS, AdGuard Home, DNS-over-TLS, Android Private DNS, Let's Encrypt

添加新评论