Запрос DNS для CNAME для сервера

12

Есть ли способ запросить наши внутренние записи DNS, чтобы обнаружить все записи CNAME, которые указывают на определенный сервер?

Изменить: Мы среда Windows, Server 2003.

PhilPursglove
источник

Ответы:

6

Вы не указали свою среду, но если вы используете Unix, я думаю, что комбинация dig и grep должна работать. ns.example.comдолжно быть именем хоста вашего сервера имен, example.comявляется доменом, частью которого является ваш хост, а HOST - хостом, для которого вы хотите найти все записи CNAME. На самом деле это символ табуляции в команде grep, а не буквально <TAB>(возможно, вам придется настроить строку grep).

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

dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'

Или, если вы используете Windows, вы можете использовать nslookup :

C:\> nslookup
> name ns.example.com
> ls -a example.com FILE

Это должно вывести все записи для домена, example.comкоторый ns.example.com«знает о», в FILE. Затем вы можете использовать любой инструмент, который вы хотите отсортировать по текстовому файлу в поисках соответствующих CNAMES.

Или с помощью этого непроверенного (но, похоже, правильного вида) сценария Perl :

#!/usr/bin/perl

use Net::DNS;

($target, $zone) = @ARGV;

$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
     print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}

Пара баллов за полноту:

  • Как сказал @womble, для CNAME нет эквивалента записи PTR. Вы должны будете использовать некоторую контекстную осведомленность, сортируя всю информацию о зоне для CNAMES, которая соответствует А-записям вашего хоста.
  • Это работает только для вашего DNS-сервера (и если у вас есть разрешение на просмотр информации о зоне). Нет способа «отследить» CNAMES для вашего хоста, которые принадлежат другим зонам.
  • Как утверждает @BillThor, существуют другие способы псевдонима имени хоста помимо CNAMES. Опять же, вам понадобится некоторая контекстная осведомленность.

источник
Вопрос обновлен, мы на Windows.
PhilPursglove
4

Если у вас есть доступ к вашей конфигурации DNS, обнаружить эти данные довольно просто. Однако любой может иметь CNAME, указывающую на ваш сервер. Вы не сможете отследить это.

Как отметил @wombie, вы не можете сделать обратный поиск для CNAMES. Для CNAMES нет эквивалента PTR, и даже если там, где это возможно, будут существовать только некоторые записи. Быстрая проверка случайного выбора доменов показала бы, что записи PTR часто не указывают на запись A. Аналогично, обратный поиск записей PTR для случайных адресов часто не находит соответствующей записи A.

РЕДАКТИРОВАТЬ: CNAMEs не единственный способ псевдоним системы. DNS позволяет нескольким записям A указывать на один и тот же адрес. Функционально это то же самое, что и добавление CNAME, но метод другой. Те же проблемы применяются за пределами вашего домена. Для поиска различных записей A вы должны искать IP-адрес (а) рассматриваемой системы.

BillThor
источник
3

Протокол DNS не позволяет выполнять такой «обратный» поиск. Вам нужно выйти из протокола, например, используя предложения grep, предоставленные kce.

ombble
источник
2

использовать powershell:

проверьте первичное имя на вашем DNS-сервере Microsoft:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Класс MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername

получить все имена для этого хоста с вашего DNS-сервера Microsoft:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Класс MicrosoftDNS_CNAMEType -Filter "primaryname = 'primaryname из первого запроса, заканчивающегося точкой.'" -ComputerName mydnsservername | выберите имя владельца, имя_процента

Йозеф Ашауэр
источник
1
  1. Найдите все зоны, обслуживаемые вашими машинами.
  2. Для каждой зоны используйте dnscmdдля экспорта данных зоны:
    dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
  3. Найдите в экспортированных файлах CNAMEзаписи ресурсов, которые указывают на имя целевого домена.
JdeBP
источник