This is a simple Dynamic DNS script written in Python for updating CloudFlare DNS A records,
similar to the classic ddclient perl script.
You can simply install it with pip from PyPI:
$ pip install cloudflare-dyndns
Or you can use the Docker image:
$ docker run --rm -it kissgyorgy/cloudflare-dyndns --help
If you use this script, it "takes over" the handling of the record of those domains you specified, which means it will update existing records and create missing ones.
You should not change A or AAAA records manually or with other scripts, because the changes will be overwritten.
I decided to make it work this way, because I think most users expect this behavior, but if you have a different use case, let me know!
$ cloudflare-dyndns --help Usage: cloudflare-dyndns [OPTIONS] [DOMAINS]... A command line script to update CloudFlare DNS A and/or AAAA records based on the current IP address(es) of the machine running the script. For the main domain (the "@" record), simply put "example.com" Subdomains can also be specified, eg. "*.example.com" or "sub.example.com" You can set the list of domains to update in the CLOUDFLARE_DOMAINS environment variable, in which the domains has to be separated by whitespace, so don't forget to quote the value! The script supports both IPv4 and IPv6 addresses. The default is to set only A records for IPv4, which you can change with the relevant options. Options: --api-token TEXT CloudFlare API Token (You can create one at My Profile page / API Tokens tab). Can be set with CLOUDFLARE_API_TOKEN environment variable. [required] --proxied Whether the records are receiving the performance and security benefits of Cloudflare. -4 / -no-4 Turn on/off IPv4 detection and set A records. [default: on] -6 / -no-6 Turn on/off IPv6 detection and set AAAA records. [default: off] --delete-missing Delete DNS record when no IP address found. Delete A record when IPv4 is missing, AAAA record when IPv6 is missing. --cache-file FILE Cache file [default: /home/walkman/.cache/cloudflare- dyndns/ip.cache] --force Delete cache and update every domain --debug More verbose messages and Exception tracebacks --help Show this message and exit.
1: Unknown error happened
2: IP cannot be determined (IP service error)
3: CloudFlare related error (cannot call API, cannot get records, etc...)
v4.0 IPv6 support
Now you can specify
-6 command line option to update AAAA records too.
You can delete records for missing IP addresses with the
option. See issue #6 for details.
There is a new
--proxied flag for setting Cloudflare DNS services.
v3.0 breaks backward compatibility using the global API Key
You can only use API Tokens now, which you can create under
My Profile / API Tokens: https://dash.cloudflare.com/profile/api-tokens.
The problem with the previously used API Key is that it has global access to
your Cloudflare account. With the new API Tokens, you can make the script
permissions as narrow as needed.
Upgrading from 2.0 and using API Tokens is highly recommended!
--domains option is now gone, because it made no sense (it only existed
for reading from the envvar), but you can use the
the same as before.
v2.0 breaks backward compatibility for a PyPI release.
The script you need to run is now called
cloudflare-dyndns and the cache file
also changed. You can delete the old cache manually, or you can leave it, it
won't cause a problem.
The Docker file entry point is changed, so if you pull the new image, everything will work as before.
You can install dependencies with poetry (preferable in a virtualenv).
After installing poetry, simply run:
$ poetry install