Tailscale DNS: Bloquear Anúncios na Rede Privada Virtual em 2026

Tags: Tailscale · DNS · Pi-hole · Ad-blocking · WireGuard · VPN

Por Duarte Spínola · 2 de Julho de 2026

Tailscale DNS: Bloquear Anúncios na Rede Privada Virtual em 2026

O Tailscale construído sobre WireGuard tornou-se numa das soluções VPN mais populares para PMEs e utilizadores individuais. Menos conhecida é a sua capacidade de funcionar como camada de DNS centralizado: ao configurar um servidor DNS personalizado na mesh, todos os dispositivos ligados à rede virtual passam a resolver domínios através desse servidor. Combinado com Pi-hole ou AdGuard Home, obténs bloqueio de anúncios, rastreadores e domínios maliciosos em toda a rede privada virtual — portátil, telemóvel, servidor, independentemente de estar em casa, no escritório ou numa rede pública.

Este guia mostra como configurar Tailscale com Pi-hole e AdGuard Home, com comandos reais para Windows, Linux e macOS, tabelas comparativas e boas práticas para PMEs. Para contexto sobre Zero Trust, consulta o artigo sobre Zero Trust para PMEs. Para acessos sem VPN tradicional, vê o artigo sobre Cloudflare Tunnel com WARP.

Conteúdos

1. O Que é o Tailscale e Como Funciona o DNS

O Tailscale é uma VPN mesh baseada em WireGuard que cria uma rede privada virtual sobreposta (overlay network) entre os teus dispositivos. Cada nó recebe um IP fixo na gama 100.64.0.0/10 (CGNAT) e pode comunicar directamente com qualquer outro nó, sem servidor central intermédio. A coordenação é feita pelo control plane do Tailscale (cloud ou self-hosted com headscale), mas os dados fluem peer-to-peer com encriptação WireGuard.

O DNS no Tailscale funciona de três formas:

  • DNS global (MagicDNS) — resolve nomes de nós da mesh (ex: servidor.tail-scale.ts.net) usando os servidores do Tailscale
  • DNS personalizado (Split DNS) — envia queries de domínios específicos para um servidor interno (ex: Pi-hole a correr num Raspberry Pi na rede)
  • DNS de override global — todas as queries DNS de todos os nós passam por um servidor à tua escolha

ℹ️ Nota: O DNS personalizado do Tailscale funciona ao nível do cliente. Cada dispositivo ligado à mesh recebe a configuração DNS do control plane e aplica-a localmente. Isto significa que o bloqueio funciona mesmo quando o dispositivo está fora da rede física — no café, no aeroporto, no 4G.

O funcionamento técnico é simples: o cliente Tailscale intercepta pedidos DNS do sistema operativo e envia-os para o servidor configurado na consola de administração. Se o servidor for um Pi-hole a correr num nó da mesh (IP 100.64.x.x), as queries viajam pela rede encriptada WireGuard até ao Pi-hole, que resolve ou bloqueia conforme as listas configuradas. Tudo sem expor o Pi-hole à Internet pública.

2. Arquitectura Tailscale + DNS Ad-blocking

Antes de instalar, compreender a arquitectura é essencial. O cenário recomendado para uma PME ou utilizador avançado é:

  • Nó DNS — um Raspberry Pi, VPS ou servidor Linux a correr Pi-hole ou AdGuard Home, ligado à mesh Tailscale com IP fixo (ex: 100.64.1.10)
  • Control plane — Tailscale Cloud (gratuito até 100 dispositivos) ou headscale self-hosted
  • Clientes — Windows, macOS, Linux, iOS, Android, todos com cliente Tailscale activo
  • Configuração DNS — no admin console, definir Pi-hole como DNS global ou split DNS

O fluxo de uma query DNS é:

Utilizador no portátil (4G, fora do escritório)
    │
    │  dig exemplo.com
    ▼
Cliente Tailscale (intercepta DNS do SO)
    │
    │  Encripta via WireGuard
    ▼
