Cirrusync: Cloudflare Dynamic DNS Client
A lightweight, auditable Dynamic DNS client for Cloudflare. Automatically discovers public IPv4 and IPv6 addresses, compares them against target DNS zone records, and modifies only out-of-date entries under systemd or automated cron schedules.
Designed for Transparency & Least Privilege
Unlike opaque monolithic DDNS daemons, Cirrusync is built with clean, auditable logic focusing exclusively on Cloudflare DNS state synchronization:
Dynamic DNS State Reconciliation Cycle
Dual-Stack Discovery
Determines the host's true public IPv4 and IPv6 addresses via redundant external endpoints, preventing incorrect LAN address updates.
Scoped API Token Security
Operates under Cloudflare's least-privilege token model (`Zone.DNS:Edit`). Never requires Global API Keys or master account credentials.
Differential Updates Only
Queries existing Cloudflare records first and executes HTTP mutations only when IP drift is detected, avoiding API rate limits and log spam.
Multi-Zone & Multi-Record
Synchronizes multiple domain names across different Cloudflare DNS zones in a single execution loop with isolated per-zone error reporting.
systemd Native Service
Includes production systemd service definitions with security hardening (sandboxing, private temporary directories, and non-root execution).
One-Shot Test Mode
Supports manual single-run sync via command line for verification, CI pipelines, or lightweight cron-based task runners.
Configuration Workflow
Setup is managed through a simple TOML configuration file:
# Cloudflare Scoped API Token (Zone.DNS:Edit)
api_token = "YOUR_CLOUDFLARE_SCOPED_TOKEN"
# Target DNS records to synchronize
[[records]]
zone_id = "0123456789abcdef0123456789abcdef"
name = "vpn.example.com"
types = ["A", "AAAA"]
proxied = false
# Run a single synchronization test
cirrusync --once --config /etc/cirrusync/cirrusync.toml