# 构建家庭网络净化器:手把手搭建Pi-hole广告过滤系统

构建家庭网络净化器:手把手搭建Pi-hole广告过滤系统

引言:为什么需要网络级广告过滤?

在当今互联网环境中,广告追踪器、恶意脚本和恼人的弹窗广告无处不在。传统的浏览器插件虽然有效,但只能保护单个设备,且无法过滤应用内广告。Pi-hole作为一款网络级的广告过滤解决方案,通过在DNS层面拦截广告域名,为整个局域网内的所有设备提供无缝的广告过滤体验。

本文将详细介绍如何在树莓派或Linux服务器上部署Pi-hole,并深入探讨其高级配置和优化技巧。

🚀 一、准备工作与环境要求

1.1 硬件选择

  • 树莓派(推荐Raspberry Pi 3B+或更高版本):低功耗、静音运行
  • 旧电脑/服务器:任何能运行Linux的x86设备
  • 虚拟机:VMware、VirtualBox或Proxmox
  • 云服务器:VPS也可作为远程过滤节点

1.2 软件要求

  • 操作系统:Raspbian/Raspberry Pi OS(树莓派)或Ubuntu/Debian(其他设备)
  • 至少512MB RAM和8GB存储空间
  • 稳定的网络连接

二、Pi-hole安装与基础配置

2.1 系统初始化(以Ubuntu 22.04为例)

1
2
3
4
5
6
7
8
# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装必要工具
sudo apt install curl git vim -y

# 设置静态IP(重要!)
sudo nano /etc/netplan/00-installer-config.yaml

网络配置文件示例:

1
2
3
4
5
6
7
8
9
network:
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
version: 2

应用网络配置:

1
sudo netplan apply

2.2 一键安装Pi-hole

Pi-hole提供了便捷的自动化安装脚本:

1
2
# 下载并执行安装脚本
curl -sSL https://install.pi-hole.net | bash

安装过程中需要注意的几个关键选择:

  1. 上游DNS服务器:推荐选择Cloudflare(1.1.1.1)或Quad9(9.9.9.9)
  2. 协议选择:建议同时启用IPv4和IPv6
  3. 隐私模式:根据需求选择是否启用
  4. Web管理界面:选择安装并设置管理密码

2.3 初始访问与配置

安装完成后,记录显示的IP地址和管理员密码:

1
2
3
4
5
# 查看Pi-hole状态
pihole status

# 如果需要重置Web界面密码
pihole -a -p

通过浏览器访问 http://你的Pi-holeIP/admin 进入管理界面。

👋 三、网络配置:让所有设备使用Pi-hole

3.1 路由器配置(推荐方法)

进入路由器管理界面(通常为192.168.1.1或192.168.0.1):

  1. 找到DHCP设置
  2. 将主DNS和备用DNS设置为Pi-hole的IP地址
  3. 保存并重启路由器

3.2 手动设备配置

对于不支持路由器配置的网络,可手动设置设备DNS:

Windows:

1
2
控制面板 > 网络和共享中心 > 更改适配器设置
右键网络连接 > 属性 > IPv4 > 使用以下DNS服务器

Linux:

1
2
sudo nano /etc/resolv.conf
# 添加:nameserver 192.168.1.100

Android/iOS:

1
Wi-Fi设置 > 点击当前网络 > 配置DNS > 手动

四、高级功能配置

4.1 自定义过滤列表

除了默认列表,可以添加更强大的过滤规则:

1
2
# 通过Web界面添加,或编辑自定义文件
sudo nano /etc/pihole/adlists.list

添加以下推荐列表:

1
2
3
4
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://mirror1.malwaredomains.com/files/justdomains
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
https://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV.txt

更新列表:

1
pihole -g

4.2 白名单与黑名单管理

添加白名单(允许的域名):

1
2
pihole -w example.com
# 或通过Web界面:Whitelist > Add Domain

添加黑名单(阻止的域名):

1
2
3
pihole -b ads.example.com
# 正则表达式黑名单
pihole --regex '^ad.*\.com$'

4.3 客户端分组与差异化过滤

创建不同的客户端组,应用不同的过滤策略:

1
2
3
4
5
6
7
8
9
10
# 创建组
pihole -g --create-group Kids
pihole -g --create-group Adults

# 添加客户端到组
pihole -a addclient 192.168.1.50 Kids
pihole -a addclient 192.168.1.51 Adults

# 为组分配不同的列表
# 通过Web界面:Groups > 选择组 > 分配域名列表

4.4 设置定期更新

创建自动更新脚本:

1
sudo nano /etc/cron.daily/pihole-update

添加内容:

1
2
3
#!/bin/bash
pihole -up
pihole -g