Pi-hole (100.64.1.10 — nó da mesh)
    │
    ├── Domínio em lista de bloqueio → retorna 0.0.0.0 (anúncio bloqueado)
    ├── Domínio interno (lan.empresa.pt) → resolve via DNS local
    └── Domínio normal → encaminha para 1.1.1.1 (Cloudflare) ou 8.8.8.8

Esta arquitectura tem três vantagens fundamentais: privacidade (o ISP nunca vê as queries DNS porque viajam encriptadas pela mesh), bloqueio centralizado (uma só configuração aplica-se a todos os dispositivos) e mobilidade (funciona em qualquer rede, sem depender do DNS do router local).

Componente Função Custo
Tailscale Control Plane Coordenar chaves WireGuard e distribuir config DNS Gratuito até 100 nós
Pi-hole / AdGuard Home Resolver e bloquear domínios Gratuito (open-source)
Raspberry Pi 4 / VPS Alojar Pi-hole ou AdGuard Home ~50€ (RPi) ou ~5€/mês (VPS)
Clientes Tailscale Aplicar config DNS em cada dispositivo Gratuito

3. Instalar Tailscale em Windows/Linux/macOS

O Tailscale tem clientes nativos para todas as plataformas. A instalação é directa e o registo faz-se via browser com uma conta Google, Microsoft, GitHub ou e-mail.

Linux (Debian/Ubuntu)

# Adicionar repositório oficial e instalar
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

sudo apt update
sudo apt install tailscale

# Autenticar e ligar à mesh
sudo tailscale up

# Verificar estado e IP atribuído
tailscale status
tailscale ip

Linux (Qualquer distro — script universal)

# Script universal para qualquer distro Linux
curl -fsSL https://tailscale.com/install.sh | sh

# Iniciar e autenticar
sudo tailscale up --accept-dns=true

# Confirmar que o DNS da mesh está activo
tailscale status --json | grep -A5 DNS

Windows e macOS

Para Windows, descarrega o instalador aqui e executa. Para macOS, o cliente está na Mac App Store ou via Homebrew:

# macOS via Homebrew
brew install --cask tailscale

# Iniciar aplicação
open -a Tailscale

💡 Dica: O parâmetro --accept-dns=true ao fazer tailscale up garante que o cliente aceita a configuração DNS do control plane. Sem isto, o dispositivo usa o DNS da rede local e o bloqueio não funciona.

4. Configurar DNS Personalizado no Tailscale

A configuração de DNS faz-se na consola de administração em https://login.tailscale.com/admin/dns. Existem duas modalidades:

1. Global DNS (override) — todas as queries de todos os nós passam pelo servidor indicado. Ideal para bloqueio universal de anúncios:

  1. Aceder a DNS → Add DNS server → Custom → Global
  2. Inserir o IP Tailscale do Pi-hole (ex: 100.64.1.10)
  3. Guardar e aguardar propagação (segundos a minutos)

2. Split DNS — apenas domínios de um sufixo específico são enviados para o servidor indicado. Útil quando queres resolver domínios internos (ex: empresa.pt) sem afectar o DNS do resto:

Exemplo Split DNS na consola:
  Sufixo: empresa.pt
  Servidor: 100.64.1.10 (Pi-hole)

Resultado:
  dig servidor.empresa.pt     → resolvido por 100.64.1.10
  dig google.com              → resolvido pelo DNS do SO local

Também podes configurar DNS via CLI com tailscale up:

# Definir Pi-hole como DNS global via CLI
sudo tailscale up \
  --accept-dns=true \
  --accept-routes=false

# O DNS global é configurado no admin console, não via CLI.
# O CLI apenas aceita ou rejeita a config recebida.

⚠️ Atenção: Se usares --accept-dns=false num cliente, esse dispositivo ignora toda a configuração DNS do Tailscale. O bloqueio de anúncios não funcionará nesse nó. Isto é útil para servidores que não devem depender do Pi-hole, mas deve ser usado conscientemente.

