Skip to content

Tudo para WordPress, desenvolvimento web — e não só

🚀 Como configurar DNS dinâmico através da Cloudflare no Raspberry Pi

🚀 Como configurar DNS dinâmico através da Cloudflare no Raspberry Pi

O seu servidor doméstico no Raspberry Pi funciona 24 horas por dia, 7 dias por semana, mas o seu ISP muda o IP externo todos os dias. Andar manualmente à procura do novo endereço é um trabalho para um arqueólogo. E os serviços DynDNS e No-IP bombardeiam-no com emails: «inicie sessão uma vez por mês ou desativamos a sua conta gratuita».

Acontece que a Cloudflare pode funcionar como DNS dinâmico, sem emails promocionais, sem limites de frequência de atualização e sem subdomínios de terceiros. Já tem um domínio na Cloudflare? Então só precisa de um token de API e de um script bash no Raspberry Pi. Em meia hora, configura um esquema que atualiza automaticamente o registo A sempre que o IP muda.

E se quiser não apenas «entrar na consola», mas implementar um site de desenvolvimento completo, até mesmo em WordPress, esta configuração torna-se a base: obtém acesso ao seu servidor a partir de qualquer lugar do mundo através de um subdomínio agradável como home.example.com.

💡 Visão geral rápida:

  • Passo 1: Crie um registo A no painel de DNS da Cloudflare com o IP de teste 0.0.0.0
  • Passo 2: Obtenha um token de API (não uma chave global, os tokens são mais seguros e revogáveis com um clique)
  • Passo 3: Execute um script bash que consulta o IP atual e o envia para a API da Cloudflare
  • Passo 4: Configure um cron job e esqueça para sempre as atualizações manuais

O que vai precisar

  • Um domínio adicionado à Cloudflare e gerido através do DNS deles
  • Raspberry Pi (qualquer modelo funciona, Pi 3, Pi 4, Pi Zero 2 W) com Raspbian ou Raspberry Pi OS
  • IP local estático para o Raspberry Pi (configurado na interface gráfica do SO ou via router)
  • Acesso ao terminal do Pi via SSH ou diretamente

Que serviços específicos aloja no Raspberry Pi e como faz o encaminhamento de portas no router é um tópico à parte, fora do âmbito deste tutorial. O esquema funciona de forma idêntica, quer seja para um servidor web com WordPress, acesso VNC ou uma câmara de vigilância.

1. Crie um registo A para o seu servidor doméstico

Escolha um subdomínio, será o seu ponto de entrada permanente. Eu uso home, mas pode escolher qualquer um: dev, lab, cam.

  • Aceda ao painel da Cloudflare e selecione o seu domínio
  • Navegue até ao separador DNS
  • Clique em Adicionar registo, tipo A
  • No campo Nome introduza o subdomínio (por exemplo, home)
  • No campo **Endereço **IPv4 especifique 0.0.0.0, temporariamente, para testar o script mais tarde
  • Deixe o Estado do proxy desativado (nuvem cinzenta), cache e proxy não são necessários para DDNS
Registo A com IP de teste 0.0.0.0 no DNS da Cloudflare

O registo está pronto. Vamos agora obter a chave de acesso à API.

2. Obter o token de API da Cloudflare

Anteriormente, todos os guias sugeriam a chave de API global, que dá acesso total a todos os domínios da conta. Isto é perigoso: se a chave for comprometida, tudo fica comprometido. Agora, a Cloudflare recomenda tokens de API com permissões granulares. Um token pode ser limitado a um domínio e ação específicos e, em caso de compromisso, revogado com um clique.

  • No painel da Cloudflare, aceda a: O Meu PerfilTokens de API
  • Clique em Criar Token
  • Selecione o modelo Editar zona DNS (ou crie um personalizado)
  • Na secção Recursos da Zona, especifique o domínio específico para o qual está a configurar o DDNS
  • Clique em Continuar para o resumoCriar Token
  • Copie o token, ele é mostrado apenas uma vez

