Ter um Pi-hole a rodar na rede para cortar publicidade, rastreadores e domínios maliciosos a nível de DNS é o sonho de qualquer sysadmin. O problema clássico sempre foi o hardware: ter de dedicar um Raspberry Pi ou subir uma VM num servidor apenas para isto.

Mas o cenário mudou. Com a chegada do RouterOS v7, a MikroTik trouxe o suporte nativo a Containers (Docker). Isto significa que pode rodar a imagem oficial do Pi-hole diretamente no router de borda da sua rede, economizando energia, pontos de falha e gestão de hardware.

Abaixo, detalho o procedimento direto da trincheira para colocar esta arquitetura a funcionar.

⚠️ Atenção Absoluta: Requisitos do Sistema

Antes de colocar as mãos na linha de comandos, preste atenção nestes três pilares:

  1. RouterOS v7 Obrigatório: O suporte a containers não existe no RouterOS v6. Precisa de estar no RouterOS v7 (recomendado v7.4 ou superior) e com o pacote extra container instalado.

  2. Arquitetura Suportada: A imagem do Pi-hole precisa de ser compatível com a arquitetura da sua Routerboard (ARM, ARM64 ou x86). Equipamentos baseados em MIPSBE (como as antigas RB2011) não suportam este cenário.

  3. Não mate a sua NAND (Armazenamento Externo): Containers fazem muita leitura e escrita nos discos. Se rodar a imagem na memória interna (NAND) do seu MikroTik, vai queimar o chip rapidamente. Use uma porta USB ou slot microSD com um disco formatado em EXT4.

Passo a Passo da Instalação

Considere que já formatou uma pendrive ou cartão SD e este está montado no MikroTik como disk1. O nosso laboratório utilizará a rede 172.17.0.0/24 para a ponte do Docker, sendo o 172.17.0.2 o IP do nosso Pi-hole.

1. Habilitar o Modo de Container no MikroTik

A MikroTik, por questões de segurança, obriga que a ativação dos containers seja confirmada fisicamente ou via console seguro. Execute:

Snippet de código
/system/device-mode/update container=yes

Após o comando, terá 5 minutos para pressionar o botão físico de Reset no seu router ou desligar/ligar a energia da máquina. Sem isto, a funcionalidade não desbloqueia.

2. Criar a Rede (Bridge e VETH)

Os containers precisam de uma interface virtual (veth) ligada a uma bridge para comunicar com o router.

Snippet de código
# Criar a interface virtual com o IP do Pi-hole e o gateway
/interface/veth
add name=veth-pihole address=172.17.0.2/24 gateway=172.17.0.1

# Criar a bridge isolada para os containers
/interface/bridge
add name=bridge-containers

# Adicionar a interface VETH à bridge
/interface/bridge/port
add bridge=bridge-containers interface=veth-pihole

# Dar um IP para a bridge (o Gateway dos containers)
/ip/address
add address=172.17.0.1/24 interface=bridge-containers network=172.17.0.0

Não se esqueça de configurar o NAT (Masquerade) para a rede 172.17.0.0/24 poder aceder à internet e baixar a imagem, caso ainda não tenha uma regra geral na sua rede.

3. Configurar as Variáveis de Ambiente e Registry

O Pi-hole precisa saber a sua password de acesso à página web e o fuso horário. A MikroTik precisa saber de onde fazer download da imagem (Docker Hub).

Snippet de código
# Configurar a URL do Docker Hub
/container/config
set registry-url=https://registry-1.docker.io

# Criar a lista de variáveis
/container/envs
add name=pihole_envs key=TZ value="America/Sao_Paulo"
add name=pihole_envs key=WEBPASSWORD value="sua_senha_segura_aqui"
add name=pihole_envs key=DNSMASQ_LISTENING value="all"

4. Fazer Download e Criar o Container

Agora vamos puxar a imagem e gravá-la no armazenamento externo (disk1/pihole). Este processo pode demorar alguns minutos dependendo da sua ligação e do processador do MikroTik.

Snippet de código
/container
add remote-image="pihole/pihole:latest" interface=veth-pihole root-dir=disk1/pihole envlist=pihole_envs logging=yes

Para monitorar se a extração terminou, execute /container/print. Quando o estado passar de extracting para stopped, ele está pronto.

5. Iniciar o Pi-hole

Snippet de código
/container/start 0

(O "0" é o número do container na lista do comando print. Verifique se corresponde ao seu).

Se tudo estiver a funcionar, poderá abrir o browser noutra máquina da sua rede e aceder à interface de administração: [http://172.17.0.2/admin](http://172.17.0.2/admin).

O Golpe Final: Forçar o Tráfego DNS

Para que o Pi-hole efetivamente bloqueie os anúncios da rede, os seus clientes têm de usar o IP 172.17.0.2 como servidor de DNS principal. Pode fazer isso alterando o servidor DNS no DHCP Server da sua LAN:

Snippet de código
/ip/dhcp-server/network
set [find] dns-server=172.17.0.2

Ou, se for o "paranóico" da infraestrutura (e deveria ser), crie uma regra de NAT para redirecionar qualquer pedido DNS "rebelde" da sua rede (dispositivos IoT, TVs) para o Pi-hole à força:

Snippet de código
/ip/firewall/nat
add action=dst-nat chain=dstnat dst-port=53 protocol=udp src-address=192.168.88.0/24 to-addresses=172.17.0.2
add action=dst-nat chain=dstnat dst-port=53 protocol=tcp src-address=192.168.88.0/24 to-addresses=172.17.0.2

O isolamento e a convergência nunca estiveram tão integrados num equipamento de rede corporativa. Já atualizou o seu MikroTik para a v7 e começou a explorar o motor de containers? Deixe o seu feedback!