docker-pi-hole与Caddy联动:构建HTTPS加密的广告拦截服务器

docker-pi-hole与Caddy联动:构建HTTPS加密的广告拦截服务器

【免费下载链接】docker-pi-hole Pi-hole in a docker container 【免费下载链接】docker-pi-hole 项目地址: https://gitcode.com/gh_mirrors/do/docker-pi-hole

你是否还在为家庭网络中的广告弹窗烦恼?是否担心孩子上网时接触不良内容?通过docker-pi-hole与Caddy的组合,你可以在15分钟内搭建一套安全、高效的广告拦截服务器,同时享受HTTPS加密带来的数据安全保障。本文将详细介绍如何通过Docker Compose实现两者的无缝集成,即使没有专业的网络知识也能轻松上手。

方案架构与工作原理

docker-pi-hole是一个将Pi-hole(网络级广告和恶意内容拦截工具)打包成Docker容器的项目,通过拦截DNS查询实现广告过滤。Caddy则是一款强大的Web服务器,能够自动管理HTTPS证书并提供反向代理功能。两者结合可实现:广告拦截+HTTPS加密+远程安全访问的完整解决方案。

以下是系统工作流程图:

mermaid

核心组件说明:

准备工作与环境要求

在开始部署前,请确保你的系统满足以下条件:

  • Docker Engine 20.10+ 和 Docker Compose v2+
  • 至少1GB RAM和10GB可用磁盘空间
  • 具备管理员权限的Linux系统(推荐Ubuntu 22.04 LTS)
  • 能够访问互联网以获取Docker镜像和HTTPS证书

首先克隆项目仓库:

git clone https://gitcode.com/gh_mirrors/do/docker-pi-hole.git
cd docker-pi-hole

配置步骤详解

1. 自定义Docker Compose配置

项目提供了完整的Caddy集成示例配置,位于examples/docker-compose-caddy-proxy.yml。需要修改以下关键参数:

services:
  pihole:
    environment:
      TZ: 'Asia/Shanghai'  # 修改为你的时区
      FTLCONF_webserver_api_password: 'your_secure_password'  # 设置管理密码
    ports:
      - "53:53/udp"
      - "53:53/tcp"
      - "8081:80/tcp"  # 内部Web端口,不直接暴露到公网
      
  caddy:
    ports:
      - "80:80"   # HTTP端口,用于Let's Encrypt验证
      - "443:443" # HTTPS端口,提供加密访问

2. 配置Caddy反向代理

编辑examples/Caddyfile设置域名和代理规则:

your.domain.com {  # 替换为你的域名
  tls your@email.com  # 用于获取HTTPS证书的邮箱
  
  # 将所有请求转发到Pi-hole的Web界面
  reverse_proxy pihole:8081
  
  # 可选:设置访问密码保护
  basicauth /admin/* {
    admin $2a$14$zJ7ZQPxGv8Z2V6UeQJxS4eX8X8X8X8X8X8X8X8X8X8X8X8X8X8
  }
}

注意:Caddy会自动为配置的域名申请和续期Let's Encrypt证书,确保你的域名已正确解析到服务器IP,且80/443端口开放

3. 启动服务栈

使用Docker Compose启动所有服务:

docker compose -f examples/docker-compose-caddy-proxy.yml up -d

首次启动时,系统会执行以下操作:

  1. 拉取pihole/pihole和caddy镜像
  2. 创建持久化数据卷存储配置和证书
  3. 初始化Pi-hole数据库和过滤规则
  4. 配置Caddy自动获取HTTPS证书

查看服务状态:

docker compose -f examples/docker-compose-caddy-proxy.yml ps

验证与测试

服务启动后,需要进行以下验证步骤:

1. 检查服务运行状态

查看容器日志确认服务正常启动:

# 查看Pi-hole日志
docker logs pihole | grep "FTL started"

# 查看Caddy日志
docker logs caddy | grep "successfully loaded TLS certificate"

2. 配置设备使用Pi-hole DNS

修改路由器或单个设备的DNS服务器设置,指向你的服务器IP。之后访问http://pi.hole/admin或通过HTTPS访问你的域名管理界面。

登录后可以在仪表盘查看拦截统计:

  • 查询总量:所有DNS查询请求数
  • 拦截率:被阻止的广告域名比例
  • 客户端:连接到Pi-hole的设备列表

3. 测试广告拦截效果

访问https://adblock-tester.com/测试广告拦截效果,正常配置下应能拦截90%以上的广告。

高级配置与优化

自定义广告拦截列表

Pi-hole默认使用多个广告拦截列表,你可以通过管理界面添加额外列表:

  1. 登录Pi-hole管理界面
  2. 导航到「Adlists」标签
  3. 添加自定义列表URL,例如:
    • https://raw.githubusercontent.com/crazy-max/AdGuardHome-blocklists/master/filter.txt
    • https://dbl.oisd.nl/

配置访问控制

为增强安全性,可在examples/Caddyfile中添加IP白名单限制管理界面访问:

your.domain.com {
  @admin {
    path /admin/*
    not remote_ip 192.168.1.0/24 127.0.0.1
  }
  respond @admin 403
}

性能监控与日志

Pi-hole日志位于容器内的/var/log/pihole/FTL.log,可通过以下命令实时查看:

docker exec -it pihole tail -f /var/log/pihole/FTL.log

对于长期监控,可配置日志转发到ELK栈或Prometheus+Grafana(需额外配置)。

常见问题解决

Caddy无法获取HTTPS证书

如果Caddy启动后没有成功获取证书,请检查:

  1. 域名是否正确解析到服务器公网IP
  2. 80/443端口是否被防火墙阻止
  3. 服务器是否能访问Let's Encrypt服务器

查看详细错误信息:

docker logs caddy | grep "tls"

Pi-hole服务启动失败

检查src/start.sh初始化脚本的执行情况:

docker exec -it pihole bash
cat /var/log/pihole/FTL.log | grep -i error

常见原因包括:端口冲突(53端口被系统resolved服务占用)或文件权限问题。

升级与维护

按照项目README.md中的说明进行升级:

  1. 拉取最新镜像:docker pull pihole/pihole:latest
  2. 重启服务:docker compose -f examples/docker-compose-caddy-proxy.yml up -d

注意:升级前请备份etc-pihole卷数据,避免配置丢失

总结与最佳实践

通过docker-pi-hole与Caddy的组合,我们构建了一个安全、高效的广告拦截系统,主要优势包括:

  • 容器化部署:简化安装和升级流程
  • HTTPS加密:保护管理界面的安全访问
  • 自动证书管理:Caddy自动处理证书申请和续期
  • 数据持久化:通过Docker卷保存配置和统计数据

推荐的最佳实践:

  1. 定期备份etc-pihole卷数据
  2. 启用自动更新但保持监控
  3. 定期审查拦截统计,优化白名单
  4. 为管理界面配置双因素认证(通过Caddy插件实现)

完整的项目文档和更多高级用法,请参考README.md和官方文档。如有问题,可通过项目的Issue系统寻求帮助。

【免费下载链接】docker-pi-hole Pi-hole in a docker container 【免费下载链接】docker-pi-hole 项目地址: https://gitcode.com/gh_mirrors/do/docker-pi-hole

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值