Команда dig в linux

Команда dig

Одна из основных команд Linux для работы с доменами — это dig (domain information groper). Утилита предоставляет возможность узнать о домене наиболее полную информацию, например, IP адрес, который привязан к данному доменному имени и еще ряд полезных для системного администратора параметров. Синтаксис команды dig следующий:

dig , где:

  • @cервер — указывает IP-адрес сервера DNS, если не указать этот параметр, то обращение идет к серверу DNS «по умолчанию»;
  • имя домена — указывает имя домена, о котором нужно получить информацию;
  • тип записи — тип записи DNS (А, MX, TXT, NS и т.д.);
  • флаги — с помощью флагов можно задать дополнительные опции утилиты dig.

Ниже укажем основные флаги утилиты dig:

  • +all — используется для вывода на экран или сокрытия всех установленных «по умолчанию» флагов;
  • +answer — необходима для отображения только ответа на запрос;
  • +short — выводит информацию о домене в сокращенном формате;
  • +identify — применяется совместно с флагом +short для отображения информации об IP-адресе сервера;
  • +comments — служит для вывода информации без комментариев;
  • +trace — используется для вывода списка DNS серверов, через которые идет запрос на получение данных о домене.

Дополнительно, могут быть использованы следующие опции для команды dig:

  • -4 — разрешает к использованию только IPv4;
  • -6 — разрешает к использованию только IPv6;
  • -x — служит для получения имени домена по его IP-адресу;
  • -f — предназначена, чтобы прочитать список доменов из файла;
  • -t — служит для обозначения типа записи, которую надо вывести на экран;
  • -p — показывает номер порта DNS сервера.

Мы показали только часто употребляемые флаги и опции команды dig, для получения полной информации по данному вопросу советуем воспользоваться командой:

man dig

Сейчас приведем практические примеры использования утилиты dig. Самый простой случай применения dig:

dig

Например, введем в терминале:

dig freehost.com.ua

Как понять результаты выполнения этой команды? Информация условно поделена на три секции:

  • секция HEADER — показывает текущую версию утилиты dig, ID запроса и т. д.;
  • секция QUESTION SECTION — выводит на экран текущий запрос;
  • секция ANSWER SECTION — отображает ответ на созданный запрос (в нашем запросе выводит IP домена).

Если вы хотите получить только основные данные по домену, то стоит задать сокращенный запрос следующей командой:

dig freehost.com.ua +short

При использовании флага +noall будет отключен вывод на экран информации всех трех секций:

dig freehost.com.ua +noall

Если вы хотите увидеть информацию только из секции ANSWER SECTION, то выполните следующую команду:

dig freehost.com.ua +noall +answer

При необходимости получить такого рода информацию по нескольким доменам сразу, советуем создать специальный файл sites.txt в редакторе nano и занести туда доменные имена нужных сайтов, например:

nano sites.txt
google.com
yandex.ru
freehost.com.ua

Далее следует выполнить команду в терминале:

dig -f sites.txt +noall +answer

Теперь попробуем получить определенные типы записей DNS (A, MX, NS, TXT и т.д.), для этого выполняем команду dig, применяя следующие флаги, например, для типа записи «почтовый сервер»:

dig freehost.com.ua MX

Или же, если мы хотим получить ответ только для третьей секции утилиты dig:

dig freehost.com.ua MX +noall +answer
dig freehost.com.ua NS +noall +answer
dig freehost.com.ua A +noall +answer
dig freehost.com.ua TXT +noall +answer
dig google.com ANY +noall +answer

Сейчас попробуем указать конкретный сервер в синтаксисе команды dig (без указания сервера, утилита использует информацию из файла /etc/resolv.conf). Приведем пример с публичным сервером google.com:

dig @8.8.8.8 google.com +noall +answer

Для решения обратной задачи — получения имени домена по IP-адресу, выполним команду dig с опцией -x:

dig -x 178.20.156.90
dig -x 178.20.156.90 +short

Попытаемся узнать, через какие DNS сервера идет запрос для получения информации о домене (команда трассировки в Linux):

dig +trace freehost.com.ua

Для вывода текущей версии утилиты dig воспользуемся опцией -v:

dig -v

Для проверки синхронизации зоны со всеми NS введем команду:

dig freehost.com.ua +nssearch

Что представляет собой SOA-запись

Серверы доменных имен DNS обычно настраиваются в кластеры. Базы данных в них систематически синхронизируются посредством передачи зон. Запись SOA содержит данные для управления этим процессом – это серийный номер, время кэширования информации и взаимодействия с внешними запросами. Также в ней записана контактная электронная почта и имя главного сервера идентификации доменов.

