<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.justus.pw/mediawiki/index.php?action=history&amp;feed=atom&amp;title=DNS_things</id>
	<title>DNS things - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.justus.pw/mediawiki/index.php?action=history&amp;feed=atom&amp;title=DNS_things"/>
	<link rel="alternate" type="text/html" href="https://www.justus.pw/mediawiki/index.php?title=DNS_things&amp;action=history"/>
	<updated>2026-05-25T02:29:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://www.justus.pw/mediawiki/index.php?title=DNS_things&amp;diff=82&amp;oldid=prev</id>
		<title>Justus: Created page with &quot;This article contains interesting things that I’ve come across while learning more about DNS.  &lt;!--more--&gt; &lt;span id=&quot;anatomy-of-a-dns-request&quot;&gt;&lt;/span&gt; = Anatomy of a DNS request =  Here’s how you can run a &#039;&#039;&#039;full DNS request&#039;&#039;&#039; for the domain &lt;code&gt;zombo.com&lt;/code&gt; using &lt;code&gt;dig&lt;/code&gt;:  &lt;syntaxhighlight lang=&quot;bash&quot;&gt;dig +trace +all zombo.com&lt;/syntaxhighlight&gt; When you run a full DNS request, &lt;code&gt;dig&lt;/code&gt; retrieves the &lt;code&gt;A&lt;/code&gt; DNS record for a domain by...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.justus.pw/mediawiki/index.php?title=DNS_things&amp;diff=82&amp;oldid=prev"/>
		<updated>2026-01-30T04:54:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;This article contains interesting things that I’ve come across while learning more about DNS.  &amp;lt;!--more--&amp;gt; &amp;lt;span id=&amp;quot;anatomy-of-a-dns-request&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = Anatomy of a DNS request =  Here’s how you can run a &amp;#039;&amp;#039;&amp;#039;full DNS request&amp;#039;&amp;#039;&amp;#039; for the domain &amp;lt;code&amp;gt;zombo.com&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;:  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;dig +trace +all zombo.com&amp;lt;/syntaxhighlight&amp;gt; When you run a full DNS request, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; retrieves the &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; DNS record for a domain by...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This article contains interesting things that I’ve come across while learning more about DNS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--more--&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;anatomy-of-a-dns-request&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Anatomy of a DNS request =&lt;br /&gt;
