> ## Documentation Index
> Fetch the complete documentation index at: https://help.noxity.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Dynamic DNS

> Keep an A record in sync with a hostname whose IP changes. Useful for home labs, cameras, IoT devices, and anything on a residential connection.

Dynamic DNS keeps an A record pointed at a host whose IP address changes. Rather than logging in to update the record by hand every time your ISP rotates your address, your device (or a cron job) sends a tiny request to cPanel and the A record updates automatically.

Open it from cPanel home → **Domains** → **Dynamic DNS**.

<Frame caption="Dynamic DNS tool with the create form and active hosts">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/noxity/images/cpanel/domain-management/dynamic-dns/listing-light.png" alt="Dynamic DNS page with the create form and the list of dynamic hostnames" className="block dark:hidden" />

  <img src="https://mintlify.s3.us-west-1.amazonaws.com/noxity/images/cpanel/domain-management/dynamic-dns/listing-dark.png" alt="Dynamic DNS page with the create form and the list of dynamic hostnames" className="hidden dark:block" />
</Frame>

## When to use it

* A camera, NAS, or game server at home that you want to reach by name (`home.mybrand.com`) instead of memorizing the current IP.
* A development box on a residential ISP whose IP rotates.
* A field device behind a 4G router with a public IP that's stable for a while but not forever.

If your IP is genuinely static (a colocated server, an EC2 elastic IP), you don't need this. Just create a regular A record in the [Zone Editor](/web-hosting/cpanel/domain-management/zone-editor).

## Create a dynamic hostname

<Steps>
  <Step title="Pick the domain">
    The dropdown lists every domain on the account. Choose the one the dynamic name lives under.
  </Step>

  <Step title="Type the subdomain prefix">
    For `home.mybrand.com`, type `home`. cPanel auto-appends the domain.
  </Step>

  <Step title="Add a description (optional)">
    Free-form text. Useful when you have several dynamic entries and want to remember which one is the camera and which is the NAS.
  </Step>

  <Step title="Click Create">
    cPanel generates a unique URL the device uses to update the record. Copy it before you leave the page.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/noxity/images/cpanel/domain-management/dynamic-dns/created-url-light.png" alt="Dynamic DNS update URL after creation" className="block dark:hidden" />

      <img src="https://mintlify.s3.us-west-1.amazonaws.com/noxity/images/cpanel/domain-management/dynamic-dns/created-url-dark.png" alt="Dynamic DNS update URL after creation" className="hidden dark:block" />
    </Frame>
  </Step>
</Steps>

The update URL looks like this:

```
https://your-cpanel-username:dynamic-key@your-server/dynamicdns/update?id=...
```

It contains your cPanel username and a one-off update key. Treat it like a password.

## Configure the device or script

A dynamic DNS entry only updates when something tells it to. Three common ways:

### A router with built-in DDNS

Most modern routers (FRITZ!Box, Mikrotik, ASUS, OpenWrt, pfSense) have a Dynamic DNS section. Pick **Custom** as the provider and paste the cPanel update URL.

The router fires the update on boot and whenever it detects a WAN IP change.

### A cron job on a Linux box

If the device that needs the dynamic name is itself a Linux machine, a one-line cron is enough.

```bash theme={}
*/5 * * * * curl -fsS "https://USER:KEY@cpanel.yourdomain.com:2083/dynamicdns/update?id=ID" >/dev/null
```

Replace `USER`, `KEY`, and `ID` with the values from the Dynamic DNS page. `*/5 * * * *` runs every five minutes, which is fine for most home setups.

### ddclient

The classic Linux DDNS client. It supports the cPanel protocol out of the box.

```
# /etc/ddclient.conf
protocol=cpanel
server=cpanel.yourdomain.com
ssl=yes
login=cpanel-username
password='dynamic-key'
home.mybrand.com
```

Run `ddclient -daemon=300` to update every five minutes.

## Manage existing entries

The list at the bottom of the page shows every dynamic hostname on the account, the current IP, the last update timestamp, and a **Manage** dropdown.

* **View update URL.** Re-open the URL if you've lost it. cPanel shows it again on demand.
* **Reset key.** Generate a new update URL. The old one stops working immediately. Use this if a device that knows the old URL has been compromised or decommissioned.
* **Edit description.** Change the free-form description. The hostname itself can't be edited; remove and re-create if you need to change it.
* **Delete.** Drop the dynamic entry. The A record is removed too. The hostname stops resolving.

## Common issues

<AccordionGroup>
  <Accordion title="The IP isn't updating">
    Open the update URL manually in a browser, or `curl` it from the device. cPanel returns a short status line. If it says **good** or **nochg**, the request reached the server. If you get an auth error, the URL has an old key, regenerate it.
  </Accordion>

  <Accordion title="The router behind a CGNAT keeps registering 100.64.x.x">
    CGNAT (carrier-grade NAT) hides your real public IP behind a shared one. Dynamic DNS will still register *something*, but it's not reachable from the internet. Ask your ISP for a public IPv4 (often a paid add-on) or switch to an IPv6-only setup with an AAAA record.
  </Accordion>

  <Accordion title="I want IPv6 too">
    The cPanel Dynamic DNS protocol updates A (IPv4) records only. For dual-stack, add an AAAA record manually in the [Zone Editor](/web-hosting/cpanel/domain-management/zone-editor) or use a separate IPv6 DDNS client.
  </Accordion>

  <Accordion title="The update URL is leaking my cPanel password">
    It isn't, the URL contains a one-off update key, not your cPanel password. Still, treat the URL as a secret. If a device that knows it is decommissioned, **Reset key** so the old URL can't update the record any more.
  </Accordion>
</AccordionGroup>

## Need a hand?

<CardGroup cols={2}>
  <Card title="Open a ticket" icon="life-ring" href="https://members.noxity.io/submitticket.php">
    Best for anything that needs an account check or a config change on our end.
  </Card>

  <Card title="Live chat" icon="messages" href="https://noxity.io/contact">
    Faster for quick questions during business hours.
  </Card>
</CardGroup>
