dig +trace
працює, роблячи вигляд, що це сервер імен, і працює на дерево простору імен, використовуючи ітеративні запити, починаючи з кореня дерева, дотримуючись рефералів по цьому шляху.
Перше, що потрібно зробити - це запитати звичайний системний DNS-сервер для записів NS для "."
Після того, як він отримає відповідь, який буде поточним списком серверів імен кореневих імен, він вибере його та запитає запис A для цього імені, якщо він не отримав його в розділі додаткових записів вперше, щоб його отримати IP-адресу, на яку слід відправити наступний запит. Скажімо, він вибирає f.root-servers.net, IP-адреса якого 192.5.5.241.
На даний момент давайте скористаємось dig +trace www.google.co.uk.
нашою командою з доменним іменем, для якого ми хочемо простежити шлях до роздільної здатності.
Наступним запитом за лаштунками буде такий:
$ dig +norecurse @192.5.5.241 www.google.co.uk
; <<>> DiG 9.9.4 <<>> +norecurse @192.5.5.241 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8962
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 11, ADDITIONAL: 15
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; AUTHORITY SECTION:
uk. 172800 IN NS ns5.nic.uk.
uk. 172800 IN NS ns6.nic.uk.
uk. 172800 IN NS ns4.nic.uk.
uk. 172800 IN NS nsc.nic.uk.
uk. 172800 IN NS ns2.nic.uk.
uk. 172800 IN NS ns3.nic.uk.
uk. 172800 IN NS nsd.nic.uk.
uk. 172800 IN NS nsa.nic.uk.
uk. 172800 IN NS ns7.nic.uk.
uk. 172800 IN NS nsb.nic.uk.
uk. 172800 IN NS ns1.nic.uk.
;; ADDITIONAL SECTION:
ns1.nic.uk. 172800 IN A 195.66.240.130
ns2.nic.uk. 172800 IN A 217.79.164.131
ns3.nic.uk. 172800 IN A 213.219.13.131
ns4.nic.uk. 172800 IN A 194.83.244.131
ns5.nic.uk. 172800 IN A 213.246.167.131
ns6.nic.uk. 172800 IN A 213.248.254.130
ns7.nic.uk. 172800 IN A 212.121.40.130
nsa.nic.uk. 172800 IN A 156.154.100.3
nsb.nic.uk. 172800 IN A 156.154.101.3
nsc.nic.uk. 172800 IN A 156.154.102.3
nsd.nic.uk. 172800 IN A 156.154.103.3
ns1.nic.uk. 172800 IN AAAA 2a01:40:1001:35::2
ns4.nic.uk. 172800 IN AAAA 2001:630:181:35::83
nsa.nic.uk. 172800 IN AAAA 2001:502:ad09::3
;; Query time: 45 msec
;; SERVER: 192.5.5.241#53(192.5.5.241)
;; WHEN: Tue Feb 11 19:19:14 MST 2014
;; MSG SIZE rcvd: 507
Нічого так, тепер ми знаємо, що існують сервери імен, uk
і це єдине, про що знає кореневий сервер. Це направлення , оскільки ми не просили рекурсії ( +norecurse
вимикає).
Чудово ми промиваємо і повторюємо. Цього разу ми вибираємо одного з uk
серверів імен і задаємо йому те саме питання .
$ dig +norecurse @195.66.240.130 www.google.co.uk
; <<>> DiG 9.9.4 <<>> +norecurse @195.66.240.130 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 618
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; AUTHORITY SECTION:
google.co.uk. 172800 IN NS ns1.google.com.
google.co.uk. 172800 IN NS ns3.google.com.
google.co.uk. 172800 IN NS ns2.google.com.
google.co.uk. 172800 IN NS ns4.google.com.
;; Query time: 354 msec
;; SERVER: 195.66.240.130#53(195.66.240.130)
;; WHEN: Tue Feb 11 19:22:47 MST 2014
;; MSG SIZE rcvd: 127
Дивовижно, зараз ми з'ясували, що uk
сервер імен вищого рівня знає, що є зона, яка називається, google.co.uk
і каже нам піти задати цим серверам імен наше питання. Це ще один реферал.
Промийте, повторіть.
Однак цього разу ми не отримали записів A у розділі додаткових записів відповіді, тому ми вибираємо один, скажімо, ns2.google.com, і нам потрібно шукати його адресу. Ми перезапускаємо запит (знову в корені) і переслідуємо дерево, щоб знайти IP-адресу для ns2.google.com. Я пропущу цю частину для стислості, але ми дізнаємось, що IP для неї - 216.239.34.10.
Отже, наш наступний запит:
$ dig +norecurse @216.239.34.10 www.google.co.uk
; <<>> DiG 9.9.4 <<>> +norecurse @216.239.34.10 www.google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33404
;; flags: qr aa; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.co.uk. IN A
;; ANSWER SECTION:
www.google.co.uk. 300 IN A 74.125.225.216
www.google.co.uk. 300 IN A 74.125.225.223
www.google.co.uk. 300 IN A 74.125.225.215
;; Query time: 207 msec
;; SERVER: 216.239.34.10#53(216.239.34.10)
;; WHEN: Tue Feb 11 19:26:43 MST 2014
;; MSG SIZE rcvd: 82
І ми закінчили! (нарешті) Як ми знаємо, що ми зробили? Ми отримали відповідь на наш запит, який представляв собою записи A для www.google.co.uk. Ви також можете сказати, оскільки це вже не реферал, aa
біт встановлюється в останній відповіді, тобто це авторитетна відповідь на ваш запит.
Отже, це відбувається кожен крок на шляху, коли ви користуєтесь dig +trace
.
Зауважте, що якщо у вас є DNSSEC-версія версії dig і ви додасте +dnssec
до команди, ви можете побачити ще багато записів. Те, що ці додаткові записи, залишається читачем як вправа ... але входить в dig +sigchase
роботу.