Skip to main content

Command Palette

Search for a command to run...

DNS as a System (Part 6)

Updated
10 min readView as Markdown

Zone Transfer

Introduction

DNS is a distributed system — but distributed systems have a fundamental challenge: how do you keep multiple copies of data consistent across servers that operate independently? In DNS, the answer is zone transfer.

Zone transfer is the mechanism that keeps all authoritative nameservers for a zone synchronized. When a DNS record changes — say, an A record pointing to a new IP — that change must propagate from the primary nameserver to every secondary nameserver, reliably and efficiently. Zone transfer is how that happens.

DNS as a Distributed Database

Before understanding zone transfer, it's important to recognize that authoritative nameservers are essentially databases — they store, query, and serve structured data. And like any database system, they are designed around four core principles:

Authoritative Nameserver Design Principles
──────────────────────────────────────────────────────────────
├─ Speed          Fast query responses, optimized data structures
├─ Reliability    Consistent, accurate data at all times
├─ Fault Tolerance  System survives individual server failures
└─ Scalability    Handles growth without restructuring

These are exactly the same principles that govern database design — and DNS solves them with the same strategies databases use: sharding and replication.


Sharding in DNS

In large-scale database systems, sharding splits a massive dataset into smaller, manageable segments distributed across multiple servers. Each server only handles its designated shard.

Database Sharding vs. DNS Sharding
──────────────────────────────────────────────────────────────
Database Sharding:
├─ User records split by region (US, EU, APAC)
├─ Each shard server handles only its users
└─ No single server holds all user data

DNS Sharding (Zones):
├─ Domain namespace split into zones
├─ Each zone managed by dedicated nameservers
└─ No single server holds all domain records

DNS Zone Shard Examples:
├─ .com zone     → VeriSign nameservers      (only .com records)
├─ .org zone     → PIR nameservers           (only .org records)
├─ .uk zone      → Nominet nameservers       (only .uk records)
├─ amazon.com    → Amazon Route 53 NS        (only amazon.com records)
└─ walmart.com   → Walmart's nameservers     (only walmart.com records)
DNS Zone Shard Structure
──────────────────────────────────────────────────────────────

Root Zone (.)
     │
     ├──────────────────────────────────┐
     │                                  │
   .com Zone                         .org Zone
[VeriSign NS — .com only]         [PIR NS — .org only]
     │                                  │
     ├─────────────────┐           ┌────┴────────┐
     │                 │           │             │
amazon.com          walmart.com  wikipedia.org  linux.org
[Amazon NS]         [Walmart NS] [Wiki NS]      [Linux NS]

The critical point: amazon.com nameservers handle amazon.com records ONLY — not walmart.com, not .com TLD records. This isolation minimizes bottlenecks and keeps each shard manageable.


Why Redundancy Requires Synchronization

DNS requires multiple nameservers per zone for reliability. If a domain had only one nameserver and it failed, the domain would become completely unreachable.

Single Nameserver — The Risk
──────────────────────────────────────────────────────────────
Domain: example.com
Nameserver: ns1.example.com (only one)

ns1.example.com goes offline:
├─ All DNS queries for example.com → fail
├─ Website unreachable
├─ Email delivery fails
└─ No fallback → complete outage ❌

Solution: Multiple nameservers
├─ ns1.example.com (primary)
├─ ns2.example.com (secondary)
├─ ns3.example.com (secondary)
└─ If any one fails → others continue serving ✅

But multiple nameservers create a new problem: they must all serve identical, up-to-date records. If ns1 has a new IP and ns2 still has the old one, users get inconsistent answers depending on which nameserver their resolver hits.

This is the problem zone transfer solves.


What Is a Zone Transfer?

A zone transfer is the process of replicating zone data from a primary nameserver to one or more secondary nameservers, ensuring all copies of the zone are synchronized.

Zone Transfer — Core Definition
──────────────────────────────────────────────────────────────
What:    Replication of DNS zone data across nameservers
From:    Primary nameserver (holds the master, editable copy)
To:      Secondary nameservers (receive read-only replicas)
When:    Triggered when zone data changes (new serial number)
Result:  All nameservers serve identical, current records

The Primary-Secondary (Leader-Follower) Model

DNS nameservers operate in a primary-secondary architecture — the same leader-follower pattern found in database replication systems.

Primary-Secondary Nameserver Model
──────────────────────────────────────────────────────────────

