Команда 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:
- Запись создается автоматически и не подлежит удалению.
- Перечисленная информация располагается в верхней части зоны.
- Зона без записи 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.