Communitygithub.com

homelab-pihole-dns

Instalação do Pi-hole, gerenciamento de listas de bloqueio, configuração de DNS-over-HTTPS, integração com DHCP, registros DNS locais e resolução de problemas de DNS em uma rede doméstica. Use quando a tarefa envolver explicitamente o Pi-hole — instalá-lo, gerenciar listas de bloqueio, configurar DoH ou DHCP, adicionar registros DNS locais ou diagnosticar resolução de DNS com o Pi-hole no caminho.

O que é homelab-pihole-dns?

O Pi-hole é um bloqueador de anúncios DNS em nível de rede que roda em um Raspberry Pi ou qualquer host Linux. Ele bloqueia automaticamente anúncios e domínios de malware para todos os dispositivos da rede, sem necessidade de extensões de navegador. Este skill cobre desde a instalação via Docker ou bare-metal, até a configuração avançada como upstream DNS-over-HTTPS com cloudflared, gerenciamento de listas de bloqueio, criação de registros DNS locais (ex.: nas.home.lan), integração com DHCP e solução de problemas comuns, como queda de DNS. É útil para profissionais de DevOps, SysAdmins e entusiastas de homelab que desejam centralizar o bloqueio de anúncios e telemetria, aumentar a privacidade e ter controle total sobre a resolução de DNS na rede doméstica. O skill também alerta sobre anti-padrões, como depender de um único Pi-hole sem fallback, e fornece práticas recomendadas para alta disponibilidade e segurança.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/homelab-pihole-dns

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Homelab Pi-hole DNS

O Pi-hole é um bloqueador de anúncios DNS em toda a rede que roda em um Raspberry Pi ou em qualquer host Linux. Cada dispositivo da sua rede recebe bloqueio automático de anúncios e domínios maliciosos — sem necessidade de extensões de navegador.

Quando Usar

  • Instalando o Pi-hole em um Raspberry Pi ou host Linux
  • Configurando o Pi-hole como servidor DNS para uma rede doméstica
  • Adicionando ou gerenciando listas de bloqueio
  • Configurando resolvedores upstream DNS-over-HTTPS (DoH)
  • Criando registros DNS locais (ex.: nas.home.lan, pi.home.lan)
  • Resolvendo problemas de dispositivos que perdem acesso à internet após a instalação do Pi-hole
  • Executando o Pi-hole junto com DHCP ou em seu lugar

Como o Pi-hole Funciona

Fluxo normal (sem Pi-hole):
  Dispositivo → solicita ads.tracker.com → ISP DNS → IP real → anúncios carregam

Com Pi-hole:
  Dispositivo → solicita ads.tracker.com → Pi-hole DNS → bloqueado (retorna 0.0.0.0) → sem anúncio

Todas as consultas DNS passam primeiro pelo Pi-hole.
O Pi-hole verifica as listas de bloqueio.
Domínios bloqueados retornam uma resposta nula — o anúncio/rastreador nunca carrega.
Domínios permitidos são encaminhados para o resolvedor upstream (Cloudflare, Google, etc.).

Instalação

Docker (Recomendado)

Docker é a maneira mais fácil de instalar o Pi-hole e torna atualizações e backups simples.

# docker-compose.yml
services:
  pihole:
    image: pihole/pihole:<tag-de-versao-fixa>
    container_name: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"          # Admin web
    environment:
      TZ: "America/New_York"
      WEBPASSWORD: "${PIHOLE_WEBPASSWORD}"   # definido via arquivo .env ou segredo
      PIHOLE_DNS_: "1.1.1.1;1.0.0.1"
      DNSMASQ_LISTENING: "all"
    volumes:
      - "./etc-pihole:/etc/pihole"
      - "./etc-dnsmasq.d:/etc/dnsmasq.d"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN              # necessário apenas se o Pi-hole for servir DHCP

Substitua <tag-de-versao-fixa> por uma tag de lançamento atual do Pi-hole antes de implantar. Evite latest para infraestrutura DNS de longa duração para que as atualizações sejam deliberadas e revisáveis.

Defina PIHOLE_WEBPASSWORD em um arquivo .env ao lado de docker-compose.yml, altere as permissões para 600 e mantenha fora do git — não coloque a senha diretamente no arquivo compose.