5. Instalar Pi-hole como DNS Ad-blocker

O Pi-hole é o ad-blocker DNS mais popular e maduro. Corre como um contentor Docker e oferece interface web para gestão de listas de bloqueio, allowlists e estatísticas. A instalação recomendada é via Docker Compose para facilitar actualizações e backups.

Instalação via Docker Compose

# Criar directório do Pi-hole
mkdir -p ~/pihole/etc-pihole ~/pihole/etc-dnsmasq.d

# Criar ficheiro docker-compose.yml
cat > ~/pihole/docker-compose.yml << 'EOF'
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "8080:80/tcp"
    environment:
      TZ: 'Europe/Lisbon'
      WEBPASSWORD: 'uma-password-forte'
      DNS1: '1.1.1.1'
      DNS2: '8.8.8.8'
    volumes:
      - ./etc-pihole:/etc/pihole
      - ./etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped
EOF

# Iniciar
cd ~/pihole
docker compose up -d

# Verificar se está a responder
dig @localhost google.com

Após a instalação, o Pi-hole está disponível em http://ip-do-servidor:8080/admin. A password de administração é a definida em WEBPASSWORD.

Instalação directa (sem Docker)

# Instalação automática (Debian/Ubuntu)
curl -sSL https://install.pi-hole.net | bash

# Durante o instalador, escolher:
# - Interface de rede: eth0 ou wlan0
# - Upstream DNS: Cloudflare (1.1.1.1) ou Google (8.8.8.8)
# - Listas de bloqueio: default (StevenBlack + AdGuard)

# Alterar password de admin após instalação
pihole -a -p

Ligar o Pi-hole ao Tailscale

# No mesmo servidor onde está o Pi-hole, instalar Tailscale
curl -fsSL https://tailscale.com/install.sh | sh

# Ligar à mesh aceitando DNS (importante para coerência)
sudo tailscale up --accept-dns=false

# O --accept-dns=false aqui é intencional:
# o próprio Pi-hole NÃO deve usar-se a si mesmo como DNS.
# Ele resolve via 1.1.1.1 e 8.8.8.8 directamente.

# Confirmar IP Tailscale atribuído
tailscale ip -4
# Exemplo de output: 100.64.1.10

ℹ️ Nota: O Pi-hole escuta na porta 53 por defeito. Quando o Tailscale envia queries para 100.64.1.10:53, o Pi-hole recebe-as na interface Tailscale. Não é necessário abrir portas no router nem configurar port-forwarding — toda a comunicação acontece dentro da mesh.

6. Configurar Tailscale para Usar Pi-hole

Com o Pi-hole a correr e ligado à mesh, o passo seguinte é dizer ao Tailscale para o usar como DNS global. Na consola de administração:

  1. Ir a DNS → Nameservers → Add Nameserver → Custom → Global
  2. Inserir o IP Tailscale do Pi-hole: 100.64.1.10
  3. Guardar
  4. Garantir que MagicDNS está activado (DNS → Enable MagicDNS)

Para validar num cliente qualquer da mesh:

# No cliente (Windows/Linux/macOS), verificar que as queries
# passam pelo Pi-hole:
dig doubleclick.net

# Output esperado (se bloqueado):
# ;; ANSWER SECTION:
# doubleclick.net.  2  IN  A  0.0.0.0

# Consultar o Pi-hole para confirmar que recebeu a query:
tailscale ssh [email protected] "pihole -c recent"

# Ou ver em tempo real via interface web:
# http://100.64.1.10:8080/admin/queries.php

Para adicionar listas de bloqueio adicionais no Pi-hole, via interface web em Group Management → Adlists:

Lista Endereço Cobertura
StevenBlack Unified https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts ~120.000 domínios
AdGuard DNS Filter https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt ~50.000 domínios
OISD Blocklist https://big.oisd.nl/domainswild ~80.000 domínios
HaGeMubi (Portugal) https://raw.githubusercontent.com/hagemui/hagemubi/main/hosts Domínios PT específicos

