1. 描述

Pi-hole 是一款开源且免费的 DNS 沉洞服务器(DNS sinkhole),能够在不安装任何客户端侧软件的前提下为设备提供网络内容屏蔽服务,非常轻量易用。搭配上家中吃灰已久的树莓派,我们就能够轻松打造属于自己的广告屏蔽助手。
在官网的介绍中,Pi-hole 主要具有以下优点:

  • 易于安装和配置(号称 10 分钟安装配置一条龙)。
  •  全平台,广告屏蔽服务可作用于任何设备,包括 PC、手机、平板电脑。
  • 轻量,对硬件要求极低。
  • 功能稳定且强大,能轻松 hold 住百万级别的请求。
  • 提供了美观的 Web 数据监控仪表盘。
  • 开源且免费。

2. 配置安装

关闭自带的 DNS 服务

systemctl stop systemd-resolved
systemctl disable systemd-resolved

3. docker-compose.yml

version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      TZ: 'Asia/Shanghai'
      WEBPASSWORD: 'changeme'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    restart: unless-stopped

4. host 模式

host 模式是最简单的一种设置方式,该容器和宿主机共有物理网络

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole-host
    cap_add:
      - CAP_NET_RAW
      - CAP_NET_BIND_SERVICE
      - CAP_CHOWN
#      - CAP_NET_ADMIN #uncomment if you want to use DHCP
      - CAP_SYS_NICE
      - CAP_SYS_TIME
    environment:
      - PIHOLE_UID=1000 #CHANGE_TO_YOUR_UID
      - PIHOLE_GID=1000 #CHANGE_TO_YOUR_GID
      - TZ=Asia/Shanghai #CHANGE_TO_YOUR_TZ
      - FTLCONF_webserver_api_password=web-password
      - FTLCONF_webserver_port=8003
      - DNSMASQ_USER=pihole
    volumes:
      - /volume1/docker/pihole/dnsmasq.d:/etc/dnsmasq.d
      - /volume1/docker/pihole/pihole:/etc/pihole
    network_mode: host
    labels:
      - com.centurylinklabs.watchtower.enable=false
    restart: unless-stopped

容器启动后可以通过端口 8003 及设置文件中对应的密码登录

5. bridge 桥接模式

该模式是容器默认的设置模式,该模式中容器需要对外映射对应的端口。在该模式下会存在网络上的所有客户端都是同一个容器 IP 地址的情况

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole-bridge
    cap_add:
      - CAP_NET_RAW
      - CAP_NET_BIND_SERVICE
      - CAP_CHOWN
      - CAP_SYS_NICE
      - CAP_SYS_TIME
    environment:
      - PIHOLE_UID=1234 #CHANGE_TO_YOUR_UID
      - PIHOLE_GID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - FTLCONF_webserver_api_password=YOURPASSWORD
      - FTLCONF_dns_listeningMode=all
      - DNSMASQ_USER=pihole
    volumes:
      - /volume1/docker/pihole:/etc/pihole
    ports:
      - 53:53/udp
      - 8000:80/tcp
      - 8443:443/tcp
    labels:
      - com.centurylinklabs.watchtower.enable=false
    restart: unless-stopped

6. maclan 模式

该模式设置相比前面的复杂,在该模式下所有客户端都能正确显示 IP 。但由于 Macvlan 的额外安全功能及其与主机的通信,该模式下宿主机无法使用 pi-hole 的 DNS 功能

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole-macvlan
    cap_add:
      - CAP_NET_RAW
      - CAP_NET_BIND_SERVICE
      - CAP_CHOWN
#      - CAP_NET_ADMIN #uncomment if you want to use DHCP
      - CAP_SYS_NICE
      - CAP_SYS_TIME
    environment:
      - PIHOLE_UID=1234 #CHANGE_TO_YOUR_UID
      - PIHOLE_GID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - FTLCONF_webserver_api_password=YOURPASSWORD
      - DNSMASQ_USER=pihole
    volumes:
      - /volume1/docker/pihole:/etc/pihole
    networks:
      macvlan:
        ipv4_address: 192.168.0.129
    labels:
      - com.centurylinklabs.watchtower.enable=false
    restart: always

networks:
  macvlan:
    name: macvlan
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: "192.168.0.0/24"
          ip_range: "192.168.0.254/24"
          gateway: "192.168.0.1"

7. 国内 adblock 

  • 无标签
写评论...