Acesse o admin web em: http://<ip-do-pi>/admin

Instalação Bare-Metal (Raspberry Pi OS / Debian / Ubuntu)

O Pi-hole requer um IP estático antes da instalação.

# Passo 1: Atribuir um IP estático (edite /etc/dhcpcd.conf no Pi OS)
sudo nano /etc/dhcpcd.conf
# Adicione no final:
interface eth0
static ip_address=192.168.3.2/24
static routers=192.168.3.1
static domain_name_servers=192.168.3.1

# Passo 2: Baixe e inspecione o instalador antes de executá-lo.
# Prefira o pacote ou caminho de instalador documentado pelo Pi-hole para seu SO/versão.
curl -sSL https://install.pi-hole.net -o pi-hole-install.sh
less pi-hole-install.sh   # revise antes de prosseguir

# Passo 3: Execute
bash pi-hole-install.sh

# Siga o instalador interativo:
# 1. Selecione a interface de rede (eth0 para cabeada — recomendado)
# 2. Selecione o DNS upstream (Cloudflare ou deixe padrão — pode alterar depois)
# 3. Confirme o IP estático
# 4. Instale a interface de admin web (recomendado)
# 5. Anote a senha de admin mostrada no final

Apontando Sua Rede para o Pi-hole

# Método 1: Altere o DNS nas configurações DHCP do roteador (recomendado)
  Interface de admin do roteador → Configurações DHCP → Servidor DNS
  DNS Primário: 192.168.3.2  (IP do Pi-hole)
  DNS Secundário: deixe em branco para bloqueio rigoroso, ou use um segundo Pi-hole.
                 Um fallback público como 1.1.1.1 melhora a disponibilidade durante
                 a implantação, mas pode contornar o bloqueio porque os clientes podem consultá-lo.

  Todos os dispositivos recebem o Pi-hole como DNS automaticamente na próxima renovação DHCP.
  Renovação forçada: reconecte o Wi-Fi ou execute 'sudo dhclient -r && sudo dhclient' no Linux

# Método 2: DNS por dispositivo (útil para testar antes da implantação em toda a rede)
  Windows: Painel de Controle → Adaptador de Rede → Propriedades IPv4 → defina DNS manualmente
  macOS: Ajustes do Sistema → Rede → Detalhes → DNS → defina manualmente
  Linux: /etc/resolv.conf ou NetworkManager

# Método 3: Pi-hole como servidor DHCP (substitui o DHCP do roteador)
  Admin do Pi-hole → Configurações → DHCP → Ativar
  Desative o DHCP no roteador primeiro — dois servidores DHCP na mesma rede causam conflitos
  Vantagem: a resolução de nomes de host funciona automaticamente (dispositivos registram seus nomes)

Gerenciamento de Listas de Bloqueio

# Admin do Pi-hole → Adlists → Adicionar nova adlist

# Listas de bloqueio recomendadas:
  https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
  # padrão — 200k+ domínios

  https://blocklistproject.github.io/Lists/malware.txt
  # domínios de malware

  https://blocklistproject.github.io/Lists/tracking.txt
  # rastreamento/telemetria

# Após adicionar uma lista:
  Ferramentas → Atualizar Gravity (baixa e compila todas as listas de bloqueio)

# Se um site for bloqueado indevidamente (falso positivo):
  Admin do Pi-hole → Whitelist → Adicionar domínio
  Exemplo: api.my-legitimate-service.com

# Verifique o que está sendo bloqueado em tempo real:
  Painel → Log de Consultas (fluxo de consultas DNS ao vivo com status de bloqueio/permissão)

DNS-over-HTTPS Upstream

O DNS-over-HTTPS criptografa suas consultas DNS para que sua operadora não possa ver quais sites você resolve.

# Instale cloudflared (proxy DoH da Cloudflare).
# Prefira o repositório de pacotes da Cloudflare para verificação automática de pacotes assinados.
# Se você baixar um binário diretamente, fixe uma versão e verifique sua soma de verificação.
CLOUDFLARED_VERSION="<versao-fixa>"
curl -LO "https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64"
# Verifique a soma de verificação/assinatura das notas de lançamento da Cloudflare antes de instalar.
sudo mv cloudflared-linux-arm64 /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared

