Команда nslookup: использование и опции, запрос записей и выбор DNS-сервера
Команда nslookup — это инструмент запросов, который спрашивает у DNS-сервера доменное имя и возвращает его IP-адреса и DNS-записи, такие как MX, NS и TXT. Когда мы запрашивали записи example.com по типам на сервере AlmaLinux 9 и меняли опрашиваемый DNS-сервер, один и тот же домен давал разные результаты в зависимости от сервера: строка Non-authoritative answer в начале ответа исчезала или менялся результат запроса ANY.
Вывод ниже получен под учётной записью root на сервере AlmaLinux 9.8. Адрес DNS-сервера, настроенного на сервере, заменён примерным значением 192.0.2.53, номера версий пакетов тоже заменены примерными значениями.
1️⃣ Как использовать команду nslookup
Базовая форма — [nslookup -опция имя DNS-сервер], причём опции и DNS-сервер можно не указывать. Если указать только имя, nslookup спросит адрес этого имени у DNS-сервера, настроенного на сервере.
nslookup example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
Name: example.com
Address: 172.66.147.243
Name: example.com
Address: 104.20.23.154
Name: example.com
Address: 2606:4700:10::6814:179a
Name: example.com
Address: 2606:4700:10::ac42:93f3Две строки Server и Address вверху показывают DNS-сервер, получивший запрос, а #53 в конце — номер порта DNS. Если тип записи не указан, nslookup запрашивает сначала запись A (IPv4), затем запись AAAA (IPv6), поэтому после двух адресов IPv4 шли два адреса IPv6.
Non-authoritative answer означает, что ответил DNS-сервер, хранящий значение в кеше, а не сервер, который напрямую управляет записями example.com. Поэтому сразу после изменения записи значение может отличаться от реального.
2️⃣ Опции nslookup
Опции пишутся с дефисом перед именем.
-type — та же опция, что -query или краткая форма -q. Запрос к 8.8.8.8 с -q=mx вернул ту же одну строку почтового сервера, что и -type=mx.
nslookup -q=mx google.com 8.8.8.8Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
google.com mail exchanger = 10 smtp.google.com.
Authoritative answers can be found from:-timeout и -retry задают, сколько ждать DNS-сервер, который не отвечает. 192.0.2.1 — адрес, зарезервированный для документации, поэтому на нём не отвечает ни один сервер.
nslookup -timeout=2 -retry=1 example.com 192.0.2.1;; connection timed out; no servers could be reachedС -timeout=2 -retry=1 nslookup через 2 секунды вывел строку [connection timed out] и завершился. С -retry=2 ушло 4 секунды, а без опций — 15 секунд. Чтобы скрипт не зависал надолго из-за сервера, который не отвечает, уменьшите оба значения.
С -debug разделы вопроса и ответа из пакета ответа выводятся как есть.
nslookup -debug example.com 8.8.8.8Server: 8.8.8.8
Address: 8.8.8.8#53
------------
QUESTIONS:
example.com, type = A, class = IN
ANSWERS:
-> example.com
internet address = 104.20.23.154
ttl = 300
-> example.com
internet address = 172.66.147.243
ttl = 300
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Non-authoritative answer:
Name: example.com
Address: 104.20.23.154
Name: example.com
Address: 172.66.147.243
------------
QUESTIONS:
example.com, type = AAAA, class = IN
ANSWERS:
-> example.com
has AAAA address 2606:4700:10::6814:179a
ttl = 300
-> example.com
has AAAA address 2606:4700:10::ac42:93f3
ttl = 300
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Name: example.com
Address: 2606:4700:10::6814:179a
Name: example.com
Address: 2606:4700:10::ac42:93f3У каждой записи появилось ttl = 300, которого нет в обычном выводе. Это значит, что DNS-сервер, получивший этот ответ, может держать запись в кеше до 300 секунд.
-norecurse просит DNS-сервер отвечать только тем, что у него уже есть, не обращаясь к другим серверам. Тот же запрос к 8.8.8.8 без опции вернул четыре адреса, а с -norecurse закончился [SERVFAIL].
nslookup -norecurse example.com 8.8.8.8Server: 8.8.8.8
Address: 8.8.8.8#53
** server can't find example.com: SERVFAIL| Опция | Копировать | Описание |
|---|---|---|
| -type= | Задаёт тип запрашиваемой записи; если не указан, сначала A, затем AAAA | |
| -q= | Та же опция, что -type, задаёт тип запрашиваемой записи | |
| -timeout= | Время ожидания ответа на первый запрос (секунды) | |
| -retry= | Сколько раз отправлять запрос, если нет ответа | |
| -debug | Выводит вопрос и ответ из пакета ответа вместе с TTL | |
| -norecurse | Запрашивает только значения этого сервера, не обращаясь к другим серверам |
| Опция | Копировать | Описание |
|---|---|---|
| -query= | Та же опция, что -type, задаёт тип запрашиваемой записи | |
| -port= | Задаёт опрашиваемый порт, по умолчанию 53 | |
| -version | Вывести версию и выйти |
3️⃣ Запрос записей в nslookup (MX, NS, TXT, SOA)
Если после -type= указать тип записи, запрашивается только эта запись. Значение можно писать заглавными или строчными буквами.
| Значение -type= | Что содержит |
|---|---|
| A · AAAA | Адрес IPv4, адрес IPv6 |
| MX | Сервер, принимающий почту, и его приоритет |
| NS | Серверы имён, управляющие записями домена |
| TXT | Текстовые значения, например SPF |
| SOA | Основной сервер имён зоны, почта администратора, серийный номер, интервалы обновления |
| CNAME | Псевдоним, указывающий на другое имя |
| PTR | Имя хоста, связанное с IP-адресом (обратная) |
| ANY | Запрашивает все записи этого имени сразу |
Почтовые серверы проверяют по записи MX.
nslookup -type=mx google.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
google.com mail exchanger = 10 smtp.google.com.
Authoritative answers can be found from:Число 10 после mail exchanger — это приоритет. Если почтовых серверов несколько, отправитель пытается доставить почту начиная с сервера с наименьшим числом. Тот же запрос для example.com вернул [mail exchanger = 0 .], а MX из одной точки означает, что этот домен не принимает почту.
[Authoritative answers can be found from:] в конце запроса MX — строка заголовка, под которой выводятся пришедшие вместе с ответом сведения об авторитативных серверах имён. В запросах MX, NS и TXT в этой статье таких сведений в ответе не было, поэтому под заголовком было пусто.
В записи NS указаны серверы имён, которые напрямую управляют записями домена.
nslookup -type=ns example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
example.com nameserver = hera.ns.cloudflare.com.
example.com nameserver = elliott.ns.cloudflare.com.
Authoritative answers can be found from:У example.com было два сервера имён. Эти два сервера — авторитативные серверы имён example.com.
В запись TXT можно поместить текстовые значения без фиксированного формата.
nslookup -type=txt example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
example.com text = "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"
example.com text = "v=spf1 -all"
Authoritative answers can be found from:v=spf1 -all — значение SPF, означающее, что ни один сервер не может отправлять почту от имени этого домена. Если у домена несколько записей TXT, они выводятся так, по одной в строке.
Запись SOA содержит основные сведения о зоне.
nslookup -type=soa example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
example.com
origin = elliott.ns.cloudflare.com
mail addr = dns.cloudflare.com
serial = 2418004112
refresh = 10000
retry = 2400
expire = 604800
minimum = 1800
Authoritative answers can be found from:origin — основной сервер имён, а mail addr — адрес почты администратора, в котором @ записан точкой. serial — серийный номер, который растёт при каждом изменении записей, а refresh, retry и expire — значения времени (в секундах), по которым вторичные серверы имён сверяют записи с основным сервером. minimum — время, в течение которого ответ о несуществующей записи хранится в кеше.
Псевдонимы проверяют по записи CNAME. Запрос www.github.com вернул одну строку о том, что это псевдоним github.com.
nslookup -type=cname www.github.comServer: 192.0.2.53
Address: 192.0.2.53#53
www.github.com canonical name = github.com.-type=any запрашивает все записи этого имени сразу. Запрос к DNS-серверу, настроенному на сервере, вернул записи A, AAAA, MX и NS вместе.
nslookup -type=any example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
Name: example.com
Address: 172.66.147.243
Name: example.com
Address: 104.20.23.154
Name: example.com
Address: 2606:4700:10::6814:179a
Name: example.com
Address: 2606:4700:10::ac42:93f3
example.com mail exchanger = 0 .
example.com nameserver = hera.ns.cloudflare.com.
example.com nameserver = elliott.ns.cloudflare.com.
Authoritative answers can be found from:Тот же запрос к 8.8.8.8 вернул только одну строку [hinfo = “RFC8482”] и строку подписи.
nslookup -type=any example.com 8.8.8.8Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.com hinfo = "RFC8482" ""
example.com rdata_46 = HINFO 13 2 3600 20261029212708 20261027192708 34505 example.com. 2YBHcD7GmqHiW6E7e8Lx3z/gPoCsLbYw/Uegjy801hQ+4fYp5U7wKqc2 NXOONd8WS0xjgzfW5Dn0akDqdjltOw==
Authoritative answers can be found from:RFC 8482 — документ, который позволяет отвечать на запрос ANY коротким ответом вместо всех записей. Поэтому нужные записи запрашивают, указывая по одному типу.
4️⃣ Указание DNS-сервера в nslookup
Если указать DNS-сервер после имени, nslookup спросит этот сервер вместо DNS-сервера, настроенного на сервере.
nslookup example.com 8.8.8.8Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 104.20.23.154
Name: example.com
Address: 172.66.147.243
Name: example.com
Address: 2606:4700:10::6814:179a
Name: example.com
Address: 2606:4700:10::ac42:93f3Строка Server сменилась на 8.8.8.8, а четыре адреса совпали с ответом DNS-сервера, настроенного на сервере. Эту форму используют после смены серверов имён, чтобы проверить, дошли ли новые значения до каждого публичного DNS-сервера.
Если указать в качестве DNS-сервера сервер имён из запроса NS, вопрос уйдёт напрямую авторитативному серверу.
nslookup example.com elliott.ns.cloudflare.comServer: elliott.ns.cloudflare.com
Address: 2606:4700:58::a29f:2ce4#53
Name: example.com
Address: 104.20.23.154
Name: example.com
Address: 172.66.147.243
Name: example.com
Address: 2606:4700:10::6814:179a
Name: example.com
Address: 2606:4700:10::ac42:93f3На этот раз строка Non-authoritative answer исчезла. Значение пришло напрямую от сервера, который управляет записями, значит, это текущее значение, не прошедшее через кеш. В Address сразу под строкой Server появился адрес IPv6 этого сервера имён.
При запросе несуществующего имени выводится [NXDOMAIN]. .invalid — домен верхнего уровня, зарезервированный, чтобы никогда не использоваться на деле, поэтому ответ гласил, что имени нет.
nslookup example.invalidServer: 192.0.2.53
Address: 192.0.2.53#53
** server can't find example.invalid: NXDOMAINА вот no-such-host.example.com завершился не NXDOMAIN, а [No answer]. Это значит, что запрошенной записи не было в ответе, — результат, отличный от NXDOMAIN, когда не существует само имя.
nslookup no-such-host.example.comServer: 192.0.2.53
Address: 192.0.2.53#53
Non-authoritative answer:
*** Can't find no-such-host.example.com: No answer5️⃣ Обратный запрос в nslookup
Если вместо имени указать IP-адрес, nslookup запросит запись PTR и найдёт имя хоста, связанное с этим адресом.
nslookup 8.8.8.88.8.8.8.in-addr.arpa name = dns.google.
Authoritative answers can be found from:8.8.8.8.in-addr.arpa — имя, полученное записью IPv4-адреса в обратном порядке с добавлением in-addr.arpa. Значение записи PTR этого имени, dns.google., — это имя хоста 8.8.8.8.
При обратном запросе две строки Server вверху не появились. Запрос того же адреса через nslookup 9.18 на сервере Debian 12 дал такой же вид.
6️⃣ Интерактивный режим nslookup
Если запустить nslookup без аргументов, откроется интерактивный режим с приглашением >. При запросе нескольких имён и типов записей подряд не нужно каждый раз заново набирать всю команду.
nslookup> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> set type=mx
> google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
google.com mail exchanger = 10 smtp.google.com.
Authoritative answers can be found from:
> set type=txt
> example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.com text = "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"
example.com text = "v=spf1 -all"
Authoritative answers can be found from:
> exitСмените опрашиваемый DNS-сервер командой server и задайте тип записи через set type= — после этого достаточно ввести имя, чтобы запросить его с этими настройками. Ввод exit возвращает в оболочку.
set all выводит все текущие настройки.
nslookup> set type=txt
> set all
Default server: 192.0.2.53
Address: 192.0.2.53#53
Set options:
novc nodebug nod2
search recurse
timeout = 0 retry = 3 port = 53 ndots = 1
querytype = txt class = IN
srchlist = example.internal
> exitquerytype сменился на заданный ранее txt. retry = 3 и port = 53 — значения по умолчанию, которые не меняли.
7️⃣ Установка nslookup в Linux и сравнение с dig и host
Если при запуске nslookup в Linux выводится [command not found], установите пакет инструментов BIND. На сервере AlmaLinux nslookup входил в пакет bind-utils.
rpm -qf /usr/bin/nslookupbind-utils-9.16.20-30.el9_8.2.x86_64На сервере Debian 12 это был пакет bind9-dnsutils. Старое имя dnsutils осталось как переходный пакет, который устанавливает bind9-dnsutils.
dpkg -S /usr/bin/nslookupbind9-dnsutils: /usr/bin/nslookupВ системах семейства RHEL пакет bind-utils устанавливается командой ниже.
dnf install bind-utilsВ системах семейства Debian устанавливается пакет bind9-dnsutils.
apt install bind9-dnsutilsВ том же пакете есть также dig и host. Все три команды запрашивают DNS, но их вывод выглядит по-разному.
| Команда | Вывод | Когда использовать |
|---|---|---|
| nslookup | Строка Server + ответ, интерактивный режим | Запрос нескольких имён и записей подряд |
| dig | Все разделы пакета ответа; с +short только значения | Когда в скрипте нужны только значения |
| host | Одно предложение на запись | Проверка A, AAAA и MX сразу |
host example.comexample.com has address 172.66.147.243
example.com has address 104.20.23.154
example.com has IPv6 address 2606:4700:10::6814:179a
example.com has IPv6 address 2606:4700:10::ac42:93f3
example.com mail is handled by 0 .Даже без опций host запросил записи A, AAAA и MX сразу и вывел каждую одним предложением в строку. С +short у dig остаются только IP-адреса.
dig +short example.com104.20.23.154
172.66.147.243Чтобы в скрипте получать только значения, удобнее dig +short, а чтобы проверять несколько имён подряд, удобнее интерактивный режим nslookup.
🔲 Симулятор команды nslookup
В симуляторе ниже можно самому вводить nslookup, меняя тип записи и DNS-сервер.
🔢 FAQ & рекомендуемые материалы
DNS-запрос
Команда host в Linux | команда для DNS-запросов
Статья о том, как командой host найти IP-адрес по имени хоста и, наоборот, имя хоста по IP-адресу.
Проверка в вебе
Сайты для проверки записей DNS и измерения скорости серверов имён
Статья о том, как проверять значения DNS-записей из разных регионов через whatsmydns и сравнивать скорость ответа DNS-серверов через DNSPerf.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.