Назад | Перейти на главную страницу

получить NS-запись для домена с помощью dig

В настоящее время я пытаюсь написать сценарий, который проверяет, доступна ли данная запись, прикрепленная к имени, через все серверы имен, которые отвечают за это имя.

Например. Я хочу проверить, есть ли A запись для foo.example.com доступен на всех NS записи для example.com домен (a.iana-servers.net и b.iana-servers.net)

Скрипт работает, сначала запрашивая NS записи для данного имени (или его родителей, если это не удается; например, поскольку foo.example.com. не имеет NS запись, мы пробуем example.com. далее и наконец .com.), а затем проверяя A запись со всеми серверами имен.

 name=foo.example.com
 # get the nameservers for ${name}
 sname=${name}
 until [ -z "x${sname}" ]; do
    dns=$(dig +short NS "${sname}")
    if [ "x${dns}" != "x" ]; then
      break
    fi
    sname=${sname#*.}
done
# now that we have a list of nameservers in $dns, we query them
for ns in $dns; do
    dig +short A "${name}" @$"{ns}"
done

Такие работы, если только то название на самом деле CNAME. В этом случае dig NS вернет CNAME запись (а не NS запись или нет запись)

$ dig +noall +answer NS foo.example.com
foo.example.com. 300 IN CNAME bar.example.com.
$ dig +short NS foo.example.com
bar.example.com.
$ dig A foo.example.com @bar.example.com
;; global options: +cmd
;; connection timed out; no servers could be reached
$

Вместо этого я хотел бы иметь что-то вроде:

$ dig +short NS foo.example.com
$ dig +short NS example.com
a.iana-servers.net.
b.iana-servers.net.
$ dig +short A foo.example.com @a.iana-servers.net.
93.184.216.34
$

Итак, мой вопрос: как я могу заставить dig к только вернуть NS записей, а не какой-либо другой записи, указывающей на хост, который не является сервером имен?

Одно очевидное решение - проанализировать вывод dig +noall +answer чтобы увидеть, действительно ли он содержит NS запись, но это кажется довольно неуклюжим и подверженным ошибкам ...

Если вы чувствуете себя комфортно с Perl, вы можете сэкономить кучу довольно привередливой работы, написав свой тест как плагин для Zonemaster. В его структуре уже есть (правильный) код, чтобы найти правильный набор серверов имен и отправить запрос всем из них.