# Crie a configuração do cloudflared
sudo mkdir -p /etc/cloudflared
sudo tee /etc/cloudflared/config.yml << EOF
proxy-dns: true
proxy-dns-port: 5053
proxy-dns-upstream:
  - https://1.1.1.1/dns-query
  - https://1.0.0.1/dns-query
EOF

# Crie o serviço systemd
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

# Agora aponte o Pi-hole para o proxy DoH local:
# Admin do Pi-hole → Configurações → DNS → DNS upstream personalizado
# Defina como: 127.0.0.1#5053
# Desmarque todos os outros resolvedores upstream

Registros DNS Locais

Torne seus serviços acessíveis por nome (ex.: nas.home.lan, grafana.home.lan).

Nota sobre nome de domínio: .home.lan é amplamente usado em homelabs e funciona na prática. O sufixo reservado pelo IETF para uso local é .home.arpa (RFC 8375) — use esse para seguir o padrão. Evite .local para registros DNS do Pi-hole, pois entra em conflito com mDNS/Bonjour.

# Admin do Pi-hole → DNS Local → Registros DNS

  Domínio             IP
  nas.home.lan       192.168.30.10
  pi.home.lan        192.168.30.2
  grafana.home.lan   192.168.30.3
  proxmox.home.lan   192.168.30.4

# De qualquer dispositivo na sua rede:
  ping nas.home.lan        → 192.168.30.10
  http://grafana.home.lan  → seu painel do Grafana

# Para subdomínios, adicione um CNAME:
  Admin do Pi-hole → DNS Local → Registros CNAME
  Domínio: portainer.home.lan → Alvo: pi.home.lan

Resolução de Problemas

# Pi-hole bloqueando algo que não deveria
pihole -q exemplo.com              # Verifique se o domínio está bloqueado e qual lista
pihole -w exemplo.com              # Adicionar à whitelist imediatamente

# DNS não está resolvendo
pihole status                       # Verifique se pihole-FTL está rodando
dig @192.168.3.2 google.com        # Teste DNS diretamente contra o Pi-hole

# Reiniciar DNS do Pi-hole
pihole restartdns

# Verificar logs de consultas para um dispositivo específico
pihole -t                           # Tail ao vivo de todas as consultas
# Ou filtre por cliente no Log de Consultas do admin web

# Atualização do gravity do Pi-hole (atualizar listas de bloqueio)
pihole -g

Anti-Padrões

# RUIM: Depender de um único Pi-hole sem um caminho de recuperação
# Se o Pi-hole travar ou o Pi perder energia, o DNS pode parar de funcionar
# BOM: Mantenha um fallback de roteador documentado para reversão durante a configuração
# MELHOR: Execute duas instâncias do Pi-hole para redundância; evite DNS público de fallback para bloqueio rigoroso

# RUIM: Instalar o Pi-hole sem um IP estático
# Se o Pi receber um novo IP DHCP, todos os dispositivos perdem DNS
# BOM: Defina o IP estático primeiro, depois instale o Pi-hole

# RUIM: Ativar o DHCP do Pi-hole sem desativar o DHCP do roteador primeiro
# Dois servidores DHCP na mesma rede distribuem IPs conflitantes
# BOM: Desative o DHCP do roteador, depois ative o DHCP do Pi-hole

# RUIM: Nunca atualizar o gravity (listas de bloqueio)
# Novos domínios de anúncios e malware se acumulam — listas desatualizadas os perdem
# BOM: Agende uma atualização semanal do gravity: pihole -g (ou ative em Configurações → API)

Melhores Práticas

  • Atribua um IP estático ou reserva DHCP ao Pi antes de instalar o Pi-hole
  • Use o Pi-hole como DNS primário; para redundância, adicione um segundo Pi-hole em vez de um resolvedor público se precisar de bloqueio rigoroso
  • Ative o DoH (DNS-over-HTTPS) com cloudflared para consultas upstream criptografadas
  • Defina home.lan como seu domínio local e crie registros DNS para todos os seus serviços
  • Revise o Log de Consultas ocasionalmente — consultas bloqueadas mostram o que os dispositivos estão fazendo

Habilidades Relacionadas

  • homelab-network-setup
  • homelab-vlan-segmentation
  • homelab-wireguard-vpn

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Habilidades Relacionadas