A daemon for dynamically updating DNS via multiple DNS providers
Find a file
2024-12-17 19:52:40 +01:00
.githooks chore: add hook for automatic changelog generation 2024-10-14 14:44:24 +02:00
src fix: move dns updating outside of IPv6 block 2024-12-17 19:47:09 +01:00
.cliffignore chore: add hook for automatic changelog generation 2024-10-14 14:44:24 +02:00
.dockerignore feat: add Dockerfile 2023-01-01 23:26:56 +01:00
.gitignore chore: fork and rename 2021-05-23 15:33:28 +02:00
Cargo.lock chore: bump version to 0.6.1 2024-12-17 19:52:40 +01:00
Cargo.toml chore: bump version to 0.6.1 2024-12-17 19:52:40 +01:00
CHANGELOG.md chore: bump version to 0.6.1 2024-12-17 19:52:40 +01:00
cliff.toml chore: add hook for automatic changelog generation 2024-10-14 14:44:24 +02:00
Dockerfile feat!: support multiple dns providers and rename the project accordingly 2024-10-14 15:34:32 +02:00
LICENSE.md chore: update license 2023-01-01 23:03:13 +01:00
README.md feat!: support multiple dns providers and rename the project accordingly 2024-10-14 15:34:32 +02:00

dyndnsd

This is a simple daemon that runs in the background and checks for your public IP regularily. If it changes, the service sets the corresponding DNS record. The service supports both IPv4 and IPv6 addresses.

Installation

Use the package manager cargo to install dyndnsd.

cargo install dyndnsd

Usage

Config

dyndnsd expects to find a config file at /etc/dyndnsd/config.toml.

As you can see from the path, the configuration should be a toml file. A sample could look like this:

zone = "example.com"
domain = "example.example.com"
ipv4 = true    # defaults to true
ipv6 = true    # defaults to false
interval = 15  # seconds, defaults to 60

# You can use cloudflare
[dns_provider_config.cloudflare]
secret = "secretkey"

# Or you can use RFC 2136 with TSIG
[dns_provider_config.rfc2136]
addr = "udp://1.2.3.4:53"
key_name = "test"
key = "test"
algorithm = "hmac-sha256"

As you can see, we have a token here. This token needs to have access to at least:

  • reading you account zones (for getting the zone ID from the zone name)
  • reading and writing to the DNS zone (for first fetching the records and then modifying them.

Aside of the token, you also have to prepare some DNS records before running this: If you enabled IPv4 support, there needs to be a DNS A record for the configured domain already, and if you enabled IPv6 support, you need a DNS AAAA record set on the configured domain. The service will not create new records, it just modifies existing records.

Running

To run the service, just call the binary. You can optionally set the RUST_LOG env var to configure the log level:

RUST_LOG=info dyndnsd

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

dyndnsd is cooperative non-violent software: you can use, redistribute, and/or modify it under the terms of the CNPLv7+ as found in the LICENSE.md file in the source code root directory or at https://git.pixie.town/thufie/npl-builder.

dyndnsd comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. See LICENSE.md for details.

CNPLv7+

Attribution

This work is derived from cloudflare-ddns, a commandline utility fullfilling the same purpose. It's written by Rostislav Raykov z@zbrox.org and available under the MIT license at the link above.

This fork has made major changes to the project, to the extent where most of the code has been rewritten and the tool is quite different:

  • Runs as a service instead of in a cron job
  • Supports IPv6
  • Homegrown Cloudflare API client has been replaced with a library which supports multiple providers