💡 Dica: Nem todos os bloqueios são desejados. Se um site legítimo para de funcionar, consulta o log de queries no Pi-hole e adiciona o domínio à Allowlist (Group Management → Domains → Allow). Isto é particularmente comum com serviços de autenticação (Microsoft, Google) e plataformas de streaming.

7. Alternativa: AdGuard Home

O AdGuard Home é a alternativa mais popular ao Pi-hole. Escrito em Go, oferece DNS-over-HTTPS e DNS-over-TLS nativos, client filtering por dispositivo e uma interface mais polida. É particularmente interessante para quem quer encriptação DNS out-of-the-box.

Instalação via Docker

# Criar directório
mkdir -p ~/adguardhome/work ~/adguardhome/conf

# docker-compose.yml
cat > ~/adguardhome/docker-compose.yml << 'EOF'
services:
  adguardhome:
    container_name: adguardhome
    image: adguard/adguardhome:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "3000:3000/tcp"
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf
    restart: unless-stopped
EOF

# Iniciar
cd ~/adguardhome
docker compose up -d

# Configuração inicial via browser:
# http://ip-do-servidor:3000
# - Definir interface de escuta: 0.0.0.0
# - Upstream DNS: 1.1.1.1, 8.8.8.8
# - Activar listas de bloqueio: AdGuard, EasyList

Instalação directa (Linux)

# Descarregar e instalar
curl -s -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

# Ou manualmente:
wget https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_amd64.tar.gz
tar xvf AdGuardHome_linux_amd64.tar.gz
cd AdGuardHome
sudo ./AdGuardHome -s install

# Configurar como serviço systemd
sudo systemctl enable AdGuardHome
sudo systemctl start AdGuardHome

Comparação: Pi-hole vs AdGuard Home

Característica Pi-hole AdGuard Home
Linguagem PHP + dnsmasq Go (binário único)
DNS-over-HTTPS nativo Não (requer cloudflared) Sim (built-in)
DNS-over-TLS nativo Não Sim (built-in)
Filtragem por cliente Sim (via grupos) Sim (mais granular)
Interface web Sim (PHP) Sim (React, mais polida)
IPv6 Sim Sim
API REST Limitada Completa
Dependências PHP, lighttpd, dnsmasq Nenhuma (binário único)
Licença EUPL-1.2 GPL-3.0
GitHub Stars (2026) ~50.000 ~27.000

💡 Recomendação: Para PMEs que valorizam encriptação DNS nativa (DoH/DoT) e gestão por cliente, o AdGuard Home é a melhor escolha. Para quem quer simplicidade e ecossistema maior (plugins, integrações), o Pi-hole continua excelente. Ambos funcionam perfeitamente com Tailscale.

8. Configurar ACLs no Tailscale

Por defeito, o Tailscale permite que todos os nós se comuniquem entre si. Em ambientes de PME, convém restringir ligações e garantir que apenas dispositivos autorizados contactam o Pi-hole. As ACLs (Access Control Lists) definem-se via ficheiro hujson na consola em Access Controls.

// Exemplo de ACL para PME com Pi-hole restringido
{
  "tagOwners": {
    "tag:dns": ["[email protected]"],
    "tag:staff": ["[email protected]"],
    "tag:guest": ["[email protected]"]
  },
  "acls": [
    // Staff pode aceder a tudo na mesh
    { "action": "accept", "src": ["tag:staff"], "dst": ["*:*"] },

    // Convidados só podem usar o Pi-hole (porta 53) e nada mais
    { "action": "accept", "src": ["tag:guest"], "dst": ["tag:dns:53"] },

    // Pi-hole pode sair para Internet (DNS upstream)
    { "action": "accept", "src": ["tag:dns"], "dst": ["*:53"] }
  ],
  "tests": [
    { "src": "tag:guest", "accept": ["100.64.1.10:53"] },
    { "src": "tag:guest", "deny": ["100.64.1.10:8080"] }
  ]
}

