最后更新于:2026年06月

DNS 优化
家庭网络 DNS 优化与防污染

很多人会花大量时间挑选代理节点、优化订阅规则,但对每天发出成千上万次 DNS 请求却漠不关心。殊不知,DNS 是网络中最关键的基础设施之一——配置不当不仅会拖慢你的网络,还可能导致隐私泄漏,甚至直接影响代理的可用性。

本文将带你从零了解 DNS 的工作原理,掌握 DoH/DoT 加密 DNS,部署 AdGuard Home 搭建家庭级 DNS 服务器,并实现国内/国外域名的智能分流。读完本文,你的网络体验将提升不止一个档次。


🧭 DNS 基础:它到底做了什么?

DNS 的本质

DNS(Domain Name System,域名系统)是互联网的"电话簿"。当你访问一个网站时,DNS 会把人类可阅读的域名(如 google.com)翻译成机器可读的 IP 地址(如 172.217.0.46)。

PLAINTEXT
你的浏览器 → DNS 服务器 → IP 地址 → 连接网站
     1. 请问 google.com 的 IP 是什么?
     2. DNS 查找并返回:172.217.0.46
     3. 浏览器连接 172.217.0.46

DNS 污染的工作原理

在某些地区,传统 DNS 请求使用 UDP 53 端口发送,全程明文传输。这意味着任何中间网络节点(包括你的 ISP)都可以:

PLAINTEXT
┌──────────────────────────────────────────────┐
│           DNS 污染示意图                       │
│                                               │
│  你的设备 ── UDP:53 ──► DNS 请求 (google.com) │
│                            │                    │
│                         被 ISP 劫持             │
│                            │                    │
│                     返回错误 IP                 │
│                            │                    │
│  你的设备 ──► 连接到错误地址,访问失败        │
└──────────────────────────────────────────────┘

DNS 污染的表现

DNS 泄漏的隐私风险

如果你使用代理但 DNS 请求仍走运营商,那么即使你的流量内容是加密的,运营商仍能看到你访问了哪些域名

项目未加密 DNS加密 DNS
运营商能否看到域名✅ 可以❌ 不能
能否被污染✅ 容易❌ 困难
查询速度略慢(取决于服务器)
隐私保护❌ 极差✅ 优秀

📦 加密 DNS:DoH 与 DoT

DoH(DNS over HTTPS)

DoH 把 DNS 查询封装在 HTTPS 协议中,使用 TCP 443 端口传输。这意味着 DNS 请求看起来与普通 HTTPS 流量没有区别。

YAML
# 示例:常见 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       # 腾讯 DNSPod

DoT(DNS over TLS)

DoT 把 DNS 查询封装在 TLS 协议中,使用 TCP 853 端口传输。相比 DoH,它的协议更轻量,但特征更明显。

YAML
# 示例:常见 DoT 服务器
- tls://1.1.1.1:853
- tls://dns.google:853
- tls://dns.quad9.net:853
- tls://dns.alidns.com:853

DoQ(DNS over QUIC)

QUIC 是基于 UDP 的传输协议,结合了 TCP 的可靠性和 UDP 的低延迟。DoQ 是 DNS over QUIC 的简称,未来可能成为主流

YAML
- quic://dns.adguard.com:853
- quic://dns.nextdns.io:853

加密 DNS 对比

特性DoHDoTDoQ
端口443853853
协议HTTPS (TCP)TLS (TCP)QUIC (UDP)
特征识别低(和 HTTPS 一样)高(特征明显)中等
延迟中等较低最低
兼容性最好一般一般
推荐使用🌐 国外/代理网络🏠 国内网络⚡ 高性能设备

🎯 AdGuard Home:家庭级 DNS 服务器

AdGuard Home 是一款开源的网络级广告拦截和隐私保护 DNS 服务器。部署在你的路由器或家庭服务器上后,局域网内所有设备自动获得广告拦截与加密 DNS 能力,无需每台设备单独配置。

AdGuard Home vs 传统方案对比

方案广告拦截加密 DNS全家通用自定义规则部署难度
AdGuard Home✅ 支持✅ DoH/DoT✅ 全局生效✅ 完整中等
Pi-hole✅ 支持⚠️ 需要插件✅ 全局生效✅ 较好简单
浏览器插件✅ 仅浏览器❌ 不支持❌ 仅单设备⚠️ 有限简单
SmartDNS❌ 无✅ DoH/DoT✅ 全局生效✅ 专业中等

Docker 部署 AdGuard Home

BASH
# 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

初始化配置

  1. 访问 http://服务器IP:3000 进入管理界面
  2. 设置管理用户名和密码
  3. 进入 Settings → DNS Settings,配置上游 DNS:
YAML
# 推荐上游 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-query

Bootstrap DNS(引导 DNS)

Bootstrap DNS 用于解析上游 DNS 服务器本身的域名:

YAML
# Bootstrap DNS
223.5.5.5
119.29.29.29
8.8.8.8
1.1.1.1

🚀 分流 DNS:国内国外分开解析

为什么需要分流?

PLAINTEXT
传统模式(所有域名走同一 DNS):
  国内域名 → 国外 DNS → 返回海外 CDN IP → 访问缓慢 ❌
  国外域名 → 国内 DNS → 被污染或返回错误 IP ❌

分流模式(智能分流):
  国内域名 → 国内 DNS → 最优 CDN IP → 快速访问 ✅
  国外域名 → 国外 DNS → 真实解析结果 → 正常访问 ✅

AdGuard Home 分流配置

