Connector: DNS records (dns)
Purpose: the DNS posture of an organization's apex domain — hosting migrations (A/AAAA), DNS-provider changes
(NS), mail-provider changes (MX), SPF / DMARC / domain-verification tokens (TXT, _dmarc), CA restrictions (CAA),
SOA administrative fields. These are textbook silent changes: nobody announces them.
Sensor URL: dns://example.com (only the host is used). Sensor type: DNS, tier D.
Config: records? (default A, AAAA, NS, MX, TXT, CAA, SOA, DS-via-ANY), resolvers? (1.1.1.1, 8.8.8.8, 9.9.9.9),
includeDmarc? (true).
Normalization: JSON snapshot; every record set sorted, hostnames lower-cased, SOA serial excluded (changes
on every zone edit), TXT chunks joined. Missing record types are empty arrays (ENODATA), resolver errors are
{ error: code } per type; the fetch fails only when every query failed. extra: A/AAAA counts, NS, MX, SPF, DMARC, CAA.
Safety: the host goes through isBlockedHostname (no cluster / private / single-label names); queries go to
public resolvers only, never to the target.
Known quirks: node:dns has no DS query — DNSSEC presence is approximated from resolveAny record types when
the resolver supports ANY (many refuse it: field absent, not an error). Round-robin A records that rotate on every
query (large CDNs) will look like changes: prefer the www host's TLS sensor for those and keep DNS on the apex.
Tests: connectors2.test.ts (hostOf). Verified: 2026-09-08 on the 77 tier S/A founding domains.