最后更新于:2026年06月

很多人会花大量时间挑选代理节点、优化订阅规则,但对每天发出成千上万次 DNS 请求却漠不关心。殊不知,DNS 是网络中最关键的基础设施之一——配置不当不仅会拖慢你的网络,还可能导致隐私泄漏,甚至直接影响代理的可用性。
本文将带你从零了解 DNS 的工作原理,掌握 DoH/DoT 加密 DNS,部署 AdGuard Home 搭建家庭级 DNS 服务器,并实现国内/国外域名的智能分流。读完本文,你的网络体验将提升不止一个档次。
🧭 DNS 基础:它到底做了什么?
DNS 的本质
DNS(Domain Name System,域名系统)是互联网的"电话簿"。当你访问一个网站时,DNS 会把人类可阅读的域名(如 google.com)翻译成机器可读的 IP 地址(如 172.217.0.46)。
你的浏览器 → DNS 服务器 → IP 地址 → 连接网站
1. 请问 google.com 的 IP 是什么?
2. DNS 查找并返回:172.217.0.46
3. 浏览器连接 172.217.0.46
DNS 污染的工作原理
在某些地区,传统 DNS 请求使用 UDP 53 端口发送,全程明文传输。这意味着任何中间网络节点(包括你的 ISP)都可以:
┌──────────────────────────────────────────────┐
│ DNS 污染示意图 │
│ │
│ 你的设备 ── UDP:53 ──► DNS 请求 (google.com) │
│ │ │
│ 被 ISP 劫持 │
│ │ │
│ 返回错误 IP │
│ │ │
│ 你的设备 ──► 连接到错误地址,访问失败 │
└──────────────────────────────────────────────┘
DNS 污染的表现:
- 访问国外网站时跳转到错误页面
nslookup google.com返回奇怪的 IP- 某些网站部分加载或完全无法访问
- 代理客户端开启 TUN 模式后正常,关闭后异常
DNS 泄漏的隐私风险
如果你使用代理但 DNS 请求仍走运营商,那么即使你的流量内容是加密的,运营商仍能看到你访问了哪些域名:
| 项目 | 未加密 DNS | 加密 DNS |
|---|---|---|
| 运营商能否看到域名 | ✅ 可以 | ❌ 不能 |
| 能否被污染 | ✅ 容易 | ❌ 困难 |
| 查询速度 | 快 | 略慢(取决于服务器) |
| 隐私保护 | ❌ 极差 | ✅ 优秀 |
📦 加密 DNS:DoH 与 DoT
DoH(DNS over HTTPS)
DoH 把 DNS 查询封装在 HTTPS 协议中,使用 TCP 443 端口传输。这意味着 DNS 请求看起来与普通 HTTPS 流量没有区别。
# 示例:常见 DoH 服务器
- https://1.1.1.1/dns-query # Cloudflare
- https://dns.google/dns-query # Google
- https://dns.quad9.net/dns-query # Quad9
- https://223.5.5.5/dns-query # 阿里云
- https://dns.alidns.com/dns-query # 阿里 DNS
- https://1.12.12.12/dns-query # 腾讯 DNSPodDoT(DNS over TLS)
DoT 把 DNS 查询封装在 TLS 协议中,使用 TCP 853 端口传输。相比 DoH,它的协议更轻量,但特征更明显。
# 示例:常见 DoT 服务器
- tls://1.1.1.1:853
- tls://dns.google:853
- tls://dns.quad9.net:853
- tls://dns.alidns.com:853DoQ(DNS over QUIC)
QUIC 是基于 UDP 的传输协议,结合了 TCP 的可靠性和 UDP 的低延迟。DoQ 是 DNS over QUIC 的简称,未来可能成为主流。
- quic://dns.adguard.com:853
- quic://dns.nextdns.io:853加密 DNS 对比
| 特性 | DoH | DoT | DoQ |
|---|---|---|---|
| 端口 | 443 | 853 | 853 |
| 协议 | HTTPS (TCP) | TLS (TCP) | QUIC (UDP) |
| 特征识别 | 低(和 HTTPS 一样) | 高(特征明显) | 中等 |
| 延迟 | 中等 | 较低 | 最低 |
| 兼容性 | 最好 | 一般 | 一般 |
| 推荐使用 | 🌐 国外/代理网络 | 🏠 国内网络 | ⚡ 高性能设备 |
为什么推荐 DoH?
DoH 使用 443 端口,和正常网页流量完全一样,运营商无法识别和封锁。这在网络审查严格的地区尤为重要。
🎯 AdGuard Home:家庭级 DNS 服务器
AdGuard Home 是一款开源的网络级广告拦截和隐私保护 DNS 服务器。部署在你的路由器或家庭服务器上后,局域网内所有设备自动获得广告拦截与加密 DNS 能力,无需每台设备单独配置。
AdGuard Home vs 传统方案对比
| 方案 | 广告拦截 | 加密 DNS | 全家通用 | 自定义规则 | 部署难度 |
|---|---|---|---|---|---|
| AdGuard Home | ✅ 支持 | ✅ DoH/DoT | ✅ 全局生效 | ✅ 完整 | 中等 |
| Pi-hole | ✅ 支持 | ⚠️ 需要插件 | ✅ 全局生效 | ✅ 较好 | 简单 |
| 浏览器插件 | ✅ 仅浏览器 | ❌ 不支持 | ❌ 仅单设备 | ⚠️ 有限 | 简单 |
| SmartDNS | ❌ 无 | ✅ DoH/DoT | ✅ 全局生效 | ✅ 专业 | 中等 |
Docker 部署 AdGuard Home
# 1. 创建数据目录
mkdir -p /opt/adguardhome/work
mkdir -p /opt/adguardhome/conf
# 2. 启动容器
docker run -d \
--name adguardhome \
--restart unless-stopped \
-v /opt/adguardhome/work:/opt/adguardhome/work \
-v /opt/adguardhome/conf:/opt/adguardhome/conf \
-p 53:53/tcp \
-p 53:53/udp \
-p 3000:3000/tcp \
adguard/adguardhome:latest初始化配置
- 访问
http://服务器IP:3000进入管理界面 - 设置管理用户名和密码
- 进入 Settings → DNS Settings,配置上游 DNS:
# 推荐上游 DNS 配置
# 国内域名 → 国内 DNS
# 国外域名 → 国外 DNS(通过代理)
# 上游 DNS(Upstream DNS)
# 国内域名使用国内加密 DNS
tls://dns.alidns.com
tls://1.12.12.12
https://dns.alidns.com/dns-query
# 国外域名使用代理网络的 DNS
# 注意:如果 AdGuard Home 本身不经过代理,需要填写可直连的 DNS
# 如果你在 sing-box 或其他代理上配置代理 DNS,也可写为:
https://1.1.1.1/dns-query
https://dns.google/dns-queryBootstrap DNS(引导 DNS)
Bootstrap DNS 用于解析上游 DNS 服务器本身的域名:
# Bootstrap DNS
223.5.5.5
119.29.29.29
8.8.8.8
1.1.1.1🚀 分流 DNS:国内国外分开解析
为什么需要分流?
传统模式(所有域名走同一 DNS):
国内域名 → 国外 DNS → 返回海外 CDN IP → 访问缓慢 ❌
国外域名 → 国内 DNS → 被污染或返回错误 IP ❌
分流模式(智能分流):
国内域名 → 国内 DNS → 最优 CDN IP → 快速访问 ✅
国外域名 → 国外 DNS → 真实解析结果 → 正常访问 ✅
AdGuard Home 分流配置
进入 Settings → DNS Settings → Upstream DNS,填写如下配置:
# 国内域名 → 国内加密 DNS
[/cn/]tls://dns.alidns.com
[/cn/]https://223.5.5.5/dns-query
# 常见国内网站 → 国内 DNS
[/baidu.com/]tls://dns.alidns.com
[/taobao.com/]tls://dns.alidns.com
[/qq.com/]tls://dns.alidns.com
[/bilibili.com/]https://dns.alidns.com/dns-query
# 其他所有域名 → 走代理网络的加密 DNS
# 注意:如果 AdGuard Home 运行在代理网关后面,可直接使用国外 DNS
https://1.1.1.1/dns-query
https://dns.google/dns-query
tls://1.1.1.1
tls://dns.google更高级:DNS 提供商分组
# 国内 DNS 提供商(用于解析国内域名)
# 配置格式:域名列表文件 → 使用指定 DNS
[/china-list.txt/]tls://dns.alidns.com
[/china-list.txt/]https://223.5.5.5/dns-query
# 其余默认走加密 DNS
https://1.1.1.1/dns-query
https://dns.google/dns-queryAdGuard Home Fallback DNS
当上游 DNS 全部失败时使用的备用 DNS:
# Fallback DNS
223.5.5.5
119.29.29.29
8.8.8.8📜 广告与追踪拦截
订阅广告拦截规则
进入 Filters → DNS blocklists → Add blocklist,选择或添加以下订阅:
# 推荐订阅
- AdGuard DNS filter
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
- AdAway Default
https://adaway.org/hosts.txt
- EasyList China
https://easylist-downloads.adblockplus.org/easylistchina.txt
- Peter Lowe's List
https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus
# 中文优化
- anti-AD
https://anti-ad.net/easylist.txt
# 追踪拦截
- OISD Full
https://big.oisd.nl/规则不要贪多
订阅 3-5 个最常用的即可。过多规则不仅会拖慢 DNS 解析,还可能导致误拦截,影响正常使用。
自定义白名单
某些域名不应该被拦截,进入 Filters → Custom filtering rules → Allowed:
# 国内常见 CDN
@@||alicdn.com^
@@||cdn.bcebos.com^
@@||cloudfront.net^
# 企业内部域名(如果有)
@@||company.local^
@@||intranet.corp^
# 游戏与应用商店
@@||steamgames.com^
@@||epicgames.com^自定义黑名单
进入 Filters → Custom filtering rules → Blocked:
# 自定义拦截
||ads.example.com^
||tracking.analytics.cn^🔒 DNS 防污染:进阶技巧
1. 防止 53 端口被劫持
某些网络环境下,运营商会劫持所有 UDP 53 端口请求。此时:
你的请求 → UDP:53 → 被 ISP 劫持 → 返回错误结果
解决方案:
- 使用 DoH(走 HTTPS 443 端口,和普通网页流量一致)
- 使用 DoT(走 TCP 853,特征明显但加密强)
- 使用非标准端口的 DNS 服务
- 使用代理客户端接管 DNS(如 sing-box / Clash 的 fake-ip)
2. 代理客户端与 AdGuard Home 配合
设备
│
[AdGuard Home] ← 局域网 DNS,负责广告拦截
│
┌────┴────┐
│ │
国内域名 国外域名
│ │
国内 DNS [sing-box/Clash] ← 代理客户端接管
│
国外加密 DNS
│
真实解析结果
配置建议:
- AdGuard Home 监听 53 端口,作为设备主 DNS
- AdGuard Home 的上游 DNS 配置走代理网关的 DNS
- sing-box 提供 DNS 服务(例如监听 1053 端口)
- AdGuard Home 的国外上游指向
https://127.0.0.1:1053/dns-query
3. ECS(EDNS Client Subnet)配置
ECS 让 CDN 根据你的真实 IP 返回最优节点。国内 CDN 依赖 ECS 实现就近接入。
# 在 AdGuard Home 中启用 ECS
# Settings → DNS Settings → Enable EDNS Client Subnet⚠️ 注意:ECS 会向 DNS 服务器暴露你的 IP 子网信息。国外 DNS 应禁用 ECS 以保护隐私;国内 DNS 可启用以获取更好的 CDN 加速效果。
⚡ 性能优化与缓存
1. 配置 DNS 缓存
# AdGuard Home DNS 缓存配置
# Settings → DNS Settings → DNS cache configuration
- Cache size: 1000000 (推荐 1-4MB)
- Override minimum TTL: 0 (不修改,保持原 TTL)
- Override maximum TTL: 0 (不修改)
- Optimistic cache: ✅ 启用Optimistic Cache:缓存过期后继续使用旧缓存,并异步更新。显著降低延迟,但可能短暂使用过期记录。
2. 合理的 TTL 控制
# 在 DNS 上游配置中启用最低 TTL
# 针对污染严重的域名,建议设置较大 TTL
# 国内 CDN 域名保持较小 TTL,便于 CDN 动态调整3. 硬件设备选择
| 设备类型 | 推荐配置 | 价格区间 | 性能等级 |
|---|---|---|---|
| 软路由 x86 | J4125 + 4GB RAM | ¥800-1500 | ⭐⭐⭐⭐⭐ |
| 树莓派 5 | 4GB+ 版本 | ¥500-700 | ⭐⭐⭐⭐ |
| 路由器 OpenWrt | 256MB RAM 以上 | ¥200-500 | ⭐⭐⭐ |
| 旧笔记本/台式机 | 4GB RAM + SSD | ¥0-300 | ⭐⭐⭐⭐⭐ |
为什么推荐 x86?
AdGuard Home 的规则匹配和加密 DNS 依赖 CPU 性能。x86 架构的 J4125/N5105 性能远超大多数路由器芯片,能轻松支持数千个规则。
🏠 实战:完整部署流程
步骤一:安装 AdGuard Home
# Docker 方式(推荐)
docker pull adguard/adguardhome:latest
mkdir -p /opt/adguardhome/{conf,work}
docker run -d \
--name adguardhome \
--restart unless-stopped \
-v /opt/adguardhome/work:/opt/adguardhome/work \
-v /opt/adguardhome/conf:/opt/adguardhome/conf \
-p 53:53/tcp -p 53:53/udp \
-p 67:67/udp -p 68:68/tcp \
-p 3000:3000/tcp \
adguard/adguardhome:latest步骤二:初始化配置
- 打开浏览器访问
http://服务器IP:3000 - 点击 开始配置,选择网络接口
- 设置管理员用户名和密码
步骤三:配置上游 DNS
进入 Settings → DNS Settings:
# Upstream DNS servers
# 国内域名 → 国内 DNS
[/cn/]tls://dns.alidns.com
[/cn/]https://223.5.5.5/dns-query
[/baidu.com/]tls://dns.alidns.com
[/qq.com/]tls://dns.alidns.com
# 其他域名 → 代理网络下的加密 DNS
# 假设 sing-box/clash 运行在同一机器并提供 DNS
# 如果你的 AdGuard Home 本身经过代理,可直接使用:
https://1.1.1.1/dns-query
https://dns.google/dns-query
# Bootstrap DNS servers
223.5.5.5
119.29.29.29
1.1.1.1
# Fallback DNS
8.8.8.8
1.0.0.1
208.67.222.222步骤四:添加广告订阅
进入 Filters → DNS blocklists → Add blocklist:
- AdGuard DNS filter
- AdAway Default Blocklist
- anti-AD (中文优化)步骤五:设置设备 DNS
# 方法一:路由器 DHCP 设置 DNS
# 将路由器的 DNS 服务器设置为 AdGuard Home 的地址
# 例如:路由器 192.168.1.1,AdGuard Home 192.168.1.2
# 则所有设备自动获得 192.168.1.2 作为 DNS
# 方法二:手动设置
# Windows:
# 网络连接 → 属性 → IPv4 → 手动设置 DNS → 192.168.1.2
# macOS:
# 系统设置 → 网络 → 详细信息 → DNS → 添加 192.168.1.2
# 手机:
# WiFi → 静态 IP → DNS 1: 192.168.1.2, DNS 2: 223.5.5.5步骤六:验证配置
# 测试解析国内域名
nslookup www.baidu.com 192.168.1.2
# 应该返回国内 CDN IP
# 测试解析国外域名
nslookup www.google.com 192.168.1.2
# 应该返回正确 IP(非污染 IP)
# 测试广告域名拦截
nslookup doubleclick.net 192.168.1.2
# 应该返回 0.0.0.0 或 NXDOMAIN🔍 故障排查手册
问题 1:DNS 解析失败
检查清单:
1. AdGuard Home 是否运行?
docker ps | grep adguard
2. 53 端口是否被占用?
sudo lsof -i :53
3. 上游 DNS 是否可访问?
nslookup google.com 1.1.1.1
4. AdGuard Home 是否有网络连通性?
docker exec adguardhome ping -c 3 1.1.1.1
5. 检查日志:
docker logs adguardhome --tail 50
问题 2:国内网站访问缓慢
原因:国内域名走了国外 DNS,返回海外 CDN IP
解决:
1. 在 AdGuard Home 中配置分流规则
2. 将 .cn 等国内域名明确指向国内 DNS
3. 启用 ECS,提升 CDN 解析精度
问题 3:国外网站 DNS 污染
原因:AdGuard Home 的国外上游走了国内网络,被污染
解决:
1. 在代理网关上暴露一个 DNS 服务(如 sing-box 的 127.0.0.1:1053)
2. 配置 AdGuard Home 的默认上游 DNS 指向代理网关
3. 确保代理网关运行 fake-ip 或 DNS 转发模式
问题 4:广告未被拦截
原因检查:
1. 确认设备实际使用的 DNS 是 AdGuard Home
nslookup -debug doubleclick.net
2. 确认订阅规则已启用
Filters → DNS blocklists → 勾选已启用
3. 清除浏览器 DNS 缓存
Chrome: chrome://net-internals/#dns
Firefox: about:config → network.dns
4. 清除操作系统 DNS 缓存
Windows: ipconfig /flushdns
macOS: sudo dscacheutil -flushcache
问题 5:某些网站被误拦截
解决方法:
1. 访问 AdGuard Home 的 Query Log
2. 找到被拦截的域名
3. 点击 "Add to allowlist" 添加到白名单
4. 也可以手动添加自定义白名单规则
📚 完整配置参考
AdGuard Home 上游 DNS(推荐配置)
# 国内域名 → 国内加密 DNS
[/cn/]tls://dns.alidns.com
[/cn/]https://223.5.5.5/dns-query
# 常见国内 CDN → 国内 DNS(确保访问速度)
[/aliyun.com/]tls://dns.alidns.com
[/baidu.com/]tls://dns.alidns.com
[/bilibili.com/]tls://dns.alidns.com
[/qq.com/]tls://dns.alidns.com
[/taobao.com/]tls://dns.alidns.com
[/weixin.qq.com/]tls://dns.alidns.com
# 国外域名(通过代理网络) → 加密 DNS
# 以下默认会被代理网关接管
https://1.1.1.1/dns-query
https://dns.google/dns-query
tls://dns.google
tls://1.1.1.1AdGuard Home DNS 设置
Upstream DNS servers: (见上)
Bootstrap DNS servers: 223.5.5.5, 119.29.29.29, 1.1.1.1
Fallback DNS: 8.8.8.8, 1.0.0.1
DNS cache size: 1000000
Optimistic cache: ✅ 启用
Enable EDNS Client Subnet: ✅ 启用(国内 DNS)
DNS queries logging: ✅ 启用(调试时),❌ 生产可关闭
Anonymize client IP: ❌ 关闭(需要保留真实 IP 做统计)Blocklists 订阅
- ✅ AdGuard DNS filter
- ✅ AdAway Default Blocklist
- ✅ anti-AD
- ⚠️ OISD Full (较激进,按需启用)🎓 下一步学习
- 📖 SmartDNS:替代方案,配置更灵活的国内专用 DNS
- 📖 Pi-hole:轻量级广告拦截 DNS,适合低配设备
- 📖 NextDNS:云端托管 DNS,无需本地部署
- 📖 sing-box DNS 模块:在代理中进一步强化 DNS 解析
- 📖 DNSCrypt:加密 DNS 的早期方案,兼容性好
结语
DNS 是网络的基石,也是最容易被忽略的环节。做好 DNS 配置,你的网络体验会有质的飞跃:
- ✅ 广告拦截:局域网全设备广告拦截,浏览器更清爽
- ✅ 隐私保护:加密 DNS 防止运营商窥探你的浏览记录
- ✅ 防污染:国内/国外智能分流,不再返回错误 IP
- ✅ 访问加速:国内域名走国内 CDN,不再返回海外节点
- ✅ 全家受益:一次部署,家里所有手机、电视、平板自动享受
掌握了 DNS 优化,你就拥有了一张通往更好网络体验的门票。无论你是家庭用户,还是技术爱好者,DNS 优化都是最值得投入的技能之一。
愿你的网络连接更快、更安全、更自由!🚀