Запрос DNS-записей в Linux с помощью dig и nslookup

CompTIABeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите основы запроса записей системы доменных имен (DNS) из командной строки в среде Linux. Вы будете использовать две мощные и распространенные утилиты, dig и nslookup, для выполнения различных типов DNS-запросов. Этот практический опыт необходим сетевым администраторам и системным инженерам для устранения неполадок с разрешением имен и понимания сетевых конфигураций.

Вы начнете с определения DNS-сервера по умолчанию вашей системы, изучив файл /etc/resolv.conf. Затем вы перейдете к выполнению нескольких распространенных DNS-запросов, включая поиск IP-адреса домена (запись A), обнаружение имени хоста по IP-адресу с помощью обратного запроса (запись PTR) и поиск записей почтового обмена (MX) для домена. Наконец, вы узнаете, как направлять свои запросы на конкретный общедоступный DNS-сервер вместо использования системного по умолчанию.

Определение стандартного DNS-сервера вашей системы с помощью cat

На этом шаге вы узнаете, как определить DNS-серверы по умолчанию, которые настроены для использования вашей системой. Серверы DNS (Domain Name System) отвечают за преобразование удобочитаемых доменных имен (например, www.google.com) в машиночитаемые IP-адреса (например, 142.250.186.132). Понимание того, какие DNS-серверы запрашивает ваша система по умолчанию, является первым и наиболее важным шагом в диагностике любых проблем с разрешением имен.

В большинстве систем Linux эта конфигурация хранится в файле, расположенном по адресу /etc/resolv.conf. Мы будем использовать команду cat, стандартную утилиту для объединения и отображения содержимого файлов, для просмотра этого файла.

Откройте терминал и выполните следующую команду, чтобы отобразить содержимое файла resolv.conf:

cat /etc/resolv.conf

Вы увидите вывод, похожий на следующий. IP-адреса, перечисленные после директивы nameserver, являются DNS-серверами, к которым ваша система будет обращаться для разрешения доменных имен.

## Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
##     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
## 127.0.0.53 is the systemd-resolved stub resolver.
## run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
options timeout:2 attempts:3 rotate single-request-reopen

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

Поиск IP-адреса домена (запись A) с помощью dig и nslookup

На этом шаге вы выполните стандартный прямой DNS-запрос, который представляет собой процесс разрешения доменного имени в IP-адрес. Это одна из наиболее распространенных функций DNS. Конкретный тип записи, который сопоставляет доменное имя с адресом IPv4, называется записью A. Для этой задачи мы будем использовать два популярных инструмента командной строки: nslookup и dig.

Сначала вам нужно убедиться, что эти инструменты установлены. Они являются частью пакета dnsutils в системах на базе Debian, таких как Ubuntu. Давайте обновим список пакетов и установим его.

sudo apt-get update
sudo apt-get install -y dnsutils

Теперь, когда инструменты готовы, давайте используем nslookup (что означает "name server lookup" - поиск по имени сервера), чтобы найти IP-адрес для www.google.com.

nslookup www.google.com

Вывод показывает сервер, который ответил на запрос (ваш системный сервер по умолчанию из Шага 1), и "Неавторитетный ответ" (Non-authoritative answer), который содержит IP-адрес(а), связанные с www.google.com.

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   www.google.com
Address: 142.250.189.196
Name:   www.google.com
Address: 2607:f8b0:4005:80d::2004

Далее, давайте выполним тот же запрос с помощью dig (Domain Information Groper - сборщик информации о домене). dig часто предпочитают системные администраторы, поскольку он предоставляет более подробный и структурированный вывод.

dig www.google.com

Изучите вывод команды dig. Он разделен на секции. QUESTION SECTION (Секция запроса) показывает, что вы запрашивали (запись A для www.google.com). ANSWER SECTION (Секция ответа) предоставляет результат, включая IP-адрес и значение TTL (Time To Live - время жизни), которое указывает, как долго резолвер может кэшировать эту информацию.

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5247
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         7       IN      A       142.251.46.196

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:55:18 CST 2025
;; MSG SIZE  rcvd: 59

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

Поиск имени хоста по IP-адресу (запись PTR) с помощью dig -x

На этом шаге вы выполните обратный DNS-запрос. В то время как прямой запрос разрешает доменное имя в IP-адрес, обратный запрос делает обратное: он находит имя хоста, связанное с заданным IP-адресом. Этот процесс опирается на специальный тип DNS-записи, называемый записью PTR (Pointer - указатель). Обратные запросы обычно используются почтовыми серверами для проверки подлинности отправителя и при устранении сетевых неполадок для идентификации источника трафика.

Мы будем использовать один из IP-адресов для www.google.com, который вы обнаружили на предыдущем шаге. В качестве примера возьмем 142.251.46.196.

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

nslookup 142.251.46.196

Вывод покажет name (имя), связанное с IP-адресом, которое хранится в специальном домене in-addr.arpa, используемом для обратного DNS.

