Reachability, CGNAT & DynDNS
Remote access only works if your internet line has a public IPv4 address of its own. CloudZH checks this for you and keeps your DNS record up to date.
Check your line
The installer, System Health and Settings → Reachability and DynDNS show the result. On the server:
zh reach
CloudZH compares the address the internet sees, the WAN address of your router (UPnP or NAT-PMP, if enabled) and a test from outside on port 443.
| Result | Meaning |
|---|---|
| Public IPv4 | All good. If port 443 is still closed, check the port forwarding in your router. |
| CGNAT | Your router has an address from 100.64.0.0/10 or a private one: your provider shares one public address between many customers. |
| DS-Lite | IPv4 runs through a tunnel of your provider, only IPv6 is your own. |
| Unknown | Your router does not tell. Look up the internet address in its status page: 100.64.x.x or 192.0.0.x means CGNAT or DS-Lite. |
What works with CGNAT
- Everything at home: dashboard, apps, Plex and downloads.
- Plex away from home, through the Plex relay with reduced quality.
- Not possible: direct access to the dashboard, the apps and the VPN from outside.
Ways around it
- IPv6: many of these lines have real IPv6. Allow TCP 443 to the server in your router and turn on IPv6 for DynDNS. Works from networks with IPv6 only.
- Ask your provider for a public IPv4 address or dual stack. Some providers do this on request, sometimes for a fee. The cleanest fix.
- Your own relay: a small VPS with a public IPv4 address forwards port 443 to CloudZH over WireGuard. Works for video too.
- Tailscale: your devices reach the server without open ports. Every device needs the app.
- Cloudflare Tunnel: only for the dashboard and admin apps, never for Plex or other video. Cloudflare's terms do not allow serving mostly video through their network.
DynDNS
If your public address changes now and then, CloudZH notices within 5 minutes and updates your DNS records with the same credentials as the certificate.
- Supported: Cloudflare and Duck DNS. Other DNS providers: use the dynamic DNS of your router or change the record by hand.
- Updated:
*.example.comand the dashboard name. The root domain,wwwandvpnonly if they pointed to this server before. Mail and other records stay untouched. - On by default for new installations, off for existing ones until you turn it on. Paused automatically with CGNAT and DS-Lite.
zh dyndns # status zh dyndns on # turn on (--ipv6 also updates AAAA) zh dyndns update # update now