Особенности SOA:

  1. Запись создается автоматически и не подлежит удалению.
  2. Перечисленная информация располагается в верхней части зоны.
  3. Зона без записи SOA не соответствует стандарту RFC 1035.

Критично не только наличие данных, но еще и соблюдение определенного синтаксиса. Например, в блоке временных параметров положено использовать буквы, соответствующие неделям, дням, часам, минутам и секундам (w, d, h, m и s соответственно). Формат самой SOA-записи выглядит так:

имя  SOA данные

имя: имя зоны

TTL: значение параметра TTL

SOA: тип записи

10 основных команд dig

1. Запрос домена.»A» записи 

# dig yahoo.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> yahoo.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<

Команда dig выполняется для поиска «А» записи для домена yahoo.com. Dig команда считывает с /etc/resolv.conf  запросы к DNS-серверу, перечисленные в нем.

Давайте поймем вывод команды:
Строки, начинающиеся с «;»  — это комментарии.
Первая строка говорит нам версию dig (9.8.2).
Далее, dig показывает заголовок ответа который получил от DNS-сервера
В данном случае это запрос для «A» записи yahoo.com. «IN » означает, что это Интернет поиск (в классе Интернет).
Раздел говорит нам что yahoo.com имеет IP-адрес 72.30.38.140
Наконец есть некоторая статистика о запросе. Вы можете отключить эту статистику с помощью опции + nostats.

2. Запрос домена записи «А»  + (short ) короткий вывод
По умолчанию dig  довольно многословен (много выводит всего). Один из способов сократить вывод заключается в использовании варианта с «+short» который будет резко сокращать вывод, как показано ниже.

# dig yahoo.com +short

99.130.13.44
72.30.38.144
124.136.254.169

Примечание: По умолчанию dig  ищет «А» записи указанного домена но можно указать другие записи также. Запись MX или Mail Exchange говорит почтовым серверам как производить маршрут  для электронной почты домена. Аналогично TTL, SOA и др.

3. Запросы MX-записи для домена
Запросы разных типов ресурса DNS записи.

# dig yahoo.com MX

4. Запросы SOA записи для домена

# dig yahoo.com SOA

$ dig SOA inux-notes.org @lakas.ns.cloudflare.com.

5. Запросы TTL записей для домена 

# dig yahoo.com TTL

6. Только запрос и ответ

# dig yahoo.com +nocomments +noquestion +noauthority +noadditional +nostats

7. Запросы ALL DNS-записей

# dig yahoo.com ANY +noall +answer

8. Посмотреть обратный DNS 

# dig -x 75.35.31.143 +short

ir1.fp.vip.sp2.yahoo.com.

9. Запросы к нескольким отчетам DNS
Конкретные запросы DNS а именно запросы для нескольких веб-сайта (для MX, NS и т.д. записей).

# dig yahoo.com mx +noall +answer redhat.com ns +noall +answer

dig yahoo.com mx +noall +answer redhat.com ns +noall +answer

10. Создать файл  .digrc
Создать файл  .digrc в $HOME/.digrc  и сохранить параметры dig по умолчанию.

dig yahoo.com

11. Как определить серверы имен, связанных с доменом?

$ dig NS +short linux-notes.org

lakas.ns.cloudflare.com.bella.ns.cloudflare.com.

12. Как выглядит делегация в моей зоне?

$ dig linux-notes.org +trace

dig linux-notes.org +trace

 13. Какое значение в кэше отдает resolver?

$ dig google.com @8.8.8.8

dig google.com @8.8.8.8

14. Вывод синхронизированы ли зоны со всеми NS?

$ dig linux-notes.org  +nssearch

SOA bella.ns.cloudflare.com. dns.cloudflare.com. 2016847280 10000 2400 604800 3600 from server 173.245.58.74 in 33 ms.SOA bella.ns.cloudflare.com. dns.cloudflare.com. 2016847280 10000 2400 604800 3600 from server 173.245.59.194 in 33 ms.

 Если вы заинтересованы только в сравнении с серийным номером, можно отфильтровать нежелательное и отсортировать результаты и так же удалить все дубликаты строк:

$ dig linux-notes.org  +nssearch | cut -d ' ' -f 4 | sort | uniq  -c

2 2016847280

Итак, теперь вы знаете, около трех кодов ошибок DNS:  NXDOMAIN, REFUSED и NOERROR. Есть другие коды возврата DNS (коды состояния), которые объясняются следующим образом:

