Сомнительные достоинства старой доброй утилиты

Nslookup является одной из моих любимых утилит в Windows NT 4.0. Вот уже несколько лет при возникновении проблем с разрешением имен при использовании DNS я обращаюсь только к этой программе. Однако с тех пор, как наша компания перешла на Windows 2000 Professional, за Nslookup водятся некоторые странности: неудачные попытки запроса, обращение к дополнительному серверу DNS, а не к основному, и другие. Прежде чем подробно рассмотреть причуды программы Nslookup в Windows 2000 Professional, вспомним, как просто и надежно работала утилита Nslookup в среде NT 4.0.

DNS как образец качества

Утилита Nslookup позволяет напрямую опрашивать серверы DNS для выяснения соответствия адресов IP и имен хостов, для поиска определенных типов записей в файле зоны DNS и проверки их работоспособности. Эта информация важна для поиска неисправностей в работе сервера DNS и создания нового файла зоны DNS. Для выполнения прямого (имя хоста – адрес IP) или реверсивного (адрес IP – имя хоста) запроса просто наберите в командной строке Nslookup, указав в качестве параметра имя хоста или IP-адрес. Утилита вернет нужное соответствие – либо IP-адрес, либо имя хоста. В рамках домена на серверах DNS в соответствующих файлах содержатся записи типа Address (A), задающие отображение имя хоста – адрес IP. Когда используется команда Nslookup, как раз и анализируются записи типа А. Кроме того, программу Nslookup можно использовать для опроса серверов DNS на предмет анализа записей других типов, таких как Name Server (NS), в которых указывается поддержка определенного имени домена; Canonical Name (CNAME), описывающие псевдонимы для серверов DNS, которые были ранее определены через записи типа А; Mail Exchanger (MX), в которых задаются имена почтовых систем для данного домена. С помощью Nslookup можно опросить как записи всех перечисленных типов, так и записи какого-то определенного типа. Почтовые серверы Internet используют запросы к DNS для получения информации из записи MX, такой как адрес сервера и стоимость маршрута. Когда возникает ошибка в работе почтового сервера Internet, например, возврат небольшого фрагмента переданного сообщения его отправителю по причине сбоя при отправке или же доставка сообщения не на тот почтовый сервер, ручной опрос сервера DNS может оказаться весьма полезным. В результате анализа полученных данных становится ясно, какую информацию из DNS "видят" удаленные серверы, а в этом может быть ключ к решению проблемы. Программа Nslookup также используется для ручного опроса файла зоны DNS. Другая полезная функция Nslookup – отображение всех почтовых серверов данного домена. Для этого установите опрос только одного типа записей – MX и сообщите имя интересующего домена. В приведенном ниже примере используется домен xcedia.com:
nslookup
Нажмите Enter, после чего наберите:
set type=mx
xcedia.com
На Рисунке 1 показаны результаты работы введенных команд.

Странность номер один: сбой в опросе DNS

