| docs | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Containerfile | ||
| justfile | ||
| mkdocs.yml | ||
| README.md | ||
ddnnss
When the world needed it the least, it appeared - a universal dynamic DNS client, written in Rust.
This software is created so you configure it once and forget its existence, while it does the job of configuring DNS records for you - reliably and with a low footprint.
Features
- High configurability
- Support for many IP resolvers and DNS/DDNS providers
- Support for IPv4 and IPv6
- Low memory and CPU usage
- Easy to add your own resolvers and providers
- Different resolve modes
Usage
- Install ddnnss using
cargo install ddnnssor with your preferred distro package manager. - Configure the client (see Configuration below)
- Run it in the foreground or in the background, for example with a systemd service.
Configuration
If you downloaded ddnnss from a package manager, it may include a configuration file.
If not, you can generate one using ddnnss generate-config [path], then put it
in a common directory or use it with ddnnss --config [path].
Adding resolvers and providers
Resolvers: custom API
If you get your IP from a JSON or plaintext api, you might not even need to modify the code!
You can just use CustomJSONApi or CustonPlaintextApi resolvers.
Resolvers and providers
You basically need a file in a correct directory (src/{resolver,provider}/your_provider.rs)
and have a struct with your configuration with implementation of Resolver/Provider trait
marked with #[typetag::serde].
The *State structs provide you with global, configured HTTP reqwest client
if you need to make HTTP requests.