O token parece uma longa cadeia de caracteres que começa por cfut_. Guarde-o num local seguro, o script no Raspberry Pi vai precisar dele dentro de momentos.

3. Script de atualização automática no Raspberry Pi

Ligue-se ao Raspberry Pi via SSH ou abra o terminal. Vamos criar uma pasta para o script:

1mkdir -p ~/cf && cd ~/cf

Agora, o script em si. Crie o ficheiro cloudflare-ddns.sh:

1nano ~/cf/cloudflare-ddns.sh

Copie o seguinte código para dentro dele:

1#!/bin/bash
2
3 ## Settings (replace with yours)
4AUTH_EMAIL="[email protected]"
5API_TOKEN="cfut_your_token"
6ZONE_NAME="example.com"
7RECORD_NAME="home.example.com"
8
9 ## Get current public IP
10CURRENT_IP=$(curl -s https://api.ipify.org)
11
12 ## Get Zone ID
13ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" \
14 -H "Authorization: Bearer $API_TOKEN" \
15 -H "Content-Type: application/json" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
16
17 ## Get Record ID and current record IP
18RECORD=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
19 -H "Authorization: Bearer $API_TOKEN" \
20 -H "Content-Type: application/json")
21
22RECORD_ID=$(echo "$RECORD" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
23DNS_IP=$(echo "$RECORD" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
24
25 ## Update record if IP changed
26if [ "$CURRENT_IP" != "$DNS_IP" ]; then
27 UPDATE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
28 -H "Authorization: Bearer $API_TOKEN" \
29 -H "Content-Type: application/json" \
30 --data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120}")
31
32 echo "$(date): IP changed from $DNS_IP to $CURRENT_IP — updated" >> ~/cf/cloudflare-ddns.log
33else
34 echo "$(date): IP unchanged ($CURRENT_IP)" >> ~/cf/cloudflare-ddns.log
35fi

Substitua as quatro variáveis no bloco «Settings» pelos seus valores reais. Email, o mesmo do login do Cloudflare. Token, o que copiou no passo 2. Zone name, o seu domínio sem http://. Record name, o subdomínio completo.

Guarde o ficheiro (Ctrl+O, Enter, Ctrl+X no nano) e torne-o executável:

1chmod +x ~/cf/cloudflare-ddns.sh

Execute manualmente para verificar:

1~/cf/cloudflare-ddns.sh

Se tudo estiver configurado corretamente, vá ao painel de DNS do Cloudflare; o endereço IP do registo A deve mudar de 0.0.0.0 para o seu IP público real. O log é escrito em ~/cf/cloudflare-ddns.log; verifique aí se algo correu mal.

4. Automação via cron

A execução manual serve apenas para testes. A partir daqui, o cron assume o controlo.

1crontab -e

Se o sistema lhe pedir para escolher um editor, escolha nano (normalmente a opção 2, é o mais simples). Adicione uma linha no final do ficheiro:

10 */6 * * * /bin/bash /home/pi/cf/cloudflare-ddns.sh

Esta entrada executa o script a cada 6 horas. Mesmo que o ISP mude o IP apenas de poucos em poucos meses, uma janela de seis horas é um compromisso razoável entre a atualização atempada e a carga na API.

Se quiser uma frequência maior, substitua por */30 * * * * (a cada 30 minutos). Mas lembre-se: o limite gratuito da API do Cloudflare é de 1200 pedidos por minuto, por isso, mesmo chamadas ao minuto não assustam para um único domínio.

Guarde (Ctrl+X, S, Enter). O cron deteta as alterações automaticamente, não é preciso reiniciar o serviço. Ajuda para descodificar os asteriscos em crontab.guru.

Vídeo-guia curto sobre este mesmo tópico, do NetworkChuck, com demonstração num Raspberry Pi real e explicação de cada passo:

O que fazer se o script não encontrou o Zone ID ou o Record ID

Por vezes, a API não devolve os identificadores automaticamente, especialmente se a conta tiver muitos domínios ou registos com nomes semelhantes. Nesse caso, obtenha-os manualmente:

  • Vá ao painel do Cloudflare, selecione o domínio, separador DNS
  • Abra as ferramentas de programador do navegador (F12 → separador Network → subseparador XHR)
  • Clique no ícone da nuvem ao lado do seu registo A; aparecerá um pedido à API no painel de rede
  • Clique com o botão direito sobre ele → CopyCopy link address (Chrome) ou Copy URL (Firefox)
  • No link copiado, encontre a parte depois de zones/, esse é o Zone ID, e depois de dns_records/, o Record ID

Substitua-os nas variáveis ZONE_ID e RECORD_ID no script e tudo funcionará. Certifique-se de que a nuvem no painel de DNS está cinzenta (proxy desligado): o Cloudflare não deve fazer cache do IP para DDNS.

⁉️🤔 Perguntas frequentes

É obrigatório usar um token de API em vez da chave global?

A chave global ainda funciona, mas o token é a opção moderna e segura. Um token pode ser limitado a um domínio e a permissões de edição de DNS. A chave global dá acesso a toda a conta. Se o script ou o Pi forem comprometidos, basta revogar o token, enquanto que com a chave teria de a alterar em todo o lado.

Em que é que esta abordagem difere do DuckDNS ou do No-IP?

Os serviços de DDNS de terceiros fornecem um subdomínio de terceiro nível como myhome.duckdns.org. A abordagem com o Cloudflare usa o seu próprio domínio (home.example.com), o que tem um aspeto mais profissional, não depende do serviço de outrem e não exige um login mensal para confirmação de atividade. Além disso, ganha acesso a todo o ecossistema Cloudflare: proteção DDoS, certificados SSL, regras de firewall.

Preciso de abrir portas no router?

Sim, para chegar ao Raspberry Pi a partir da internet. O DDNS apenas garante que o domínio aponta sempre para o IP atual. Mas para que o tráfego desse IP chegue ao Pi, precisa de configurar o reencaminhamento de portas no router para as portas necessárias (22 para SSH, 80/443 para web, e assim por diante).

O que fazer se o Raspberry Pi estiver atrás de NAT do ISP?

Alguns ISPs usam Carrier-Grade NAT (CGNAT); nesse caso, não tem um IP público próprio e o DDNS não ajudará. Solução: peça um IP público ao ISP (muitas vezes gratuito por pedido) ou use o Cloudflare Tunnel, que cria um canal encriptado do Pi para o Cloudflare sem necessidade de abertura de portas.

Quanto custa esta solução?

Zero. O DNS do Cloudflare é gratuito para registos A ilimitados. O Raspberry Pi já o comprou. O consumo de energia de um Pi 3/4 sob carga é de cerca de 3 a 5 W, o que anualmente ronda os 250 a 400 dólares.

Posso atualizar vários subdomínios?

Sim, duplique os blocos com RECORD_NAME e DNS_IP no script para cada subdomínio ou envolva a lógica num ciclo sobre um array de nomes.

DNS dinâmico na Cloudflare: o que configurar em 2026

O esquema com a API da Cloudflare e o cron já sobreviveu a várias gerações de Raspberry Pi e não perdeu relevância. Obtém o seu próprio subdomínio, não depende de fornecedores de DDNS de terceiros e não paga um cêntimo.

Se quiser ir mais longe, explore imagens Docker prontas a usar: oznu/cloudflare-ddns atualiza o IP a cada 5 minutos e é configurado através de variáveis de ambiente. Para quem prefere Python, existe aribasadme/rpi-cloudflare-ddns, feito especificamente para Raspberry Pi.

O principal que fez hoje: o Raspberry Pi está agora acessível a partir de qualquer parte do mundo num endereço permanente. E esta é a base para tudo: desde um servidor de desenvolvimento WordPress até ao seu próprio armazenamento na cloud.

🔗 Documentação da API de DNS da Cloudflare