Atualizador dinâmico de DNS (DDNS) em Python para Cloudflare
O Cloudflare DDNS Updater mantém seus registros DNS sincronizados com o IP público da sua rede. Ideal para home labs, VPS, infraestrutura self-hosted e ambientes de produção leve. O serviço roda em loop contínuo dentro de um processo Python e o systemd garante reinício automático em caso de crash.
- 🔄 Detecção automática do IP público
- 🌐 Atualização inteligente de registros DNS
- 📱 Notificações por Telegram em alterações
- 🔒 Verificação opcional de
cloudflaredantes de atualizar - 📝 Logs estruturados com nível configurável
- 🔁 Loop interno com intervalo configurável via
config.yaml - 🐍 Ambiente Python isolado (venv) criado pelo instalador
- 🧨
uninstall.shbaixado junto ao instalador (na pasta onde o instalador foi executado)
- Sistema: Linux (Debian/Ubuntu/CentOS/etc.)
- Python 3.6+
- Permissões
sudopara instalação e criação de serviço - Token Cloudflare com permissões:
Zone:ReadeDNS:Edit - (Opcional) Bot Telegram para notificações
/opt/ddns-updater/
├── ddns_updater.py
├── config.yaml
├── venv/
└── (logs em /var/log/ddns_updater.log)
/etc/systemd/system/
└── ddns-updater.service
O uninstall.sh é baixado para a pasta em que você executou o install.sh.
- Baixe o instalador e execute:
curl -sSL https://raw.githubusercontent.com/KAIKOAUGUSTIN/dnscript/main/install.sh -o install.sh
chmod +x install.sh
sudo ./install.shO instalador irá:
- Criar
/opt/ddns-updater - Baixar
ddns_updater.pyeconfig.yaml(se não existir) - Criar
venve instalar dependências (requests,PyYAML) - Criar e habilitar
systemd service(modo loop + restart automático) - Baixar
uninstall.shna pasta onde você executou o instalador
- Edite as credenciais:
sudo nano /opt/ddns-updater/config.yamlsettings:
update_interval: 300 # segundos entre ciclos (ex: 300 = 5 minutos)
log_level: INFO
log_file: "/var/log/ddns_updater.log"
cloudflare:
api_token: "YOUR_API_TOKEN"
zone_id: "YOUR_ZONE_ID"
telegram:
enabled: true
bot_token: "YOUR_BOT_TOKEN"
chat_id: "YOUR_CHAT_ID"
dns_records:
- name: "home.example.com"
type: "A"
proxied: false
use_cloudflared: false
- name: "nas.example.com"
type: "A"
proxied: true
use_cloudflared: trueObservações:
update_intervalé em segundos; o script lê oconfig.yamla cada ciclo (reload dinâmico).use_cloudflared: truefará o script checar sesystemctl is-active cloudflaredretornaactiveantes de atualizar esse registro.
Executar manualmente (dentro do venv):
sudo systemctl restart ddns-updater.serviceVer status do serviço:
sudo systemctl status ddns-updater.serviceLogs em tempo real:
sudo journalctl -u ddns-updater.service -fVer arquivo de log:
sudo tail -n 200 /var/log/ddns_updater.logPara atualizar apenas o script:
sudo systemctl stop ddns-updater.service
sudo curl -sSL https://raw.githubusercontent.com/KAIKOAUGUSTIN/dnscript/main/ddns_updater.py -o /opt/ddns-updater/ddns_updater.py
sudo chmod +x /opt/ddns-updater/ddns_updater.py
sudo systemctl start ddns-updater.serviceO config.yaml não será sobrescrito.
O uninstall.sh vem junto ao instalador, execute o (na pasta onde ele foi salvo):
chmod +x ./uninstall.sh
sudo ./uninstall.shO uninstall.sh padrão:
- Para e desabilita o service
- Remove
/etc/systemd/system/ddns-updater.service - Remove
/opt/ddns-updater(incluindovenv) - Remove
/var/log/ddns_updater.log - Tenta remover globalmente
requestsePyYAMLviapip3 uninstall -y(se aplicável) - Executa
systemctl daemon-reload
O desinstalador pede confirmação antes de remover tudo.
- Fork no GitHub
- Crie uma branch de feature
- Commit suas mudanças
- Abra um Pull Request descrevendo a motivação
GPL License — veja arquivo LICENSE no repositório.
Abra uma Issue no repositório para reportar bugs ou solicitar melhorias.
Feito com ❤️ por KAIKOAUGUSTIN