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-платформе, и по этой причине ее применяют достаточно часто.
Рекомендованная литература:
- P. Mockapetris. RFC-1034. DOMAIN NAMES - CONCEPTS AND FACILITIES. ISI, 1987. (http://www.ietf.org/rfc/rfc1034.txt?number=1034)
- P. Mockapetris. RFC-1035. DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION. ISI, 1987. (http://www.ietf.org/rfc/rfc1035.txt?number=1035)
- Альбитц П., Ли К.. DNS и BIND. - Пер. с англ. - СПб: Символ-Плюс, 2002. - 696 с.
Полезные ссылки:
- Peter Koch. Ripe-203. Recommendations for DNS SOA Values. 1999. (http://www.ripe.net/docs/ripe-203.html)
- http://tom.imm.uran.ru/cgi-bin/man?nslookup(8) - страница man по nslookup.
Назад Оглавление Вперед