====== Диагностика DNS ====== ===== host ===== Программа **host(1)** существует во многих вариантах. В FreeBSD она умеет сообщать практически ту же информацию, что и **dig(1)**, но в других системах это может быть не так. Здесь мы приведём примеры на базе FreeBSD , как наиболее полные. Запрос IP по адресу: $ host mail.ru mail.ru has address 194.67.57.26 mail.ru mail is handled (pri=10) by mxs.mail.ru Как видно, нам сообщили не только IP машины mail.ru, но и некоторую дополнительную информацию (имя почтовой машины и её приоритет). Эта информация приходит от сервера DNS в том же UDP пакете и её получение не требует со стороны программы **host(1)** никаких специальных действий. И всё же, некоторые варианты этой программы могут не сообщать всей информации. Программе можно явно указать сервер DNS, в этом случае запрос будет сделан к нему: $ host mail.ru 194.67.23.130 Using domain server 194.67.23.130: mail.ru has address 194.67.57.26 mail.ru mail is handled (pri=10) by mxs.mail.ru И наконец, можно запросить конкретный тип записи: $ host -t NS mail.ru mail.ru name server ns2.mail.ru mail.ru name server ns3.mail.ru mail.ru name server ns4.mail.ru mail.ru name server ns5.mail.ru mail.ru name server ns.mail.ru mail.ru name server ns1.mail.ru $ host -t SOA mail.ru mail.ru start of authority ns.mail.ru hostmaster.mail.ru ( 3209013119 ;serial (version) 300 ;refresh period 900 ;retry refresh this often 172800 ;expiration period 300 ;minimum TTL ) Опция ''-v'' включает режим verbose. $ host -t NS -v mail.ru Trying null domain rcode = 0 (Success), ancount=6 The following answer is not authoritative: The following answer is not verified as authentic by the server: mail.ru 16141 IN NS ns4.mail.ru mail.ru 16141 IN NS ns5.mail.ru mail.ru 16141 IN NS ns.mail.ru mail.ru 16141 IN NS ns1.mail.ru mail.ru 16141 IN NS ns2.mail.ru mail.ru 16141 IN NS ns3.mail.ru Additional information: ns.mail.ru 153899 IN A 194.67.23.130 ns1.mail.ru 299802 IN A 194.67.57.103 ns2.mail.ru 167593 IN A 194.67.57.104 ns3.mail.ru 278118 IN A 194.67.23.17 ns4.mail.ru 278118 IN A 194.67.57.4 ns5.mail.ru 278118 IN A 194.67.23.232 $ host -t SOA -v mail.ru Trying null domain rcode = 0 (Success), ancount=1 The following answer is not authoritative: The following answer is not verified as authentic by the server: mail.ru 21455 IN SOA ns.mail.ru hostmaster.mail.ru ( 3209013119 ;serial (version) 300 ;refresh period 900 ;retry refresh this often 172800 ;expiration period 300 ;minimum TTL ) For authoritative answers, see: mail.ru 15127 IN NS ns.mail.ru mail.ru 15127 IN NS ns1.mail.ru mail.ru 15127 IN NS ns2.mail.ru mail.ru 15127 IN NS ns3.mail.ru mail.ru 15127 IN NS ns4.mail.ru mail.ru 15127 IN NS ns5.mail.ru Additional information: ns.mail.ru 152885 IN A 194.67.23.130 ns1.mail.ru 298788 IN A 194.67.57.103 ns2.mail.ru 166579 IN A 194.67.57.104 ns3.mail.ru 277104 IN A 194.67.23.17 ns4.mail.ru 277104 IN A 194.67.57.4 ns5.mail.ru 277104 IN A 194.67.23.232 В последнем случае нам даже явно рекомендуют обращаться за информацией на авторитетные серверы и указывают их адреса. С опцией ''-v'' отчёт программы **host(1)** становится похож на отчёт **dig(1)** (см. ниже) и начинает повтрять синтаксис файла зоны. ===== dig ===== Утилита **dig(1)** более «разговорчива». Одна из особенностей её отчётов состоит в том, что они даются сразу в формате файла зоны: $ dig mail.ru ; <<>> DiG 8.3 <<>> mail.ru ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9099 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 6 ;; QUERY SECTION: ;; mail.ru, type = A, class = IN ;; ANSWER SECTION: mail.ru. 1h56m42s IN A 194.67.57.26 ;; AUTHORITY SECTION: mail.ru. 4h21m12s IN NS ns2.mail.ru. mail.ru. 4h21m12s IN NS ns3.mail.ru. mail.ru. 4h21m12s IN NS ns4.mail.ru. mail.ru. 4h21m12s IN NS ns5.mail.ru. mail.ru. 4h21m12s IN NS ns.mail.ru. mail.ru. 4h21m12s IN NS ns1.mail.ru. ;; ADDITIONAL SECTION: ns.mail.ru. 1d18h37m10s IN A 194.67.23.130 ns1.mail.ru. 3d11h8m53s IN A 194.67.57.103 ns2.mail.ru. 1d22h25m24s IN A 194.67.57.104 ns3.mail.ru. 3d5h7m29s IN A 194.67.23.17 ns4.mail.ru. 3d5h7m29s IN A 194.67.57.4 ns5.mail.ru. 3d5h7m29s IN A 194.67.23.232 ;; Total query time: 9 msec ;; FROM: aluminum.mccme.ru to SERVER: 62.117.108.2 ;; WHEN: Wed Apr 5 14:37:57 2006 ;; MSG SIZE sent: 25 rcvd: 244 Символ '';'' в файле зоны является комментарием. Заметим, что мы не требовали от программы **dig(1)** информацию о серверах NS, и всё же он запросил её у сервера DNS. Разумеется, это не вся информация о зоне. Попробуем запросить информацию о записях SOA и MX. $ dig MX mail.ru ; <<>> DiG 8.3 <<>> MX mail.ru ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28695 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 7 ;; QUERY SECTION: ;; mail.ru, type = MX, class = IN ;; ANSWER SECTION: mail.ru. 4h6m37s IN MX 10 mxs.mail.ru. ;; AUTHORITY SECTION: mail.ru. 4h6m37s IN NS ns2.mail.ru. mail.ru. 4h6m37s IN NS ns3.mail.ru. mail.ru. 4h6m37s IN NS ns4.mail.ru. mail.ru. 4h6m37s IN NS ns5.mail.ru. mail.ru. 4h6m37s IN NS ns.mail.ru. mail.ru. 4h6m37s IN NS ns1.mail.ru. ;; ADDITIONAL SECTION: mxs.mail.ru. 2h4m39s IN A 194.67.23.20 ns.mail.ru. 1d18h22m35s IN A 194.67.23.130 ns1.mail.ru. 3d10h54m18s IN A 194.67.57.103 ns2.mail.ru. 1d22h10m49s IN A 194.67.57.104 ns3.mail.ru. 3d4h52m54s IN A 194.67.23.17 ns4.mail.ru. 3d4h52m54s IN A 194.67.57.4 ns5.mail.ru. 3d4h52m54s IN A 194.67.23.232 ;; Total query time: 2 msec ;; FROM: aluminum.mccme.ru to SERVER: 62.117.108.2 ;; WHEN: Wed Apr 5 14:52:31 2006 ;; MSG SIZE sent: 25 rcvd: 264 $ dig SOA mail.ru ; <<>> DiG 8.3 <<>> SOA mail.ru ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59976 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 6 ;; QUERY SECTION: ;; mail.ru, type = SOA, class = IN ;; ANSWER SECTION: mail.ru. 5h51m47s IN SOA ns.mail.ru. hostmaster.mail.ru. ( 3209013119 ; serial 5M ; refresh 15M ; retry 2D ; expiry 5M ) ; minimum ;; AUTHORITY SECTION: mail.ru. 4h6m19s IN NS ns5.mail.ru. mail.ru. 4h6m19s IN NS ns.mail.ru. mail.ru. 4h6m19s IN NS ns1.mail.ru. mail.ru. 4h6m19s IN NS ns2.mail.ru. mail.ru. 4h6m19s IN NS ns3.mail.ru. mail.ru. 4h6m19s IN NS ns4.mail.ru. ;; ADDITIONAL SECTION: ns.mail.ru. 1d18h22m17s IN A 194.67.23.130 ns1.mail.ru. 3d10h54m IN A 194.67.57.103 ns2.mail.ru. 1d22h10m31s IN A 194.67.57.104 ns3.mail.ru. 3d4h52m36s IN A 194.67.23.17 ns4.mail.ru. 3d4h52m36s IN A 194.67.57.4 ns5.mail.ru. 3d4h52m36s IN A 194.67.23.232 ;; Total query time: 6 msec ;; FROM: aluminum.mccme.ru to SERVER: 62.117.108.2 ;; WHEN: Wed Apr 5 14:52:50 2006 ;; MSG SIZE sent: 25 rcvd: 275 Для запроса к конкретному серверу DNS его адрес необходимо предварять символом at: $ dig mail.ru @194.67.23.130 ; <<>> DiG 8.3 <<>> mail.ru @194.67.23.130 ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62910 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 6 ;; QUERY SECTION: ;; mail.ru, type = A, class = IN ;; ANSWER SECTION: mail.ru. 6H IN A 194.67.57.26 ;; AUTHORITY SECTION: mail.ru. 6H IN NS ns.mail.ru. mail.ru. 6H IN NS ns1.mail.ru. mail.ru. 6H IN NS ns2.mail.ru. mail.ru. 6H IN NS ns4.mail.ru. mail.ru. 6H IN NS ns5.mail.ru. mail.ru. 6H IN NS ns3.mail.ru. ;; ADDITIONAL SECTION: ns.mail.ru. 6H IN A 194.67.23.130 ns1.mail.ru. 6H IN A 194.67.57.103 ns2.mail.ru. 6H IN A 194.67.57.104 ns4.mail.ru. 6H IN A 194.67.57.4 ns5.mail.ru. 6H IN A 194.67.23.232 ns3.mail.ru. 6H IN A 194.67.23.17 ;; Total query time: 91 msec ;; FROM: aluminum.mccme.ru to SERVER: 194.67.23.130 ;; WHEN: Wed Apr 5 15:05:16 2006 ;; MSG SIZE sent: 25 rcvd: 244 Заметьте, что в этом запросе размеры таймаутов стали более «круглыми» — ровно по 6 часов. Причина в том, что мы задали вопрос авторитетному за эту зону серверу. Ответы, которые мы получали до сих пор мы брали из кешей неавторитетных серверов, поэтому в качестве TTL мы получали время указывающее на то, сколько осталось жить в кеше той или иной записи. Давайте попробуем узнать с помощью команды dig(1)адреса серверов отвечающих за корневую зону (.) и время жизни записей о корневых серверах. $ dig NS . ; <<>> DiG 8.3 <<>> NS . ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5359 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 5d1h8m12s IN NS F.ROOT-SERVERS.NET. . 5d1h8m12s IN NS G.ROOT-SERVERS.NET. . 5d1h8m12s IN NS H.ROOT-SERVERS.NET. . 5d1h8m12s IN NS I.ROOT-SERVERS.NET. . 5d1h8m12s IN NS J.ROOT-SERVERS.NET. . 5d1h8m12s IN NS K.ROOT-SERVERS.NET. . 5d1h8m12s IN NS L.ROOT-SERVERS.NET. . 5d1h8m12s IN NS M.ROOT-SERVERS.NET. . 5d1h8m12s IN NS A.ROOT-SERVERS.NET. . 5d1h8m12s IN NS B.ROOT-SERVERS.NET. . 5d1h8m12s IN NS C.ROOT-SERVERS.NET. . 5d1h8m12s IN NS D.ROOT-SERVERS.NET. . 5d1h8m12s IN NS E.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: J.ROOT-SERVERS.NET. 6d1h8m12s IN A 192.58.128.30 ;; Total query time: 2 msec ;; FROM: aluminum.mccme.ru to SERVER: 62.117.108.2 ;; WHEN: Thu Apr 6 11:37:56 2006 ;; MSG SIZE sent: 17 rcvd: 244 Очень хорошо, теперь мы знаем что думает о корневых серверах, в настоящий момент обслуживающий нас сервер DNS. Мы видим, что время жизни информации о корневых серверах истечёт через пять дней, один час, восемь минут, двенадцать секунд. Кстати нам, кроме имён корневых серверов, в разделе ADDITIONAL SECTION сказали ещё и адрес одного из серверов. Давайте зададим этот вопрос снова, но теперь не нашему серверу DNS, а сервру j.root-servers.net. с адресом IP 192.58.128.30. Он авторитетен за корневую зону и полученная от него информация будет истиной в последней инстанции. $ dig NS . @192.58.128.30 ; <<>> DiG 8.3 <<>> NS . @192.58.128.30 ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50893 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241 B.ROOT-SERVERS.NET. 5w6d16h IN A 192.228.79.201 J.ROOT-SERVERS.NET. 5w6d16h IN A 192.58.128.30 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 ;; Total query time: 299 msec ;; FROM: aluminum.mccme.ru to SERVER: 192.58.128.30 ;; WHEN: Thu Apr 6 11:44:56 2006 ;; MSG SIZE sent: 17 rcvd: 436 Как видим, истинное время жизни составляет без малого шесть недель (1000 часов). При помощи такого большого TTL сервера пытаются снизить нагрузку на себя. Поскольку команда **dig(1)** выдаёт информацию в формате файла зоны, если мы вдруг почему-то потеряли файл с настройками зоны hint, мы можем сохранить вывод данной команды в файл и использовать его. Наконец, мы можем сделать запрос записи типа TXT, содержащей короткое стихотворение. Это стихотворение мы записали в файл зоны раньше. $ dig TXT poem.house.hcn-strela.ru ; <<>> DiG 9.3.2 <<>> TXT poem.house.hcn-strela.ru ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8468 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1 ;; QUESTION SECTION: ;poem.house.hcn-strela.ru. IN TXT ;; ANSWER SECTION: poem.house.hcn-strela.ru. 36000 IN TXT "The Road goes ever on and on" "Down from the door where it began." "Now far ahead the Road has gone," "And I must follow, if I can," "Purshuing it with eager feet," "Until it joins some larger way" "Where many paths and errands meet." "And whither then? I cannot say." ;; AUTHORITY SECTION: house.hcn-strela.ru. 36000 IN NS ns.hcn-strela.ru. house.hcn-strela.ru. 36000 IN NS ns1.hcn-strela.ru. house.hcn-strela.ru. 36000 IN NS ns.house.hcn-strela.ru. ;; ADDITIONAL SECTION: ns.house.hcn-strela.ru. 36000 IN A 83.102.236.196 ;; Query time: 3 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Feb 17 12:05:09 2007 ;; MSG SIZE rcvd: 376 ===== nslookup ===== **nslookup(1)** самая древняя программа из этих трёх. Кроме всего прочего она интересна ещё и тем, что входит в стандартную поставку большинства операционных систем компании MicroSoft. Её синтаксис несколько напоминает синтаксис команды **host(1)**: $ nslookup mail.ru Server: ns.mccme.ru Address: 62.117.108.2 Non-authoritative answer: Name: mail.ru Address: 194.67.57.26 $ nslookup mail.ru 194.67.23.130 Server: ns.mail.ru Address: 194.67.23.130 Name: mail.ru Address: 194.67.57.26 Но главная изюминка **nslookup(1)** состоит в том, что она умеет работать интерактивно: $ nslookup Default Server: ns.mccme.ru Address: 62.117.108.2 > server 194.67.23.130 Default Server: ns.mail.ru Address: 194.67.23.130 > set type=MX > mail.ru Server: ns.mail.ru Address: 194.67.23.130 mail.ru preference = 10, mail exchanger = mxs.mail.ru mail.ru nameserver = ns.mail.ru mail.ru nameserver = ns1.mail.ru mail.ru nameserver = ns2.mail.ru mail.ru nameserver = ns4.mail.ru mail.ru nameserver = ns5.mail.ru mail.ru nameserver = ns3.mail.ru mxs.mail.ru internet address = 194.67.23.20 ns.mail.ru internet address = 194.67.23.130 ns1.mail.ru internet address = 194.67.57.103 ns2.mail.ru internet address = 194.67.57.104 ns4.mail.ru internet address = 194.67.57.4 ns5.mail.ru internet address = 194.67.23.232 ns3.mail.ru internet address = 194.67.23.17 > set type=SOA > mail.ru Server: ns.mail.ru Address: 194.67.23.130 mail.ru origin = ns.mail.ru mail addr = hostmaster.mail.ru serial = 3209013119 refresh = 300 (5M) retry = 900 (15M) expire = 172800 (2D) minimum ttl = 300 (5M) mail.ru nameserver = ns.mail.ru mail.ru nameserver = ns1.mail.ru mail.ru nameserver = ns2.mail.ru mail.ru nameserver = ns4.mail.ru mail.ru nameserver = ns5.mail.ru mail.ru nameserver = ns3.mail.ru ns.mail.ru internet address = 194.67.23.130 ns1.mail.ru internet address = 194.67.57.103 ns2.mail.ru internet address = 194.67.57.104 ns4.mail.ru internet address = 194.67.57.4 ns5.mail.ru internet address = 194.67.23.232 ns3.mail.ru internet address = 194.67.23.17 > exit Source: http://bezopasnik.org/unix/dok/BSDA-course/ch06s05.html