Schlundtech Dynamic DNS updater
This packages provides a way to update DNS records programmatically, for customers of Schlundtech, using their XML-Gateway.
Many thanks to https://github.com/martinlowinski/php-dyndns for doing the heavy lifting of figuring out how to talk to the XML-Gateway in a way that actually makes it do what we want.
Usage
First, you need to create a subdomain with an A-record in your domain, say home.example.com, and install this package, e.g. with pip install ws.ddns (or git clone ...; pip install -e .)
Then you can use the command-line utility provided by this package, like so:
$ schlund-ddns --username USER --password PASS home.example.com 1.2.3.4
If you have both an A and AAAA record for the subdomain, you have to update them separately, i.e. call the script twice, once with an IPv4 and a second time with IPv6 address.
(See schlund-ddns --help for more configuration parameters, e.g. the context that you were told to use when applying for the XML-Gateway.)
Instead of passing the parameters on the commandline, you can instead call schlund-ddns --config myconfig.ini (see below for the file format).
Alternatively, set up the provided cgi script schlund-ddns-cgi to provide HTTP access. You’ll need to provide username and password using a configuration file and then passing that file’s path as an environment variable. Here’s an example apache configuration snippet to do this:
ScriptAlias /dns-update /path/to/ddns/schlund-ddns-cgi <Location /dns-update> SetEnv DDNS_CONFIG /path/to/ddns/config AuthName "Dynamic DNS" AuthType Basic AuthUserFile /path/to/ddns/htpasswd require valid-user </Location>
The configuration file is a standard ini file and should look like this:
[default] username = USER password = PASS context = CONTEXT
You can optionally add an allowed_hostnames = one.example.com two.example.com whitespace-separated list to the config file, only those will then be accepted.
The HTTP protocol is modeled after the one from NoIP, that is, clients should perform a request like this to trigger a DNS update:
http://example.com/dns-update?hostname=home.example.com&myip=1.2.3.4
There is also a docker image of the HTTP service here: https://hub.docker.com/r/customelements/schlund-ddns
2FA support
Install pip install pyotp in addition to this package
Pass the 2FA secret (probably 16 characters, you may have to reverse-engineer them from the QR-Code used for setup) as –totp-secret` commandline or configuration parameter
CHANGES
1.6.0 (2024-02-05)
Changes
Support TOTP in CGI mode as well (totp)
1.5.0 (2023-09-18)
Changes
Support subdomains with both A and AAAA records (ipv6)
1.4.0 (2023-05-12)
Changes
Fix config parsing after introducing totp secret parameter (totp)
1.3.1 (2023-04-04)
Changes
Switch from setup.py to pyproject.toml (wheel)
1.3.0 (2023-03-20)
Support a configuration file for the command line script
Determine the domain name correctly for multi-level subdomains
Support 2FA TOTP authentication
Drop Python-2 support
1.2.0 (2020-10-04)
Model our response text after the noip.com protocol
1.1.1 (2018-03-05)
Handle PATH_INFO internally
1.1.0 (2018-03-03)
Add optional allowed_hostnames config option
1.0.4 (2018-03-03)
Make web part Python-3 compatible
1.0.3 (2018-03-03)
Make current-setuptools compatible
1.0.2 (2018-03-03)
Make Python-3 compatible
1.0.1 (2018-01-14)
Move from bitbucket to github
1.0.0 (2014-04-06)
First release.
Metadata
Release files for ws.ddns 1.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ws.ddns-1.6.0.tar.gz | 5.7 kB | Without provenance | Details for ws.ddns-1.6.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ws.ddns-1.6.0-py3-none-any.whl | Python 3 | none | any | Details for ws.ddns-1.6.0-py3-none-any.whl |
Total release size: 11.4 kB
Release files / ws.ddns-1.6.0.tar.gz
| Download URL | ws.ddns-1.6.0.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38a3b51974a00680a20464a627520df4c1132e462cfbe569e87ce44112fa7369
|
|
BLAKE2b-256 checksum How to use checksums |
bfec6d147de65768477dac16a0f376ae42d9991b8b4044cc337172352dc479e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.23.3
|
Release files / ws.ddns-1.6.0-py3-none-any.whl
| Download URL | ws.ddns-1.6.0-py3-none-any.whl |
|---|---|
| Size | 5.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
987115fa7e12f51a131b2f3d336499a2ed01974f8122ac9b31ed091c3e556687
|
|
BLAKE2b-256 checksum How to use checksums |
7c91d230438dcf0813c2f0fa5d5c21ed18a5a6c7315462c59eaf2a96b7e87c60
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.23.3
|
Security for ws.ddns 1.6.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.