Вопрос наоборот: имя по адресу
Обычный DNS-запрос отвечает на вопрос «какой адрес у этого имени». Обратный отвечает на противоположный: «какое имя закреплено за этим адресом». Хранится такое соответствие в записях типа PTR, и управляет ими тот, кто владеет блоком адресов. Для домашних адресов это обычно провайдер, для серверов — хостинг-компания или администратор организации.
Обратная запись нужна не всем и не всегда. Она бывает полезна при разборе журналов, когда нужно понять, чей адрес в списке подключений, при настройке почтовых серверов, которые нередко проверяют соответствие, и при диагностике сети по выводу traceroute: имена промежуточных узлов приходят именно из PTR-записей.
Отсутствие записи не говорит о поломке. Для множества адресов, особенно у домашних абонентов, PTR либо не задана, либо содержит технически сформированное имя. Поэтому по пустому ответу выводы делать рано.
Синтаксис: dig -x и родственные команды
Основной вариант — dig -x и адрес. Утилита сама превращает его в служебное имя и посылает запрос типа PTR. Для краткого ответа добавьте +short.
| Команда | Что делает |
|---|---|
| dig -x 192.0.2.10 | Полный обратный запрос для IPv4-адреса |
| dig -x 192.0.2.10 +short | Только имя, без служебных секций |
| dig -x 2001:db8::1 | Обратный запрос для IPv6-адреса |
| dig -x 192.0.2.10 @192.0.2.53 | Запрос к конкретному DNS-серверу |
| host 192.0.2.10 | Короткий результат тем же запросом |
| nslookup 192.0.2.10 | Обратный запрос через nslookup |
Адреса в таблице относятся к специально зарезервированным для примеров диапазонам, поэтому реальных записей для них нет. Подставьте нужный вам адрес.
Команда host выдаёт самую компактную строку, где служебное имя связано словами domain name pointer с найденным именем. Если вы собираетесь разбираться в ответе подробнее, ведите работу в dig: он показывает коды и секции. Общие приёмы работы с утилитой, включая чтение секций ответа, описаны на отдельных страницах про dig.
Как устроено служебное имя
Чтобы DNS мог искать по адресу, адрес превращают в имя особой зоны. Для IPv4 порядок октетов меняют на обратный и добавляют суффикс in-addr.arpa. Адрес 192.0.2.10 превращается в 10.2.0.192.in-addr.arpa. Обратный порядок выбран потому, что в DNS имена читаются от частного к общему, а в IP-адресах общая часть стоит слева.
Для IPv6 каждую шестнадцатеричную цифру выписывают отдельно, тоже в обратном порядке, и добавляют суффикс ip6.arpa. Такие имена получаются очень длинными, поэтому вручную их почти никто не набирает, а ключ -x делает всё автоматически.
Если запустить dig с ключом +noall +question, вы увидите, какое именно имя утилита сформировала. Это удобный способ убедиться, что запрос уходит туда, куда нужно.
Правами на зону in-addr.arpa владеют держатели блоков адресов. Поэтому редактировать PTR для своего адреса можно только через того, кто им распоряжается: у провайдера это обычно запрос в поддержку, у хостинга — раздел управления сервером.
Читаем ответ: NOERROR, NXDOMAIN и пустая секция
Посмотрите на строку status в заголовке ответа и на секцию ANSWER.
- status: NOERROR и в ANSWER есть запись PTR. Имя найдено, оно указано в конце строки.
- status: NXDOMAIN. Для этого адреса зоны или записи нет. Это обычная ситуация для адресов без обратной записи.
- status: NOERROR, но ANSWER пуст. Имя сервер знает, но записи типа PTR у него нет.
- status: SERVFAIL или таймаут. Сервер не смог ответить; попробуйте другой DNS-сервер через @адрес.
Важная оговорка: имя из PTR не доказывает, что адрес принадлежит названному хосту. Записью управляет владелец адреса, и он вправе указать любое имя. Достоверной считается пара, когда прямой запрос по этому имени снова приводит на тот же адрес. Такую проверку так и называют прямым подтверждением, её применяют некоторые почтовые серверы.
Разные DNS-серверы могут отвечать по-разному, если запись только что меняли. Срок хранения старого ответа задаёт параметр TTL в ответе.
Практические сценарии
Обратный запрос полезен в нескольких задачах. Все они укладываются в простые команды.
Нужно понять, что за узел виден в трассировке или в списке соединений. Выполните dig -x +short для нужного адреса: имя нередко подскажет, к чьей сети он относится, например по названию города или оборудования. Не воспринимайте это как точный адрес владельца: имена выбирают сами операторы.
Вы настраиваете собственный сервер и хотите, чтобы адрес имел понятное имя. Проверьте текущее значение командой, затем обратитесь к тому, кто выдал вам адрес, и попросите задать PTR. После изменения повторите запрос; если ответ старый, подождите, пока истечёт TTL.
Нужно убедиться, что ответы одинаковы у разных DNS-серверов. Выполните команду с @адрес для нескольких серверов и сравните результаты. Расхождение обычно означает, что запись обновилась не везде.
Для остальных видов записей, таких как MX и TXT, понадобятся другие запросы, описанные на странице про nslookup set type.
Обратный запрос и электронная почта
Одна из причин, по которой люди вообще узнают о PTR-записях, связана с почтой. Многие принимающие серверы смотрят, есть ли у адреса отправителя обратная запись и совпадает ли она с тем, как представляется отправляющий сервер. Отсутствие записи или несовпадение может повлиять на то, как письма оцениваются получателем.
Если вы запускаете собственный почтовый сервер, проверьте обратную запись для его адреса командой dig -x с ключом +short. Она должна возвращать понятное имя, для которого прямой запрос снова указывает на тот же адрес. Если запись отсутствует или не совпадает, обратитесь к тому, кто выдал адрес, чтобы её настроили.
Для обычного домашнего пользователя это не имеет значения: письма отправляет почтовый сервис, а не ваш компьютер. Тема важна для тех, кто администрирует собственные серверы.