Альтернативой 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.