В мире системного администрирования и DevOps работа с DNS-записями является рутинной задачей. Для выполнения таких операций существуют различные инструменты, однако две утилиты выделяются среди остальных: host
и dig
. В данной статье мы детально рассмотрим использование этих утилит, разберём их ключевые отличия и приведём примеры применения.
Утилита host
host
— это простая и удобная программа для выполнения запросов к DNS-серверам. Она позволяет оперативно получать данные о доменных именах, включая IP-адреса, MX-записи, TXT-записи и прочие типы записей. Важной особенностью host
является возврат кода завершения 1 в случае невозможности разрешения записи. Это делает её полезным инструментом для автоматизации и написания скриптов, когда критически важно знать успешность выполнения запроса.
Синтаксис команды host
$ host -t <тип_записи> <доменное_имя> <DNS_сервер>
-t <тип_записи>
— указывает тип DNS-записи, который требуется получить (например, A, MX, TXT, CNAME и др.);<доменное_имя>
— доменное имя, для которого выполняется запрос;<DNS_сервер>
— необязательный параметр, определяющий конкретный DNS-сервер для обращения. Если этот параметр не задан, используется системный DNS-сервер.
Примеры использования host
Запрашивание A-записи (IPv4-адрес):
$ host -t A example.com
example.com has address 93.184.216.34
Этот пример демонстрирует получение IPv4-адреса для доменного имени example.com
.
Запрос MX-записи (почтового сервера):
$ host -t MX example.com
example.com mail is handled by 0 .
Здесь возвращается информация о почтовом сервере для домена example.com
.
Запрос несуществующей записи:
$ host -t A nonexistent.example.com
Host nonexistent.example.com not found: 3(NXDOMAIN)
В данном случае команда возвращает код завершения 1, поскольку искомая запись отсутствует.
Использование host в скриптах
Благодаря возврату кода завершения 1 при неуспешном запросе, host
идеально подходит для использования в скриптах для проверки доступности доменов:
if host -t A example.com &> /dev/null; then
echo "Домен example.com резолвится."
else
echo "Домен example.com не резолвится."
fi
Утилита dig
dig (Domain Information Groper) — это более функциональный и гибкий инструмент для работы с DNS. Он обеспечивает детальную информацию о выполненных DNS-запросах и всегда возвращает код завершения 0, независимо от результата запроса. Это делает его менее удобным для автоматизации, но идеальным вариантом для диагностических целей и углублённого анализа.
Синтаксис команды dig
$ dig @<DNS_сервер> <доменное_имя> <тип_записи>
@<DNS_сервер>
— необязательный параметр, задающий конкретный DNS-сервер для обращения;<доменное_имя>
— доменное имя, которое подлежит запросу;<тип_записи>
— тип DNS-записи, которую нужно получить (например, A, MX, TXT).
Примеры использования dig
Запрос A-записи (IPv4-адрес):
$ dig example.com A
; <<>> DiG 9.16.1-Ubuntu <<>> example.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 300 IN A 93.184.216.34
;; Query time: 10 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Oct 11 12:34:56 UTC 2023
;; MSG SIZE rcvd: 56
Данный пример показывает, насколько подробно dig
выводит результат запроса A-записи для домена example.com
.
Запрос MX-записи (почтового сервера):
$ dig example.com MX
;; QUESTION SECTION:
;example.com. IN MX
;; ANSWER SECTION:
example.com. 300 IN MX 0 .
;; AUTHORITY SECTION:
example.com. 300 IN NS a.iana-servers.net.
example.com. 300 IN NS b.iana-servers.net.
Здесь мы получаем информацию о почтовых серверах для домена example.com
.
Запрос несуществующей записи:
$ dig nonexistent.example.com A
;; QUESTION SECTION:
;nonexistent.example.com. IN A
;; AUTHORITY SECTION:
example.com. 300 IN SOA a.iana-servers.net. hostmaster.example.com. 2023101101 7200 3600 1209600 3600
В этом случае dig
всё равно возвращает код завершения 0, несмотря на отсутствие искомой записи.
Использование dig для диагностики
dig
активно применяется для диагностики проблем с DNS благодаря своим обширным возможностям вывода. К примеру, можно легко проверить, какие DNS-серверы обслуживают домен:
$ dig example.com NS
;; ANSWER SECTION:
example.com. 300 IN NS a.iana-servers.net.
example.com. 300 IN NS b.iana-servers.net.
Сравнение host и dig
Характеристика | host | dig |
---|---|---|
Простота | Простая | Более сложная |
Код возврата | Возвращает 1 при ошибке | Всегда возвращает 0 |
Подробность | Минимальная | Очень подробная |
Использование в скриптах | Удобна для автоматизации | Менее удобна для автоматизации |
Диагностика | Подходит для быстрых проверок | Идеальна для глубокого анализа |
Заключение
Оба инструмента — host и dig — являются незаменимыми помощниками при работе с DNS. host
подойдёт для простых и быстрых проверок, тогда как dig
обеспечит глубокий анализ и диагностику. Выбор между этими утилитами зависит от стоящих перед вами задач: для автоматизации предпочтительнее использовать host, а для тщательного анализа — dig. Владение обеими утилитами позволит значительно повысить эффективность вашей работы с DNS.