NOERROR (RCODE:0): DNS Query completed successfully — DNS запрос выполнен успешно.FORMERR (RCODE:1): DNS Query Format Error — DNS ошибка формата на запрос.SERVFAIL (RCODE:2): Server failed to complete the DNS request — Серверу не удалось завершить запрос DNS.NXDOMAIN (RCODE:3): Domain name does not exist — Доменное имя не существует.NOTIMP (RCODE:4): Function not implemented — Функция не реализована.REFUSED (RCODE:5): The server refused to answer for the query — сервер отказался отвечать на запрос.YXDOMAIN (RCODE:6): Name that should not exist, does exist — Имя, которое не должно существовать, существует.XRRSET (RCODE:7): RRset that should not exist, does exist — RRset который не должен существовать, существует.NOTAUTH (RCODE:9): Server not authoritative for the zone — Сервер не является авторитетным для зоны.NOTZONE (RCODE:10): Name not in zone —  Имя не в зоне.

В этой статье «Установка dig в CentOS» постарался рассказать как установить и как пользоваться утилитой dig.

Команды администрирования

su — смена пользователя. su alex — сменит пользователя на alex. Набрав su без параметров, вы получите права суперпользователя (root), при этом символ подсказки $ сменится на #.

В этом режиме не стоит находиться постоянно, а лучше вообще его не использовать, а пользоваться командой sudo.

Для выхода из сессии и возврата к предыдущему пользователю нужно набрать exit.

sudo — позволяет выполнять другие программы с правами суперпользователя, набирается перед другой командой, например

sudo rm file — удалит файл, созданный любым пользователем.

sudo -i или sudo -s — аналоги команды su.

Использовать команду sudo нужно также очень внимательно и только в случае необходимости.

passwd — смена пароля текущего пользователя. passwd alex — смена пароля пользователя alex.

adduser или useradd — добавить нового пользователя. adduser katya — добавит пользователя katya. После набора команды нужно ввести пароль. Для выполнения команды нужно быть суперпользователем.

userdel — удалить пользователя. userdel vasya — удалит пользователя vasya.

groupadd — создание новой группы. groupadd students — создаст группу students.

groupdel — удаление группы. groupdel students — удалит группу students.

chmod — изменить права доступа файла или каталога. chmod 644 file — установит права 644 на файл. chmod +x file — даст файлу права на выполнение.

chown — изменить хозяина файла. chown alex file — в результате выполнения этой команды хозяином файла станет alex.

chgrp — изменение группы файла. chgrp students laba1 — смена группы файла laba1 на students.

Как пользоваться dig

Простейший пример использования dig:

dig сайт

Пример:

dig mi-al.ru

Будет выведено довольно много строк:

; <<>> Dig 9.11.4-4-Debian <<>> mi-al.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34135
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;mi-al.ru.          IN  A 
 
;; ANSWER SECTION:
mi-al.ru.       3799    IN  A   185.26.122.50
 
;; Query time: 67 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: ##s##Пн сен##!c## 03 21:32:34 MSK 2018
;; MSG SIZE  rcvd: 53

Секции и комментарии dig

Большинство этих строк начинаются с ;; — это комментарии. Единственная незакомментированная строка содержит нужную нам информацию — IP адрес сайта, в данном случае IP адрес сайта mi-al.ru это 185.26.122.50.

Вывод утилиты может быть разделен на ряд секций:

  • Заголовок: содержит информацию о версии утилиты, ее параметрах и флагах.
  • QUESTION SECTION: содержит информацию о запросе, передаваемом серверу доменных имен.
  • ANSWER SECTION: содержит информацию об ответе, полученном от сервера доменных имен.
  • AUTHORITY SECTION: содержит имя сервера или серверов доменных имен, которые предоставляют информацию об указанном имени.
  • ADDITIONAL SECTION: содержит IP-адреса серверов доменных имен, перечисленных в предыдущей секции.
  • Область статистики: содержит статистическую информацию, такую, как время выполнения запроса и размер принятого сообщения.

Отключение секций и комментариев

Чтобы программа выводила только IP адрес без ненужной информации, используйте конструкцию:

dig сайт +short

Например:

dig mi-al.ru +short
185.26.122.50