Após guardar, atribuir as tags aos dispositivos na consola em Machines → Edit → Tags. O Pi-hole recebe tag:dns, os postos de trabalho tag:staff e dispositivos de visitantes tag:guest.

🚨 Perigo: Se o Pi-hole estiver na mesma máquina que outros serviços (ex: NAS, Nextcloud), as ACLs não bloqueiam acesso à porta 8080 da interface web do Pi-hole a menos que a especifiques explicitamente. Revisita as ACLs após qualquer alteração de topologia.

9. Exit Node com DNS Ad-blocking

Um exit node é um nó Tailscale que encaminha todo o tráfego Internet dos clientes (não apenas DNS) através de si. É útil para dispositivos em redes restritivas (hotéis, aeroportos) ou para evadir geoblocking. Combinado com DNS ad-blocking, obténs um túnel completo: o cliente envia DNS para o Pi-hole e o tráfego web para o exit node, ambos bloqueando anúncios e rastreadores.

# No servidor que será exit node (ex: VPS com IP público)
sudo tailscale up \
  --advertise-exit-node \
  --accept-dns=false

# O --accept-dns=false evita que o exit node use
# o DNS da mesh para si próprio (pode causar loops).

# Aprovar o exit node na consola:
# Machines → [servidor] → Edit → Approve exit node

# No cliente, activar o uso do exit node:
sudo tailscale up \
  --accept-dns=true \
  --exit-node=100.64.1.20

# Verificar que o tráfego sai pelo exit node:
curl https://ifconfig.me
# Deve retornar o IP público do VPS, não o do cliente

Com esta configuração, o fluxo completo é:

Cliente (cafeteria com Wi-Fi público)
    │
    ├── DNS queries → WireGuard → Pi-hole (100.64.1.10)
    │     └── Bloqueia anúncios, resolve legítimos
    │
    └── Tráfego HTTP/HTTPS → WireGuard → Exit Node (100.64.1.20)
          └── Sai para Internet com IP do VPS

ℹ️ Nota: O exit node não precisa de ser a mesma máquina que o Pi-hole. A separação é recomendada: o Pi-hole num Raspberry Pi em casa, o exit node num VPS. Assim, o DNS resolve rápido (nó próximo) e o tráfego web sai pelo VPS (IP limpo).

10. DNS-over-HTTPS e DNS-over-TLS

Por defeito, o tráfego entre o Pi-hole e o upstream DNS (ex: Cloudflare 1.1.1.1) é em texto limpo (UDP porta 53). O ISP do servidor onde está o Pi-hole consegue ver todas as queries. Para resolver isto, usa-se DNS-over-HTTPS (DoH) ou DNS-over-TLS (DoT).

Pi-hole com cloudflared (DoH)

# Instalar cloudflared no servidor do Pi-hole
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

# Criar configuração
sudo mkdir -p /etc/cloudflared
sudo cat > /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

# Instalar como serviço
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

# No Pi-hole (interface web):
# Settings → DNS → Custom DNS servers (IPv4)
# 127.0.0.1#5053

# Remover 1.1.1.1 e 8.8.8.8 directos.
# A partir de agora, o Pi-hole resolve via cloudflared DoH.

AdGuard Home (DoH e DoT nativos)

# No AdGuard Home, configurar upstream encriptado:
# Settings → DNS Settings → Upstream DNS servers

# DoH (DNS-over-HTTPS):
https://dns.cloudflare.com/dns-query
https://dns.google/dns-query

# DoT (DNS-over-TLS):
tls://1.1.1.1
tls://8.8.8.8

# Aplicar e testar:
# Settings → DNS Settings → Test upstreams

Com DoH/DoT activado, a cadeia completa de encriptação é:

Segmento Protocolo Encriptado?
Cliente → Pi-hole WireGuard (DNS via mesh) Sim
Pi-hole → Upstream DoH (HTTPS 443) ou DoT (TLS 853) Sim
Cliente → Exit Node WireGuard Sim

