| Crates.io | cfdns |
| lib.rs | cfdns |
| version | 0.1.0 |
| created_at | 2025-12-07 04:42:24.492589+00 |
| updated_at | 2025-12-07 04:42:24.492589+00 |
| description | A Cloudflare Dynamic DNS update tool |
| homepage | https://github.com/MatthewIsHere/cfdns |
| repository | https://github.com/MatthewIsHere/cfdns |
| max_upload_size | |
| id | 1971167 |
| size | 374,177 |
CFDNS is a fast, reliable command-line Dynamic DNS updater for Cloudflare. It discovers the best IPv4 and/or IPv6 addresses for each network interface, compares them to existing Cloudflare DNS records, and updates only when needed.

cfdns setupcfdns schedulecargo install cfdns
git clone https://github.com/MatthewIsHere/cfdns
cd cfdns
cargo build --release
cfdns setup
This creates:
~/.config/cfdns/config.yml
Example:
cloudflare:
token: YOUR_API_TOKEN
interfaces:
eth0:
records:
- domain: zeus.example.com
zone: example.com
type: A
web_lookup: true
wg0:
records:
- domain: hera.example.com
zone: example.com
type: BOTH
cfdns update
cfdns schedule
This installs a systemd --user timer that runs cfdns update every 5 minutes.
Use cfdns schedule --off to remove it, or manually delete the unit files in ~/.config/systemd/user.
rtnetlink.web_lookup is enabled, public IPs are fetched from an external service.| Type | Meaning |
|---|---|
A |
Update IPv4 only |
AAAA |
Update IPv6 only |
BOTH |
Update both A and AAAA |
web_lookupIf true, public IPv4/IPv6 is determined using the Cloudflare trace service.
Useful when the interface has a private or non-routable address.
CFDNS is licensed under the Apache License 2.0. See the LICENSE file for details.
Pull requests and issue reports are welcome.
This project is actively maintained, and new features will continue to be added over time. If you find any issues with the program, have new ideas, or formatting suggestions, please let me know!