Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

2004 г

Система доменных имен

Материалы книги П.Б. Храмцова
iнфоцентр

Программа интерактивного тестирования серверов DNS - nslookup

В данном материале рассматриваются различные режимы работы программы nslookup - одного из основных средств тестирования работы сервера доменных имен.

Среди средств тестирования системы доменных имен nslookup подвергается наибольшей критике. Во всяком случае, авторы bind рекомендуют использовать dig вместо nslookup, как написано в руководстве по BIND 9 - "из-за загадочности пользовательского интерфейса и часто противоречивого поведения" последней. Тем не менее, nslookup - это одно из самых популярных средств тестирования DNS. Эта программа есть в большинстве версий Unix-систем.

Программа позволяет работать пользователю в двух режимах: интерактивном и режиме неинтерактивном режиме. В первом случае пользователь, попав в командную строку nslookup, имеет возможность исполнять команды nslookup, во втором случае отчеты получают, задавая аргументы командной строки интерпретатора (shell или любого другого командного интерпретатора) nslookup.

Сначала рассмотрим неинтерактивный режим работы. Как уже было сказано, он используется для получения информации из системы DNS непосредственно из командной строки интерпретатора. В аргументах командной строки nslookup можно указывать значения опций, имя или адрес хоста для которого производится поиск, и сервер доменных имен.

% nslookup www.ru
Server:  polyn.net.kiae.su
Address:  144.206.160.32


Non-authoritative answer:
Name:    www.ru
Address:  194.87.0.50


%

В данном случае мы просто используем сервер доменных имен из resolv.conf для поиска IP-адреса www.ru. Из отчета видим, что этот сервер не является авторитативным для искомого имени.

Для того, чтобы понять выполняет ли nslookup перебор доменных имен, который характерен для библиотеки resolver, зададим имя несуществующего хоста:

% nslookup gaga.ru
Server:  polyn.net.kiae.su
Address:  144.206.160.32


Name:    gaga.ru.net.kiae.su


%

За нашим именем появилась вставка net.kiae.su, которая взята из resolv.conf. Вот его (resolv.conf) содержание:

% more /etc/resolv.conf
nameserver 144.206.160.32
nameserver 144.206.192.10
search net.kiae.su polyn.kiae.su .
%

На самом деле можно получить более полный отчет, если включить режим отладки:

% nslookup -debug gaga.ru
;; res_mkquery(0, 32.160.206.144.in-addr.arpa, 1, 12)
------------
Got answer:
    HEADER:
        opcode = QUERY, id = 22021, rcode = NOERROR
        header flags:  response, auth. answer, want recursion, recursion avail.
        questions = 1,  answers = 1,  authority records = 3,  additional = 3


    QUESTIONS:
        32.160.206.144.in-addr.arpa, type = PTR, class = IN
    ANSWERS:
    ->  32.160.206.144.in-addr.arpa
        name = polyn.net.kiae.su
        ttl = 3600 (1 hour)
    AUTHORITY RECORDS:
    ->  160.206.144.in-addr.arpa
        nameserver = polyn.net.kiae.su
        ttl = 3600 (1 hour)
    ->  160.206.144.in-addr.arpa
        nameserver = ns.spb.su
        ttl = 3600 (1 hour)
    ->  160.206.144.in-addr.arpa
        nameserver = ns.ussr.eu.net
        ttl = 3600 (1 hour)
    ADDITIONAL RECORDS:
    ->  polyn.net.kiae.su
        internet address = 144.206.160.32
        ttl = 49698 (13 hours 48 mins 18 secs)
    ->  ns.spb.su
        internet address = 193.124.83.69
        ttl = 49556 (13 hours 45 mins 56 secs)
    ->  ns.ussr.eu.net
        internet address = 193.125.152.3
        ttl = 3083 (51 mins 23 secs)


------------
Server:  polyn.net.kiae.su
Address:  144.206.160.32


