基于树莓派与Pi-hole打造家庭网络广告拦截器
1. 项目概述打造你的家庭网络“净水器”如果你和我一样对网页上无处不在的弹窗广告、视频前动辄几十秒的贴片广告感到厌烦甚至担心一些隐蔽的跟踪器窃取隐私那么这个项目就是为你准备的。今天我们来动手搭建一个基于树莓派的网络级广告拦截器它就像给整个家庭网络装上了一台高效的“净水器”从源头过滤掉广告和恶意流量。更酷的是我们还会给它加上一块3.5英寸的小屏幕实时显示拦截数据、网络状态让它从一个默默工作的“幕后英雄”变成一个能直观展示战绩的“仪表盘”。这个方案的核心是Pi-hole一个开源、免费的DNS sinkholeDNS黑洞软件。它的工作原理非常巧妙我们家里的手机、电脑、智能电视等所有设备上网时都需要通过DNS服务器将“www.example.com”这样的域名转换成IP地址。Pi-hole的作用就是充当这个家庭的本地DNS服务器。它内置了一个庞大的“黑名单”里面包含了已知的广告、跟踪器和恶意软件的域名。当家庭网络中的任何设备试图访问这些黑名单上的域名时Pi-hole会直接拦截这次DNS查询返回一个“空”的IP地址导致广告根本无法加载而正常的网页内容则完全不受影响。这种方法的优势在于它是在网络层进行过滤无需在每台设备上安装插件或软件一次设置全家受益。我们将使用树莓派作为硬件平台它功耗低、体积小、24小时运行稳定是充当家庭网络基础设施的绝佳选择。通过本教程你不仅能获得一个干净清爽的网络环境还能深入理解DNS的工作原理和家庭网络的配置是一次非常有成就感的硬件与软件结合的实践。2. 核心组件选型与准备清单在开始动手之前我们需要准备好所有“食材”。选择合适的组件是项目成功的第一步这里我会详细解释每个部分的作用和选购要点帮你避坑。2.1 硬件清单解析树莓派主板Raspberry Pi 3B/4B作用项目的“大脑”负责运行Pi-hole软件和驱动显示屏。选型建议树莓派3B或4B2GB内存版本即可是最佳选择。3B性能足够且功耗更低4B性能更强未来如果还想在它上面跑其他服务如家庭媒体服务器、下载机会更游刃有余。不建议使用更早的型号如2B或Zero系列因为它们在处理大量DNS请求和驱动显示屏时可能会力不从心。注意事项务必购买官方或靠谱渠道的树莓派避免买到硬件有缺陷的“矿渣”板。3.5英寸电阻触摸屏作用实时可视化显示Pi-hole的运行状态如已拦截广告数量、DNS查询次数、CPU/内存使用率等。选型建议市面上常见的3.5寸屏大多基于Waveshare或兼容其驱动的方案。购买时一定要确认卖家提供适用于树莓派的驱动和安装教程。我用的就是从某宝淘来的兼容Waveshare的屏价格约在60-80元人民币性价比很高。避坑指南注意区分“电阻屏”和“电容屏”。我们项目主要用于显示偶尔可能需要触控操作如重启服务电阻屏完全够用且通常更便宜。确保屏幕接口是直接通过GPIO排针与树莓派连接的而非通过USB。MicroSD存储卡作用安装树莓派操作系统和所有软件。选型建议至少8GB Class 10或U1规格的卡。我强烈推荐16GB或32GB为系统和日志留出更多空间。品牌方面SanDisk、Samsung、Kingston的卡经过大量用户验证可靠性高。切勿使用来源不明、低速的卡否则系统运行会异常缓慢。实操心得专门准备一张卡给这个项目用不要和别的树莓派项目混用。首次使用前最好用官方工具SD Card Formatter进行完全格式化而不是快速格式化这能避免一些玄学问题。电源与网络电源必须使用5V/2.5A以上的优质电源适配器。供电不足是树莓派运行不稳定的头号元凶可能导致屏幕闪烁、Pi-hole服务意外停止。官方电源是最省心的选择。网络连接强烈建议使用网线Ethernet连接路由器。DNS查询对延迟敏感有线连接能提供最稳定、最低延迟的网络环境确保广告过滤体验流畅。无线Wi-Fi可以作为备选但在信号不佳的区域可能会引入额外延迟。外壳可选但推荐作用保护树莓派和屏幕使项目更美观、完整。方案可以使用开源3D打印模型如Thingiverse上的设计也可以购买现成的亚克力外壳。如果选择3D打印注意模型是否为你的屏幕型号和树莓派型号量身定制预留了屏幕和接口的开孔。2.2 软件与环境准备树莓派操作系统我们将使用Raspberry Pi OS Lite (32-bit)。这是官方推出的无桌面命令行版本资源占用极低非常适合作为服务器长期运行。没有图形界面意味着更少的后台进程更稳定的性能。刷写工具SD卡格式化工具使用SD卡协会官方的SD Card Formatter进行彻底格式化。镜像烧录工具Raspberry Pi Imager官方推荐或BalenaEtcher。它们操作简单能自动验证烧录结果比老牌的Win32DiskImager更易用。SSH客户端用于从你的电脑远程登录树莓派命令行。Windows 10/11自带的PowerShell或命令提示符已支持SSH命令。如果想用图形化工具PuTTY依然是经典选择。macOS和Linux终端直接内置SSH。注意整个过程中树莓派需要连接互联网通过网线或Wi-Fi以下载Pi-hole等软件。请确保你的网络环境可以访问GitHub等海外开源代码托管平台必要时可能需要配置网络环境。这是软件获取的合法合规需求与任何不当网络行为无关。3. 系统初始化与无头模式配置所谓“无头模式”Headless就是指在不连接显示器、键盘鼠标的情况下完成树莓派的初始系统设置。这是玩转树莓派的必备技能。3.1 烧录系统与基础配置下载与烧录前往树莓派官网下载Raspberry Pi OS Lite (32-bit)的镜像文件.img.xz格式。使用SD Card Formatter彻底格式化你的MicroSD卡。打开Raspberry Pi Imager。点击“选择操作系统” - “Raspberry Pi OS (other)” - “Raspberry Pi OS Lite (32-bit)”。然后选择你的SD卡最后点击“烧录”。烧录过程会自动验证完成后会提示成功。关键文件配置在烧录后的SD卡上操作 烧录完成后电脑会识别出一个名为“boot”的盘符约256MB。这个分区是树莓派启动时读取的。我们需要在这里创建两个文件启用SSH在“boot”分区根目录下新建一个空文件命名为ssh注意没有后缀名。这相当于告诉树莓派“开机后请打开SSH服务允许远程登录。”配置Wi-Fi如果使用有线网络可跳过同样在“boot”分区根目录新建一个文本文件命名为wpa_supplicant.conf。用记事本打开填入以下内容并替换你的Wi-Fi信息countryCN ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 network{ ssid你的Wi-Fi名 psk你的Wi-Fi密码 key_mgmtWPA-PSK }countryCN设置国家代码为中国这会影响Wi-Fi信道选择非常重要。ssid和psk务必用英文双引号括起来。如果你的Wi-Fi没有密码则key_mgmtNONE并删除psk那一行。首次启动与登录将配置好的SD卡插入树莓派连接网线或依赖已配置的Wi-Fi和电源。等待约1-2分钟让树莓派完成首次启动。查找树莓派IP地址这是关键一步。有几种方法路由器后台查看登录你家路由器的管理页面通常是192.168.1.1或192.168.0.1在“连接设备”或“DHCP客户端列表”里找到一个名为“raspberrypi”的设备其IP地址就是我们要找的。使用手机APP一些网络扫描工具APP可以帮助发现设备。使用电脑命令如果路由器不支持查看在电脑上打开命令提示符CMD或终端输入arp -a在一大堆IP地址中寻找物理地址MAC Address开头为B8:27:EB或DC:A6:32树莓派4的条目其对应的IP就是树莓派的地址。记下这个IP假设为192.168.1.100。3.2 首次SSH登录与基础安全设置SSH连接打开你电脑上的终端Windows PowerShell/CMD macOS/Linux Terminal或PuTTY。输入命令ssh pi192.168.1.100将IP替换成你查到的。首次连接会提示“无法确认主机真实性”输入yes继续。默认密码是raspberry。输入时屏幕不会有显示这是正常的输完回车即可。必须做的安全与基础配置 登录成功后你会看到命令行提示符piraspberrypi:~ $。请立即执行以下命令修改pi用户密码输入passwd然后按照提示输入新的、强壮的密码。更新系统软件包这能确保系统拥有最新的安全补丁。sudo apt update sudo apt upgrade -y这个过程可能需要几分钟取决于网速。可选但推荐扩展文件系统如果烧录的Lite系统默认只占用SD卡的部分空间。运行sudo raspi-config选择Advanced Options-Expand Filesystem将剩余空间全部利用起来。完成后选择Finish它会提示重启选择“是”。实操心得完成首次登录和更新后建议先重启一次树莓派sudo reboot让所有更新生效再进行下一步。稳定的基础系统是后续所有工作的前提。4. Pi-hole核心安装与深度配置现在我们进入核心环节——安装和配置Pi-hole。我将带你走一遍官方安装脚本并解释其中关键选项的含义。4.1 一键安装与选项详解在树莓派的SSH终端中执行官方的一键安装命令curl -sSL https://install.pi-hole.net | bash这个命令会下载并运行安装脚本。接下来会出现一个基于文本的交互界面你需要用键盘的Tab键切换选项空格键选中/取消回车键确认。欢迎界面直接点OK。上游DNS提供商选择这是Pi-hole在遇到非广告域名时向谁去查询真正的IP地址。我强烈建议选择Google或Cloudflare。它们速度快、稳定性高、且支持DNS-over-HTTPS等隐私增强协议。如果你对隐私有极高要求也可以选择其他提供商但可能需要额外配置。为什么不是ISP的DNS国内一些运营商的DNS可能会有劫持或污染现象影响体验。协议选择选择你希望拦截的协议。建议全选IPv4和IPv6以确保覆盖全面。静态IP地址设置这是至关重要的一步Pi-hole作为DNS服务器必须有一个固定的IP地址否则路由器或设备配置的DNS指向会失效。安装脚本通常会检测到当前IP192.168.1.100并询问是否将其设为静态IP。请选择“是”。它会自动帮你修改网络配置文件/etc/dhcpcd.conf将IP地址、网关、DNS服务器固定下来。这比在路由器上绑定MAC地址更可靠。Web管理界面选择“On”启用。这样你就可以通过浏览器访问http://树莓派IP地址/admin来管理Pi-hole了。Web服务器选择选择lighttpd这是一个轻量级的Web服务器足够Pi-hole使用。隐私模式选择“On”。这会隐藏一些可能暴露本地网络结构的详细信息。安装日志选择“On”便于日后排查问题。安装过程会自动进行包括更新软件包列表、安装依赖、配置Pi-hole等。最后脚本会显示一个重要的总结信息其中包含Pi-hole的Web管理界面密码一串随机生成的字符务必记下来例如KxQfTp9YzL2qPi-hole的IP地址就是你设置为静态的那个地址例如192.168.1.1004.2 初始登录与基础优化安装完成后先不急着配置网络。我们进入Web界面看看。登录Web管理界面在你的电脑浏览器中输入http://192.168.1.100/admin替换成你的IP。输入安装结束时给出的随机密码登录。首次登录后强烈建议立即修改密码在左侧菜单栏进入Settings-API / Web interface-Change password设置一个你自己容易记住的强密码。添加广告列表引力场 Pi-hole的强大在于其维护的广告域名列表。默认安装包含一些基础列表但我们可以添加更多。进入Group Management-Adlists。在输入框中可以添加一些公认维护活跃的列表例如https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts https://mirror1.malwaredomains.com/files/justdomains https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt点击Add然后回到Tools-Update Gravity点击Update。这个过程会下载并合并所有列表中的域名可能需要几分钟。注意事项列表不是越多越好。过多的列表可能会轻微影响查询速度并可能误杀一些正常网站称为“误伤”。建议从默认列表开始如果发现某些广告没拦住再针对性添加列表。如果发现某个常用网站功能异常可以到Query Log查看是否被误拦截然后将其加入白名单Whitelist。理解仪表盘 Web界面的首页仪表盘信息丰富Queries / Blocked总查询数 / 已拦截数。这是最直观的成果展示。Top Clients发起DNS查询最多的设备。看看谁才是“广告大王”。Top Domains/Top Advertisers被查询或拦截最多的域名。Query Log实时滚动所有DNS请求可以清晰看到哪些被放行绿色哪些被拦截红色。5. 3.5英寸显示屏驱动与PADD状态显示集成硬件部分登场了让我们的Pi-hole“开口说话”实时展示工作状态。5.1 安装与配置显示屏驱动物理连接务必在树莓派断电状态下操作。将3.5英寸屏幕的GPIO排针对准树莓派的GPIO针脚有金属触点的一面朝向树莓派USB口方向轻轻按下确保完全贴合。安装驱动以最常见的Waveshare兼容屏为例重新通电并SSH登录树莓派。执行以下命令更新并安装驱动# 更新系统 sudo apt update sudo apt full-upgrade -y # 安装驱动所需的库 sudo apt install -y raspberrypi-kernel-headers # 克隆Waveshare驱动仓库请根据你屏幕的具体型号查阅卖家提供的驱动链接 # 以下是通用3.5寸电阻屏驱动的示例具体git地址可能不同 git clone https://github.com/waveshare/LCD-show.git cd LCD-show/ # 执行安装脚本通常针对3.5寸屏的命令类似下面这个请以卖家说明为准 sudo ./LCD35-show驱动脚本会自动修改/boot/config.txt等配置文件并重启树莓派。重启后树莓派的命令行界面应该会显示在3.5英寸屏幕上。如果没有显示请检查屏幕排线是否插紧。是否运行了正确的驱动安装脚本不同分辨率、接口的屏幕驱动不同。查看/boot/config.txt文件末尾是否添加了正确的设备树叠加层dtoverlay...配置。5.2 安装与配置PADDPADD (Pi-hole Advanced Display) 是一个精美的Bash脚本专门为小屏幕显示Pi-hole状态而设计。下载与安装PADD# 回到用户主目录 cd ~ # 下载PADD脚本 wget -N https://raw.githubusercontent.com/jpmck/PADD/master/padd.sh # 赋予脚本执行权限 sudo chmod x padd.sh # 可以试运行一下看看效果 ./padd.sh运行后屏幕上会显示一个彩色的、信息丰富的状态界面包括Pi-hole状态、系统资源、网络信息等。按CtrlC可以退出。设置PADD开机自启并适配屏幕 我们希望树莓派启动后直接在屏幕上全屏显示PADD而不是普通的登录提示。编辑Pi用户的环境配置文件sudo nano ~/.bashrc滚动到文件最末尾添加以下代码# 如果是在TTY1第一个文本终端通常是屏幕显示的那个上登录则自动运行PADD if [ $TERM linux ] [ $(tty) /dev/tty1 ]; then # 进入PADD脚本所在目录 cd /home/pi # 循环运行PADD如果意外退出则重新启动 while true; do ./padd.sh sleep 2 done fi“$TERM” “linux”用于判断是本地控制台。“$(tty)” “/dev/tty1”确保只在连接了屏幕的那个终端上运行避免在SSH会话中也启动PADD。sleep 2是每次PADD刷新后的间隔2秒一次信息更新比较合适。按CtrlO保存按CtrlX退出nano编辑器。调整控制台字体大小关键步骤 默认的控制台字体在3.5寸屏幕上可能太大导致PADD显示错乱。我们需要调小字体。sudo dpkg-reconfigure console-setup会进入一个蓝色配置界面字符编码选择UTF-8。字体选择Terminus。这个字体在小屏幕上显示清晰。字体大小选择6x12。这是关键这个大小能让PADD的布局正常显示在480x320的屏幕上。完成后重启树莓派sudo reboot。重启后你应该会看到树莓派启动然后自动进入PADD的彩色信息界面完美适配3.5寸屏幕PADD会每2秒刷新一次实时展示广告拦截数量、查询速率、CPU温度等信息非常直观。6. 部署到家庭网络让所有设备享受无广告网络Pi-hole和屏幕都准备好了现在是时候让它为整个家庭网络服务了。有两种主要部署方式路由器级部署和设备级部署。首选路由器级一劳永逸。6.1 路由器级部署推荐这种方法只需要在路由器上配置一次所有连接到该路由器的设备包括有线、无线以及访客网络都会自动使用Pi-hole进行DNS解析。操作原理进入你家路由器的管理后台找到DHCP服务器设置或DNS设置将原本由运营商自动分配的DNS服务器地址如114.114.114.114改为你树莓派Pi-hole的静态IP地址如192.168.1.100。具体步骤因路由器品牌而异以下为通用思路浏览器登录路由器管理IP通常是192.168.1.1或192.168.0.1。找到“网络设置”、“LAN设置”、“DHCP服务器”或“互联网设置”等相关选项。寻找“首选DNS服务器”和“备用DNS服务器”可能叫法不同。将两者都填写为你的Pi-hole的IP地址。有些路由器允许设置多个DNS同样全部改成Pi-hole的IP。保存设置路由器可能会重启。重要在路由器上更改DNS后需要重启路由器并且最好也重启一下家里的客户端设备手机、电脑或者在其网络设置里“续租DHCP”或“忘记网络重新连接”以获取新的DNS配置。验证配置完成后在任意一台连接该Wi-Fi的设备上打开命令提示符或终端输入nslookup doubleclick.net这是一个著名的广告域名。如果返回的地址是0.0.0.0或你的Pi-hole的IP地址说明拦截成功。如果返回了一个真实的IP则说明配置未生效。6.2 设备级部署备用方案如果路由器不支持自定义DNS某些运营商定制路由器或者你只想让部分设备使用Pi-hole可以采用此方案。Windows 10/11打开“设置” - “网络和Internet” - “以太网”或“WLAN”。点击当前连接的网络选择“IP分配”下的“编辑”。将“自动(DHCP)”改为“手动”。打开“IPv4”开关IP地址和子网掩码通常可以保持自动获取的或者根据当前网络填写如IP:192.168.1.50 子网前缀长度:24 网关:192.168.1.1。关键将“首选DNS”和“备用DNS”都设置为你的Pi-hole IP192.168.1.100。保存。macOS系统设置 - 网络 - 选择当前连接 - 详细信息 - TCP/IP。在“配置IPv4”旁点击“配置DNS”。点击左下角“”号添加你的Pi-hole IP地址192.168.1.100并移除其他DNS服务器。iOS/iPadOS设置 - Wi-Fi - 点击当前连接的Wi-Fi右侧的“i”图标。下滑找到“配置DNS”改为“手动”。删除已有的DNS服务器添加你的Pi-hole IP地址192.168.1.100。Android设置 - 网络和互联网 - Wi-Fi - 点击当前连接的Wi-Fi。点击“编辑”或类似按钮可能是铅笔图标。将“IP设置”从“DHCP”改为“静态”。填写IP地址需与当前网络同网段且未被占用如192.168.1.150、网关路由器IP如192.168.1.1。关键在DNS 1和DNS 2中都填入你的Pi-hole IP192.168.1.100。保存。注意事项设备级配置的缺点是每个新设备都需要手动设置且如果Pi-hole的IP变了所有设备都需要重新配置。因此确保树莓派设置为静态IP是重中之重。7. 高级维护、问题排查与优化技巧系统运行起来后维护和优化能让它更稳定、更高效。7.1 日常维护操作更新Pi-hole和广告列表更新广告列表GravityPi-hole的拦截能力依赖于域名列表。建议每周手动更新一次或在Web界面 (Tools-Update Gravity) 点击更新或通过SSH执行pihole -g更新Pi-hole核心程序当有功能更新或安补丁时通过SSH执行pihole -up管理白名单与黑名单误拦截白名单如果发现某个常用网站或服务如某些银行网站、小众App的验证码无法使用先到Pi-hole的Query Log查看该域名是否被拦截红色。如果是可以将其加入白名单 (Whitelist)。漏网之鱼黑名单如果发现某个广告没拦住可以手动将其域名加入黑名单 (Blacklist)。你可以使用浏览器的开发者工具F12 Network标签查看网页加载的资源找到广告域名的规律如ads.example.com然后进行添加。7.2 常见问题与排查实录即使按照教程操作也可能会遇到一些问题。这里记录了几个我踩过的坑和解决方法。问题设备无法上网或部分网站打不开。排查思路第一步检查树莓派本身能否上网。SSH登录后执行ping 8.8.8.8。如果不通检查树莓派的网络连接网线、Wi-Fi配置。第二步检查Pi-hole服务是否运行。执行pihole status。如果服务未运行尝试pihole restartdns。第三步检查客户端设备的DNS设置是否正确指向了Pi-hole的IP。在电脑上执行ipconfig /all(Windows) 或cat /etc/resolv.conf(Linux/macOS) 查看DNS服务器地址。第四步检查Pi-hole的上游DNS服务器是否有效。在Pi-hole Web界面的Settings-DNS中确保你选择的服务器如Google是启用的。可以尝试切换到另一个上游DNS如Cloudflare测试。第五步可能是广告列表过于激进误杀了正常域名。尝试在Query Log中搜索打不开的网站的关键域名看是否被拦截。临时禁用Pi-hole过滤 (pihole disable 5m禁用5分钟) 测试网站是否能打开如果能则需排查白名单。问题3.5寸屏幕显示异常花屏、错位、不亮。排查思路物理连接断电后重新插拔屏幕排线确保金手指完全插入且没有歪斜。驱动匹配确认安装的驱动脚本完全匹配你的屏幕型号。不同分辨率480x320, 800x480或接口SPI, HDMI的驱动不能混用。查阅屏幕卖家提供的资料。配置文件检查/boot/config.txt确认驱动安装脚本添加的dtoverlay行是否正确且没有被注释掉行首没有#。供电不足使用万用表测量给树莓派供电的电压满载时不应低于4.8V。更换为官方或足额的5V/3A电源。问题PADD显示不完整或字体过大。解决方案这几乎都是控制台字体设置问题。务必重新运行sudo dpkg-reconfigure console-setup并确保选择了Terminus字体和6x12字号。完成后必须重启。问题路由器重启后设备获取的DNS不是Pi-hole。原因你可能只在客户端设备设置了静态IP和DNS但路由器DHCP仍然在向新设备分配它自己的DNS。解决回到6.1 路由器级部署务必在路由器的DHCP设置中将下发给客户端的DNS服务器地址修改为Pi-hole的IP。这才是真正的全网生效。7.3 性能监控与优化建议监控资源使用通过PADD屏幕或SSH登录后运行htop命令可以实时查看树莓派的CPU、内存使用情况。Pi-hole本身非常轻量即使在树莓派3B上长期CPU占用率通常也低于5%内存占用约100MB。优化查询速度启用缓存Pi-hole默认会缓存DNS查询结果大幅提升重复访问网站的速度。可以在Settings-DNS中调整缓存大小默认10000条记录如果设备很多可以适当增大。选择延迟低的上游DNS在Pi-hole的Web界面 (Settings-DNS) 中可以测试不同上游DNS的响应时间选择最快的那个。定期查看日志Pi-hole的Query Log不仅是排查问题的工具也能让你直观感受到它为你拦截了多少垃圾流量成就感满满。长期运行后仪表盘上的统计数据会非常可观。这个基于树莓派和Pi-hole的网络广告拦截器不仅仅是一个工具更是一个了解网络原理、学习Linux运维、体验软硬件结合的绝佳项目。看到屏幕上不断跳动的拦截数字你会真切感受到它正在默默地为你和家人的网络体验保驾护航。