NovaDNS/Docs

Search documentation

Search for a page in the NovaDNS docs

HomepageDashboard

Guides

Troubleshooting

Solutions to the most common problems encountered when setting up or running NovaDNS. If you do not find an answer here, the update log in the dashboard is usually the fastest way to diagnose what is happening.

Host shows as Offline

A host is marked Offline when NovaDNS has not received a successful update in the last 10 minutes. This means either the client has stopped sending updates, or the updates are failing before they reach the server.

Work through this checklist in order:

  • Confirm the DDNS client or script is actually running (check process list, service status, or cron log).
  • Verify the token in your client matches the one shown in the dashboard under Host Settings.
  • Check that the device can reach novadns.io — try a manual curl from the same machine.
  • Open the Update Log tab on the host in the dashboard — if entries appear there, the server is receiving updates and the issue may be in how the status is calculated.
  • If no log entries appear at all, the updates are not reaching the server. Check firewall rules and outbound HTTPS access.
shellquick connectivity test
$ curl -sv "https://novadns.io/api/update?token=YOUR_TOKEN"

A successful response looks like { "ipv4": "...", "ipv6": null }. Any other response indicates the specific error — check the HTTP status code and body.

IP is not updating

The host shows as Online (updates are arriving), but the IP address in the dashboard is wrong or stale. This usually means the client is sending the wrong IP address.

Common causes:

  • The client is sending a private or LAN IP via the myip parameter. Remove the parameter to let NovaDNS auto-detect the public IP from the request, or ensure the value is your actual public IP.
  • The client is behind a proxy or VPN and the auto-detected IP is the proxy's address rather than your true WAN IP. Use an external IP-check service (e.g. https://api4.my-ip.io/ip) to get the correct address and pass it explicitly.
  • The client's IP change detection is not triggering because it compares against a locally cached value that has become stale. Force a manual update to reset the cache.

Check the update log to see exactly what IP was sent in each update:

Dashboard → your host → Update Log tab. Each row shows the IP that was recorded. If you see the wrong IP there, the problem is on the client side.

Invalid token error (401)

A 401 Unauthorized response means the token was not recognised. The most common cause is that the token was regenerated in the dashboard after the client was set up, leaving the client with an outdated token.

To fix this:

  • Go to the host in the dashboard and copy the current token from Host Settings → Update Token.
  • The token is a 64-character hex string — make sure you copied the full token with no trailing spaces or line breaks.
  • Paste the complete token into your client configuration and save.
  • Trigger a manual update to verify the new token is accepted.
shellverify your token length
$ echo -n "YOUR_TOKEN" | wc -c
64
The host token is not the same as your account password. Routers and clients using Basic Auth (DynDNS protocol) must use the host token as the password, not your login password.

Too many requests (429)

NovaDNS enforces a rate limit of 30 requests per 60 seconds per source IP address. If your client exceeds this limit, further requests are rejected with a 429 Too Many Requests response until the window resets.

A well-behaved DDNS client should not normally hit this limit. If you are seeing 429 responses:

  • Increase the update interval to at least 5 minutes (300 seconds). More frequent updates provide no benefit — DNS TTLs mean the change propagates at the same rate regardless.
  • Check whether multiple clients or scripts are sharing the same source IP and all updating the same host — their requests are aggregated against the same rate limit bucket.
  • If you have a script in a retry loop, add a minimum backoff of 60 seconds between retries.
crontabcorrect — every 5 minutes
# m  h  dom mon dow  command
*/5  *  *  *  *  curl -s "https://novadns.io/api/update?token=YOUR_TOKEN" > /dev/null

DNS not resolving

After a host is updated for the first time, DNS propagation can take up to 48 hours depending on resolver caching and your ISP's DNS infrastructure. Subsequent updates are faster because the record already exists and resolvers respect the TTL.

To diagnose a DNS issue, first confirm that the update was actually received by NovaDNS — open the host in the dashboard and check the Update Log. If the update is there, the problem is propagation or resolver caching, not NovaDNS itself.

Query the authoritative nameserver directly to bypass local resolver caches:

shellcheck DNS
# Query the authoritative nameserver directly
$ dig home.novaip.link A

# Or use a public resolver to check propagation
$ dig @1.1.1.1 home.novaip.link A
NovaDNS sets a 60-second TTL on all records. Once the update is received, most resolvers will pick up the change within 1–2 minutes. The 48-hour figure applies only to ISPs that ignore TTLs and cache aggressively.

IPv6 not updating

Many DDNS clients and routers only send an IPv4 address by default, even on dual-stack connections. If your AAAA record is not updating, the client is likely not sending an IPv6 address.

Solutions:

  • Use the myip6 parameter to explicitly pass your IPv6 address. NovaDNS will set both the A and AAAA records in a single request.
  • Configure two separate DDNS entries in your router — one bound to the IPv4 WAN interface and one bound to the IPv6 WAN interface — each pointing to the same host.
  • On Linux, use a client like inadyn which supports separate IPv4 and IPv6 update providers in the same config file.
shellexplicit dual-stack update
$ curl \
  "https://novadns.io/api/update
    ?token=YOUR_TOKEN
    &myip=203.0.113.42
    &myip6=2001:db8::1"

See the IPv6 & Subnets guide for full details on dual-stack configuration.

Webhook not firing

If you have configured a webhook but are not receiving events, work through the following checks:

  • Confirm the webhook is set to Active in Settings → Webhooks — inactive webhooks are skipped.
  • Verify the endpoint URL is reachable from the public internet, not just from your local network. NovaDNS makes outbound HTTPS calls to your URL.
  • Check your server logs for incoming requests — if requests are arriving but being rejected, the problem is on your server side (often a signature verification failure).
  • Ensure your endpoint returns a 2xx response within 10 seconds. Timeouts or 5xx responses are treated as delivery failures.
  • Check that your server is not blocking the NovaDNS outbound IP range with a firewall or WAF rule.

You can trigger a test delivery from the dashboard to help diagnose connectivity issues without waiting for a real IP change event. Go to the webhook and click Send Test Event.

During development, use a service like https://webhook.site as a temporary endpoint to confirm that NovaDNS is sending correctly formatted payloads before pointing to your production server.

DynDNS client returns "badauth"

A badauth response from the /nic/update endpoint means the Basic Auth credentials were rejected. This is almost always caused by using the wrong value in the password field.

The password field must contain your host token, not your account password. Your account password is used only to log into the NovaDNS dashboard. The host token (a 64-character string from Host Settings) is what the DynDNS endpoint expects.

Correct credentials for the DynDNS endpoint:

Usernameyour@email.com (your account email)
PasswordYOUR_HOST_TOKEN (64-char token from the dashboard)
shelltest DynDNS auth manually
$ curl -v \
  "https://your%40email.com:YOUR_TOKEN@novadns.io/nic/update \
  ?hostname=home.novaip.link"

# Expected response on success:
good 203.0.113.42

Note that the @ symbol in your email address must be URL-encoded as %40 when it appears in the URL. Most router firmware and DynDNS clients handle this automatically when you enter the username in a separate field.

Was this page helpful?