Primary Nameserver (Leader)
├─ Holds the authoritative, writable master copy of zone data
├─ All record updates (A, MX, CNAME, etc.) are made here first
├─ Identified by the SOA (Start of Authority) record
└─ Initiates or accepts zone transfer requests

          ↓ Zone Transfer

Secondary Nameserver(s) (Followers)
├─ Receive read-only replicas of the zone from primary
├─ Serve DNS queries identically to the primary
├─ Periodically check primary for updates via SOA serial
└─ Multiple secondaries = redundancy + geographic distribution

Identifying the Primary Nameserver

The SOA (Start of Authority) record identifies which nameserver is the primary for a zone.

bash

$ dig google.com SOA
;; ANSWER SECTION:
google.com.   35   IN   SOA   ns1.google.com. dns-admin.google.com.
                              698728253   ; Serial
                              900         ; Refresh
                              900         ; Retry
                              1800        ; Expire
                              60          ; Minimum TTL
SOA Record — Zone Transfer Relevant Fields
──────────────────────────────────────────────────────────────
Primary NS:   ns1.google.com
              └─ This is the master nameserver — all edits go here

Serial:       698728253
              └─ Zone version number
              └─ Secondary checks this — if primary's > secondary's,
                 a zone transfer is needed

Refresh:      900 seconds (15 minutes)
              └─ How often secondary polls primary for updates

Retry:        900 seconds (15 minutes)
              └─ How long secondary waits before retrying a failed poll

Expire:       1800 seconds (30 minutes)
              └─ If primary unreachable this long → secondary stops answering

The Zone Transfer Process

Step-by-Step Zone Transfer Flow

Zone Transfer — Full Lifecycle
──────────────────────────────────────────────────────────────

1. Admin updates A record on Primary NS
   example.com.   IN   A   192.0.2.1  →  192.0.2.99
   Serial number incremented: 2024111001 → 2024111002

2. Secondary NS timer fires (every [Refresh] seconds)
   Secondary checks: "What is the primary's current serial?"
   dig @primary SOA → returns serial 2024111002

3. Secondary compares serials
   Primary serial:   2024111002
   Secondary serial: 2024111001
   Primary > Secondary → CHANGE DETECTED → initiate zone transfer

4. Zone transfer executes (AXFR or IXFR)
   Primary → sends updated zone data → Secondary

5. Secondary updates its zone data
   example.com.   IN   A   192.0.2.99  ✅
   Secondary serial now matches primary: 2024111002

6. Secondary serves updated record to resolvers
   All nameservers now return: 192.0.2.99 ✅

AXFR vs. IXFR

DNS supports two zone transfer methods with different efficiency profiles:

AXFR — Full Zone Transfer

AXFR (Authoritative Zone Transfer — Full)
──────────────────────────────────────────────────────────────
Method:      Copies the ENTIRE zone file from primary to secondary
When used:
├─ When a new secondary nameserver is added (initial sync)
└─ When incremental transfer fails or is not supported

How it works:
Primary → "Here is the complete zone file" → Secondary
Secondary → replaces entire local zone with received data

Pros:
├─ Simple — guaranteed complete and consistent sync
└─ No dependency on change history

Cons:
├─ Inefficient for large zones (sends all records even if 1 changed)
└─ Higher bandwidth and processing for frequent updates

Example — triggering AXFR:
$ dig @ns1.example.com example.com AXFR

IXFR — Incremental Zone Transfer

IXFR (Incremental Zone Transfer)
──────────────────────────────────────────────────────────────
Method:      Copies ONLY the changes since the last transfer
Mechanism:   Pull-based — secondary requests changes from primary

How it works:
1. Secondary sends its current serial to primary
2. Primary compares with its own (higher) serial
3. Primary sends ONLY the diff — records added/removed/changed
4. Secondary applies the diff to its local zone

When used:
├─ Routine updates on established zones
└─ When AXFR would be wasteful (zone is large, change is small)

Pros:
├─ Highly efficient — minimal bandwidth for small changes
└─ Faster sync — less data to transfer and process

Cons:
├─ Requires primary to maintain change history (journal)
└─ Falls back to AXFR if journal is unavailable or gap is too large

Example comparison:
Zone size: 100,000 records
Change:    1 A record updated