;; res_mkquery(0, gaga.ru, 1, 1)
------------
Got answer:
    HEADER:
        opcode = QUERY, id = 22022, rcode = NXDOMAIN
        header flags:  response, want recursion, recursion avail.
        questions = 1,  answers = 0,  authority records = 1,  additional = 0


    QUESTIONS:
        gaga.ru, type = A, class = IN
    AUTHORITY RECORDS:
    ->  ru
        ttl = 10530 (2 hours 55 mins 30 secs)
        origin = ns.ripn.net
        mail addr = hostmaster.ripn.net
        serial = 4005295
        refresh = 7200 (2 hours)
        retry   = 900 (15 mins)
        expire  = 2592000 (30 days)
        minimum ttl = 345600 (4 days)


------------
;; res_mkquery(0, gaga.ru.net.kiae.su, 1, 1)
------------
Got answer:
    HEADER:
        opcode = QUERY, id = 22023, rcode = NOERROR
        header flags:  response, want recursion, recursion avail.
        questions = 1,  answers = 0,  authority records = 1,  additional = 0


    QUESTIONS:
        gaga.ru.net.kiae.su, type = A, class = IN
    AUTHORITY RECORDS:
    ->  kiae.su
        ttl = 10530 (2 hours 55 mins 30 secs)
        origin = ns.kiae.ru
        mail addr = noc-dns.relarn.ru
        serial = 650127450
        refresh = 28800 (8 hours)
        retry   = 3600 (1 hour)
        expire  = 604800 (7 days)
        minimum ttl = 86400 (1 day)


------------
Name:    gaga.ru.net.kiae.su


%

О чем говорит этот отчет. Сначала производится поиск по обратной зоне имени сервера доменных имен, который имеет IP-адрес 144.206.160.32. Затем производится поиск gaga.ru, а затем gaga.ru.net.kiae.su. По идее, следовало бы выполнить и другие подстановки, но nslookup этого не сделала. И вообще, в данном случае программа ведет себя несколько не так, как это предписано для системы resolver.

В данном случае аргумент -debug - это опция командной строки, которая позволяет управлять объемом и типом информации в отчетах nslookup при неинтерактивном режиме работы.

Вот еще один пример применения опционного аргумента:

% nslookup -type=SOA ru.
Server:  polyn.net.kiae.su
Address:  144.206.160.32


Non-authoritative answer:
ru
        origin = ns.ripn.net
        mail addr = hostmaster.ripn.net
        serial = 4005295
        refresh = 7200 (2 hours)
        retry   = 900 (15 mins)
        expire  = 2592000 (30 days)
        minimum ttl = 345600 (4 days)


Authoritative answers can be found from:
ru      nameserver = NS2.NIC.FR
ru      nameserver = ns.ripn.net
ru      nameserver = NS2.ripn.net
ru      nameserver = SUNIC.SUNET.SE
ru      nameserver = NS.UU.net
ru      nameserver = NS1.RELCOM.ru
NS2.NIC.FR      internet address = 192.93.0.4
ns.ripn.net     internet address = 194.85.119.1
NS2.ripn.net    internet address = 194.226.96.30
SUNIC.SUNET.SE  internet address = 192.36.125.2
NS.UU.net       internet address = 137.39.1.3
NS1.RELCOM.ru   internet address = 193.125.152.3
%

В данном случае мы просим доставить нам информацию о записи SOA зоны ru. Точка в конце имени зоны указана для определенности. Сервер выдает не авторитативный ответ и сообщает, где можно получить авторитативные ответы.

Опции всегда указываются перед именем или IP-адресом хоста, для которого ищется информация. На самом деле опции - это аргументы команды set интерактивного режима работы, о котором речь пойдет несколько позже.

Опции можно также указать в файле .nslookuprc, который может быть размещен в домашнем каталоге пользователя. Каждая опция должна занимать отдельную строку. Ниже приведен пример содержания этого файла:

% more .nslookuprc
type=NS
db2
%

Первая строка задает тип записей описания зоны, которые ищутся. В данном случае это записи NS. А вторая запись задает уровень подробности отчета (отладка - debug второго уровня).

До сих пор мы рассматривали работу nslookup с сервером доменных имен, который определен в resolv.conf. Имя сервера доменных имен, который будет выполнять рекурсивные запросы, можно задать в качестве последнего аргумента командной строки nslookup:

