Send ip address updates to DNS services.
The following sections describe how to install and run ddns.
Run the following shell commands:
git clone https://github.com/w-lfpup/ddns
cargo install --path ddnsAll services are directly related to features.
All features (and therefore all services) are included by default.
Minimal installations should use the --features flag.
For example, the following script will install ddns but only support dyndns2:
cargo install --path ddns --features dyndns2The ddns application requires a valid JSON configuration to run.
An example configuration example can be found at
./ddns.example.json
{
"results_filepath": "./path_to_results.json",
"ip_services": [
"https://checkip.amazonaws.com/",
"https://api.ipify.org"
]
}The results_filepath and ip_services properties are required.
The results_filepath property can be relative to the location of the config file.
The ip_services property defines a list of services with a url and its response_type.
The ddns application accepts one argument defining a path to a configuration file.
ddns <path_to_json_config>
The results of the ddns will be written to the results_filepath property of the config.
Paths can be absolute or relative to the configuration file.
The ddns application provides support for the following services:
Use the following schema to add dyndns2 domains to the config.
{
"domain_services": {
"dyndns2": [{
"service_uri": "string",
"hostname": "string",
"username": "string",
"password": "string"
}]
}
}Standard dyndns2 path and parameters will be appended to the authority of the service_uri property.
So https://example-ddns-service.com will become:
https://example-ddns-service.com/nic/update?hostname=subdomain.yourdomain.com&myip=1.2.3.4
Use the following schema to add cloudflare domains to the config.
{
"domain_services": {
"cloudflare": [{
"name": "yourdomain.com",
"email": "string",
"zone_id": "string",
"dns_record_id": "string",
"api_token": "string",
"type": "string, record type ie: A"
}]
}
}Any password or api key can be derived from an environment variable.
To pull an environment variable, use the prefix ENV: followed by the
variable name as demonstrated by the following json snippet.
{
"password": "ENV:MY_SECRET_PASSWORD",
"api_token": "ENV:MY_API_TOKEN"
}BSD 3-Clause License