Dynamic DNS Error
Dynamic DNS is defined in RFC 2136, and it uses the DNS UPDATE mechanism (different from standard queries).
1. Dynamic DNS Request
Sent by a client (e.g., DHCP server or host) to a DNS server to add, delete, or modify DNS records dynamically.
The request format is the same DNS message structure (header + sections), but:
Opcode = 5 (UPDATE) instead of 0.
Instead of only “questions,” it contains:
Zone section – the zone being updated.
Prerequisite section – conditions that must be met (e.g., "record must exist").
Update section – records to add/delete.
Additional section – optional extra info.
Example (simplified):
Header:
ID: 0x3f21
Flags: Opcode=5 (Update), QR=0 (query)
Zone Section:
example.com. IN SOA
Prerequisite Section:
(none)
Update Section:
Add: host1.example.com. 300 IN A 192.0.2.55
Additional Section:
(optional)
2. Dynamic DNS Response
Sent by the server back to the client.
Opcode = 5 (UPDATE) (echoed back).
Rcode indicates success or failure.
The Answer/Authority/Additional sections are usually empty.
Example (success):
Header:
ID: 0x3f21
Flags: QR=1 (response), Opcode=5 (Update), Rcode=0 (NoError)
Zone Section: example.com.
Prerequisite Section: empty
Update Section: empty
3. DNS Opcode (in DDNS)
Opcode = 5 (UPDATE) → signals this is a Dynamic DNS update.
(Compare: standard queries use Opcode=0.)
4. DNS Rcode (in DDNS)
These are the same 4-bit codes, but some have special meaning for UPDATE:
Rcode Meaning (for DDNS)
0 NoError – update succeeded
1 FormErr – format error
2 ServFail – server failure
3 NXDomain – name doesn’t exist
4 NotImp – operation not implemented
5 Refused – server refused update
6 YXDomain – name exists when it should not
7 YXRRSet – RR set exists when it should not
8 NXRRSet – RR set does not exist
9 NotAuth – server not authoritative for zone
10 NotZone – name not inside zone specified
Summary
Dynamic DNS Request: A DNS UPDATE message with Opcode=5, carries zone/prerequisite/update sections.
Dynamic DNS Response: Opcode=5, Rcode set to success/failure.
Opcode: 5 (UPDATE).
Rcode: tells if the update succeeded (0=NoError) or failed (3=NXDomain, 5=Refused, etc.).