把DNS当系统工程做 | 自建DNS的最终形态

引子:我为什么会对 DNS 下这么重的手

在很长一段时间里,我都把 DNS 当成一个“工具”:装上 → 能用 → 快一点 → 结束。

直到有一天我突然意识到:
局域网内几乎所有的网站打不开、APP卡顿、故障、劫持、抽风、延迟异常,都是从 DNS 开始的。

它再不只是“解析器”,而是:

  • 流量调度入口

  • 安全拦截前哨

  • CDN 选路控制点

  • 所有协议的“第一跳决策系统”

从那一刻开始,我不再“调 DNS”,而是——开始做一个可以长期托付全网流量的 DNS 系统。

这篇文章,就是我 2年间连续推翻 4 版方案之后,留下来的最终形态

第一轮失败:只追求“快”的 DNS,是不配长期运行的

我最早的目标只有一个字:

思路也极其简单粗暴:

  • 国内:公共 DNS + fastest-ip

  • 国外:公共 DNS + fastest-ip

  • 所有域名:测速选最快

短期看,确实很爽:

  • 打开网页秒开

  • CDN 命中率极高

  • 延迟数据非常漂亮

但很快我就踩中了第一个大坑:

  • 同一个域名不同时间解析到不同 CDN

  • 部分网站 session 失效

  • 个别站点频繁 403 / 429

  • 某些 APP 登录反复掉线

我才意识到:DNS 只追求“最快 IP”,是在用随机性换性能。这不是工程,这是赌博。

第二轮失败:我曾经迷信 DoH / DoT / H3

后来我开始走“信仰路线”:

  • 全 DoH

  • 全加密

  • 全 HTTPS 查询

  • 全链路安全

理论上,这是“现代 DNS 的终极形态”。

现实很残酷:

  • 国内网络对 DoT、DoH 的稳定性极其不友好

  • 高峰期丢包率不可控

  • 解析延迟居高不下,偶发 500ms+

  • 有些时间段直接不可用,会被阻断

结论非常清醒:

“协议先进 ≠ 网络环境允许。”

在国内当前的网络现实下:
DoH/DoT/H3 只能作为补充,不能作为主力。

第三轮失败:规则越多,系统越不可控

接着我开始进入“规则堆叠阶段”:

  • DomesticList

  • OverseaList

  • 广告过滤规则

  • 禁止赌黄毒、隐私跟踪、诈骗钓鱼和恶意域名、阻止数据收集和指纹识别等规则

  • 特定应用分流规则

  • 同步威胁情报中的高危恶意IP 过滤规则

结果是:

  • 规则互相打架

  • 同一域名多层命中

  • 日志不可读

  • 解析行为不可预测

  • 故障根本无法快速回溯

那一刻我彻底否定了自己的设计方式:规则不是越多越强,结构错误,再多都是灾难。

第四次重构:我开始把 DNS 当“决策系统”来设计

这一版,是现在你看到的最终形态。我给 自建DNS 的定位,从“解析器”,升级为:

DNS 决策系统(DNS Decision System)

我给它设计了一个五层结构

第一层:国内域名层(DomesticList)

  • 国内域名 → 只走国内 DNS → 走A/B国内运营商多条线路

  • 国内测速 → 只选A/B运营商国内最优链路

  • 确保:国内访问绝对最快

第二层:海外域名层(OverseaList)

  • 海外域名 → 只走海外 DNS→ 走C/D运营商线路多条线路

  • 海外测速 → 只选C/D运营商海外最稳线路

  • 确保:海外访问绝对稳定

第三层:未知域名兜底层

  • 不在任何列表内

  • 国内 + 海外 DNS 一同解析,结果一并测速,解析到的错误IP直接丢弃

  • 实时选最快 IP

  • 确保:未知世界自动适配,IP正确

第四层:安全规则层

  • 屏蔽APP广告

  • 阻止隐私跟踪

  • 屏蔽诈骗钓鱼

  • 屏蔽恶意域名

  • 阻止数据收集和指纹采集