Первая странность в работе Nslookup в Windows 2000 Professional была обнаружена при возникновении случайных сбоев в процессе запросов к записям в DNS. На некоторых станциях результаты опроса записей MX были примерно такими же, как и при использовании NT 4.0. Однако с других станций запрос на MX выводил не записи этого типа, а общие данные из файла зоны - имя основного сервера, серийный номер файла зоны, установки Time to Live (TTL) – время жизни. Когда команды из рассмотренного выше примера были выполнены с сетевой станции Windows 2000 Professional, оказалось, что записи типа MX отсутствуют (см. Рисунок 2). После того, как один из читателей Windows 2000 Magazine написал мне о похожей проблеме с утилитой Nslookup в Windows 2000 Professional, я решил выяснить, что Microsoft изменила в новой версии утилиты, и почему с разных машин результаты работы программы Nslookup разные. Для начала один и тот же запрос на наличие записей MX выдавался с различных станций Windows 2000 Professional. В результате на каждой станции запрос на MX завершился неудачно. Но при регистрации на станции NT 4.0 аналогичный запрос прекрасно все показывал. В конце концов мне удалось получить нормальные результаты запросов к записям MX со станций Windows 2000 Professional. Для этого пришлось вручную изменить DNS-сервер, используемый в системе по умолчанию, задав команду server server_name в среде Nslookup (в команде server параметр server_name – это имя хоста DNS или IP-адрес сервера DNS, который запрашивается утилитой Nslookup.) По умолчанию, Nslookup устанавливает в качестве основного сервера DNS самый первый сервер из стека настроек IP клиента. После того как этот сервер был изменен, с различных систем Windows 2000 Professional запросы на тип записей MX стали выдавать нормальные результаты. Я заподозрил, что такое поведение Nslookup связано с ошибкой инициализации утилиты, когда обнаружил, что при изменении настроек сервера DNS случайно поменял тип сервера DNS, к которому подключались клиенты сети. Когда сессии Nslookup на Windows 2000 Professional были проанализированы повторно, обнаружилось, что в каждом случае соединение происходило с сервером DNS на NT 4.0. При изменении настроек сервера DNS мне следовало указать сервер DNS с Windows 2000. Может быть, проблема с Nslookup возникает на стыке клиента Windows 2000 Professional и сервера DNS NT 4.0? Дальнейшие эксперименты подтвердили это предположение. Оказалось, что только серверы DNS на NT 4.0 представляют проблему для Nslookup из Windows 2000 Professional. С другими серверами DNS – на базе Windows 2000 DNS или BIND - клиенты Windows 2000 Professional работают нормально. Есть несколько обходных путей для выхода из этой ситуации. Можно воспользоваться командой server server_name для отказа от сервера DNS на NT 4.0. Или можно настроить IP-протокол на клиентах на сервер DNS, отличный от NT 4.0 DNS. Наконец, можно скопировать версию Nslookup из NT 4.0 на станции Windows 2000 Professional. Я пробовал – это помогает. Установка Windows 2000 Service Pack 2 (SP2) тоже решает проблему.

Странность номер два: выбор сервера

Выбор сервера DNS по умолчанию – другая странность команды Windows 2000 Professional Nslookup. В среде NT 4.0 утилита Nslookup при инициализации иногда выдает такое сообщение об ошибке:
DNS request timed out
Timeout was x seconds
Can't find server name for address : Timed out
Default servers are not available
Default Server: UnKnown
Address: 
где xxx.xxx.xxx.xxx – это IP-адрес самого первого сервера DNS, сконфигурированного на станции клиента, с которым работает Nslookup. Похоже, что для NT 4.0 это путанное сообщение никак не отражается на функциональности программы. Не обращайте на него внимания, Nslookup обрабатывает запросы нормально. В статье Microsoft "DNS Request Timed Out' Error Message When You Start Nslookup from a Command Line" (http://support.microsoft.com/support/kb/articles/q242/9/06.asp) объясняется, что это особенность процедуры инициализации Nslookup, когда предпринимаются попытки выполнить реверсивный запрос для IP-адреса самого первого сервера DNS. Если запрос завершается неудачно (поскольку нет записей Pointer - PTR), Nslookup выдает приведенное выше сообщение. Несмотря на эту ошибку, в NT 4.0 утилита продолжает опрашивать первый в списке сервер DNS, даже при неудачном реверсивном запросе. Для Windows 2000 Professional команда Nslookup сообщает об ошибке в процессе инициализации. А потом, когда выдается очередной запрос, Nslookup пропускает первый DNS-сервер в списке настроек клиента и перебирает список до тех пор, пока не сможет нормально обработать реверсивный запрос (в статье Microsoft об этом не упоминается). В моем случае это привело к тому, что вместо основного сервера Windows 2000 DNS стал использоваться вспомогательный сервер NT 4.0 DNS, что послужило причиной сбоев (см. описание странности №1). Я был разочарован, когда разработчики Microsoft сократили возможности такой важной утилиты в процессе перехода на новую версию. Обычно обновление означает улучшение, но в случае с Nslookup это оказалось не так.

Шон Дейли - один из редакторов журнала Windows NT Magazine и президент компании iNTellinet Solutions, занимающейся консалтингом и сетевой интеграцией. Имеет сертификат MCSE. Последней из его книг была «Optimizing Windows NT», выпущенная издательством IDG Books. С ним можно связаться по адресу: sean@ntsol.com.