Skip to content

stephen-hardy/unifi-ddns

 
 

Repository files navigation

Cloudflare DDNS for UniFi OS

A Cloudflare Worker script that exposes a UniFi-compatible DDNS API to dynamically update the IP address of a DNS A record.

Why?

I have a UniFi Dream Machine Pro (UDM-Pro), and I want to update my Cloudflare domain name DNS records when my public IP address changes. Unfortunately, UniFi does not come pre-configured to support Cloudflare as one of its DDNS providers.

Configuring Cloudflare

You must have a Cloudflare account and your domain must be configured to point to the Cloudflare nameservers before you continue.

Install With Click To Deploy

  1. Deploy the Worker: Deploy to Cloudflare Workers
  2. Navigate to the Cloudflare Workers dashboard
  3. Once the deployment is complete, take note of it's \*.workers.dev route. More on routes for Cloudflare Workers here.
  4. Create an API token so the Worker can update your DNS records. Go to https://dash.cloudflare.com/profile/api-tokens and select "Create token". On the next page, scroll down and click the "Get Started" button next to the "Create Custom Token" label. Select Zone:DNS:Edit for the "Permissions" drop-down, and include your target zone under the "Zone Resources" drop-down. Copy your API Key - you will need it later when configuring your UniFi OS Controller.

Install With Wrangler CLI

  1. Clone or download this project
  2. Ensure you have the Wrangler CLI installed on your system
  3. Log in with wrangler, and run wrangler deploy.
  4. Once you have created the worker, take note of it's \*.workers.dev route. More on routes for Cloudflare Workers here.
  5. Create an API token so the Worker can update your DNS records. Go to https://dash.cloudflare.com/profile/api-tokens and select "Create token". On the next page, scroll down and click the "Get Started" button next to the "Create Custom Token" label. Select Zone:DNS:Edit for the "Permissions" drop-down, and include your target zone under the "Zone Resources" drop-down. Copy your API Key - you will need it later when configuring your UniFi OS Controller.

Configuring UniFi OS

  1. Log on to your UniFi OS Controller
  2. Navigate to Settings > Internet > WAN and scroll down to Dynamic DNS.
  3. Click Create New Dynamic DNS and enter the following information:
  • Service: you must choose dyndns
  • Hostname: the full subdomain and hostname of the record you want to update (e.g. subdomain.mydomain.com, mydomain.com for root domain)
  • Username: the domain name containing the record (e.g. mydomain.com)
  • Password: the Cloudflare API Token you created earlier
  • Server: the Cloudflare Worker route <worker-name>.<worker-subdomain>.workers.dev/update?ip=%i&hostname=%h
    • On UniFi devices older than the UDM the Server value should be configured with no URL path: <worker-name>.<worker-subdomain>.workers.dev.
    • Many UniFi devices do not handle the https:// prefix in the URL for the Server value. You should remove it, using <worker-name>.<worker-subdomain>.workers.dev instead of https://<worker-name>.<worker-subdomain>.workers.dev.

To test the configuration and force an update:

  1. Ssh into your UniFi device
  2. Run ps aux | grep inadyn
  3. Note the configuration file path referenced by the running inadyn process e.g. /run/ddns-eth4-inadyn.conf.
  4. Run inadyn -n -1 --force -f <config-path> e.g. inadyn -n -1 --force -f /run/ddns-eth4-inadyn.conf

Also check /var/log/messages for error messages related to inadyn.

Important Notes!

  • If you are attempting to update a subdomain (sub.example.com), you must manually create an A record for it first in your Cloudflare dashboard.
  • If you receive a log message on your Unifi device like inadyn[2173778]: Failed resolving hostname https: Name or service not known, remove https:// from the Server field as described the Configuring section.

x

About

Cloudflare DDNS (Dynamic DNS) support for UniFi OS

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%