Альтернативой nslookup в области запросов к службе имен является dig. Запросы dig обычно представляют собой однострочные команды, тогда как nslookup обычно используется в диалоговом режиме.
При этом команды dig выполняют ту же работу, что и nslookup. Выбор того или иного инструмента в большой степени просто дело вкуса. Оба работают достойно. Для примера мы используем dig, чтобы запросить у корневого сервера b.rootservers.net NS-записи домена mit.edu. Выполните следующую команду:
% dig ®Ь.root-servers.net mit.edu ns
В данном примере @b.root-servers.net - это сервер, к которому обращен запрос. Сервер может обозначаться именем или IP-адресом. При отладке проблемы, связанной с удаленным доменом, указывайте компетентный сервер имен этого домена. В данном примере мы запрашиваем имена серверов домена второго уровня (mit.edu), поэтому обращаемся к корневому серверу.
Если сервер не указан явным образом, dig использует локальный сервер имен или сервер имен, упомянутый в файле /etc/resolv.conf. (Файл resolv.conf описан в главе 8.) Кроме того, имя альтернативного файла resolv.conf может быть указано в качестве значения переменной среды LOCALRES. Этот альтерна- тивный файл будет использоваться вместо /etc/resolv.conf в запросах dig. Установка значения LOCALRES влияет только на dig, прочие программы, работающие со службами имен, продолжают использовать /etc/resolv.conf.
Последний элемент в примере команды - ns. Это тип запроса. Тип запроса - это значение, определяющее тип информации DNS, о которой идет речь в запросе. Это аналог значения, устанавливаемого при помощи команды nslookup set type. В табл. 13.1 перечислены возможные типы запросов dig и даны их расшифровки.
Таблица 13.1. Типы запросов dig
Тип запроса | Поиск записей DNS |
а | Адресные |
any | Записи любых типов |
mx | Записи Mail Exchange (MX) |
ns | Записи серверов имен (Name Server) |
soa | Записи начала компетенции (Start of Authority) |
hinfo | Записи Host Info |
axfr | Все записи зоны |
txt | Текстовые записи |
В dig существует также ключ, полезный для определения имени узла по его IP-адресу. Имея только IP-адрес узла, вы можете захотеть определить его имя, поскольку численные адреса более подвержены опечаткам. Работа с именем вместо адреса может облегчить жизнь пользователя. Домен inaddr.arpa обеспечивает преобразование адресов в имена, a dig предоставляет простой способ создания запросов по именам домена in-addr.arpa. Ключ -х позволяет создавать запросы преобразования адрес-имя и избавляет от необходимости вручную выполнять обращение номеров и добавлять «in-addr.arра». К примеру, чтобы выполнить поиск имени узла по IP-адресу 18.72.0.3, просто введите:
% dig -x 18.72.0.3 ; «» DiG 2.2 «» -x ;; res options: init recurs defnam dnsrch ;; got answer: ;; -»HEA0ER«- opcode: QUERY, status: NOERROR, id: 4 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUERY SECTION: ;; 3.0.72.18.in-addr.arpa, type = ANY, class = IN ;; ANSWER SECTION: 3.0.72.18.in-addr.arpa. 6H IN PTR BITSY.MIT.EDU. ;; AUTHORITY SECTION: 18.in-addr.arpa. 6H IN NS W20NS.MIT.EDU. 18.in-addr.arpa. 6H IN NS BITSY.MIT.EOU. 18.in-addr.arpa. 6H IN NS STRAWB.MIT.EDU. ;; ADDITIONAL SECTION: W20NS.MIT.EDU. 6H IN A BITSY.MIT.EDU. 6H IN A STRAWB.MIT.EDU. 6H IN A 18.71.0.151 ;; Total query time: 367 msec ;; FROM: wren.foobirds.org to SERVER: default -- 0.0.0.0 ;; WHEN. Thu Jul 19 16:00:39 2001 ;; MSG SIZE sent: 40 rcvd: 170
Ответ на наш запрос - BITSY.MIT.EDU, однако dig отображает много другой информации. Для целей данного конкретного запроса достаточно только строки ответа, но дополнительная информация, отображаемая dig, полезна для обретения понимания формата пакетов ответов DNS и того, откуда появляются различные элементы информации DNS.
Формат сообщения DNS определен в документе RFC 1035, Domain Names - Implementation and Specification (Доменные имена, реализация и спецификация). Данный документ гласит, что сообщение стандартного формата может включать до пяти разделов:
Заголовок (Header) - Содержит административную информацию о сообщении, включая сведения о том, что содержится в последующих разделах сообщения.
Вопрос (Question) - Определяет суть вопроса, поставленного в запросе. Если раздел вопроса содержится в ответном сообщении, он позволяет определить, на какой вопрос отвечает ответное сообщение.
Ответ (Answer) - Часть ответного сообщения, содержащая ответ на конкретный вопрос, полученный в запросе.
Компетенция (Authority) - Содержит указатели на компетентные серверы домена, фигурирующего в запросе.
Дополнительный раздел (Additional) - Содержит прочие записи ресурсов с дополнительной важной информацией, сопутствующей ответу. Это не ответ на запрос, но эта информация способствует интерпретации или использованию ответа.
Основа вывода команды dig представлена в различных разделах ответного пакета DNS. Сведения заголовка в вышеприведенном примере представлены следующим образом:
;; -»HEADER«- opcode: QUERY , status: NOERROR , id: 4 ; ; flags: qr aa rd ra; QUERY : 1, ANSWER : 1, AUTHORITY : 3, ADDITIONAL: 3
dig отображает данные заголовка не в том порядке, в каком они хранятся в заголовке, но вывод команды достаточно легко связать с полями заголовка, описанными в RFC 1035. Ниже описаны различные значения из примера:
opcode: QUERY - Указывает, что данный запрос является стандартным.
status: NOERROR - Указывает, что в поле RCODE отсутствует код ошибки, то есть поле RCODE содержит значение 0.
id: 6 - Указывает, что для данного сообщения в качестве идентификатора использовалось число 6.
flags: qr aa rd rа - flags объединяет все однобитовые поля заголовка. В данном случае это значение покрывает четыре различных поля раздела заголовка и предоставляет сведения о трех других полях. Данная группа флагов указывает, что QR имеет значение 1, то есть мы имеем дело с ответным сообщением. АА имеет значение 1, поскольку ответ поступил от компетентного сервера. RD имеет значение 1, поскольку в запросе присутствовал флаг рекурсии. RA имеет значение 1 - рекурсия была доступна на сервере. ТС отсутствует, а значит, имеет значение 0, и это означает, что ответ не был усечен. AD и CD также имеют значение 0, поскольку механизмы DNSSEC не задействованы.
QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
Эти значения представляют поля заголовка QDCOUNT, ANCOUNT, NSCOUNT и ARCOUNT, определяющие число записей ресурсов в оставшихся разделах сообщения. Можно видеть, что в разделе вопроса одна запись, в разделе ответа одна запись, в разделе компетенции три записи и в дополнительном разделе три записи. Команда dig из примера отображает следующие сведения о запросе:
;; QUERY SECTION: ;; 3.0.72.18.in-addr.arpa, type = ANY, class = IN
Четко прослеживаются три поля данного запроса. Поле класса имеет значение IN, поскольку запрос касается записей Internet. Смысл запроса: поиск любой записи (type = any), связанной с именем 3.0.72.18.in-addr.arpa. Отметим, что программа dig выполнила обращение адреса и создала для данного запроса соответствующее обратное доменное имя. Далее dig выводит раздел ответа, компетенции и дополнительный:
;; ANSWER SECTION: 3.0.72.18.in-addr.arpa. 6H IN PTR BITSY.MIT.EDU. ;; AUTHORITY SECTION: 18.in-addr.arpa. 6H IN NS 18.in-addr.arpa. 6H IN NS 18.in-addr.arpa. 6H IN NS ;; ADDITIONAL SECTION: W20NS.MIT.EDU. 6H IN A BITSY.MIT.EDU. 6H IN A 18.72.0.3 STRAWB.MIT.EDU. 6H IN A 18.71.0.151
Ответ такой, как можно было ожидать: запись PTR для имени 3.0.72.18.inaddr.arpa. Эта запись сообщает нам, что имя узла для адреса 18.72.0.3-bitsy.mit.edu.
В разделе компетенции перечислены серверы, выступающие в роли компетентных для домена 18.in-addr.arpa. В этом разделе три записи NS, и каждая содержит имя компетентного сервера. Таким образом, мы знаем, что серверы w20ns.mit.edu, bitsy.mit.edu и strawb.mit.edu являютс я компетентными для обратного домена 18.in-addr.arpa.
Дополнительный раздел завершает сообщение и содержит адреса всех компетентных серверов имен. Адреса важны, поскольку если локальному серверу понадобится отправить один из последующих запросов напрямую компетентному серверу имен, он должен знать адреса таких серверов. Адреса в данном случае: 18.70.0.160, 18.72.0.3, 18.71.0.151.
Помимо ответа DNS, dig предоставляет сведения о состоянии в трех первых и четырех последних строках вывода. Первая строка повторяет параметры командной строки dig (-х в данном примере). Вторая строка содержит параметры библиотеки DNS-клиента, а третья указывает, был ли найден ответ на запрос. Последние четыре строки отображают время поиска, имя и адрес сервера, ответившего на запрос, дату получения запроса, а также размер пакетов запроса и ответа. Все эти сведения могут быть полезны при отладке проблем с DNS.
Программа dig удобна, поскольку формат сообщения DNS четко прослеживается в ее выводе, dig включается в состав Linux, однако присутствует не во всех системах Unix. Не беспокойтесь, если в вашей системе отсутствует dig. Для атаки на те же проблемы можно смело использовать nslookup. nslookup и dig одинаково эффективны для тестирования DNS.