196.46.251.142.in-addr.arpa     name = nuq04s45-in-f4.1e100.net.

Authoritative answers can be found from:

Теперь выполним тот же обратный запрос с помощью dig. Команда dig использует опцию -x для указания обратного запроса. Это удобный ярлык, который правильно форматирует запрос для вас.

dig -x 142.251.46.196

Обратите внимание на вывод. В ANSWER SECTION (Секция ответа) вы найдете запись PTR, которая сопоставляет IP-адрес с его именем хоста. Обратите внимание, как QUESTION SECTION (Секция запроса) показывает IP-адрес в обратном порядке и с добавлением .in-addr.arpa, что является стандартным форматом для обратных DNS-запросов IPv4.

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> -x 142.251.46.196
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46896
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;196.46.251.142.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
196.46.251.142.in-addr.arpa. 10 IN      PTR     nuq04s45-in-f4.1e100.net.

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:11 CST 2025
;; MSG SIZE  rcvd: 94

Теперь вы успешно использовали как nslookup, так и dig для выполнения обратного DNS-запроса, преобразуя IP-адрес обратно в имя хоста.

Поиск записей обмена почтой (MX) для домена с помощью dig

На этом шаге вы узнаете, как запрашивать другой важный тип DNS-записей: запись обмена почтой (MX). Записи MX необходимы для доставки электронной почты. Они указывают, какие почтовые серверы отвечают за прием электронных сообщений от имени домена. Когда вы отправляете электронное письмо на адрес user@example.com, ваш почтовый сервер сначала выполняет DNS-запрос для записей MX домена example.com, чтобы узнать, куда отправить сообщение.

Мы продолжим использовать команду dig для поиска записей MX для домена google.com. Для этого вы указываете доменное имя, за которым следует тип записи (MX).

В терминале выполните следующую команду:

dig google.com MX

Вывод будет похож на тот, что вы видели ранее, но ANSWER SECTION (Секция ответа) теперь будет содержать записи MX вместо записей A.

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> google.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45070
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.                    IN      MX

;; ANSWER SECTION:
google.com.             10      IN      MX      10 smtp.google.com.

;; Query time: 12 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:29 CST 2025
;; MSG SIZE  rcvd: 60

Обратите внимание на число (10) перед именем хоста почтового сервера в ANSWER SECTION. Это значение приоритета (preference/priority). Почтовые серверы сначала попытаются доставить электронную почту на сервер с наименьшим номером приоритета. Если этот сервер недоступен, они попробуют следующий по приоритету, и так далее. Это обеспечивает систему основных и резервных почтовых серверов.

Запрос к конкретному публичному DNS-серверу с помощью dig @<server>

На этом заключительном шаге вы научитесь обходить стандартный DNS-сервер вашей системы и отправлять запрос напрямую к конкретному публичному DNS-серверу. Это чрезвычайно полезный метод для устранения неполадок. Например, если вы не можете разрешить домен с помощью вашего стандартного сервера, вы можете запросить надежный публичный сервер, такой как Google (8.8.8.8) или Cloudflare (1.1.1.1), чтобы определить, связана ли проблема с вашей локальной конфигурацией или с более распространенной проблемой.

Команда dig делает это легко. Вы можете указать DNS-сервер, который хотите использовать, добавив перед его IP-адресом символ @.

Давайте запросим публичный DNS-сервер Google по адресу 8.8.8.8, чтобы найти IP-адрес для www.cloudflare.com.

dig @8.8.8.8 www.cloudflare.com

Теперь внимательно изучите вывод. Обратите особое внимание на строку SERVER в нижней части. Она должна показывать 8.8.8.8#53, подтверждая, что ваш запрос был отправлен и отвечен DNS-сервером Google, а не стандартным сервером вашей системы (127.0.0.53 из Шага 1).

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> @8.8.8.8 www.cloudflare.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62439
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.cloudflare.com.            IN      A

;; ANSWER SECTION:
www.cloudflare.com.     300     IN      A       104.16.123.96
www.cloudflare.com.     300     IN      A       104.16.124.96

;; Query time: 16 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Mon Jul 14 14:56:45 CST 2025
;; MSG SIZE  rcvd: 79

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

Резюме

В этой лабораторной работе вы научились выполнять основные DNS-запросы в системе Linux. Вы начали с определения стандартного DNS-сервера вашей системы путем изучения файла /etc/resolv.conf с помощью команды cat. После этого вы использовали утилиты dig и nslookup для выполнения стандартного прямого поиска, разрешая доменное имя в соответствующий IP-адрес (запись A).

Затем вы изучили более продвинутые запросы, включая обратные запросы для поиска имени хоста по IP-адресу (запись PTR) с помощью dig -x, а также как получить записи обмена почтой (MX) домена. Наконец, вы узнали, как обойти стандартные настройки системы, направив ваш DNS-запрос на конкретный публичный сервер, используя синтаксис dig @<server>, что является критически важным навыком для устранения неполадок и тестирования разрешения имен.