Industrial-strength dynamic DNS client
Project description
MCDDNS
Mike Conigliaro's industrial-strength Dynamic Domain Name System client
Features
- Extensible plugin-oriented architecture with a simple API
- Address providers are responsible for obtaining an address
- DNS providers are responsible for managing a DNS record
- Resilient against network and endpoint failures
- Built-in result validation for address providers
- Use multiple address providers (keep trying until one succeeds)
- Optional retry with Fibonacci backoff
- Cron mode (prevents email flood if your Internet connections goes down)
- Detailed logging
- Dry-run mode (shows what will happen without changing anything)
Built-In Providers
Address Providers
aws.CheckIP
: Obtains a public IPv4 address via Amazon Web Servicesdyn.CheckIP
: Obtains a public IPv4 address via Dyngoogle.CheckIP
: Obtains a public IPv4 address via Google Domainsipify.IPv4
: Obtains a public IPv4 address via ipifyipify.IPv6
: Obtains an IPv6 address via ipify
DNS Providers
aws.Route53
: Manages records in Amazon Route53
Installation
pip install mcddns
Running the Application
mcddns <dns_provider> <fqdn> [options]
Use --help
to see available options.
Development
Getting Started
poetry install
poetry shell
...
Running Tests
pytest
Writing Providers
A provider is any class that inherits from AddressProvider
or DNSProvider
. In production mode, Python modules/packages prefixed with mcddns_
will automatically be imported from the following locations:
$XDG_CONFIG_HOME/mcddns/provider
/etc/mcddns/provider
- sys.path
Example: If you create a file at $XDG_CONFIG_HOME/mcddns/provider/mcddns_foo.py
with a class named Bar
that inherits from one of the Provider
subclasses, your module can be referenced (e.g. in command-line options) as foo.Bar
.
Provider Methods
Each provider type has a set of methods that will be called in a particular order. Note that some of these methods are expected to return a specific value in order to progress to the next step.
All Providers
options_pre(parser)
: Runs before option parsing. Use this method to add your own provider-specific command line arguments (See: argparse).options_post(parser, options)
: Runs after option parsing. Use this method to do things with your provider-specific command line arguments.
Address Providers
fetch(options)
: Fetches and returns an IP address, hostname, etc.validate(options, address)
: ReturnsTrue
if the address is valid andFalse
otherwise
DNS Providers
check(options, address)
: ReturnsTrue
if a DNS update is required andFalse
otherwiseupdate(options, address)
: ReturnsTrue
if a DNS update was successful andFalse
otherwise
Examples
I'll write more documentation if people are interested, but for now, see the examples at mcddns/provider and tests/provider.
Releases
- Bump
version
in pyproject.toml - Update CHANGELOG.md
- Run
make release
To Do
- Add tests for built-in providers
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 mcddns-1.2.0.tar.gz
.
File metadata
- Download URL: mcddns-1.2.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/21.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bfc89a332fecf5e1f53734e69a6a5af897f7ba026beac9c66b8dca9a5970a12 |
|
MD5 | 4075f8c17ed06953b6e382e840b7bceb |
|
BLAKE2b-256 | c6a3e758f86bed69ac9a69cc2f1c8a580d3d6399cad011fcb4e7f06f1aa473f1 |
File details
Details for the file mcddns-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: mcddns-1.2.0-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/21.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff61e2551bf943206436788d83dcba9bc7bb5300c1651d8a80952b5e94ef02e8 |
|
MD5 | 2e70cff8e780dd49ec0a113c848bbc2e |
|
BLAKE2b-256 | aa0392bc64d57eafa7c02126e476ea8d5fc6667dd79b8341cdbe85c269112bdd |