设置权限:

1
sudo chmod +x /etc/cron.daily/pihole-update

🚀 五、性能优化与监控

5.1 数据库优化

Pi-hole使用SQLite数据库,定期优化可提升性能:

1
2
# 创建优化脚本
sudo nano /opt/pihole-db-optimize.sh
1
2
3
4
5
6
7
8
#!/bin/bash
DB_PATH="/etc/pihole/pihole-FTL.db"
if [ -f "$DB_PATH" ]; then
echo "Optimizing Pi-hole database..."
sqlite3 "$DB_PATH" "VACUUM;"
sqlite3 "$DB_PATH" "ANALYZE;"
echo "Database optimization complete."
fi

添加到cron每周执行:

1
2
sudo crontab -e
# 添加:0 3 * * 0 /opt/pihole-db-optimize.sh

5.2 监控与告警

设置查询日志监控:

1
2
3
4
# 安装监控工具
sudo apt install netdata -y

# 访问监控面板:http://你的Pi-holeIP:19999

设置邮件告警(需要邮件服务器):

1
2
sudo apt install mailutils -y
sudo nano /etc/pihole/alert.sh

六、故障排除与维护

6.1 常见问题解决

DNS解析失败:

1
2
3
4
5
6
7
8
# 检查Pi-hole服务状态
sudo systemctl status pihole-FTL

# 测试DNS解析
dig @192.168.1.100 google.com

# 查看日志
sudo tail -f /var/log/pihole.log

Web界面无法访问:

1
2
3
4
5
# 重启Web服务
sudo systemctl restart lighttpd

# 检查端口占用
sudo netstat -tlnp | grep :80

6.2 备份与恢复

备份配置:

1
2
# 创建备份脚本
sudo nano /opt/pihole-backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
BACKUP_DIR="/home/pi/pihole-backup"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR/$DATE

# 备份关键文件
cp /etc/pihole/setupVars.conf $BACKUP_DIR/$DATE/
cp /etc/pihole/adlists.list $BACKUP_DIR/$DATE/
cp /etc/pihole/whitelist.txt $BACKUP_DIR/$DATE/
cp /etc/pihole/blacklist.txt $BACKUP_DIR/$DATE/

# 备份数据库
sqlite3 /etc/pihole/pihole-FTL.db ".backup $BACKUP_DIR/$DATE/pihole-FTL.db"

# 压缩备份
tar -czf $BACKUP_DIR/pihole_backup_$DATE.tar.gz $BACKUP_DIR/$DATE/

echo "Backup completed: $BACKUP_DIR/pihole_backup_$DATE.tar.gz"

恢复配置:

1
2
3
4
5
6
7
8
9
10
# 解压备份文件
tar -xzf pihole_backup_20240101_120000.tar.gz

# 恢复文件
sudo cp setupVars.conf /etc/pihole/
sudo cp adlists.list /etc/pihole/
# ... 其他文件

# 重启服务
pihole restartdns

✨ 七、安全加固建议

7.1 防火墙配置

1
2
3
4
5
6
7
8
# 配置UFW防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 53/tcp # DNS TCP
sudo ufw allow 53/udp # DNS UDP
sudo ufw allow 80/tcp # Web管理界面
sudo ufw enable

7.2 定期安全更新

1
2
# 创建安全更新脚本
sudo nano /etc/cron.weekly/security-update
1
2
3
4
5
#!/bin/bash
apt update
apt upgrade -y
apt autoremove -y
pihole -up

💡 八、进阶应用:Pi-hole集群与负载均衡

对于大型网络,可以部署多个Pi-hole实例:

8.1 多节点部署

1
2
3
4
5
6
7
# 在所有节点上安装Pi-hole
# 使用相同的配置和过滤列表

# 配置DNS轮询
# 在路由器设置多个DNS服务器:
# 主DNS: 192.168.1.100
# 备用DNS: 192.168.1.101

8.2 使用Keepalived实现高可用

1
2
3
4
5
# 安装Keepalived
sudo apt install keepalived -y

# 配置虚拟IP
sudo nano /etc/keepalived/keepalived.conf

结语

Pi-hole不仅是一个广告过滤工具,更是家庭网络的控制中心。通过本文的详细指南,您应该能够成功部署并优化自己的Pi-hole实例。随着使用时间的增长,您可以根据实际需求不断调整过滤列表和配置,打造完全符合个人需求的纯净网络环境。

记住,网络过滤是一个持续的过程。定期审查查询日志,了解被阻止的请求,适当调整白名单和黑名单,才能在过滤广告的同时不影响正常使用体验。Happy blocking!

[up主专用,视频内嵌代码贴在这]