💡 Dica: Com Tailscale + DoH, o ISP do cliente e o ISP do servidor Pi-hole não conseguem ver as queries DNS. A única entidade que vê as queries é o provedor DoH (Cloudflare ou Google). Se isto for preocupante, considera correr um resolver recursivo próprio com BIND9 ou Knot Resolver.

11. Auditar e Monitorizar Tráfego DNS

O Pi-hole e o AdGuard Home mantêm logs detalhados de todas as queries. Para uma PME sujeita a NIS2 ou GDPR, a retenção e análise destes logs é importante. O Pi-hole oferece estatísticas via interface web e API; o AdGuard Home exporta via API REST.

Métricas via CLI no Pi-hole

# Estatísticas resumidas
pihole -c

# Output exemplo:
# Domains being blocked:        121.456
# DNS queries today:              8.742
# Ads blocked today:              2.103 (24,1%)
# DNS cache hits:                 5.891 (67,4%)

# Ver queries em tempo real
pihole -t

# Top 10 domínios mais consultados
pihole -c -top 10

# Top 10 domínios bloqueados
pihole -c -topads 10

Exportar logs para análise externa

# Exportar log do Pi-hole para CSV
docker exec pihole pihole-FTL --stats > pihole_stats_$(date +%Y%m%d).json

# Para integrar com Grafana, consultar a API:
curl -s "http://100.64.1.10:8080/admin/api.php?summary" \
  -H "X-Pi-hole: 1" | jq .

# Resultado (JSON):
# {
#   "domains_being_blocked": 121456,
#   "dns_queries_today": 8742,
#   "ads_blocked_today": 2103,
#   "ads_percentage_today": 24.05
# }

Para integração com Grafana, consulta o artigo sobre Grafana para PMEs com Prometheus e configura um datasource que consome a API do Pi-hole.

Retenção de logs (RGPD)

Para cumprir o RGPD, os logs DNS não devem conter dados pessoais identificáveis por períodos prolongados. No Pi-hole, configura retenção em Settings → System → DNS queries log retention. O AdGuard Home tem opção equivalente em Settings → Logs → Retention. O recomendado é 7-30 dias para fins operacionais, sem associar IPs a utilizadores.

12. Resolução de Problemas

Os problemas mais comuns e como os diagnosticar. Para técnicas avançadas de diagnóstico de rede em Linux, consulta o artigo sobre Diagnóstico de Conectividade Linux Avançado.

Sintoma Causa provável Solução
Anúncios não bloqueados num cliente --accept-dns=false no cliente Reactivar com tailscale up --accept-dns=true
Sem DNS em todos os clientes Pi-hole parado ou inacessível docker logs pihole e tailscale ping 100.64.1.10
DNS lento (latência alta) Pi-hole noutro continente Mover Pi-hole para VPS na mesma região ou usar exit node local
Queries não aparecem no Pi-hole DNS global não configurado Verificar consola → DNS → Global nameserver aponta para IP Tailscale correcto
Site legítimo bloqueado Domínio em lista de bloqueio Adicionar à Allowlist no Pi-hole/AdGuard
Porta 53 ocupada systemd-resolved activo no Linux sudo systemctl disable systemd-resolved ou mudar Pi-hole para porta alternativa

Diagnóstico passo-a-passo

# 1. Verificar que o cliente Tailscale está a usar o DNS da mesh
tailscale status --json | grep -A10 DNS

# 2. Verificar conectividade ao Pi-hole pela mesh
tailscale ping 100.64.1.10

# 3. Testar DNS directamente ao Pi-hole
dig @100.64.1.10 google.com

# 4. Verificar que o Pi-hole está a bloquear
dig @100.64.1.10 doubleclick.net
# Output esperado: ANSWER: 0.0.0.0

# 5. Verificar logs do contentor Docker
docker logs pihole --tail 50

# 6. Verificar configuração DNS na consola Tailscale
# (não há CLI para isto; verificar em browser)
# https://login.tailscale.com/admin/dns

13. Boas Práticas para PMEs