&lt;br /&gt;
Here’s how you can run a &amp;#039;&amp;#039;&amp;#039;full DNS request&amp;#039;&amp;#039;&amp;#039; for the domain &amp;lt;code&amp;gt;zombo.com&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;dig +trace +all zombo.com&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
When you run a full DNS request, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; retrieves the &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; DNS record for a domain by querying the whole chain of the &amp;#039;&amp;#039;&amp;#039;Fully Qualified Domain Name&amp;#039;&amp;#039;&amp;#039; (FQDN) &amp;lt;code&amp;gt;zombo.com.&amp;lt;/code&amp;gt;. When a DNS client queries a FQDN, it starts at the root &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;, and recursively work its way down to query &amp;lt;code&amp;gt;.com.&amp;lt;/code&amp;gt;, and then &amp;lt;code&amp;gt;.zombo.com&amp;lt;/code&amp;gt;. The precise sequence of queries that &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; performs depends on each response.&lt;br /&gt;
&lt;br /&gt;
With a full DNS request, you can query DNS records for domains &amp;#039;&amp;#039;&amp;#039;from scratch&amp;#039;&amp;#039;&amp;#039; without needing any DNS resolver or DNS cache.&lt;br /&gt;
&lt;br /&gt;
This is the transcript, split by individual query.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;startup-information&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Startup information ==&lt;br /&gt;
&lt;br /&gt;
First, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; prints some general information, like the command that received, or its version:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;; &amp;amp;lt;&amp;amp;lt;&amp;amp;gt;&amp;amp;gt; DiG 9.18.28 &amp;amp;lt;&amp;amp;lt;&amp;amp;gt;&amp;amp;gt; +trace +all zombo.com&lt;br /&gt;
;; global options: +cmd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;root-name-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Root name server ==&lt;br /&gt;
&lt;br /&gt;
Next, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; queries the &amp;#039;&amp;#039;&amp;#039;DNS resolver&amp;#039;&amp;#039;&amp;#039; configured for the network this computer runs in. The DNS resolver has the IP address &amp;lt;code&amp;gt;10.0.48.1&amp;lt;/code&amp;gt; and runs on a Ubiquiti Dream Router.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; asks for the &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt; record for the name &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;. It receives a long list of &amp;lt;code&amp;gt;NS&amp;lt;/code&amp;gt; records in the answer section. Each of these records starts with a single lowercase letter and ends on &amp;lt;code&amp;gt;.root-servers.net.&amp;lt;/code&amp;gt;. Each of these names represent a &amp;#039;&amp;#039;&amp;#039;root name server&amp;#039;&amp;#039;&amp;#039; that &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; can then ask for &amp;lt;code&amp;gt;zombo.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the querying the name &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; also gives us back a few &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AAAA&amp;lt;/code&amp;gt; records for each of these root name servers. This tells &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; what the IPv4 and IPv6 addresses of each of these root name servers are.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;; Got answer:&lt;br /&gt;
;; -&amp;amp;gt;&amp;amp;gt;HEADER&amp;amp;lt;&amp;amp;lt;- opcode: QUERY, status: NOERROR, id: 38385&lt;br /&gt;
;; flags: qr rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27&lt;br /&gt;
&lt;br /&gt;
;; OPT PSEUDOSECTION:&lt;br /&gt;
; EDNS: version: 0, flags: do; udp: 1232&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;.              IN  NS&lt;br /&gt;
&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
.           190794  IN  NS  b.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  m.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  h.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  i.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  j.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  d.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  a.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  g.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  f.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  c.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  e.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  k.root-servers.net.&lt;br /&gt;
.           190794  IN  NS  l.root-servers.net.&lt;br /&gt;
.           445435  IN  RRSIG   NS 8 0 518400 20250118170000 20250105160000 26470 . m7C4icJMnOILA5mlMR9oDLoQBWE0Y9sPoqbXSoVUVrTKgWDbZNOrlMig xBubsOExXwQ4XZg3jwmh6FckcIMly1ZMIfZycMxWvyIvOrgxnBAt4Gu1 sMC4bn45v2BIaMHCaSLwW1jUB+MvrCPhBeYQJsfeLkRBi3W2VPwFIV60 BmPt2/i8jCJrkxx8bOaDGuTGFdwm1L62Ri2+QrewsbRGOcWpJHptJI/h Di61Q/C043YHHhc9w037cKYFeP8dupWS8RLcW/jIELTXhW2FrgETv285 3RndOgaFb9RBoTUo16i3lge1KIMZoS2eksoGQEt8kfgfYVrIKTrwQpf6 Z5NvCQ==&lt;br /&gt;
&lt;br /&gt;
;; ADDITIONAL SECTION:&lt;br /&gt;
a.root-servers.net. 104582  IN  A   198.41.0.4&lt;br /&gt;
b.root-servers.net. 276147  IN  A   170.247.170.2&lt;br /&gt;
c.root-servers.net. 368518  IN  A   192.33.4.12&lt;br /&gt;
d.root-servers.net. 187359  IN  A   199.7.91.13&lt;br /&gt;
e.root-servers.net. 187359  IN  A   192.203.230.10&lt;br /&gt;
f.root-servers.net. 199714  IN  A   192.5.5.241&lt;br /&gt;
g.root-servers.net. 216475  IN  A   192.112.36.4&lt;br /&gt;
h.root-servers.net. 240623  IN  A   198.97.190.53&lt;br /&gt;
i.root-servers.net. 532693  IN  A   192.36.148.17&lt;br /&gt;
j.root-servers.net. 320888  IN  A   192.58.128.30&lt;br /&gt;
k.root-servers.net. 271911  IN  A   193.0.14.129&lt;br /&gt;
l.root-servers.net. 357258  IN  A   199.7.83.42&lt;br /&gt;
m.root-servers.net. 104622  IN  A   202.12.27.33&lt;br /&gt;
a.root-servers.net. 113505  IN  AAAA    2001:503:ba3e::2:30&lt;br /&gt;
b.root-servers.net. 294399  IN  AAAA    2801:1b8:10::b&lt;br /&gt;
c.root-servers.net. 331660  IN  AAAA    2001:500:2::c&lt;br /&gt;
d.root-servers.net. 32858   IN  AAAA    2001:500:2d::d&lt;br /&gt;
e.root-servers.net. 307198  IN  AAAA    2001:500:a8::e&lt;br /&gt;
f.root-servers.net. 408208  IN  AAAA    2001:500:2f::f&lt;br /&gt;
g.root-servers.net. 353355  IN  AAAA    2001:500:12::d0d&lt;br /&gt;
h.root-servers.net. 234104  IN  AAAA    2001:500:1::53&lt;br /&gt;
i.root-servers.net. 390219  IN  AAAA    2001:7fe::53&lt;br /&gt;
j.root-servers.net. 463450  IN  AAAA    2001:503:c27::2:30&lt;br /&gt;
k.root-servers.net. 37861   IN  AAAA    2001:7fd::1&lt;br /&gt;
l.root-servers.net. 225301  IN  AAAA    2001:500:9f::42&lt;br /&gt;
m.root-servers.net. 118907  IN  AAAA    2001:dc3::35&lt;br /&gt;
&lt;br /&gt;
;; Query time: 18 msec&lt;br /&gt;
;; SERVER: 10.0.48.1#53(10.0.48.1) (UDP)&lt;br /&gt;
;; WHEN: Tue Jan 07 10:26:18 JST 2025&lt;br /&gt;
;; MSG SIZE  rcvd: 1109&amp;lt;/pre&amp;gt;&lt;br /&gt;
Some other noteworthy things about the first DNS response:&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;&amp;#039;opcode&amp;#039;&amp;#039;&amp;#039; in the answer is &amp;lt;code&amp;gt;QUERY&amp;lt;/code&amp;gt;. The sender of the DNS query sets this value, in this case &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;. See &amp;lt;code&amp;gt;opcode: QUERY&amp;lt;/code&amp;gt; in line 2.&lt;br /&gt;
* The DNS resolver set the &amp;lt;code&amp;gt;QUERY&amp;lt;/code&amp;gt; flag to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, which means that this an &amp;#039;&amp;#039;&amp;#039;answer&amp;#039;&amp;#039;&amp;#039; to a DNS query. You can see this in the second line in &amp;lt;code&amp;gt;QUERY: 1&amp;lt;/code&amp;gt;. In the DNS protocol Request For Comments (RFC), [https://datatracker.ietf.org/doc/html/rfc1035#section-4.1.1 RFC 1035] the &amp;lt;code&amp;gt;QUERY&amp;lt;/code&amp;gt; field is instead called &amp;lt;code&amp;gt;QR&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The resolver tells &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; that it includes 14 &amp;#039;&amp;#039;&amp;#039;answer records&amp;#039;&amp;#039;&amp;#039; in this response. You can see this in the second line in &amp;lt;code&amp;gt;ANSWER: 14&amp;lt;/code&amp;gt;. The DNS protocol specification calls this header value &amp;lt;code&amp;gt;ANCOUNT&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The answer contains 27 &amp;#039;&amp;#039;&amp;#039;additional records&amp;#039;&amp;#039;&amp;#039;. The DNS protocol specification calls this value &amp;lt;code&amp;gt;ARCOUNT&amp;lt;/code&amp;gt;. These are values that &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; hasn’t requested directly. Instead, the resolver still wants &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; to know about these.&lt;br /&gt;
* If you manually count the records in the &amp;lt;code&amp;gt;ADDITIONAL&amp;lt;/code&amp;gt; section, you may only see 26 records. I don’t know why that’s the case.&lt;br /&gt;
* The query response contains no &amp;#039;&amp;#039;&amp;#039;authority records&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;finding-the-top-level-domain-name-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Finding the top-level domain name server ==&lt;br /&gt;
&lt;br /&gt;
Proceeding with the next query, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; asks the root name server &amp;lt;code&amp;gt;j.root-servers.net&amp;lt;/code&amp;gt; for the FQDN &amp;lt;code&amp;gt;zombo.com.&amp;lt;/code&amp;gt;. The root name server returns 13 &amp;lt;code&amp;gt;AUTHORITY&amp;lt;/code&amp;gt; records that &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; can query next to continue resolving &amp;lt;code&amp;gt;zombo.com.&amp;lt;/code&amp;gt;. Furthermore, the &amp;lt;code&amp;gt;AUTHORITY&amp;lt;/code&amp;gt; section contains the DNSSEC records &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RRSIG&amp;lt;/code&amp;gt;. A recent version of &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; is able to check DNSSEC signatures using the &amp;lt;code&amp;gt;+dnssec&amp;lt;/code&amp;gt; flag. See [https://serverfault.com/a/154075 this Stack Exchange answer] for more information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root-servers.net&amp;lt;/code&amp;gt; doesn’t hold records for &amp;lt;code&amp;gt;.com&amp;lt;/code&amp;gt; domains itself, so it points &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; to ask &amp;lt;code&amp;gt;gtld-servers.net.&amp;lt;/code&amp;gt; next instead. &amp;lt;code&amp;gt;gtld-servers.net&amp;lt;/code&amp;gt; is responsible for &amp;#039;&amp;#039;&amp;#039;resolving .com domains&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;; Got answer:&lt;br /&gt;
;; -&amp;amp;gt;&amp;amp;gt;HEADER&amp;amp;lt;&amp;amp;lt;- opcode: QUERY, status: NOERROR, id: 1157&lt;br /&gt;
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27&lt;br /&gt;
&lt;br /&gt;
;; OPT PSEUDOSECTION:&lt;br /&gt;
; EDNS: version: 0, flags: do; udp: 1472&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;zombo.com.         IN  A&lt;br /&gt;
&lt;br /&gt;
;; AUTHORITY SECTION:&lt;br /&gt;
com.            172800  IN  NS  a.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  b.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  c.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  d.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  e.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  f.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  g.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  h.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  i.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  j.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  k.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  l.gtld-servers.net.&lt;br /&gt;
com.            172800  IN  NS  m.gtld-servers.net.&lt;br /&gt;
com.            86400   IN  DS  19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A&lt;br /&gt;
com.            86400   IN  RRSIG   DS 8 1 86400 20250119210000 20250106200000 26470 . DQQ9SqKUcniHKVr6zFNzs6wHLVZ6CdfSFMr3q8tCwh+mLPrKCTRlbnpS TmJy1M8YDEDvrrBO0EFx1rr+cGwcB2RiIfOnLl8c2942n5aOpR+3tZB0 sCP1KFv1+BhiD1RL8dff+rMNJ8+0BWNgsID8/MmI+y8UB/70YERAz/W0 AmOhbN/pHkfgvZfbtrOs6Msz+wcUR17wRCOLazyFnBE19EWnek9SYhj9 Jw440nEZ1Kopi+KqWXG0K+kt1HqZS3J2kkO/TmHyU780F/fOtRP/dWmX 06gSiBe4cCSe3Hs7aHlIe2LwH/ICioNdJj0WjzFJ8IDoC+vmLdRkXh4b NVJHoQ==&lt;br /&gt;
&lt;br /&gt;
;; ADDITIONAL SECTION:&lt;br /&gt;
a.gtld-servers.net. 172800  IN  A   192.5.6.30&lt;br /&gt;
b.gtld-servers.net. 172800  IN  A   192.33.14.30&lt;br /&gt;
c.gtld-servers.net. 172800  IN  A   192.26.92.30&lt;br /&gt;
d.gtld-servers.net. 172800  IN  A   192.31.80.30&lt;br /&gt;
e.gtld-servers.net. 172800  IN  A   192.12.94.30&lt;br /&gt;
f.gtld-servers.net. 172800  IN  A   192.35.51.30&lt;br /&gt;
g.gtld-servers.net. 172800  IN  A   192.42.93.30&lt;br /&gt;
h.gtld-servers.net. 172800  IN  A   192.54.112.30&lt;br /&gt;
i.gtld-servers.net. 172800  IN  A   192.43.172.30&lt;br /&gt;
j.gtld-servers.net. 172800  IN  A   192.48.79.30&lt;br /&gt;
k.gtld-servers.net. 172800  IN  A   192.52.178.30&lt;br /&gt;
l.gtld-servers.net. 172800  IN  A   192.41.162.30&lt;br /&gt;
m.gtld-servers.net. 172800  IN  A   192.55.83.30&lt;br /&gt;
a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e::2:30&lt;br /&gt;
b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d::2:30&lt;br /&gt;
c.gtld-servers.net. 172800  IN  AAAA    2001:503:83eb::30&lt;br /&gt;
d.gtld-servers.net. 172800  IN  AAAA    2001:500:856e::30&lt;br /&gt;
e.gtld-servers.net. 172800  IN  AAAA    2001:502:1ca1::30&lt;br /&gt;
f.gtld-servers.net. 172800  IN  AAAA    2001:503:d414::30&lt;br /&gt;
g.gtld-servers.net. 172800  IN  AAAA    2001:503:eea3::30&lt;br /&gt;
h.gtld-servers.net. 172800  IN  AAAA    2001:502:8cc::30&lt;br /&gt;
i.gtld-servers.net. 172800  IN  AAAA    2001:503:39c1::30&lt;br /&gt;
j.gtld-servers.net. 172800  IN  AAAA    2001:502:7094::30&lt;br /&gt;
k.gtld-servers.net. 172800  IN  AAAA    2001:503:d2d::30&lt;br /&gt;
l.gtld-servers.net. 172800  IN  AAAA    2001:500:d937::30&lt;br /&gt;
m.gtld-servers.net. 172800  IN  AAAA    2001:501:b1f9::30&lt;br /&gt;
&lt;br /&gt;
;; Query time: 11 msec&lt;br /&gt;
;; SERVER: 192.58.128.30#53(j.root-servers.net) (UDP)&lt;br /&gt;
;; WHEN: Tue Jan 07 10:26:18 JST 2025&lt;br /&gt;
;; MSG SIZE  rcvd: 1169&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;top-level-domain-name-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Top-level domain name server ==&lt;br /&gt;
&lt;br /&gt;
Here’s what happens when &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; asks the &amp;#039;&amp;#039;&amp;#039;Top Level Domain (TLD) name server&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;d.gtld-servers.net&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;zombo.com.&amp;lt;/code&amp;gt;. Verisign operates the servers at &amp;lt;code&amp;gt;gtld-servers.net&amp;lt;/code&amp;gt;. Here are some noteworthy things about the reply that &amp;lt;code&amp;gt;d.gtld-servers.net&amp;lt;/code&amp;gt; gives back to &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* The response contains signed NSEC3 records. [https://dnsinstitute.com/documentation/dnssec-guide/ch06s02.html NSEC3 records are complex], and I don’t understand them well right now.&lt;br /&gt;
* Verisign tells &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; that the authoritative name servers are with &amp;lt;code&amp;gt;liquidweb.com&amp;lt;/code&amp;gt;, specifically: &amp;lt;code&amp;gt;ns.liquidweb.com&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ns1.liquidweb.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; also receives the &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; records for the two &amp;lt;code&amp;gt;liquidweb.com&amp;lt;/code&amp;gt; name server&lt;br /&gt;
&lt;br /&gt;
Here’s the DNS query response that &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; prints out:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;; Got answer:&lt;br /&gt;
;; -&amp;amp;gt;&amp;amp;gt;HEADER&amp;amp;lt;&amp;amp;lt;- opcode: QUERY, status: NOERROR, id: 29896&lt;br /&gt;
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 3&lt;br /&gt;
&lt;br /&gt;
;; OPT PSEUDOSECTION:&lt;br /&gt;
; EDNS: version: 0, flags: do; udp: 4096&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;zombo.com.         IN  A&lt;br /&gt;
&lt;br /&gt;
;; AUTHORITY SECTION:&lt;br /&gt;
zombo.com.      172800  IN  NS  ns.liquidweb.com.&lt;br /&gt;
zombo.com.      172800  IN  NS  ns1.liquidweb.com.&lt;br /&gt;
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN NSEC3 1 1 0 - CK0Q3UDG8CEKKAE7RUKPGCT1DVSSH8LL NS SOA RRSIG DNSKEY NSEC3PARAM&lt;br /&gt;
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN RRSIG NSEC3 13 2 900 20250111002631 20250103231631 29942 com. HiG6TuJBV47MnPmttWN98zHscsehwlRhgzemiswIdlmKh993eKxhdUbB d4hhuK7piTIFoZ4Gi/THENgJJKuCmg==&lt;br /&gt;
E5F0ON130HM3M2JQH41BK2763KA5559S.com. 900 IN NSEC3 1 1 0 - E5F126VHCT3KQ620F4OFQ11HB5BJBFRT NS DS RRSIG&lt;br /&gt;
E5F0ON130HM3M2JQH41BK2763KA5559S.com. 900 IN RRSIG NSEC3 13 2 900 20250113013526 20250106002526 29942 com. 0SoW/r4xPtu4bnmOTSLtkwb9ezAyCHkI1XLAQPRWvu0x7xCBVwguEw8j eR+ZHeLU4x5n5q7d/3/1n/uH2x6kig==&lt;br /&gt;
&lt;br /&gt;
;; ADDITIONAL SECTION:&lt;br /&gt;
ns.liquidweb.com.   172800  IN  A   69.16.222.254&lt;br /&gt;
ns1.liquidweb.com.  172800  IN  A   69.16.223.254&lt;br /&gt;
&lt;br /&gt;
;; Query time: 10 msec&lt;br /&gt;
;; SERVER: 192.31.80.30#53(d.gtld-servers.net) (UDP)&lt;br /&gt;
;; WHEN: Tue Jan 07 10:26:18 JST 2025&lt;br /&gt;
;; MSG SIZE  rcvd: 472&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;registrar-name-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registrar name server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;d.gtld-servers.net&amp;lt;/code&amp;gt; told &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; that it should ask &amp;lt;code&amp;gt;ns.liquidweb.com&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;zombo.com.&amp;lt;/code&amp;gt;. Here’s the response &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; receives after querying &amp;lt;code&amp;gt;zombo.com&amp;lt;/code&amp;gt;’s &amp;#039;&amp;#039;&amp;#039;authoritative name&amp;#039;&amp;#039;&amp;#039; server. The response contains a single &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; record for &amp;lt;code&amp;gt;zombo.com&amp;lt;/code&amp;gt;’s IPv4 address.&lt;br /&gt;
&lt;br /&gt;
Note that the previous DNS queries had no &amp;lt;code&amp;gt;ANSWER&amp;lt;/code&amp;gt; section, not counting the query for &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; in the beginning. Every DNS query response before &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; asks &amp;lt;code&amp;gt;ns.liquidweb.com&amp;lt;/code&amp;gt; contained &amp;lt;code&amp;gt;AUTHORITY&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ADDITIONAL&amp;lt;/code&amp;gt; records.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;; Got answer:&lt;br /&gt;
;; -&amp;amp;gt;&amp;amp;gt;HEADER&amp;amp;lt;&amp;amp;lt;- opcode: QUERY, status: NOERROR, id: 37369&lt;br /&gt;
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1&lt;br /&gt;
&lt;br /&gt;
;; OPT PSEUDOSECTION:&lt;br /&gt;
; EDNS: version: 0, flags: do; udp: 1680&lt;br /&gt;
;; QUESTION SECTION:&lt;br /&gt;
;zombo.com.         IN  A&lt;br /&gt;
&lt;br /&gt;
;; ANSWER SECTION:&lt;br /&gt;
zombo.com.      300 IN  A   50.28.52.163&lt;br /&gt;
&lt;br /&gt;
;; Query time: 9 msec&lt;br /&gt;
;; SERVER: 69.16.222.254#53(ns.liquidweb.com) (UDP)&lt;br /&gt;
;; WHEN: Tue Jan 07 10:26:18 JST 2025&lt;br /&gt;
;; MSG SIZE  rcvd: 54&amp;lt;/pre&amp;gt;&lt;br /&gt;
This illustrates the recursive nature of DNS name resolution. &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; is able to query any DNS record &amp;#039;&amp;#039;from scratch&amp;#039;&amp;#039;. It can do so without needing to know each individual name server responsible for a single domain. Instead, &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; figures out which name servers it has to ask on the way to reach the final authoritative name server.&lt;br /&gt;
&lt;br /&gt;
In this example, the authoritative name server is with &amp;lt;code&amp;gt;liquidweb.com&amp;lt;/code&amp;gt;. An authoritative name server for a domain name can change in the future. Being able to perform recursive queries and always retrieving accurate information is important for inter-networking.&lt;br /&gt;
&lt;br /&gt;
The DNS security extensions (DNSSEC) further increase the reliability of this system. &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; can verify the whole chain of DNS responses. You can see for yourself how &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; utilizes DNSSEC by starting &amp;lt;code&amp;gt;dig&amp;lt;/code&amp;gt; using the &amp;lt;code&amp;gt;+dnssec&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reference&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
This [https://serverfault.com/a/1045018 Stack Exchange answer] has more information on how to query a domain name and receive a complete trace.&lt;br /&gt;
&lt;br /&gt;
The section [https://en.wikipedia.org/wiki/Domain_Name_System#DNS_message_format DNS message format] in the Wikipedia article on the Domain Name System explains all the header flags in detail.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dns-zone-transfer-protocol&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= DNS zone transfer protocol =&lt;br /&gt;
&lt;br /&gt;
The Internet Engineering Task Force (IETF) published [https://datatracker.ietf.org/doc/html/rfc5936 RFC 5936] in June 2010. This document specifies the DNS zone transfer protocol, also called Authoritative Transfer (AXFR).&lt;br /&gt;
&lt;br /&gt;
The RFC says that there &amp;#039;&amp;#039;SHOULD&amp;#039;&amp;#039; be means to restrict sessions to specific clients, but doesn’t specify them further. Access controls are only &amp;#039;&amp;#039;RECOMMENDED&amp;#039;&amp;#039;. See [https://datatracker.ietf.org/doc/html/rfc5936#section-5 section 5] of RFC 5936:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
A DNS implementation SHOULD provide means to restrict AXFR sessions&lt;br /&gt;
to specific clients.&lt;br /&gt;
[...]&lt;br /&gt;
A general-purpose implementation is RECOMMENDED to implement access&lt;br /&gt;
controls based upon &amp;amp;quot;Secret Key Transaction Authentication for DNS&lt;br /&gt;
(TSIG)&amp;amp;quot; [RFC2845] and/or &amp;amp;quot;DNS Request and Transaction Signatures&lt;br /&gt;
( SIG(0)s )&amp;amp;quot; [RFC2931].&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;a-cve-missing-critical-details&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== A CVE missing critical details ==&lt;br /&gt;
&lt;br /&gt;
Check out [https://nvd.nist.gov/vuln/detail/CVE-1999-0532 CVE-1999-0532]. It lists the following vulnerability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;A DNS server allows zone transfers.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The CVE doesn’t contain any other description, such as affected software or version. Judging by this [https://access.redhat.com/solutions/3173331 Red Hat Solution], this affects the Berkeley Internet Name Domain (BIND) version 9 server on Red Hat Enterprise Linux (RHEL) 6 and 7. RHEL 6 was first released in 2010, and RHEL 7 is from 2013. The timelines don’t add up, since the CVE is from 1999.&lt;br /&gt;
&lt;br /&gt;
This CVE reads like a CWE, since it describes an abstract vulnerability. Compare for example [https://cwe.mitre.org/data/definitions/276.html CWE-276: incorrect default permissions].&lt;/div&gt;</summary>
		<author><name>Justus</name></author>
	</entry>
</feed>