AXFR transfers: 100,000 records
IXFR transfers: 1 record (just the change) ✅ 99,999x more efficient

AXFR vs. IXFR Comparison Table

Feature AXFR IXFR
Transfer scope Full zone Changes only
Bandwidth usage High Low
Use case Initial sync, fallback Routine updates
Requires change journal No Yes
Fallback behavior N/A Falls back to AXFR
Efficiency on large zones Low High

Modern DNS Providers vs. Traditional Zone Transfer

Traditional DNS (BIND, self-hosted)

Traditional Zone Transfer (BIND-based)
──────────────────────────────────────────────────────────────
Protocol:    AXFR / IXFR over TCP port 53
Trigger:     SOA serial polling (every [Refresh] seconds)
Propagation: Can take minutes to hours depending on Refresh TTL
Used by:     Self-hosted BIND, PowerDNS, traditional TLD operators

Modern DNS Providers

Modern DNS Provider Zone Synchronization
──────────────────────────────────────────────────────────────
Cloudflare:
├─ Proprietary internal replication system
├─ Updates propagate globally within seconds
└─ 270+ global PoPs receive updates nearly simultaneously

AWS Route 53:
├─ Proprietary multi-region replication
├─ Updates typically propagate in < 60 seconds globally
└─ No AXFR/IXFR — uses internal distributed database

NS1:
├─ Real-time data propagation network
└─ Sub-second propagation across global network

Key difference:
Traditional:  Minutes to hours propagation (SOA refresh interval)
Modern:       Seconds propagation (proprietary push-based systems)

These three terms are often confused. Here's a clear breakdown:

Zone Transfer vs. Domain Transfer vs. Delegation of Authority
──────────────────────────────────────────────────────────────

Zone Transfer:
├─ What: Replication of DNS records from primary → secondary NS
├─ Scope: Within a single zone (same domain)
├─ Purpose: Keeps multiple nameservers synchronized
└─ Example: ns1.example.com syncs records to ns2.example.com

Domain Transfer:
├─ What: Moving a domain's registration from one registrar to another
├─ Scope: Registrar-level (not DNS records)
├─ Purpose: Change who manages billing and registration
└─ Example: Moving example.com from GoDaddy to Namecheap
            (requires authorization code, 60-day lock policy)

Delegation of Authority:
├─ What: Parent zone assigns authority for a subdomain to child NS
├─ Scope: Between zones (parent to child)
├─ Purpose: Independent management of subdomains
└─ Example: .com TLD delegates kodekloud.com to Cloudflare NS

Zone Transfer Security

Unrestricted zone transfers are a significant security risk.

Zone Transfer Security Risk
──────────────────────────────────────────────────────────────
Risk: Unrestricted AXFR allows anyone to download your entire zone

What an attacker learns from a full zone transfer:
├─ Every subdomain (mail, staging, admin, vpn, internal...)
├─ Internal server IP addresses
├─ Mail server infrastructure
├─ Load balancer and CDN configuration
└─ Complete map of your infrastructure ← reconnaissance goldmine

Example unauthorized AXFR attempt:
$ dig @ns1.example.com example.com AXFR

If misconfigured:
;; ANSWER SECTION:
example.com.   NS   ns1.example.com.
www            A    192.0.2.1
mail           A    192.0.2.2
admin          A    192.0.2.3    ← exposed internal services!
vpn            A    10.0.0.1     ← internal VPN IP exposed!

Securing Zone Transfers

Zone Transfer Security Best Practices
──────────────────────────────────────────────────────────────
1. Restrict AXFR to known secondary nameserver IPs only

   BIND configuration (named.conf):
   zone "example.com" {
       type master;
       file "example.com.zone";
       allow-transfer { 192.0.2.10; 192.0.2.11; };
       ← only these IPs can request zone transfer
   };

2. Use TSIG (Transaction Signature) for authenticated transfers
   ├─ Cryptographic key shared between primary and secondary
   ├─ Prevents unauthorized servers from receiving zone data
   └─ Ensures integrity of transferred data

3. Monitor for unauthorized zone transfer requests
   └─ Alert on AXFR requests from unknown IPs

4. Use modern DNS providers
   └─ Cloudflare, Route 53 use proprietary replication — no AXFR exposure

Verify zone transfer is restricted:
$ dig @ns1.yourdomain.com yourdomain.com AXFR
;; Transfer failed.   ← correctly restricted ✅