Files
runbooks/dns-change-sheet.md
T

5.0 KiB
Raw Blame History

DNS change sheet — inference.coop

Rebuilt 2026-11-01 from the registrar's own panel (domains.coop; nameservers ns1/ns2.yoursrs.com). The previous version listed record counts that could not be reproduced and at least two records that did not exist, so it is replaced rather than edited.

Why the panel was the only source

  • AXFR is refused, so the zone cannot be pulled.
  • The zone is wildcarded. A made-up hostname (zz-random-check-9f2.inference.coop) returns the old box's address. So a name that resolves proves nothing about whether a record exists, and any hostname absent from the list below is served by the wildcard.
  • Only 11 records exist. Everything else is *.

The complete inventory (11 records)

# Type Hostname Value TTL Moves?
1 A inference.coop 179.199.135.72 3600 YES → new box
2 AAAA inference.coop 2a02:4780:6e:83fd::1 3600 YES → new box
3 A * 179.199.135.72 3600 YES → new box
4 AAAA * 2a02:4780:6e:83fd::1 3600 YES → new box
5 A server 179.199.135.72 3600 CHECK FIRST — nothing else references it
6 A www 179.199.135.72 3600 YES → new box
7 MX (pri 10) inference.coop my.inference.coop 3600 stays (follows record 1/2)
8 TXT inference.coop v=spf1 a:my.inference.coop include:_spf.tem.scaleway.com ~all 3600 stays
9 TXT _dmarc v=DMARC1; p=reject; pct=100 3600 stays
10 TXT cloudron._domainkey v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3… (1024-bit; full value recovered 2026-11-01 and restored) 3600 stays
11 TXT ede94f37-204c-41ee-b3… v=DKIM1; h=sha256; k=rsa; p=MIIBIjA… (2048-bit) 3600 stays
12 TXT _atproto did=did:plc:4leras5objxiqtnbjzoholds 3600 stays

(The table shows 12 rows because www was added as a separate item; rows 1–11 are the panel's 11. Reconcile the numbering against the panel when editing.)

The four records that matter at cutover

Records 1–4 and 6: apex A, apex AAAA, wildcard A, wildcard AAAA, and www. Change these and the site moves. Nothing else in the zone needs touching for the migration.

The wildcards are the item the old sheet omitted entirely. Because * carries both A and AAAA records, every hostname not listed above — chat, portal, panel, dashboard, newsletter, gateway, vault, git, registry, files, forum, email, docs, my, status — resolves only via the wildcard. They are not individual records and must not be created as such; they move when the wildcards move. A partial cutover that changes the apex but not * leaves every application on the old box.

Two DKIM selectors, for different senders

  • cloudron._domainkey — the box's own mail signing (1024-bit). Used by the portal and by Listmonk, both of which relay through the Cloudron mail app.
  • ede94f37-… — a UUID-named selector with a 2048-bit key. UUID selectors are what a service generates for itself, and this is almost certainly Scaleway Transactional Email's. Scaleway's own domain verification passed, which is the authority on whether it is right.

Name and value for row 11 are truncated in the panel screenshot. Read the full name in the panel (or from Scaleway's domain-verification page) before editing that row.

What the zone does NOT contain

No CNAME, no CAA, no SRV, no _acme-challenge entries. If any of those are ever needed, they are new records, not moves. (docs.inference.coop has no record of its own — it is served by the wildcard, which is why it answers with the Cloudron dashboard.)

Before the window

  1. Lower the TTL on records 1–4 and 6 from 3600 to ~300. At 3600 a mistake takes an hour to correct; at 300 it takes five minutes. Do this a day ahead so the old TTL expires, then restore it afterwards.
  2. Establish what server.inference.coop is used for. Resolved 2026-11-02: it was repointed to the new box with the rest (confirmed authoritatively on both NS). Its purpose is still unidentified, but it no longer references the old box — see the runbook's CUTOVER COMPLETE section.
  3. Confirm the full name of record 11 (above).

Verification after the move

Query the authoritative nameservers, not a resolver, and query the specific name — a wildcard answer cannot be distinguished from a real record otherwise:

dig +short A    inference.coop        @ns1.yoursrs.com
dig +short AAAA inference.coop        @ns1.yoursrs.com
dig +short A    zz-random-check-9f2.inference.coop @ns1.yoursrs.com   # wildcard, must now be the NEW box
dig +short MX   inference.coop        @ns1.yoursrs.com

Then verify-restore.py. Its two known blind spots (the data group crashing on a missing PATH, and the mail check asserting a port-25 state it cannot observe from the agent host) are still unfixed — fix them before relying on a clean run.