全部在 DNS 层直接拦截。

第五层:恶意 IP 黑名单层

  • 对已解析出来的 IP进行二次封禁

  • 防止 CDN 投毒、灰色 IP 回流

  • 银狐木马病毒连接直接阻断

这一层的IP 黑名单是一种 比 hosts 黑洞、比防火墙 DROP 更“干净”的方式

方式 DNS解析 Ping响应 TCP连接 副作用
hosts 黑洞 ❌ 失败 污染系统
防火墙 DROP 影响全局
IP黑名单 ✅ 最干净

在 DNS 内部的“IP 结果阶段”直接废弃该 IP 的“业务可用性”,达到了“ISP 级、网关级、出口级 IP 风险控制标准。

当前 DNS 的核心设计逻辑(不是功能,是工程结构)

这份配置的重点,不是某一条指令,而是这 6 个“工程级决策”:

1️⃣ 明确分组:Domestic / Oversea

  • 决策边界清晰

  • 行为可预测

  • 日志可审计

2️⃣ Fastest-ip 不再“盲选”

  • 只在同一个区域内比

  • 国内只比国内

  • 海外只比海外

3️⃣ 测速统一采用 TCP 和HTTP为主

  • 避免 ICMP 被限速、不准确

  • 更贴近真实业务流量和用户体验

4️⃣ IPv6 直接关闭

  • 当前国内 IPv6 质量极不稳定

  • 智能调度失真严重

  • 我选择:工程稳定性优先于协议先进性

5️⃣ serve-expired + 预取缓存

  • DNS 不中断

  • 上游波动不影响业务

  • 解析系统具备“韧性”

6️⃣ 审计级日志

  • 普通日志 + 审计日志双轨

  • 出问题可以精确回溯

  • DNS 行为完全“可解释”

7️⃣底层安全屏障

  • 内网所有终端纯天然去广告,95% APP(包括国内外主流APP)无广告

  • 命中的恶意网站、病毒木马、诈骗钓鱼域名全屏蔽

  • 威胁情报内的恶意IP全阻断

  • 各大平台的数据收集、指纹采集阻和隐私跟踪直接阻止,且不影响应用正常使用

真正让我敢长期运行的,是这个“自动进化系统”

DNS配置文件不是仅仅是“配置文件”,而是:

一个每日自动进化的策略系统。

我给它设计了一个具备以下能力的更新系统:

  • ✅ 自更新(可自我升级)

  • ✅ MD5 对比(避免无效重启)

  • ✅ 网络检测(CF-RAY检测 + ping 双保险)

  • ✅ 分段睡眠(防止死循环卡死)

  • ✅ STOPFILE 可控退出

  • ✅ 防止 5 分钟内无限自杀式重启

每天自动完成超过百万条的配置文件、规则文件以及IP库及时更新:

  • DomesticList(近10万条)
  •  OverseaList(约5万条)

  • 广告规则(约40万条)

  • 恶意域名(约70万条)

  • 恶意 IP 库(约20万条)

并自动平滑重启。

这一步之后,我才敢说:

“这不是一份配置,这是一个会自己生长的 DNS 系统。”

这套方案现在适合谁?不适合谁?

✅ 适合:

  • 家庭主路由

  • 中大公司出口网关、分支机构

  • SD-WAN 边缘节点

  • 需要长期无人值守的网络环境

❌ 不适合:

  • 纯小白用户

  • 用各种科学上网工具的人

  • 只想“白嫖”的人

  • 不看日志的人

  • 不理解“DNS 是决策系统”的人

阶段性结论:这是我目前唯一敢托付全网流量的 DNS 形态

我不会说这是“最完美的方案”。因为工程系统没有“最终答案”。

但这套方案,至少具备这 4 个特性:

  • ✅ 可控

  • ✅ 可解释

  • ✅ 可进化

  • ✅ 可纠错

它不是靠“快”活着的,它是靠:

结构正确 + 决策透明 + 自我进化  + 长期可维护

活着的。

暂无评论,快来抢沙发吧!

参与讨论