This note is for platform engineers who must sign off cross-region SSH and large binary pulls in the same review. It complements the broader PoP matrix in GeoDNS, SSH latency and regional acceptance (2026) by zooming in on resolver behaviour, executable record choices, and a p95 artifact pull acceptance list. Start from the English home or jump straight to a locale that matches your audience—Korean, Japanese, Simplified Chinese, Traditional Chinese (Taiwan), plus German and French landing pages—then align DNS and monitoring with the tables below.
Split-horizon vs GeoDNS decision matrix
Split-horizon DNS serves different answers inside the corporate network (or CI VPC) than on the public Internet. GeoDNS (often EDNS Client Subnet–aware) steers public clients toward a regional target based on resolver hints and policy weights. Neither replaces the other: split horizon removes ambiguity for automation; GeoDNS optimises human discovery behind a single brand hostname.
| Dimension | Split-horizon (internal view) | GeoDNS (public view) |
|---|---|---|
| Primary win | Deterministic CI / runner targets | Low-friction global hostname for humans and laptops |
| TTL stance | Often 300–3600 s; can be aggressive because you control resolvers | Shorter during change windows (60–300 s); longer in steady state (600–1800 s) |
| Cache stickiness risk | Sticky forwarders or transparent DNS proxies in offices | ISP and public recursive caches ignoring ECS; stale continent maps |
| SSH handshake story | Jump hosts and bastions map 1:1 to PoP IDs | Handshakes follow whatever the resolver cached; validate per market |
| Artifact origin | Easy to pin registry.internal to in-region VIPs |
Requires ALIAS/ANAME or apex rules; watch CDN dual-stack divergence |
| Failure mode | Drift between internal catalog and public marketing DNS | Partial steering during TTL overlap; flapping health checks |
Executable DNS record types (cookbook)
Use the smallest record set that still lets you fail over without renaming hostnames. Prefer stable owner names (ssh-asia.prod.example) and CNAME indirection for services that move between clouds; keep apex zones on provider-native ALIAS/ANAME or flattened A/AAAA.
| Record | Typical role | When to choose it |
|---|---|---|
| A / AAAA | SSH bastions, legacy VPN, bare metal edges | Lowest indirection; pair both families for dual-stack Mac builders |
| CNAME | Service aliases to weighted targets or CDN hostnames | Never at apex unless your DNS supports flattening |
| ALIAS / ANAME (vendor) | Apex to dynamic targets (GeoDNS pools, managed gateways) | Marketing root domain with changing PoP sets |
| SRV | Discoverable SSH or internal gRPC when clients honour it | Great for automation catalogs; many SSH clients still need wrappers |
| TXT | Ownership, ACME, canary tokens | Keep short; avoid stuffing operational state into TXT |
| NS / delegation | Per-region child zones | When legal or billing boundaries require separate SOA owners |
TTL bands and cache stickiness probes
TTL is not “how fast DNS updates” globally—it is the upper bound on how long an answer may live in a recursive cache that respects TTL. Stickiness also comes from application pools (connection reuse), happy-eyeballs reordering, and CDNs that pin you to an edge POP. Treat TTL plus observed cache age as one metric.
| Lifecycle | Suggested TTL window | Intent |
|---|---|---|
| Steady production | 600–1800 s for regional A/AAAA; 300–900 s for fast-moving pools | Reduce resolver chatter while allowing same-day corrections |
| Planned migration | Pre-cut to 60–120 s for ≥ previous TTL window | Guarantees most caches refresh before the cut |
| Emergency rollback | 30–60 s only with health-checked automation | Short TTL amplifies QPS—watch authoritative limits |
| Internal split view | 300–3600 s depending on DHCP lease alignment | Match campus forwarder caches; document override paths |
# Compare public vs internal answers (replace ZONE/HOST)
dig +ttlunits A ssh.example.com @8.8.8.8
dig +ttlunits A ssh.example.com @10.0.0.2 # corporate resolver example
# Trace full chain including CNAME flattening
dig +trace +ttlunits A ssh.example.com
# Measure HTTPS edge stickiness (TLS + TTFB); repeat from two ISPs
curl -sS -o /dev/null -w 'dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer}\n' \
https://registry.example.com/v2/
dig output) alongside your SSH and HTTP probes. If engineers in Seoul still land in Virginia after a “green” DNS change, the incident is usually cache stickiness—not BGP.Cross-region SSH handshake probes
SSH adds key exchange and host-key verification on top of TCP. For cross-region remote Mac sessions, measure wall-clock from SYN to first remote prompt, not only ICMP. Run probes from CI subnets and developer home networks because GeoDNS may disagree between them.
- Handshake budget: track p50 / p95 of
time ssh … exit; alert when p95 grows 40 % week-over-week for a PoP pair. - Key path: prefer
-o BatchMode=yesfor automation; keep host keys stable per PoP to avoid trust flapping. - MTU / VPN: repeat probes inside split-tunnel VPN; clamp MSS if black-hole behaviour appears only on encrypted paths.
# Wall-clock SSH probe (read-only automation user)
for i in $(seq 1 30); do
/usr/bin/time -p ssh -o BatchMode=yes -o ConnectTimeout=12 \
-o StrictHostKeyChecking=accept-new user@HOST 'exit' 2>&1 | awk '/^real/{print $2}'
sleep 1
done | sort -n | awk 'NR==1{min=$1} {sum+=$1; a[NR]=$1} END{
print "samples:", NR, "min:", min, "max:", a[NR], "p95:", a[int(0.95*NR)] }'
# OpenSSH verbose once per change window (redact keys before attaching logs)
ssh -vvv -o BatchMode=yes user@HOST true 2>&1 | tee /tmp/ssh-trace.txt
Artifact origin pull — p95 acceptance checklist
Container layers, SwiftPM binary artifacts, and Git LFS objects stress DNS differently than SSH: many parallel HTTPS connections, range requests, and CDN redirects. Sign-off should reference end-to-end p95 from the builder NIC, not only CDN dashboards.
| Check | Pass criteria (staging → prod) | Probe idea |
|---|---|---|
| DNS answers match PoP | ≥ 99 % of jobs resolve to in-region targets during steady state | Log getent / resolver output at job start; compare to allow list |
| TLS and redirect depth | ≤ 2 HTTP redirects; p95 TLS setup ≤ 250 ms within region | curl -w template above with -L --max-redirs |
| Throughput floor | p95 pull time for a 500 MB fixture ≤ team baseline × 1.25 | Artifact fixture job in pipeline; archive timings in observability |
| Range / resume | Interrupted pulls resume without full re-download | Inject mid-transfer kill; verify byte ranges in access logs |
| Failover drill | After TTL window, ≥ 95 % jobs pick secondary origin without manual /etc/hosts | Weighted record flip + synthetic canary region |
| IPv6 parity | AAAA path not slower than A-only by more than 20 % p95 | Force -4 / -6 in paired curl harness |
When the matrix, TTL plan, and p95 checklist align, provision builders in the same metro as your registry mirrors so DNS changes and binary locality move together. vpshalo offers monthly remote Mac capacity across multiple regions—pick the PoP that matches both resolver policy and artifact gravity.