% nslookup -type=A www.ru. ns.relarn.ru.
Server:  ns.relarn.ru
Address:  194.226.65.3


Non-authoritative answer:
Name:    www.ru
Address:  194.87.0.50


%

В данном случае мы посылаем рекурсивный запрос не серверу умолчания из resolv.conf, а ns.relarn.ru, который присылает нам неавторитативный ответ.

Теперь разберем интерактивный режим работы nslookup. В него попадают двумя способами. Во-первых, просто введя nslookup в командной строке интерпретатора:

% nslookup
Default Server:  polyn.net.kiae.su
Address:  144.206.160.32


>

В данном случае, в качестве сервера доменных имен программа использует сервер доменных имен умолчания, который указывается в файле настройки resolver (resolv.conf).

Во-вторых, в интерактивный режим можно попасть, задав nslookup c двумя аргументами: символом "-" и именем или IP-адресом сервера доменных имен, который будет использоваться для выполнения рекурсивных запросов:

% nslookup - 144.206.192.10
Default Server:  IRIS.polyn.kiae.su
Address:  144.206.192.10


>

Для того, чтобы покинуть интерактивный режим nslookup и вернуться в командную строку интерпретатора следует выполнить команду exit:

% nslookup
Default Server:  polyn.net.kiae.su
Address:  144.206.160.32
> exit
%

Вообще говоря, у nslookup довольно большое множество команд интерактивного режима, но мы их все рассматривать не будем. Для этого существуют руководства и система man. Рассмотрим только наиболее часто используемые случаи.

Самый простой из них - это поиск IP-адреса по доменному имени:

> quest.polyn.kiae.su.
Server:  polyn.net.kiae.su
Address:  144.206.160.32


Name:    quest.polyn.kiae.su
Address:  144.206.192.2


>

Лучше всего задавать на конце доменного имени символ ".". По умолчанию nslookup включает перебор доменных имен, а работает он не совсем корректно, как мы уже убедились выше.

Теперь попробуем найти обратное соответствие:

> 144.206.192.11
Server:  polyn.net.kiae.su
Address:  144.206.160.32


Name:    www.kiae.ru
Address:  144.206.192.11


>

Как мы видим из полученного отчета, этому адресу соответствует имя www.kiae.ru. Увеличим подробность отчета:

> set debug
> 144.206.192.11
Server:  polyn.net.kiae.su
Address:  144.206.160.32


;; res_mkquery(0, 11.192.206.144.in-addr.arpa, 1, 12)
------------
Got answer:
    HEADER:
        opcode = QUERY, id = 31436, rcode = NOERROR
        header flags:  response, auth. answer, want recursion, recursion avail.
        questions = 1,  answers = 2,  authority records = 3,  additional = 2


    QUESTIONS:
        11.192.206.144.in-addr.arpa, type = PTR, class = IN
    ANSWERS:
    ->  11.192.206.144.in-addr.arpa
        name = www.kiae.ru
        ttl = 3600 (1 hour)
    ->  11.192.206.144.in-addr.arpa
        name = kiae.polyn.kiae.su
        ttl = 3600 (1 hour)
    AUTHORITY RECORDS:
    ->  192.206.144.in-addr.arpa
        nameserver = polyn.net.kiae.su
        ttl = 3600 (1 hour)
    ->  192.206.144.in-addr.arpa
        nameserver = ns.spb.su
        ttl = 3600 (1 hour)
    ->  192.206.144.in-addr.arpa
        nameserver = ns.ussr.eu.net
        ttl = 3600 (1 hour)
    ADDITIONAL RECORDS:
    ->  polyn.net.kiae.su
        internet address = 144.206.160.32
        ttl = 46562 (12 hours 56 mins 2 secs)
    ->  ns.spb.su
        internet address = 193.124.83.69
        ttl = 46420 (12 hours 53 mins 40 secs)


------------
Name:    www.kiae.ru
Address:  144.206.192.11


>

Подробность отчета мы увеличиваем командой set debug. Из полученного отчета видно, что nslookup производит поиск в обратной зоне, предварительно преобразовав соответствующим образом введенную нами строку IP-адреса.