Para uma implementação robusta em ambiente de PME, considera as seguintes recomendações:

  • Redundância de DNS — nunca ter um único Pi-hole. Configurar dois nós (um no escritório, um VPS) e usar ambos como DNS global no Tailscale. Se um cair, o outro responde.
  • Atualização de listas — agendar pihole -g via cron semanalmente para actualizar listas de bloqueio.
  • Segmentação por grupos — no Pi-hole, criar grupos: Staff (bloqueio padrão), Convidados (bloqueio agressivo), Servidores (sem bloqueio, apenas resolução). Atribuir dispositivos por MAC ou IP Tailscale.
  • Backup de configuração — fazer backup de /etc/pihole e /etc/dnsmasq.d regularmente. No AdGuard Home, backup de /opt/adguardhome/conf.
  • Encriptação obrigatória — activar DoH ou DoT entre Pi-hole e upstream. Nunca deixar queries DNS em texto limpo.
  • ACLs restritivas — usar tags no Tailscale para garantir que apenas dispositivos autorizados contactam o Pi-hole. Evitar *:* em produção.
  • Monitorização proativa — integrar Pi-hole com Grafana para alertas se o volume de queries cair subitamente (possível falha de cliente).
  • Documentação — manter registo de domínios na allowlist e razão para cada entrada. Facilita auditoria RGPD.
  • Tailscale SSH — usar tailscale ssh em vez de SSH tradicional para administrar o Pi-hole. Reduz superfície de ataque.

⚠️ Atenção: O bloqueio de DNS não substitui um ad-blocker ao nível do browser (uBlock Origin). DNS blocking bloqueia ao nível do domínio, mas não remove elementos de página nem bloqueia scripts inline. Para protecção completa, combina ambos. Para ferramentas de gestão remota, consulta o artigo sobre ferramentas open-source de suporte remoto.

14. Checklist de Implementação

  • ☐ Criar conta Tailscale e configurar tailnet (rede virtual)
  • ☐ Instalar cliente Tailscale em todos os dispositivos (Windows, Linux, macOS, iOS, Android)
  • ☐ Verificar que todos os nós estão online com tailscale status
  • ☐ Escolher servidor para DNS ad-blocker (Raspberry Pi, VPS ou VM)
  • ☐ Instalar Pi-hole via Docker Compose (ou AdGuard Home)
  • ☐ Ligar o servidor DNS ao Tailscale e registar IP da mesh
  • ☐ Configurar DNS global no Tailscale admin console → apontar para IP da mesh do Pi-hole
  • ☐ Activar MagicDNS na consola
  • ☐ Adicionar listas de bloqueio (StevenBlack, AdGuard, OISD)
  • ☐ Configurar DoH/DoT entre Pi-hole e upstream DNS
  • ☐ Testar bloqueio com dig doubleclick.net @100.64.1.10 em vários clientes
  • ☐ Verificar queries a chegar no Pi-hole (interface web ou pihole -t)
  • ☐ Configurar ACLs no Tailscale com tags (dns, staff, guest)
  • ☐ Configurar exit node (opcional, para tráfego web)
  • ☐ Agendar actualização de listas via cron (semanal)
  • ☐ Configurar retenção de logs (RGPD: 7-30 dias)
  • ☐ Criar grupos no Pi-hole/AdGuard (staff, convidados, servidores)
  • ☐ Configurar backup automático de configuração
  • ☐ Integrar com Grafana para monitorização (opcional)
  • ☐ Documentar allowlist e razões de cada entrada
  • ☐ Formar utilizadores sobre o impacto do bloqueio de anúncios
  • ☐ Testar failover: parar Pi-hole primário e verificar que secundário responde

Artigos Relacionados

Comandos e configurações verificados com Tailscale v1.78+, Pi-hole v5.18+ e AdGuard Home v0.107+ a 2 de Julho de 2026. Documentação oficial do Tailscale DNS e do Pi-hole consultada. Licença do artigo: CC BY-SA 4.0.


Este artigo foi útil?

Duarte Spínola

Deixe um Comentário