A simple Cloudflare DDNS service
Project description
simple cfddns
A simple that conviently set up a DDNS service based on Cloudflare.
install
pip3 install simple-cfddns
usage
check help messages
cfddns --help
keeps the latest help document.
cfddns -h
usage: cfddns [-h] {record,addr,service} ...
positional arguments:
{record,addr,service}
record DNS record management
addr IP address tools
service Systemd service management
All subcommands provide -h
help messages, so remember to check them. For example:
cfddns record update -h
gives
usage: cfddns record update [-h] [-d DOMAIN] [-z ZONE] [-t TOKEN] [-c CONFIG_FILE] [-i] [--ttl TTL] [--daemon] [--interval INTERVAL] -r ...
options:
-h, --help show this help message and exit
-r ..., --rules ... IP selection rules. See `cfddns addr list -h` for the rule syntax
Cloudflare options:
-d DOMAIN, --domain DOMAIN
Domain name
-z ZONE, --zone ZONE Zone ID
-t TOKEN, --token TOKEN
API Token
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file path. If provided, the options are loaded from this file, overrided by command line options, and saved back to this file.
-i, --interactive Interactive mode
--ttl TTL DNS record TTL
Daemon options:
--daemon Daemon mode
--interval INTERVAL Update interval, in seconds
Daily Operations
Select some IP addresses and filter them:
cfddns addr list -r -s all_ip -f is_global
- If the command prints nothing, it indicates that your machine does not have a global IP addresses. Contact your ISP for more information. But for the this tutorial, you can delete
-f is_global
part and move forward - Arguments after
-r
forms the rules to select and filter IP addresses. You can get different sets of IP addresses with different combinations of rules. For more example, checkcfddns addr list -h
andcfddns addr show_func
Update(Create) DNS records:
cfddns record update \
-d mypc.example.com -t TOKEN -z ZONE \
-c cfddns.json \
-r -s all_ip -f is_global
-
-d
/-t
/-z
are required options to call Cloudflare APIs -
If
-c FILE
is provided,-d
/-t
/-z
are first loaded from this file, overridden by command line options, and saved back to this file -
cfddns.json
has the following content:{ "domain": "mypc.example.com", "zone": "ZONE", "token": "TOKEN" }
As it contains sensitive data, keep it safe.
List current records:
cfddns record list -c cfddns.json
Clear records to this domain:
cfddns record clear -c cfddns.json
Supported rule functions
cfddns addr show_func
FUNC for SELECT rules:
all_ipv4 Get all IPv4 addresses of the host.
all_ipv6 Get all IPv6 addresses of the host.
all_ip Get all IP addresses of the host, including both IPv4 and IPv
6.
ip_of_nic Get all IP addresses of a network interface card.
default_ipv4 Get the default IPv4 address that the OS uses to connect to t
he internet.
default_ipv6 Get IPv6 address that has the connection to the internet.
ipv4_seen_by_inet Get the IPv4 address that the internet sees. The ip address r
eturned may not be the ip address of the host if the host is
behind a NAT.
ipv6_seen_by_inet Get the IPv6 address that the internet sees. The ip address r
eturned may not be the ip address of the host if the host is
behind a NAT.
FUNC for FILTER rules:
is_private Check if an ip address is a private ip address.
is_link_local Check if an ip address is a link local ip address.
is_loopback Check if an ip address is a loopback ip address.
is_global Check if an ip address is a global ip address.
conn_to_inet Check if an ip address has the connection to the internet by send
ing a DNS query to a famous DNS server. This is a slow operation,
so filter the IPs by other filters first.
run as a systemd service
Run the cfddns
as daemon process that updates DNS records periodically and use systemd
to manage the daemon. Note that this feature is only supported on Linux systems with systemd
.
Install a new cfddns service:
prog=$(which cfddns)
sudo $prog service install \
-n test \
-c cfddns.json \
--interval 60 \
-r -s ip_of_nic,enp6s0 -f is_global
-n test
give the service the name ofcfddns-test
-c cfddns.json
could be replaced by-z
,-t
and-d
--interval 60
update DNS records every 60 seconds
Then, enable and start the service:
sudo systemctl start cfddns-test
sudo systemctl enable cfddns-test
Check its log:
sudo journalctl -r -u cfddns-test
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file simple_cfddns-2.0.0.tar.gz
.
File metadata
- Download URL: simple_cfddns-2.0.0.tar.gz
- Upload date:
- Size: 24.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08e815e014d0dcfdbeacb4a10a90d725cf75295accbf89f9b7765529819334d8 |
|
MD5 | 17c20a4923bb683c4fd0fd3ef3d7988b |
|
BLAKE2b-256 | cbf7dee01f305a0b59db8a21585190ad997188c631327f8b77f3bbf60e88a45e |
File details
Details for the file simple_cfddns-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: simple_cfddns-2.0.0-py3-none-any.whl
- Upload date:
- Size: 23.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdf6cfb1b71c259d1a675d45eed67d01f1e0dd8669dfcf13fa4ab346ae198266 |
|
MD5 | f53ee4078c8f34264b3f29376e41d0c3 |
|
BLAKE2b-256 | 15937a5a5560c57bd7a6a2932a77d4bde61ee5ba38ebe33ad3206c16c69dae80 |