Custom DDNS
Keep your A (IPv4) and AAAA (IPv6) records in sync with the public IP of your router. Useful in the following cases:
- Your router has DDNS functionality but does not support your DNS provider.
- You do not want your router to have unlimited write access to your DNS records. I.e. you only need DDNS for certain subdomains, and you would be negatively impacted if any other records were created or modified.
- Your router supports DDNS and you want to update multiple DNS records across different domains and DNS providers.
- Your router does not have DDNS support, but you can implement a simple version yourself and want to do the heavier lifting on another system.
Implementation
The following flow occurs on every IP update:
router -(notifies)> executor -(updates)> DNS provider
The router, e.g. Unifi Dream Machine, must be configured to send a request to the Executor with the new IP.
The executor processes the new IP and updates the DNS records.
The DNS provider, e.g. Cloudflare, provides an API that allows for updating the DNS records.
The reason behind this setup is to:
- Not store any API token on the router, this prevents the router from creating arbitrary DNS records (security consideration)
- Be able to support any DNS provider with an API using a single configuration file
Routers
In theory, any router that supports a DDNS client can work. Some clients are explicitly tested and supported.
Follow these links to read how to configure the routers:
Executors
Executors implement a public web server that takes requests from the routers. An executor is small and language/platform specific. Examples of platforms are Docker and Cloudflare Workers. The executor performs authentication and updates the DNS records using the configured providers.
Currently supported (platform/language):
Providers
Providers are executed by the Executors and contain the DNS provider specific code for updating the DNS records.
Currently supported (DNS provider/language):
Configuration and usage
Follow these steps:
- Based on your DNS provider, read the provider specific documentation.
- Copy the
config.example.yaml
toconfig.yaml
and change it to meet your needs.
Visualizeconfig.yaml
spec or view the JSON schema. - Verify your config by running
yarn run validate-config
- Choose an executor and follow the deployment instructions.
- Configure your router to send the update request to the executor.
Configuration spec
The source of truth for the config.yaml
schema is the TypeScript Config interface. From this interface, the JSON schema config.schema.json
is generated using yarn run update-config-schema
.
Visualize the schema of the config file on json-schema.org.