Mini tutorial Docker e pihole?

O Docker é um software que cria containers de softwares, ele é bem interessante pro pessoal que trabalha com softwares porém também pode ser útil pros curiosos.

Eu tava brincando com ele tem uns dias e percebi que dá para instalar muita bobagem nele, incluindo o pihole. (Não sei se alguém lembra, mas eu estava cogitando em comprar um Celeron J4105 para instalar linux e pihole para testar. hahaha)

No começo eu tive os mais variados problemas para fazer ele funcionar, mas agora está de boa. (as coisas andam quando a gente começa a RTFM)

Agora um minitutorial super rápido de como instalar o Pihole no Docker:
IMPORTANTE: REQUER Windows 10 x64 2004 ou superior.

  1. Baixa e instala o Docker (Stable) (https://www.docker.com/)

  2. Instala o WSL (Windows Subsystem for Linux):
    No PowerShell como administrador: (Tem de ser o PowerShell, as Linhas de Comando [CMD] normais não servem)

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Reinicia o PC, reabre o PowerShell como administrador:

wsl --set-default-version 2

  1. Atualiza o kernel dele: Manual installation steps for older versions of WSL | Microsoft Learn

  2. Instala uma distro WSL: Loja da Microsoft .
    Detalhe: A Loja da Microsoft fica aporrinhando para tu fazer o login, mas dá para pular isso cancelando algumas vezes e clicando em instalar.
    Nota: Não sei se acontece com todo mundo, mas eu tive de ir na seção “prontos para instalar” da loja e clicar em instalar para instalar a distro. A loja apenas baixou a distro porém não instalou.

  3. Nas linhas de comando, digita o nome da distro. Eu usei o ubuntu. Configura a distro escolhida (usuário/senha). GUARDA ESSA SENHA, pode precisar depois acho.

  4. Você deve precisar adicionar o docker.exe e a porta UDP 53 (no caso do Pihole, essa é a porta do DNS) na lista de permissão do seu firewall. Eu uso o Windows Defender FIrewall que faz um trabalhinho decente, então os próximos passos são para ele, mas devem ser parecidos para a maioria dos firewalls.
    6.a. Aperta a tecla do windows e digita “Firewall e proteção de rede”. Depois clica em “Permitir um programa pelo firewall” => “Alterar configurações” (precisa ser admin) → “Permitir outro aplicativo” => “Procurar” e vai na pasta onde você instalou o docker e procura o docker.exe. Ai é só confirmar e habilitar.
    6.b. Caso você vá instalar o pihole, após concluir o passo acima, aperte a tecla do windows novamente e digite “Windows Defender Firewall com Segurança Avançada” => “Executar como administrador”. Nessa nova tela, clique em “Regras de Entrada”, e no lado direito “Nova Regra”.
    No “Assistente para Nova Regra de Entrada”, escolha “Porta”, Avançar, “UDP”, selecione “Portas locais especificas” e coloque 53 lá. Avançar, “Permitir a conexão”, Avançar, desmarca “Público” e “Dominio”, Avançar, coloca um nome que tu lembre o que é e Concluir. Ai é só fechar essa janela.

Com isso o básico do docker já deve estar funcionando.

Volte ao PowerShell.
Caso você não tenha nenhum HTTPd rodando no seu computador e nem nada usando a porta 80, você pode instalar usando as portas normais.

docker run -d --name pihole -e ServerIP=172.20.0.20 -e WEBPASSWORD=SENHADOLOGINNOPIHOLE -e DNS1=127.0.0.1 -e DNS2=1.1.1.1 -e DNS3=8.8.8.8 -p 80:80 -p 53:53/tcp -p 53:53/udp -p 443:443 --restart=unless-stopped pihole/pihole:latest

Agora é só acessar http://127.0.0.1/admin/ e ir olhando.
Nota: “SENHADOLOGINNOPIHOLE” é a senha que você quiser usar.
Importante: Não mexa no DNS1. Ele precisa ser 127.0.0.1, já o DNS2 pode ser qualquer DNS que você use. Além desses tem o Quad9 (9.9.9.9) que também é muito bom.

Caso a porta 80 não esteja disponível, você pode mudar a porta padrão modificando o -p 80:80 para -p 8080:80, por exemplo. Esse 8080 deve ser uma porta que não esteja ocupada.

docker run -d --name pihole -e ServerIP=172.20.0.20 -e WEBPASSWORD=GUIpassWORD -e DNS1=127.0.0.1 -e DNS2=1.1.1.1 -e DNS3=8.8.8.8 -p 8080:80 -p 53:53/tcp -p 53:53/udp -p 443:443 --restart=unless-stopped pihole/pihole:latest

Nesse caso, você precisará usar outro endereço para acessar a interface do pihole: http://127.0.0.1:8080/admin/ (8080 é a porta alternativa que eu escolhi, tu tem de usar a porta que tu escolheu)

– Para usar o Pihole nos dispositivos, é simples. Coloca o DNS primário como o IP do computador que está rodando ele e deixa o DNS secundário em branco.

Espero que esteja tudo correto, estou escrevendo de memória algo que fiz ontem. =p

2 curtidas

Bom tutorial.

Mas eu particularmente faria com um Raspberry Pi por causa da questão do consumo de energia. Se você desligar a máquina que está com o conteiner rodando a internet não deixa de ser acessível mas aumenta o tempo de acesso porque toda vez que alguém for acessar vai procurar pelo DNS primário primeiro (no caso o conteiner do Pihole). Daí até ele ter a resposta do timed out e ir pro DNS reserva tem um intervalo de tempo.

Dá pra instalar o Pihole em um Raspberry Pi Zero (W), que é minúsculo e mais que suficiente, além de poder ficar ligado o tempo todo consumindo pouco.

Sim, Zero W seria uma opção excelente também, porém com essa pandemia e esse dolar insano, tá tudo escasso e caro. Os raspberry dobraram/triplicaram de preço. Cartão de memória de 32GB? hahaha (Sim, 32GB, ai pegava o de 2GB do meu tablet e enfiava no pi, pegava o de 16GB do celular jogava no tablet e o colocava o de 32 no celular. hahaha)

No questão de consumo, não é muito um problema. Tá no desktop que fica 24h/dia ligado, rodando o docker ou não, tá ligado o PC. (Esse PC puxa 45W da tomada quando se está fazendo coisas mais leves como internet ou youtube. claro que é quase 8x mais que o zero W, mas…)

Só tem um probleminha que eu ainda não consegui resolver: se trocarem o usuário, o docker/pihole para de funcionar. Mas isso é limitação do Windows, acho.

No caso você tem que inicializar o conteiner como um serviço do Windows. Dessa forma ele vai subir independente de ter usuário logado na máquina ou quem tiver logado.

EDIT: Run docker as a service - #16 by christiangruber - Docker Desktop for Windows - Docker Community Forums

EDIT2: parece que é mais complicado do que parece.

Parece que é só usar uma tarefa agendada com script de python. Moleza. (as famosas ultimas palavras…)

1 curtida

Este tópico foi fechado automaticamente 30 dias depois da úlima resposta. Novas respostas não são mais permitidas.