Verify NTP reachability over IPv6 — with NIS 2 and ISO 27001 dual-stack evidence
IPv6 rollout has crossed the majority threshold for major European ISPs (Orange, Proximus, Deutsche Telekom all above 60%). Internal networks that carry production IPv6 but fall back to IPv4 for NTP create two problems simultaneously:
Before NTP can speak IPv6, the resolver must return an AAAA record. Check with dig:
$ dig AAAA ntp.rdem-systems.com +short
2a01:e0a:4bc:5110::1
$ dig AAAA time.cloudflare.com +short
2606:4700:f1::1
2606:4700:f1::123
$ dig AAAA time.nist.gov +short
2610:20:6f15:15::27
An empty response means the operator has not published an AAAA record — you must choose another source for dual-stack. time.ntsc.ac.cn, for example, is IPv4-only as of April 2026.
The project-wide zone pool.ntp.org returns mixed A and AAAA, weighted by the percentage of volunteer servers in each family. Because IPv4 servers outnumber IPv6 by roughly 3:1, a client querying pool.ntp.org often receives four A records and no AAAA — effectively IPv4-only behaviour.
The workaround is the statistical subzone structure:
| Zone | AAAA probability | Recommended for |
|---|---|---|
0.pool.ntp.org | Very low (~5%) | Legacy IPv4 clients |
1.pool.ntp.org | Low (~10%) | Mostly IPv4 |
2.pool.ntp.org | High (~70%) | IPv6-preferred clients |
3.pool.ntp.org | High (~70%) | IPv6-preferred clients |
Best practice for dual-stack chrony/ntpd configuration:
# Favour IPv6 where available
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
# Explicit dual-stack anchors (AAAA guaranteed)
server time.cloudflare.com iburst nts
server ntp.rdem-systems.com iburst nts
Use the Compliance Validator in Bridge Mode with an IPv6-formatted target ([2a01:e0a:4bc:5110::1] or the hostname on an IPv6-only egress network). The bridge relays the NTPv4 packet via your local Node.js process, so DNS resolution and routing reflect your workstation's real network stack.
$ ntpdate -q -6 ntp.rdem-systems.com
server 2a01:e0a:4bc:5110::1, stratum 1, offset +0.000412, delay 0.01912
$ sntp -6 ntp.rdem-systems.com
+0.000412 +/- 0.001243 ntp.rdem-systems.com 2a01:e0a:4bc:5110::1 s1 no-leap
# /etc/chrony/chrony.conf
# Force IPv6-only query
server ntp.rdem-systems.com iburst family ipv6
# Dual-stack with preference
pool 2.pool.ntp.org iburst
> w32tm /monitor /computers:ntp.rdem-systems.com
ntp.rdem-systems.com[2a01:e0a:4bc:5110::1:123]:
ICMP: 12ms delay
NTP: -0.0002341s offset from local clock
RefID: 'GNSS' [0x53534E47]
Stratum: 1
Probe the same hostname on both families and compare. A well-operated dual-stack source shows near-identical offset and sub-5 ms RTD variance:
$ sntp -4 ntp.rdem-systems.com
+0.000398 +/- 0.001200 ntp.rdem-systems.com 51.159.173.61 s1 no-leap
$ sntp -6 ntp.rdem-systems.com
+0.000412 +/- 0.001243 ntp.rdem-systems.com 2a01:e0a:4bc:5110::1 s1 no-leap
# Offset delta: 0.014 ms — within measurement noise, healthy
# RTD delta: 0.043 ms — healthy
| Source | IPv4 | IPv6 | NTS | Stratum |
|---|---|---|---|---|
ntp.rdem-systems.com | ✓ | ✓ | ✓ | 1 |
time.cloudflare.com | ✓ | ✓ | ✓ | 3 (anycast) |
time.google.com | ✓ | ✓ | — | 1 (leap-smeared) |
time.nist.gov | ✓ | ✓ | — | 1 |
ntp1.ptb.de | ✓ | ✓ | — | 1 |
nts.netnod.se | ✓ | ✓ | ✓ | 1 |
2.pool.ntp.org | ✓ | ✓ (70%) | — | Variable |
For audit-grade configurations, prefer three sources with full dual-stack + NTS: for example ntp.rdem-systems.com, time.cloudflare.com, nts.netnod.se.
Auditors will ask: can the essential/important entity's time-sync continue operating if either the v4 or v6 path is degraded? The evidence pack:
dig AAAA on each configured source, dated, retained.Cross-reference: our NIS 2 NTP requirements page lists this under the 10-control checklist, and the full audit checklist expands the supply-chain diversification argument.
Use the Compliance Validator to probe your infrastructure on both IPv4 and IPv6 and export results for the audit file.
Run the Validator → NIS 2 RequirementsNot here for audit? Use the right tool: