> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/network/nslookup-dig.md](https://docs.f3cloud.com/ru/network/nslookup-dig.md).

# Команды nslookup и dig – как проверить DNS-записи домена

Команды nslookup и dig для проверки DNS. Как узнать IP-адрес домена, посмотреть записи MX, TXT и NS, спросить конкретный DNS-сервер, проверить обратную запись PTR и пройти всю цепочку серверов командой dig +trace. Для Linux, macOS и Windows.

Вы поменяли запись у регистратора, а сайт по-прежнему открывается со старого сервера. Почта на домен не приходит, или сервис просит подтвердить домен TXT-записью и уверяет, что не видит её. Во всех этих случаях нужно спросить у DNS напрямую, что он отвечает прямо сейчас. Для этого есть две команды, **nslookup** и **dig**. В этой статье разберём, чем они отличаются, научимся смотреть записи разных типов, спрашивать конкретный DNS-сервер и проходить всю цепочку от корневых серверов до ответа. Все примеры выполнены на тестовом сервере с Debian 12.

***

## Почему ответы DNS бывают разными

Когда вы спрашиваете у DNS адрес домена, ответ почти никогда не приходит напрямую от сервера, который за этот домен отвечает. Компьютер обращается к своему резолверу, например к серверу провайдера или к публичному `1.1.1.1`, а резолвер либо отдаёт ответ из своей памяти, либо проходит по цепочке. Сначала он спрашивает корневой сервер, тот направляет его к серверам зоны, например `.com`, а они к NS-серверам самого домена, у которых и хранятся записи. Подробно эта цепочка разобрана в статье про [привязку домена к VPS](https://docs.f3cloud.com/ru/vps/domain-to-vps.md).

Из такого устройства следует, что разные резолверы в один и тот же момент могут отвечать по-разному. Один уже получил новую запись, а другой ещё отдаёт старую из памяти, пока у неё не истечёт срок хранения TTL. Поэтому при проверке полезно сравнивать ответы нескольких резолверов и, если нужна полная уверенность, спрашивать NS-сервер домена напрямую. Обе команды это умеют, а dig вдобавок может пройти всю цепочку сам и показать, какой сервер что ответил.

Разница между командами в основном в удобстве. **nslookup** есть почти везде, включая Windows, и выводит ответ в простом виде. **dig** входит в Linux и macOS, показывает ответ подробнее, с TTL и служебными полями, и удобнее для скриптов. На Debian и Ubuntu обе команды ставятся одним пакетом.

```bash
apt install -y dnsutils
```

***

## 1. Узнайте IP-адрес домена

```bash
# Подробный ответ dig, только раздел с ответом
dig example.com +noall +answer

# Только адреса, без лишнего
dig example.com +short

# То же через nslookup, работает и в Windows
nslookup example.com
```

Число во второй колонке ответа dig это оставшийся TTL в секундах, то есть сколько ещё резолвер будет помнить этот ответ. Адреса IPv6 смотрятся так же с типом `AAAA`, например `dig example.com AAAA +short`.

***

## 2. Посмотрите записи других типов

Тип записи указывается после имени домена в dig или параметром `-type=` в nslookup.

```bash
# Почтовые серверы домена, число перед именем это приоритет
dig gmail.com MX +short

# TXT-записи, здесь бывают SPF и коды подтверждения сервисов
dig example.com TXT +short

# NS-серверы, которые обслуживают домен
dig example.com NS +short

# Обратная запись PTR, какой домен у IP-адреса
dig -x 1.1.1.1 +short
```

<figure><img src="https://docs.f3cloud.com/img/dig-record-types.png" alt="Ответы dig для записей A, MX, TXT, обратной записи PTR и запроса к 8.8.8.8"><figcaption><p>Записи разных типов в одном окне</p></figcaption></figure>

В nslookup те же запросы выглядят так.

```bash
nslookup -type=mx gmail.com
nslookup -type=txt example.com
nslookup -type=ns example.com
```

<figure><img src="https://docs.f3cloud.com/img/nslookup-mx.png" alt="Вывод nslookup -type=mx gmail.com со списком почтовых серверов"><figcaption><p>nslookup показывает те же MX-записи в другом виде</p></figcaption></figure>

***

## 3. Спросите конкретный DNS-сервер

Чтобы узнать, что отвечает определённый резолвер или сам NS-сервер домена, укажите его после `@` в dig или последним параметром в nslookup.

```bash
# Публичные резолверы Google и Cloudflare
dig @8.8.8.8 example.com +short
dig @1.1.1.1 example.com +short

# Сам NS-сервер домена, ответ без кэша
dig @elliott.ns.cloudflare.com example.com +short

# То же через nslookup
nslookup example.com 8.8.8.8
```

Если NS-сервер домена уже отдаёт новую запись, а публичные резолверы ещё нет, вы всё сделали правильно и осталось дождаться, пока у старого ответа истечёт TTL.

***

## 4. Пройдите всю цепочку командой dig +trace

Параметр `+trace` заставляет dig не обращаться к резолверу, а пройти путь самостоятельно, начиная с корневых серверов. Так видно, кто на каждом шаге отвечает за домен.

```bash
dig +trace example.com
```

Полный вывод длинный, поэтому для скриншота мы оставили только строки со шагами и найденными записями.

<figure><img src="https://docs.f3cloud.com/img/dig-trace.png" alt="Вывод dig +trace example.com с ответами корневого сервера, сервера зоны com и NS-сервера Cloudflare"><figcaption><p>Корневой сервер, сервер зоны .com и NS-сервер домена по очереди</p></figcaption></figure>

Строки **Received … from** показывают, какой сервер ответил на каждом шаге. Здесь корневой сервер `e.root-servers.net` направил запрос к серверам зоны `.com`, сервер `c.gtld-servers.net` сообщил, что домен обслуживает Cloudflare, а NS-сервер `elliott.ns.cloudflare.com` выдал адреса. Если цепочка обрывается, видно, на каком шаге. Например, если у регистратора указаны NS-серверы, которые ничего не знают о домене.

***

## Частые вопросы

<details>

<summary>dig: command not found</summary>

Команда входит в пакет `dnsutils`. Установите его командой `apt install -y dnsutils`. В нашем образе Debian 12 этот пакет уже установлен.

</details>

<details>

<summary>Ответ status: NXDOMAIN</summary>

Такого имени в DNS нет. Проверьте написание домена и что запись создана для нужного имени, например для `www` отдельно. Если домен только что зарегистрирован, проверьте NS-серверы командой `dig example.com NS +short`.

</details>

<details>

<summary>Ответ пустой, но ошибки нет</summary>

Домен существует, но записи нужного типа у него нет. Например, у домена есть запись A, но нет записи MX. Проверьте, что запись создана с нужным типом.

</details>

<details>

<summary>Свежая запись видна на одном резолвере и не видна на другом</summary>

Второй резолвер ещё хранит старый ответ. Посмотрите на TTL в выводе `dig +noall +answer`, это время в секундах до обновления. На своём компьютере кэш DNS можно очистить. В Windows это команда `ipconfig /flushdns`.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