进入 Settings → DNS Settings → Upstream DNS,填写如下配置:

YAML
# 国内域名 → 国内加密 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 提供商分组

YAML
# 国内 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-query

AdGuard Home Fallback DNS

当上游 DNS 全部失败时使用的备用 DNS:

YAML
# Fallback DNS
223.5.5.5
119.29.29.29
8.8.8.8

📜 广告与追踪拦截

订阅广告拦截规则

进入 Filters → DNS blocklists → Add blocklist,选择或添加以下订阅:

YAML
# 推荐订阅
- 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/

自定义白名单

某些域名不应该被拦截,进入 Filters → Custom filtering rules → Allowed

YAML
# 国内常见 CDN
@@||alicdn.com^
@@||cdn.bcebos.com^
@@||cloudfront.net^

# 企业内部域名(如果有)
@@||company.local^
@@||intranet.corp^

# 游戏与应用商店
@@||steamgames.com^
@@||epicgames.com^

自定义黑名单

进入 Filters → Custom filtering rules → Blocked

YAML
# 自定义拦截
||ads.example.com^
||tracking.analytics.cn^

🔒 DNS 防污染:进阶技巧

1. 防止 53 端口被劫持

某些网络环境下,运营商会劫持所有 UDP 53 端口请求。此时:

PLAINTEXT
你的请求 → UDP:53 → 被 ISP 劫持 → 返回错误结果

解决方案

2. 代理客户端与 AdGuard Home 配合

PLAINTEXT
          设备
           │
       [AdGuard Home]   ← 局域网 DNS,负责广告拦截
           │
      ┌────┴────┐
      │         │
  国内域名   国外域名
      │         │
  国内 DNS    [sing-box/Clash]  ← 代理客户端接管
                           │
                      国外加密 DNS
                           │
                      真实解析结果

配置建议

3. ECS(EDNS Client Subnet)配置

ECS 让 CDN 根据你的真实 IP 返回最优节点。国内 CDN 依赖 ECS 实现就近接入。

YAML
# 在 AdGuard Home 中启用 ECS
# Settings → DNS Settings → Enable EDNS Client Subnet

⚠️ 注意:ECS 会向 DNS 服务器暴露你的 IP 子网信息。国外 DNS 应禁用 ECS 以保护隐私;国内 DNS 可启用以获取更好的 CDN 加速效果。


⚡ 性能优化与缓存

1. 配置 DNS 缓存

YAML
# 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 控制

YAML
# 在 DNS 上游配置中启用最低 TTL
# 针对污染严重的域名,建议设置较大 TTL
# 国内 CDN 域名保持较小 TTL,便于 CDN 动态调整

3. 硬件设备选择

设备类型推荐配置价格区间性能等级
软路由 x86J4125 + 4GB RAM¥800-1500⭐⭐⭐⭐⭐
树莓派 54GB+ 版本¥500-700⭐⭐⭐⭐
路由器 OpenWrt256MB RAM 以上¥200-500⭐⭐⭐
旧笔记本/台式机4GB RAM + SSD¥0-300⭐⭐⭐⭐⭐

🏠 实战:完整部署流程

步骤一:安装 AdGuard Home

BASH
# 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

步骤二:初始化配置

  1. 打开浏览器访问 http://服务器IP:3000
  2. 点击 开始配置,选择网络接口
  3. 设置管理员用户名和密码

步骤三:配置上游 DNS

进入 Settings → DNS Settings

YAML
# 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

YAML
- AdGuard DNS filter
- AdAway Default Blocklist
- anti-AD (中文优化)

步骤五:设置设备 DNS

YAML
# 方法一:路由器 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

步骤六:验证配置

BASH
# 测试解析国内域名
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 解析失败

PLAINTEXT
检查清单:
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:国内网站访问缓慢

PLAINTEXT
原因:国内域名走了国外 DNS,返回海外 CDN IP
解决:
1. 在 AdGuard Home 中配置分流规则
2. 将 .cn 等国内域名明确指向国内 DNS
3. 启用 ECS,提升 CDN 解析精度

问题 3:国外网站 DNS 污染

PLAINTEXT
原因:AdGuard Home 的国外上游走了国内网络,被污染
解决:
1. 在代理网关上暴露一个 DNS 服务(如 sing-box 的 127.0.0.1:1053)
2. 配置 AdGuard Home 的默认上游 DNS 指向代理网关
3. 确保代理网关运行 fake-ip 或 DNS 转发模式

问题 4:广告未被拦截

PLAINTEXT
原因检查:
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:某些网站被误拦截

PLAINTEXT
解决方法:
1. 访问 AdGuard Home 的 Query Log
2. 找到被拦截的域名
3. 点击 "Add to allowlist" 添加到白名单
4. 也可以手动添加自定义白名单规则

📚 完整配置参考

AdGuard Home 上游 DNS(推荐配置)

YAML
# 国内域名 → 国内加密 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.1

AdGuard Home DNS 设置

YAML
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 订阅

YAML
- ✅ AdGuard DNS filter
- ✅ AdAway Default Blocklist
- ✅ anti-AD
- ⚠️ OISD Full (较激进,按需启用)

🎓 下一步学习


结语

DNS 是网络的基石,也是最容易被忽略的环节。做好 DNS 配置,你的网络体验会有质的飞跃

掌握了 DNS 优化,你就拥有了一张通往更好网络体验的门票。无论你是家庭用户,还是技术爱好者,DNS 优化都是最值得投入的技能之一。

愿你的网络连接更快、更安全、更自由!🚀

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/dns-privacy-anti-pollution/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。