自建 DNS 服务 Pi-Hole
大家好,今天想跟你们聊聊怎么在家用一台小机器搭建自己的 DNS 服务,也就是最近几年在极客圈里非常火的 Pi‑Hole。如果你跟我一样,受够了网页里层出不穷的广告、运营商的 DNS 劫持、或者想把局域网里的设备统一管理,那这篇文章或许能帮你打开新世界的大门。
---1. 为什么要自建 DNS?
- 广告拦截:大多数网站的广告都是通过 DNS 返回的域名解析来加载的。Pi‑Hole 会把这些广告域名直接解析到 0.0.0.0,让它们压根进不来。
- 隐私保护:不再把查询记录交给运营商或公共 DNS(如 Google 8.8.8.8),所有请求都在本地处理,心里踏实。
- 加速访问:局域网内部直接返回 IP,省去跨境或跨运营商的路由跳转,访问速度往往会有明显提升。
- 统一管理:所有设备(手机、电脑、智能电视、IoT 设备)都可以把 DNS 指向 Pi‑Hole,一次配置,全网生效。
---2. 准备工作
1. 硬件:树莓派、旧的 x86 小主机、NVIDIA Jetson、甚至一台常年开着的 Gen8 都可以。只要能跑 Debian/Ubuntu 系统,512 MB 内存足够。
2. 系统:推荐 Ubuntu Server 20.04 LTS 或 Raspberry Pi OS(64 位),两者对 Pi‑Hole 的兼容性都很好。
3. 网络:确保机器在局域网里有固定的 IP(可以 DHCP 预留或手动设定),并且能访问互联网(用于下载列表和更新)。
4. SSH:如果你是远程管理,最好先打开 SSH,省得每次都要接显示器。
> 小贴士:如果你用的是树莓派,建议使用 SSD(或高速 TF 卡)做系统盘,I/O 性能会更好,查询响应更快。
---3. 一键安装 Pi‑Hole
Pi‑Hole 提供了一个官方安装脚本,几乎把所有依赖都打包好了。下面的步骤在大多数 Debian 系系统上都通用:
# 1. 切换到 root(或使用 sudo)
sudo su -
2. 下载并运行安装脚本
curl -sSL https://install.pi-hole.net | bash
脚本会弹出交互式界面,按提示选择:
- Upstream DNS:可以先选 Google(8.8.8.8)或 Cloudflare(1.1.1.1),后续可以在后台随意改。
- Block Lists:默认已经有一些公开的拦截列表,建议全部勾选,后面可以自己在后台添加更多。
- Web Interface:打开后可以在浏览器里查看统计、添加自定义域名等。
- IPv4 / IPv6:如果你只使用 IPv4,选 IPv4 即可;如果局域网里有 IPv6 设备,两个都打开。
安装完成后,脚本会给你一个管理密码(记得记下来),以及一行类似 http://<你的IP>/admin/ 的地址。打开浏览器,输入地址,用刚才的密码登录,就会看到 Pi‑Hole 的仪表盘。
4. 基础配置与使用
4.1 设置路由器 DNS
登录你的路由器(光猫或主路由),把 DHCP 分配的 DNS 改成 Pi‑Hole 的 IP。比如:
首选 DNS:192.168.1.100 # Pi‑Hole 的 IP
备用 DNS:8.8.8.8 # 防止 Pi‑Hole 宕机时还能上网
保存后,所有通过 DHCP 获得 IP 的设备会自动把 DNS 请求发送到 Pi‑Hole。
4.2 手动指定 DNS
如果有些设备(比如手机)不支持自动获取 DNS,你可以在对应设备的网络设置里手动填写:
DNS1: 192.168.1.100
DNS2: 8.8.8.8
4.3 查看统计
仪表盘左侧的 Query Log 会实时显示所有 DNS 查询。你可以:
- 按域名过滤,看看哪些广告域名被拦截。
- 按客户端查看哪台设备最“活跃”。
- 通过 Long‑term data 查看每日/每周的拦截趋势。
4.4 自定义白名单 / 黑名单
有时一些正常网站会被误拦截(比如某些视频站的 CDN),这时可以在 Whitelist 中添加对应域名。同样,如果你想手动屏蔽某个域名(比如某些追踪脚本),可以在 Blacklist 中加入。
---5. 进阶玩法:广告拦截、DHCP、统计
5.1 更多拦截列表
官方自带的列表已经相当丰富,但如果你想更激进,可以在 Settings → Block Lists 中手动添加社区维护的列表,常用的有:
- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
- https://v.firebog.net/hosts/Prigent-Ads.txt
添加后记得点 Save 并 Update,Pi‑Hole 会自动下载并合并。
5.2 用 Pi‑Hole 做 DHCP 服务器
如果你的路由器 DHCP 功能比较弱(比如只能分配 100 条),可以把 DHCP 任务交给 Pi‑Hole。步骤如下:
1. 在路由器里关闭 DHCP。
2. 在 Pi‑Hole 的 Settings → DHCP 中打开 DHCP server,设置 IP 范围(如 192.168.1.150–192.168.1.200),以及网关、DNS。
这样所有设备的 IP 分配、域名解析全部由 Pi‑Hole 一把抓,查询日志会更完整。
5.3 集成 Prometheus + Grafana
如果你想把自己的 DNS 统计做成炫酷的可视化面板,Pi‑Hole 提供了 Teleporter 接口和 FTL(the FTL engine)自带的 Prometheus exporter。只要在 FTL 配置里打开 DBIMPORT,再在 Prometheus 里抓取 pihole_* 指标,就能在 Grafana 画出拦截率、查询延迟等实时图表。
5.4 使用 DNS-over-HTTPS(DoH)
运营商有时候还是会劫持 DNS 查询,为了彻底加密,可以在 Pi‑Hole 的 Settings → DNS 中启用 DoH,把上游 DNS 换成 Cloudflare(1.1.1.1)或 Google(8.8.8.8)的 HTTPS 接口。这样即使在公司网络或公共 Wi‑Fi,也能保证查询不被窃听。
---6. 常见问题小结
- Pi‑Hole 跑不起来怎么办?
先检查系统是否装了 dnsmasq(Pi‑Hole 自带的 FTL 本身已经实现了 dnsmasq 的功能),如果冲突需要先卸载系统的 dnsmasq。
- 某些网站被误拦截怎么办?
在 Whitelist 中加入对应域名,或者在 Query Log 中找到被拦截的记录,点 “Add to Whitelist”。
- 查询速度变慢?
确认 Pi‑Hole 的机器没有磁盘 I/O 瓶颈;可以把它放在 SSD 上,或者把日志级别调低(Settings → Privacy)。
- 路由器不支持自定义 DNS 怎么办?
大多数路由器都支持手动 DNS,如果真的不行,可以在每台设备上手动设置,或者用 Pi‑Hole 的 DHCP 功能直接接管。
---结语
自建 DNS 服务其实并没有想象中那么高不可攀,只要有一台常年开着的“小主机”,装上 Pi‑Hole,几分钟就能把全网的广告拦截、隐私保护和访问加速一次性搞定。更重要的是,整个过程完全透明,你可以随时查看拦截了什么、谁在查询、甚至自己编写规则。
如果你也想让家里上网更干净、更安全,不妨动手试试。安装完成后,去仪表盘看看拦截数量,保证会让你惊喜连连。有什么问题,欢迎在评论区留言,咱们一起交流经验!祝你们玩得开心 🚀
自建 DNS 服务 Pi-Hole
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法