Pi-hole DNS 广告拦截系统搭建教程
Pi-hole 是一款基于 DNS 的网络级广告和追踪器拦截系统。与浏览器插件不同,Pi-hole 在网络层面工作,可以为所有连接到同一网络的设备提供广告拦截,包括手机 APP 中的广告、智能电视广告等浏览器插件无法拦截的内容。在搬瓦工 VPS 上部署 Pi-hole 后,将设备的 DNS 指向 VPS 即可享受全网广告拦截。部署前请确保已安装好 Docker 和 Docker Compose。
一、系统要求
- 操作系统:Ubuntu 20.04+ 或 Debian 11+。
- 内存:512MB 即可。
- 磁盘:至少 2GB 可用空间。
- 端口:53(DNS)、80(Web 界面)需要开放。
二、准备工作
确保系统没有其他服务占用 53 端口。Ubuntu 默认运行 systemd-resolved,需要先禁用:
# 检查 53 端口占用
ss -lnp | grep :53
# 禁用 systemd-resolved
systemctl stop systemd-resolved
systemctl disable systemd-resolved
# 设置 DNS 解析
echo "nameserver 8.8.8.8" > /etc/resolv.conf
三、Docker Compose 部署
mkdir -p /opt/pihole/{etc-pihole,etc-dnsmasq.d}
cd /opt/pihole
cat > /opt/pihole/docker-compose.yml <<'EOF'
version: '3.8'
services:
pihole:
image: pihole/pihole:latest
restart: always
ports:
- "53:53/tcp"
- "53:53/udp"
- "8880:80/tcp"
environment:
TZ: 'Asia/Shanghai'
WEBPASSWORD: 'your_admin_password'
PIHOLE_DNS_: '8.8.8.8;8.8.4.4;1.1.1.1'
DNSSEC: 'true'
QUERY_LOGGING: 'true'
volumes:
- /opt/pihole/etc-pihole:/etc/pihole
- /opt/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
EOF
docker compose up -d
将 your_admin_password 替换为你自己的管理密码。
四、访问管理面板
访问 http://your-server-ip:8880/admin,使用设置的密码登录。管理面板提供以下功能:
- Dashboard:总览查询次数、拦截次数、拦截率等统计数据。
- Query Log:查看所有 DNS 查询记录和拦截记录。
- Adlists:管理广告拦截列表。
- Whitelist/Blacklist:手动添加白名单或黑名单域名。
- Local DNS:配置本地 DNS 记录。
五、添加中文广告拦截列表
Pi-hole 默认自带基础拦截列表。对于中文互联网,建议添加以下额外列表。在管理面板 > Adlists 中添加:
# 常用的中文广告拦截列表 URL
https://anti-ad.net/easylist.txt
https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt
添加后执行更新:
docker exec pihole pihole -g
六、配置客户端 DNS
将设备的 DNS 服务器设置为搬瓦工 VPS 的 IP 地址即可开始使用 Pi-hole。
Windows
在网络适配器设置中,将首选 DNS 服务器改为 VPS 的 IP 地址。
macOS
在系统偏好设置 > 网络 > 高级 > DNS 中添加 VPS IP 地址。
iOS / Android
在 Wi-Fi 设置中手动配置 DNS 服务器为 VPS IP 地址。
路由器级别
在路由器的 DHCP 设置中将 DNS 服务器改为 VPS IP,这样整个局域网内的设备都会自动使用 Pi-hole。
七、DNS over HTTPS(DoH)
为了加密 DNS 查询,可以配置 Pi-hole 使用上游 DoH。安装 cloudflared 作为 DoH 代理:
cat >> /opt/pihole/docker-compose.yml <<'EOF'
cloudflared:
image: cloudflare/cloudflared:latest
restart: always
command: proxy-dns --address 0.0.0.0 --port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
EOF
docker compose up -d
然后在 Pi-hole 设置中将上游 DNS 改为 cloudflared#5053。
八、白名单管理
有时 Pi-hole 可能会误拦截正常网站。可以通过管理面板的 Whitelist 页面或命令行添加白名单:
# 添加白名单
docker exec pihole pihole -w example.com
# 批量添加白名单
docker exec pihole pihole -w domain1.com domain2.com domain3.com
# 查看白名单
docker exec pihole pihole -w -l
九、数据备份
# 通过 Pi-hole 内置功能备份
docker exec pihole pihole -a -t
# 手动备份配置目录
tar -czf /opt/pihole/backup_$(date +%Y%m%d).tar.gz /opt/pihole/etc-pihole/ /opt/pihole/etc-dnsmasq.d/
十、常见问题
DNS 解析速度慢
Pi-hole 有内置缓存机制,首次查询可能稍慢,后续查询会从缓存返回。可以在 /opt/pihole/etc-dnsmasq.d/ 中增大缓存:
echo "cache-size=10000" > /opt/pihole/etc-dnsmasq.d/99-custom.conf
docker compose restart
某些网站无法访问
在 Query Log 中检查该域名是否被拦截,如果是误拦截则添加到白名单中。
安全提醒
将 DNS 服务暴露在公网上有被滥用的风险。建议通过防火墙限制只允许特定 IP 访问 53 端口:
ufw allow from your_home_ip to any port 53
ufw deny 53
总结
Pi-hole 是一款强大的网络级广告拦截工具,在搬瓦工 VPS 上部署后可以为所有设备提供广告过滤服务。它不仅能屏蔽广告,还能阻止追踪器和恶意域名,提升网络安全性和浏览速度。如果你需要更现代化的界面和功能,也可以考虑 AdGuard Home。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。