Можно отключить вывод некоторых данных. Для этого ставим в конце команды нужный ключ или несколько:

  • +nocomments – не показывать комментарии
  • +noauthority – не показывать секцию AUTHORITY
  • +noadditional –не показывать секцию ADDITIONAL
  • +nostats – не показывать статистику (внизу ответа: «;; Query time: 4 msec…»)
  • +noanswer – не показывать секцию ANSWER (хз зачем можно отключать эту секцию, ведь ради неё и смотрим DNS записи)
  • +noall — отключить все секции. Логично использовать в связке с командами перечисленными выше, но без «no» в начале. К примеру, «dig alexgur.ru +noall +answer» — покажет только секцию ANSWER и ничего больше.
  • +short — показывает только самое необходимое

Типы ресурсных записей DNS

По умолчанию dig выводит информацию об A записи домена.

Можно поставить один из следующих ключей после домена, чтобы получить определенные записи:

dig TXT
dig MX
dig AAAA
dig NS

Основные типы DNS записей:

  • A-запись: используется для преобразования доменного имени в IPv4 адрес хоста.
  • AAAA-запись: используется для преобразования доменного имени в IPv6 адрес.
  • MX-запись: информация о почтовом ретрансляторе, это сервер, который может принять, обработать и переслать электронную почту для адресата, который находится в указанном домене. Если MX записей несколько, то выбирается сервер с наименьшим приоритетом.
  • NS-запись: определяет авторитотивные DNS сервера для данного домена.
  • SRV-запись: служит для определения компьютеров, содержащих определенные службы.
  • CNAME-запись: каноническое имя узла, псевдоним записи или alias.
  • TXT-запись: может содержать любую текстовую информацию, часто используется для верификации mail сервера и помощью SPF.

Клиенты DNS (resolver)

Как же программы на конечных машинах знают куда и в каком виде посылать запросы DNS? Они этого не знают. Для разрешения имен и IP адресов клиентскими приложениями используется библиотека Resolver. Это не какое-то специальное приложение, это функциональность системы (ядра). Т.о. приложения посылают системные вызовы gethostbyname(2) и gethostbyaddr(2), а ядро уже на основании настроек в файле /etc/nsswitch.conf определяет по какому пути ему далее действовать. Данный файл определяет какие сервисы (будь то файл /etc/hosts или DNS) и в каком порядке использовать. В ранних версиях библиотеки Linux — libc, использовался файл /etc/host.conf. Ранее, в статьях о сети в Linux я упоминал о nsswitch. Вот фрагмент файла, который нас интересует:

root@DNS:~# cat /etc/nsswitch.conf
......
hosts:          files dns
networks:       files

Две строки данного фрагмента указывают ядру производить преобразование имен хостов в IP (строка hosts: files dns) сначала из файла hosts, затем силами DNS, а так же преобразование имен сетей в IP (строка networks: files) с помощью файла /etc/network.Возможны так же параметры nis или nisplu, определяющие использовать Network Information System (NIS) чтобы найти адрес. Порядок, в котором перечислены сервисы, определяет последовательность их опроса.

Если согласно /etc/nsswitch.conf запрос отправляется DNS, то используются настройки из файла /etc/resolv.conf, который определяет какие серверы DNS использовать. Вот типичный пример файла /etc/resolv.conf:

root@DNS:~# cat /etc/resolv.conf
nameserver 192.168.1.1
nameserver 192.168.1.2
domain  examle.com

Директива nameserver определяет адрес сервера доменных имен, который будет выполнять рекурсивные запросы resolver. В данном файле указано использовать север имен сначала 192.168.1.1 затем, если первый не смог обработать запрос, 192.168.1.2. Рекомендуется не использовать более 3х параметров nameserver. Если опция nameserver не задана, то резолвер попытается соединиться с сервером на локальном хосте. Параметр domain определяет заданное по умолчанию имя домена, которое будет подставлено, когда DNS не удастся найти имя хоста. Существует так же опция search, которая задает дополнительные домены, в которых необходимо произвести поиск и разрешение имени хоста. Опции search и domain нельзя использовать совместно.

Кроме кэша на ДНС сервере, существуют кэши интернет-браузеров, кэши резолверов. Довольно прозрачную картину предоставляет Wikipedia:

Зачем нужен dns

DNS-сервер может быть причиной многих проблем с интернетом и сайтами.

Если большинство пользователей уже знает и понимает, что такое IP-адрес компьютера (хотя бы приблизительно), то с DNS-адресом всё несколько сложнее, ведь для многих это нечто совершенно непонятное, неизвестное.

На самом деле здесь всё так же просто. В этой статье подробно рассмотрим, что такое DNS и как его узнать. Давайте разбираться. Поехали!

Подключение к DNS-серверу

