搭建私有 DNS 服务器,实现去广告、防污染和加密查询,全面掌控域名解析过程,提升网络安全与隐私。本指南将主讲 AdGuard Home 的部署与配置,并带您玩转高级缓存与加密转发技术。
📚 DNS 基础知识
DNS (Domain Name System),即域名系统,是互联网的“电话簿”。它负责将人类易于记忆的域名(如 google.com)翻译成机器能够理解的 IP 地址(如 172.217.160.142)。
每次您访问网站时,您的设备都会先向一个 DNS 服务器查询该网站的 IP 地址,然后再通过 IP 地址与网站服务器建立连接。您使用的 DNS 服务器的优劣,直接决定了您的网络体验的安全性、隐私性和速度。
🚀 为何自建 DNS 服务器
虽然您的 ISP 或路由器已经提供了默认的 DNS 服务,但自建 DNS 服务器能带来革命性的体验提升。
拦截广告与跟踪
从源头过滤广告域名,保护所有接入设备的网络环境,提升浏览体验。
增强隐私与安全
防止 ISP 或公共 DNS 记录您的浏览历史,通过加密查询(DoH/DoT)防止 DNS 污染和中间人攻击。
自定义解析规则
强制重定向特定域名,或为内网服务设置友好域名,完全掌控网络访问。
提升解析速度
利用本地缓存加速重复请求的解析速度,并可选用全球最快的上游 DNS 服务。
🤔 DNS 方案选择
在 VPS 上搭建 DNS 服务,我们有多种成熟的方案可选。
AdGuard Home
功能强大且界面友好的网络广告拦截器。它提供了 Web 管理面板,配置简单,集成了广告过滤、加密 DNS、家长控制等丰富功能,是新手的最佳选择。
CoreDNS
一个用 Go 语言编写的、插件化的、灵活的 DNS 服务器。通过编辑配置文件驱动,没有 Web 界面,但扩展性极强,适合需要高度定制化规则的高级用户。
BIND9
历史最悠久、应用最广泛的 DNS 软件。功能极其强大和稳定,是搭建权威 DNS 服务器的行业标准,但配置相对复杂,不适合新手。
🔐 进阶:加密 DNS 协议对比
传统的 DNS 查询 (端口 53) 是明文传输的,任何网络中间人(如您的宽带运营商 ISP 或公共 WiFi 提供商)都能知道您访问了哪些网站。为了防泄漏和防劫持(DNS污染),现代 DNS 引入了加密协议:
| 协议 | 全称 | 端口 | 特点与伪装性 |
|---|---|---|---|
| DoT | DNS over TLS | 853 | 使用专门的端口加密。速度较快,但因为端口固定,很容易被网络管理员发现并在防火墙上被直接封锁。 |
| DoH | DNS over HTTPS | 443 | 将 DNS 查询包装成普通的网页 HTTPS 请求。伪装性极强,几乎无法被封锁,因为封禁 443 端口会导致整个互联网瘫痪。目前最推荐的标准。 |
| DoQ | DNS over QUIC | 784/853 | 基于 UDP 的新一代加密协议,零延迟握手,在网络环境差(弱网)的情况下表现远优于前两者,但普及率尚在爬坡。 |
🛡️ AdGuard Home 实战部署
我们将使用 Docker 来快速部署 AdGuard Home,这是最推荐的方式,因为它隔离了环境且易于管理。
安装与初始化
安装 Docker
如果您的 VPS 尚未安装 Docker,请先执行官方一键安装脚本:
curl -fsSL https://get.docker.com | bash 运行 AdGuard Home 容器
执行以下命令来启动 AdGuard Home。请注意,`53` 端口是 DNS 服务的标准端口。
docker run --name adguardhome \
-v /my/adguard/workdir:/opt/adguardhome/work \
-v /my/adguard/confdir:/opt/adguardhome/conf \
-p 53:53/tcp -p 53:53/udp \
-p 80:80/tcp -p 443:443/tcp \
-p 853:853/tcp \
-p 3000:3000/tcp \
-d --restart unless-stopped \
adguard/adguardhome 初始化设置
在浏览器中访问 http://<您的 VPS IP>:3000。您会看到 AdGuard Home 的初始化向导。按照提示设置好 Web 管理端口和 DNS 服务端口(保持默认即可),并创建您的管理员账号和密码。
核心配置详解
过滤器 -> DNS 封锁清单
这里是广告过滤的核心。AdGuard Home 内置了一些列表,您也可以添加更多社区维护的规则:
- AdAway Default Blocklist: 移动端广告过滤。
- EasyPrivacy: 隐私保护,屏蔽跟踪器。
- NoCoin Filter List: 屏蔽网页挖矿脚本。
配置上游加密 DNS (防污染)
这是自建 DNS 最重要的功能之一,它可以加密您的 DNS 查询,防止被上级宽带提供商窃听或篡改(即防 DNS 污染)。
推荐上游 DNS 设置
| 服务商 | DoH 地址 (推荐使用此列) | DoT 地址 |
|---|---|---|
| Cloudflare | https://cloudflare-dns.com/dns-query | tls://1.1.1.1 |
| https://dns.google/dns-query | tls://8.8.8.8 | |
| Quad9 (安全) | https://dns.quad9.net/dns-query | tls://9.9.9.9 |
| DNSPod (国内) | https://doh.pub/dns-query | tls://dns.pub |
设置位置: 设置 -> DNS 设置 -> 上游 DNS 服务器
在输入框中填入上方的一个或多个 https://... 链接。建议勾选 "并行请求" 以提升解析速度(AdGuard 会同时向所有配置的上游发请求,谁先返回用谁的)。
⚙️ 进阶:高级调优与 DNS 重写
1. 乐观缓存 (Optimistic Caching)
在 设置 -> DNS 设置 -> DNS 缓存配置 中,强烈建议勾选 乐观缓存。开启后,当客户端请求一个已过期(TTL 超时)的缓存记录时,系统会立即返回这个过期的旧 IP 给用户(实现极速响应),然后在后台默默去上游重新查询最新 IP 更新缓存。极大提升上网流畅度。
2. DNS 重写 (自定义劫持)
如果您家里有群晖 NAS、软路由或自己搭建了博客,想要在局域网内通过一个好记的域名(如 nas.lan)访问它,而不是输入难记的 IP 地址。您可以在 过滤器 -> DNS 重写 中添加规则:
# 将 nas.lan 解析到内网 IP
nas.lan 192.168.1.100
# 强制将某个广告平台解析到本地环回 (彻底阻断)
bad-tracker.com 127.0.0.1
# 为外网的特定域名指定特定服务器 IP
my-hidden-server.com 198.51.100.10 📡 实战:对外提供自建 DoH 服务
如果您希望在出差时,手机在蜂窝网络下也能使用您 VPS 上搭建的去广告 DNS,您需要对外暴露加密 DNS 服务(否则暴露 53 端口会立刻被扫爆并作为 DDoS 放大攻击的肉鸡)。
最佳实践是使用 Nginx 反向代理您的 AdGuard Home,并套上 SSL 证书,提供 DoH 服务。
Nginx 反代配置示例
假设您的域名是 dns.yourdomain.com,在 Nginx 中配置如下:
server {
listen 443 ssl http2;
server_name dns.yourdomain.com;
# 填入您申请的 SSL 证书路径
ssl_certificate /etc/letsencrypt/live/dns.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dns.yourdomain.com/privkey.pem;
# 将请求反向代理到 AdGuard Home 的 DoH 端口
location /dns-query {
proxy_pass http://127.0.0.1:3000/dns-query;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
} 配置完成后,您的私人加密 DNS 地址就是:https://dns.yourdomain.com/dns-query。您可以把它填入手机或浏览器的“私有 DNS”选项中!
💻 客户端配置
服务器搭建好后,需要将您的设备指向它。最佳实践是在**路由器**上设置,这样所有连接到该 WiFi 的设备都能自动享受去广告和安全 DNS 的好处。
路由器设置 (针对内网部署)
登录路由器管理后台,在“网络设置”或“DHCP 服务器”中,将主 DNS 服务器地址修改为您部署了 AdGuard Home 的局域网 IP 地址。
移动设备 (iOS/Android) 针对公网 DoH
Android 设备可以在网络设置的“私有 DNS”中填入您的 DoT/DoH 域名。iOS 用户可以使用 Apple Configurator 生成描述文件安装,或借用 Shadowrocket 等代理软件接管 DNS。
🌐 权威 DNS 简介
我们上面搭建的 AdGuard Home 属于递归 DNS(或转发 DNS),它负责替我们向别人查询。而权威 DNS则正好相反,它负责“持有”一个域名的官方记录,并告诉全世界“我这个域名对应的 IP 是多少”。
如果您想自己托管域名的解析,而不是使用 Cloudflare 或域名注册商的 DNS 服务,您就需要搭建权威 DNS 服务器。这通常使用 BIND9 或 CoreDNS 软件,配置更为复杂,需要管理域名的 Zone 文件和各种记录(A, CNAME, MX 等),属于更专业的范畴。
🔧 故障排查
❌ 客户端完全无法上网
排查步骤:
- 检查 VPS 防火墙是否开放了 DNS 端口(TCP/UDP 53)或您的 DoH 反代端口。
- 在客户端使用终端执行
nslookup google.com <您的 DNS IP>测试服务器是否能正常响应。 - 登录 AdGuard Home 的管理后台,查看“查询日志”,确认是否有请求流入。
⚠️ 某个正常网站或 App 无法工作
排查: 很可能是该服务依赖的某个底层域名被过于激进的广告过滤规则误杀了(False Positive)。在 AdGuard Home 的“查询日志”中找到被标记为“已阻止”的相关域名,点击右侧的“放行”将其加入白名单即可。
🎯 下一步行动
端口转发与内网穿透
学习使用 iptables、frp、Gost 等工具,将家里的 NAS 或电脑安全暴露到公网实现远程访问。
网络包分析与排查
进阶技能:使用 tcpdump 和 Wireshark 深入分析网络流量,解决底层网络疑难杂症。
VPS 推荐榜单
想为自己的内网穿透或自建 DNS 找一台极度稳定且便宜的海外服务器?查看站长精选推荐。
浏览更多教程
探索服务器安全、网站搭建、Docker 部署等全体系 Linux 运维进阶主题。
想让 DNS 解析极速响应?
自建 DNS 的体验高度依赖于服务器与您本地宽带之间的延迟。如果发现解析速度慢,建议选购物理距离更近(如香港/日本)或线路更好的低延迟 VPS。
🚀 下一步行动
掌握了本篇内容只是第一步,接下来您可以按照以下路径继续深入: