Final DNS architecture: apex ANAME → router glddns, ddns-go retired
Why: The previous fix made ddns-go the sole updater, but Dynadot's ns1 kept serving a stale literal IP after every change (split-brain). Adopting the room101.com pattern — a static apex pointing at the router's own DDNS name — removes the volatile record from the registrar entirely, so there's nothing for ns1 to get wrong.
The change
- skyhouse.dev and botaa.org apexes switched (at Dynadot) from
A <literal IP>toANAME → cw526dc.glddns.com— the GL.iNet router's built-in DDNS name. (room101.comwas already this way.) The*wildcard CNAME → apex is unchanged, so all subdomains still follow. - ddns-go retired:
docker update --restart=no ddns-go && docker stop ddns-go. It was still configured to push a literal A record onto those domains and would have clobbered the ANAME on the next IP change. The router now tracks the IP itself.
Why this is better
- No registrar split-brain. The Dynadot records are now static; both nameservers serve the same ANAME. Verified immediately: skyhouse.dev via
ns1went from ~40% stale to 8/8 correct. - The volatile IP lives at
cw526dc.glddns.com(GL.iNet's nameservers, ~29s TTL), updated by the router the instant the WAN IP changes — faster than ddns-go's 5-min poll. - Fewer moving parts: no ddns-go API token, no in-container ephemeral-config fragility, no literal-IP push step.
What stays
ip-watch.sh+ip-recovery-verify.shremain (Telegram heads-up + ✅/⚠️ recovery confirmation) — they detect the IP viaifconfig.meand verify public reachability, independent of how DNS is updated./etc/hostssplit-horizon (server → LAN IP for all its own hostnames) unchanged.- The 120s TTL on the (now static) apex is moot, but harmless.
Trade-off & reversal
This trusts GL.iNet's glddns.com service as the IP source of truth. It's the router's native feature and is currently fast and accurate, but it's a GL.iNet dependency — if that hostname ever lapses, re-point the apexes (or bring ddns-go back: docker update --restart=unless-stopped ddns-go && docker start ddns-go). The Cloudflare runbook carries this same ANAME/flattened-CNAME pattern forward (plus free email forwarding).