Аббревиатура DNS означает Domain Name System или система доменных имён — на русском. По сути, это глобальное хранилище ключей и значений. Каждый сервер в любой части мира предоставит необходимое значение по соответствующему ключу. Если же серверу неизвестен конкретный ключ, он запросит его у другого. Говоря другими словами, происходит запрос IP-адреса по имени хоста.

Система доменных имён играет огромную роль в работе интернета. Чтобы произошло соединение с узлом, нужна информация об IP-адресе. Для любого человека запомнить название гораздо проще, чем последовательность цифр.

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

К слову, именно таким образом всё происходило на заре технологии интернета, когда она только начала распространяться.

Необходимо понимать, что IP-адрес и имя — это не одно и то же, так как IP может иметь неограниченное количество имён, что, в свою очередь, даёт возможность пользователю просматривать на одном устройстве неограниченное количество сайтов.

  Такой принцип также работает в обратную сторону.

Если вы хотите узнать DNS вашего компьютера, существует несколько способов это сделать. Первый самый быстрый и простой. Сначала откройте командную строку (чтобы сделать это воспользуйтесь комбинацией клавиш Win R и пропишите cmd в поле для ввода, далее щёлкните по кнопке «ОК»), а затем выполните команду ipconfig/all. Так вы получите необходимую сетевую информацию максимально быстро.

Команда ipconfig/all

Второй вариант — через интерфейс Windows. Откройте Панель управления. Выберите раздел «Сетевые подключения». В появившемся окне щёлкните правой кнопкой мыши по активному подключению и нажмите «Свойства». Затем нужно снова нажать кнопку «Свойства». После этого появится окно с информацией об IP- и DNS-адресах.

Информация об IP- и DNS-адресах

Обратное преобразование имен

DNS используется в первую очередь для преобразования доменных имён в IP-адреса, но он также может выполнять обратный процесс, называемый Обратное преобразование имен или обратным отображением. Т.к. записи в прямой базе DNS структурированы иерархически по доменным именам, DNS не может эффективно выполнять поиск по IP адресу в такой базе. Для обратного преобразования в DNS используется специальный домен in-addr.arpa. Ресурсные записи в данном домене в поле Name содержат IP-адреса, в поле Type — PTR, а в поле Data — FQDN-имя соответствующее данному IP.

На схеме представлена структура домена arpa. Думаю, что тут все довольно наглядно. Домен arpa. имеет 2 поддомена in-addr и ip6, отвечающие за IPv4 и IPv6 адреса соответственно. Домен in-addr.arpa. имеет от *.0.in-addr.arpa. до *.255.in-addr.arpa. поддоменов, каждый из которых так же имеет по 256 поддоменов.

В целях уменьшения объёма нежелательной корреспонденции (спама) многие почтовые серверы могут проверять наличие PTR записи для хоста, с которого происходит отправка. В этом случае PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP сессии.

Наглядно приведенную схему можно представить командами:

# dig www.ru.
...
;; QUESTION SECTION:
;www.ru.                                IN      A

;; ANSWER SECTION:
www.ru.                 52119   IN      A       194.87.0.50
...
# dig -x 194.87.0.50
...
;; QUESTION SECTION:
;50.0.87.194.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
50.0.87.194.in-addr.arpa. 30385 IN      PTR     www.ru.
....

При этом, команду dig -x 194.87.0.50 правильнее будет представить как dig 50.0.87.194.in-addr.arpa., то есть записи в поддоменах *.in-addr.arpa. представлены в так называемой обратной нотации (или reverse форме), то есть хосту с IP 194.87.0.50 будет соответствовать PTR-запись, имеющая FQDN 50.0.87.194.in-addr.arpa., которая в свою очередь указывает на домен www.ru..  Хочется отметить, что чаще всего за обратную зону и ее редактирование отвечает поставщик интернета.

Как и обещал, описываю ресурсную запись PTR в домене IN-ADDR.ARPA, соответствующая приведенной выше записи А для машины www.ru., будет иметь такой вид:

50.0.87.194 IN PTR www.ru.

Имя 50.0.87.194 не заканчивается точкой и поэтому является относительным. Вопрос: относительным относительно чего? Ни в коем случае не относительно «www.ru.». Для того чтобы эта запись была FQDN, домен по умолчанию должен называться «IN-ADDR.ARPA.». Этого можно добиться либо поместив записи PTR в отдельный файл, в котором доменное имя зоны по умолчанию — IN-ADDR.ARPA. (заданный в файле начальной загрузки демона named), либо изменив этот домен с помощью директивы $ORIGIN. Если домен по умолчанию определен как 0.87.194.IN-ADDR.ARPA., то запись можно представить так:

50 IN PTR www.ru.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: