Cloudflare DDNS
A tool for automatically updating dynamic IP addresses in Cloudflare
Purpose
Having an internet connection with a dynamic IP address can cause hiccups for self-hosters. This tool can be set up using a cronjob to periodically update Cloudflare with any possible IP address changes
Usage
Commands
completion: Generates shell completion scripts
- Sub-commands
bash: Generates bash completions
fish: Generates fish completions
powershell: Generates powershell completions
zsh: Generates zsh completions
- Flags
--no-descriptions: Disables descriptions in completions
configure: Run configuration wizard (required)
help: Help about any command
publicIp: Gets your public IP address
update: Updates DNS "A" records with your current IP address
- Flags
--api-key: Cloudflare Global API key. Must be used with --email
--email: Cloudflare account email address. Must be used with --api-key
--token: Cloudflare API token with Zone:DNS:Edit permissions. Can be used in place of --api-key and --email
--zone: comma-seperated list of Cloudflare zone IDs
- Global flags
--config: Path to config file (default: ~/.cloudflare-ddns/config.yaml)
--cron: Disables colored output (default: false)
Binaries exist for Windows, Linux, and macOS and can be found in the Releases section. Download the appropriate build for your operating system and save it to a directory that makes sense for your setup (e.g. /usr/local/bin). You can also run go install github.com/Falklian/cloudflare-ddns@latest to install the latest version of the tool to your $GOPATH/bin directory
Before using the utility, you will want to create a config file with the command cloudflare-ddns configure. Both global Cloudflare API key/email addresss, or a scoped API token with Zone:DNS:Edit permissions will work for configuration
As an alternative to creating a config file, you can pass the --api-key, --email, and --zone flags to the update command. If you are using a scoped API token, you can pass the --token flag instead of --api-key and --email
To update DNS automatically, use the update command. This would best be set up with a cronjob:
# Open crontab
$ crontab -e
# Add a schedule that makes sense for you (example: Run every 5 mintues):
*/5 * * * * /path/to/cloudflare-ddns update --cron >> /path/to/logfile.log 2>&1
There is also a publicIp command that will echo your public IP address to the terminal. This command does not require configuration to run
Building and Contributing
Prerequisites
Building
# Clone the repository
$ git clone https://github.com/Falklian/cloudflare-ddns.git
# Change into the directory
$ cd cloudflare-ddns
# Build the binary
$ go build -o build/cloudflare-ddns -ldflags '-s -w'
Feature Wishlist
-
Add flags for use in place of generating a config file
- Add logging support
- Add support to allow specifiying "A" records to update
- Add ipv6 support
- Create Docker image