Обратим внимание еще на один момент. Если при поиске IP-адреса тип запроса был A, то, как видно из выше приведенного примера, в случае поиска доменного имени по IP-адресу мы посылаем запрос на указатель (PTR).

Среди ответов мы находим два имени, которые соответствуют IP-адресу: www.kiae.ru и kiae.polyn.kiae.ru. Это отражает тот факт, что в описании обратной зоны 192.206.144.in-addr.arpa у нас есть что-то похожее на:

11              IN      PTR     www.kiae.ru.
                IN      PTR     kiae.polyn.kiae.su.

Если теперь мы захотим получить параметры SOA записи для этой обратной зоны, то нам следует заказать именно эту запись описания зоны:

> set type=soa
> 192.206.144.in-addr.arpa.
Server:  polyn.net.kiae.su
Address:  144.206.160.32


192.206.144.in-addr.arpa
        origin = polyn.net.kiae.su
        mail addr = paul.kiae.su
        serial = 80
        refresh = 3600 (1 hour)
        retry   = 300 (5 mins)
        expire  = 9999999 (115 days 17 hours 46 mins 39 secs)
        minimum ttl = 3600 (1 hour)
192.206.144.in-addr.arpa        nameserver = polyn.net.kiae.su
192.206.144.in-addr.arpa        nameserver = ns.spb.su
192.206.144.in-addr.arpa        nameserver = ns.ussr.eu.net
polyn.net.kiae.su       internet address = 144.206.160.32
ns.spb.su       internet address = 193.124.83.69
ns.ussr.eu.net  internet address = 193.125.152.3
>

На самом деле мы получили не только параметры записи SOA, но и информацию о серверах доменных имен, которые эту зону поддерживают.

Приведенный выше отчет ни чем не отличается от того, который мы получили бы, если вместо обратной зоны использовали имя прямой зоны, например, polyn.kiae.su:

> set type=soa
> polyn.kiae.su.
Server:  polyn.net.kiae.su
Address:  144.206.160.32


polyn.kiae.su
        origin = polyn.net.kiae.su
        mail addr = paul.kiae.su
        serial = 80
        refresh = 3600 (1 hour)
        retry   = 300 (5 mins)
        expire  = 9999999 (115 days 17 hours 46 mins 39 secs)
        minimum ttl = 3600 (1 hour)
192.206.144.in-addr.arpa        nameserver = polyn.net.kiae.su
192.206.144.in-addr.arpa        nameserver = ns.spb.su
192.206.144.in-addr.arpa        nameserver = ns.ussr.eu.net
polyn.net.kiae.su       internet address = 144.206.160.32
ns.spb.su       internet address = 193.124.83.69
ns.ussr.eu.net  internet address = 193.125.152.3
>

Внимательный читатель обнаружит в приведенных выше примерах чудовищно большое время автономной работы для slave серверов для обеих зон (Устанавливается в SOA записи). Лучше всего следовать рекомендациям RIPE-203.

Рассмотрим еще два параметра интерактивного режима: server и lserver. Они нужны для изменения сервера доменных имен, которому nslookup посылает рекурсивные запросы (текущий сервер):

origin 16% nslookup
Default Server:  IRIS.polyn.kiae.su
Address:  144.206.192.10


>

В данном случае в nslookup работает в качестве клиента и посылает рекурсивные запросы на сервер IRIS.polyn.kiae.su (144.206.192.10). Мы можем изменить этот сервер при помощи команд server или lserver:

> server 144.206.160.32
Default Server:  polyn.net.kiae.su
Address:  144.206.160.32


>

В данном случае мы меняем адрес текущего сервера, используя текущий же сервер. Но текущий сервер может не отвечать:

> server 144.206.130.137
Default Server:  [144.206.130.137]
Address:  144.206.130.137


> 144.206.160.1
Server:  [144.206.130.137]
Address:  144.206.130.137

