当你在家中上网时,每一台设备发出的 DNS 查询都会流向运营商分配的递归解析器。这些查询不仅暴露了你访问的网站域名,还可能被用于构建用户画像、精准广告投放甚至出售给第三方。与企业环境需要复杂的高可用架构不同,个人或家庭实验室场景的核心诉求是:隐私不外泄、广告与追踪器被拦截、本地设备拥有易记的局域网域名。部署一台个人 DNS 服务器,正是解决这些问题的最小可行方案。

选型:Pi-hole 与 AdGuard Home 的核心差异

个人 DNS 服务器领域有两个主流开源方案:Pi-hole 与 AdGuard Home。两者的核心定位相似,均为网络级别的广告与追踪器拦截工具,但在技术实现与运维复杂度上存在实质性差别。

Pi-hole 诞生于 2014 年,最初设计为在树莓派上运行因此得名,采用 FTLDNS(FreeType Linked DNS)作为核心解析引擎,通过 dnsmasq 实现缓存与转发逻辑。其优势在于社区成熟、插件生态丰富,默认搭配 Gravity 模块从多个公开列表自动拉取阻断规则。AdGuard Home 则由广告过滤领域的老牌厂商 AdGuard 推出,采用 Go 语言重写解析器,在吞吐量与过滤规则处理速度上优于 Pi-hole,且原生内置 DNS-over-HTTPS(DoH)与 DNS-over-TLS(DoT)支持,无需额外配置即可实现加密上行。这两款软件均可在 x86_64、ARM64 等多种架构上运行,部署设备可以是树莓派、旧笔记本、NAS 甚至是路由器(如华硕梅林固件官方支持 Pi-hole 插件)。

选择时可参考以下简化决策矩阵:如果你偏好成熟社区与大量第三方插件,且愿意手动配置加密上行,Pi-hole 更适合;如果你追求开箱即用的 DoH/DoT 支持、更现代的管理界面以及开箱即用的儿童安全过滤功能,AdGuard Home 是更省心的选择。两者均支持 Docker 一键部署,实际迁移成本极低。

部署架构与网络接入

最典型的部署方式是将该 DNS 服务器设置为局域网内的唯一 DNS 响应者,由路由器通过 DHCP 统一分配该服务器的 IP 作为首选 DNS。这一步通常在路由器后台的「LAN 设置」或「DHCP 选项」中完成,将 DNS 服务器地址指向个人 DNS 设备的内网 IP。辅助 DNS 可保留运营商或公共 DNS(如 1.1.1.1)作为 fallback,防止单点故障导致全家断网。

对于树莓派或低功耗设备,推荐配置参数如下:分配静态 IP 并在路由器静态租约中绑定 MAC 地址,确保设备重启后 IP 不变;CPU 建议四核以上以应对突发查询,内存 1GB 足以支撑日常家庭 20 台设备的解析负载;存储仅需 8GB SD 卡或更大容量用于日志与阻断列表缓存。如采用 Docker 部署,宿主机建议预留至少 2GB Swap 以避免 OOM。

隐私保护的关键配置参数

个人 DNS 服务器的首要工程目标是防止查询日志外泄。以下参数组合可在隐私与功能之间取得平衡:

日志级别设置:将查询日志设置为仅保留 24 小时或更短,并关闭向第三方云端同步功能。Pi-hole 默认开启查询日志,可在设置页面将「Privacy level」调至「Anonymous」或「Hide domain queries」;AdGuard Home 在设置中有一键开关「保存查询日志」并可配置自动清理周期,建议设为 48 小时以内。

上行 DNS 加密:所有上行递归查询必须强制使用 DoH 或 DoT,防止运营商中间人读取明文 DNS 请求。Pi-hole 需在设置中手动启用 Upstream DNS 并填写加密服务器地址(如 https://dns.cloudflare.com/dns-querytls://1dot1dot1dot1.cloudflare-dns.com);AdGuard Home 则在「DNS 设置」中直接勾选加密选项即可。务必验证加密通道已生效,可通过 dig +short @<上行DNS> <testdomain> CH TXT +tls 或在线工具检查。

本地解析控制:对于局域网内部服务(如 Home Assistant、NAS、打印机),可在个人 DNS 中添加自定义域名指向内网 IP。Pi-hole 通过「Local DNS Records」功能添加,AdGuard Home 在「DNS 覆盖规则」中配置。这样既避免了记忆 IP 的麻烦,又完全掌控在本地网络中流转。

广告与追踪器拦截实战参数

阻断列表的选择直接影响拦截效果与误伤率。社区维护的列表更新频率高、覆盖面广,但也存在将正常网站误拦截的可能。以下是一组经过调优的组合参数,适用于大多数家庭场景:

阻断列表配置:推荐使用以下三个来源的组合列表 ——StevenBlack Hosts(统一 hosts 格式,涵盖广告与恶意软件)、AdGuard DNS Filter(官方维护,兼容性好)、OISD Big(针对追踪器的轻量列表)。列表更新频率建议设为每日自动更新,Pi-hole 通过 crontab 调用 pihole -g;AdGuard Home 可在后台启用「自动更新过滤规则」。初始阶段建议先启用 2 至 3 个列表,观察一周后再决定是否添加更多。

拦截阈值与白名单:单一域名在短时间内被重复拦截时,可能是误伤或服务依赖。推荐设置「单域名单日拦截次数上限」为 50 次,超出后自动加入临时白名单并发送通知。个人常用网站(如 GitHub、Steam)如遭遇误拦截,可手动加入白名单并在备注中记录原因,便于后续审计。

性能监控指标:日常运维需关注三个核心指标 —— 查询延迟(p50 应低于 20ms,p99 应低于 100ms)、缓存命中率(目标 60% 以上,可通过 pihole -q -ad 查看阻断统计)、内存使用率(持续高于 80% 需考虑升级设备或优化列表规模)。这些指标可通过 Prometheus + Grafana 面板集成到个人监控仪表盘中。

故障排查与回滚策略

部署初期最常见的故障是「部分设备无法上网」,通常由 DHCP 分配的 DNS 仍未更新或 fallback DNS 配置错误导致。排查步骤如下:首先在问题设备上手动执行 nslookup google.com <你的DNS服务器IP> 确认解析是否正常;若解析正常但无法上网,检查该设备的网关与子网掩码是否正确;若确认是 DNS 问题,立即在路由器将首选 DNS 切换回运营商或公共 DNS,随后再排查个人 DNS 配置。

对于重要设备(如工作用的台式机),建议在本地网络设置中手动指定 DNS 服务器 IP,而非完全依赖 DHCP 自动获取,这样可以在路由器配置出错时保持网络连通。建议保留至少一台始终使用运营商 DNS 的「干净网络」设备,用于对比测试与故障隔离。

小结:参数速查清单

部署个人 DNS 服务器时,以下参数可作为快速参考的起点:静态 IP 与路由器静态租约绑定确保设备始终可寻;上行 DNS 强制加密(DoH 或 DoT)保障隐私不被运营商窥探;日志保留周期不超过 48 小时并关闭云同步;三个来源的阻断列表组合加每日自动更新;查询延迟 p99 低于 100ms、缓存命中率高于 60% 作为性能基线;保留一台 fallback DNS 的「干净网络」设备用于故障对比。将这些参数落地后,你的家庭网络将真正变为自主可控的隐私空间,告别广告追踪与 DNS 泄露的困扰。


参考资料