Files
homelab/docker/stacks/pihole/README.md

5.1 KiB

Pi-hole Stack

A network-wide ad blocker that acts as a DNS sinkhole, protecting your entire network from ads, trackers, and malicious domains. Enhanced with DNSCrypt-proxy for encrypted upstream DNS queries.

Services Overview

  • server: Pi-hole DNS server with web interface for ad blocking and network monitoring
  • dnscrypt-proxy: Encrypted DNS proxy for secure upstream DNS resolution

Key Features

  • Network-wide Ad Blocking: Blocks ads for all devices on your network
  • DNS Sinkhole: Prevents requests to known advertising and tracking domains
  • Encrypted DNS: DNSCrypt-proxy provides encrypted communication with upstream DNS servers
  • Web Interface: Comprehensive dashboard for monitoring and configuration
  • Query Logging: Detailed logs of all DNS queries with filtering capabilities
  • Whitelist/Blacklist: Custom domain allow/block lists
  • Multiple Blocklists: Support for various community-maintained blocklists
  • Network Monitoring: Real-time network activity and top blocked domains
  • DHCP Server: Optional DHCP functionality for network management

Architecture

DNS Flow

  1. Client DNS requests → Pi-hole (port 53)
  2. Pi-hole checks blocklists → Blocks or allows
  3. Allowed requests → DNSCrypt-proxy (port 5353)
  4. DNSCrypt-proxy → Encrypted upstream DNS servers
  5. Response flows back through the chain

Security Features

  • Encrypted Upstream: DNSCrypt-proxy encrypts DNS queries to upstream servers
  • Privacy Protection: Prevents DNS queries from being monitored
  • Malware Protection: Blocks known malicious domains

Pi-hole

DNSCrypt-proxy

Blocklists

Configuration

Environment Variables

Copy stack.env to stack.env.real and configure:

  • TZ: Timezone for log timestamps
  • PIHOLE_WEBPASSWORD: Password for Pi-hole web interface
  • PIHOLE_DNS_PORT: DNS server port (default: 53)
  • PIHOLE_HTTP_PORT: Web interface port (default: 80)
  • SERVICE_DATA_ROOT_PATH: Base path for Pi-hole configuration data

DNSCrypt Configuration

The DNSCrypt-proxy configuration file is located at: ${SERVICE_DATA_ROOT_PATH}/dnscrypt/dnscrypt-proxy.toml

Network Access

  • DNS Service: Port 53 (TCP/UDP) - Configure as DNS server for network devices
  • Web Interface: Port 80 (or configured PIHOLE_HTTP_PORT)
  • Admin Panel: Access via http://your-server-ip:port/admin

Setup Instructions

1. Network Configuration

Configure your router or devices to use Pi-hole as the DNS server:

  • Router: Set DNS server to Pi-hole IP address
  • Individual Devices: Configure network settings to use Pi-hole IP

2. Initial Setup

  1. Access web interface at http://your-server-ip:port/admin
  2. Login with configured password
  3. Configure blocklists under "Group Management" → "Adlists"
  4. Update gravity database to apply blocklists

3. Testing

  • Visit http://doubleclick.net - should be blocked
  • Check Pi-hole dashboard for blocked queries
  • Verify DNS resolution is working for legitimate domains

Blocklist Management

Default Lists

Pi-hole comes with several default blocklists. Popular additions include:

  • StevenBlack Unified: Comprehensive hosts file
  • AdGuard Base Filter: AdGuard's main blocklist
  • EasyList: Popular browser extension list
  • Malware Domain List: Security-focused blocking

Custom Lists

Add custom blocklists via:

  • Web interface: Group Management → Adlists
  • Manual file editing: Add domains to local blocklist files

Advanced Features

Conditional Forwarding

Configure local domain resolution for internal networks.

DHCP Replacement

Pi-hole can replace your router's DHCP server for better integration.

API Access

REST API available for external integrations and monitoring.

Performance Considerations

  • Memory Usage: Minimal resource requirements (~100MB RAM)
  • Storage: Logs and configuration require modest disk space
  • Network Impact: Negligible latency impact on DNS resolution
  • Query Volume: Handles thousands of queries per minute efficiently

Monitoring & Maintenance

Dashboard Metrics

  • Total queries processed
  • Percentage of blocked queries
  • Top blocked domains
  • Query volume over time
  • Client activity statistics

Log Management

  • Query logs with filtering options
  • Long-term trend analysis
  • Privacy-focused logging controls

Dependencies

  • Network access for initial blocklist downloads
  • DNSCrypt-proxy configuration file
  • Persistent storage for Pi-hole configuration and logs