В этом месте мы "залипли", т.к. по адресу 144.206.130.137 до сервера доменных имен мы достучаться не можем (он там когда-то был, но сейчас его уже там нет). Нам нужно поменять текущий сервер, т.е. тот, которые мы используем для рекурсивных запросов:

> lserver 144.206.160.32
Default Server:  polyn.net.kiae.su
Address:  144.206.160.32


> 144.206.160.1
Server:  polyn.net.kiae.su
Address:  144.206.160.32


*** polyn.net.kiae.su can't find 144.206.160.1: Non-existent host/domain
>

Перед тем, как выдать команду мы вернулись в режим командной строки (^c) и потом выдали команду на изменение текущего сервера доменных имен.

Следует признать, что отклик nslookup на наш запрос не очень информативен. На самом деле просто в обратной зоне нет записи, которая бы устанавливала соответствие между IP адресом 144.206.160.1 и доменным именем. Впрочем, и более "свежие" программы тестирования DNS не более информативны. Вот пример отчета команды host:

> host 144.206.160.32
32.160.206.144.IN-ADDR.ARPA domain name pointer polyn.net.kiae.su
> host 144.206.160.1
Host not found.
>

В случае присутствия PTR записи, она выдается, при ее отсутствии - "хост не найден".

Теперь рассмотрим еще один важный момент тестирования - передачу зоны. В этом случаи nslookup выступает как slave сервер, которые "срисовывает" зону с master сервера. Делается это при помощи команды интерактивного режима ls:

> ls bard.kiae.ru
[IRIS.polyn.kiae.su]
$ORIGIN bard.kiae.ru.
@                       1H IN A         144.206.192.32
mail                    1H IN A         144.206.192.32
www                     1H IN A         144.206.192.32
>

На самом деле по команде ls в данном случае мы получили в отчете только адресные записи. Для того, чтобы получить все записи нужно указать либо флаг "-d", либо "-t any":

> ls -d bard.kiae.ru
[IRIS.polyn.kiae.su]
$ORIGIN bard.kiae.ru.
@                  1H IN SOA       ns.polyn.kiae.ru. paul.polyn.kiae.su. (
                                        7               ; serial
                                        1H              ; refresh
                                        5M              ; retry
                                        16w3d17h46m39s  ; expiry
                                        1H )            ; minimum


                        1H IN NS        polyn.kiae.ru.
                        1H IN NS        iris.polyn.kiae.su.
                        1H IN MX        10 mail
                        1H IN MX        20 iris.polyn.kiae.ru.
                        1H IN A         144.206.192.32
mail                    1H IN A         144.206.192.32
                        1H IN MX        10 mail
www                     1H IN A         144.206.192.32
@                  1H IN SOA       ns.polyn.kiae.ru. paul.polyn.kiae.su. (
                                        7               ; serial
                                        1H              ; refresh
                                        5M              ; retry
                                        16w3d17h46m39s  ; expiry
                                        1H )            ; minimum


>

Для того, чтобы списать зону, необходимо разрешение. Это значит, что администратор зоны должен разрешить списывание зоны с той машины, на которой Вы выполняете nslookup.

Следует еще раз напомнить, что nslookup считается не самым лучшим средством тестирования работы системы DNS и настройки серверов. Тем не менее, эта программа есть на любой Unix-платформе, и по этой причине ее применяют достаточно часто.

Рекомендованная литература:

  1. P. Mockapetris. RFC-1034. DOMAIN NAMES - CONCEPTS AND FACILITIES. ISI, 1987. (http://www.ietf.org/rfc/rfc1034.txt?number=1034)
  2. P. Mockapetris. RFC-1035. DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION. ISI, 1987. (http://www.ietf.org/rfc/rfc1035.txt?number=1035)
  3. Альбитц П., Ли К.. DNS и BIND. - Пер. с англ. - СПб: Символ-Плюс, 2002. - 696 с.

Полезные ссылки:

  1. Peter Koch. Ripe-203. Recommendations for DNS SOA Values. 1999. (http://www.ripe.net/docs/ripe-203.html)
  2. http://tom.imm.uran.ru/cgi-bin/man?nslookup(8) - страница man по nslookup.

Назад Оглавление Вперед

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...