最后更新于: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 对比

特性 DoH DoT DoQ
端口 443 853 853
协议 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. 硬件设备选择

设备类型 推荐配置 价格区间 性能等级
软路由 x86 J4125 + 4GB RAM ¥800-1500 ⭐⭐⭐⭐⭐
树莓派 5 4GB+ 版本 ¥500-700 ⭐⭐⭐⭐
路由器 OpenWrt 256MB 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 国际许可协议进行许可。