Какая из этих записей DNS имеет приоритет? - PullRequest
0 голосов
/ 06 октября 2018

Допустим, у меня определены эти две записи:

*.example.com CNAME <some name>
foo.example.com TXT <some text>

Что ожидается, если я выполню запрос DNS, подобный этому?

dig TXT foo.example.com

Я ожидаю получить TXT запись, определенная выше в разделе ответов, так как она более четко определена.Но то, что я получаю от своего провайдера DNS, это CNAME, определенный для подстановочного знака.

Я поднял эту проблему с ними, и они говорят, что они следуют правильному поведению.Вот объяснение, которое они мне дали:

См. Раздел 2.4 в RFC1912 об «Общих ошибках DNS».http://www.rfc -editor.org / rfc / rfc1912.txt"Запись CNAME не может сосуществовать с любыми другими данными. Другими словами, если suzy.podunk.xx является псевдонимом для sue.podunk.xx, ​​вы также не можете иметь запись MX для suzy.podunk.edu, запись A или даже запись TXT. "

По сути, это означает, что если вы добавите запись CNAME для * .example.com, она всегда будет иметь приоритет над любой другой записью, даже если эти записи добавляются для определенного субдомена, они по-прежнемуигнорируются.В этом случае мы ничего не можем сделать.Так должен работать DNS, согласно стандарту DNS.

Это правильно?Охватывает ли раздел в указанном RFC случай подстановочного знака?Может кто-нибудь дать мне авторитетный ответ и дать ссылку на источник?

1 Ответ

0 голосов
/ 08 октября 2018

Страница Википедии о подстановочном знаке DNS довольно понятна с примерами (см. Пример с host1.example).

Короче говоря, подстановочный знак используется только в том случае, если полное имя "direct"не найден.

Вы можете найти все объяснения в разделе 4.3.2 https://tools.ietf.org/html/rfc1034, в частности в пункте 3.a и в пункте 3.c:

     a. If the whole of QNAME is matched, we have found the
        node.

        If the data at the node is a CNAME, and QTYPE doesn't
        match CNAME, copy the CNAME RR into the answer section
        of the response, change QNAME to the canonical name in
        the CNAME RR, and go back to step 1.

        Otherwise, copy all RRs which match QTYPE into the
        answer section and go to step 6.

[..]

     c. If at some label, a match is impossible (i.e., the
        corresponding label does not exist), look to see if a
        the "*" label exists.

Посмотрите, как именно он сначала ищет полное имя, с дополнительным условием, если это CNAME, но это не ваш случай, если вы запрашиваете TXT.

В вашем случае, если вы специально запрашиваете запись TXT, то она должна быть возвращена независимо от подстановочного знака.На самом деле TXT на foo.example.com будет скрывать любой другой тип, запрос CNAME на него не должен возвращать значение в шаблоне, а вместо этого останавливается на NOERROR NODATA, означающем, что имя существует, но не для этого типа.,Это как раз случай host1.example на приведенной выше странице Википедии.

На самом деле это очень легко попробовать.С этим зональным файлом:

$TTL 1
@ IN SOA localhost. root.localhost. (1 604800 86400 419200 604800)
  IN NS a.example.org.
  IN NS b.example.org.
  IN NS c.example.org.

*.example.com. IN CNAME foobar.example.net.
foobar.example.com. IN TXT "I am here." 

(начало - просто шаблон, чтобы связывание действительно загружало зону)

если вы сделаете dig @127.0.0.1 foobar.example.com TXT, вы получите, как и ожидалось:

;; ANSWER SECTION:
foobar.example.com. 1 IN TXT "I am here."

если вы запрашиваете любой другой тип записи с тем же именем, включая CNAME, вы получаете NOERROR без ответа CNAME (подстановочный знак скрыт явным именем в файле зоны, и вы получаете NOERROR, но нет данных для какого-либодругой тип записи, кроме TXT для этого имени, так как это единственный тип записи в файле зоны), и подстановочный знак работает для любого другого имени, например dig @127.0.0.1 not-foobar.example.com TXT дает:

;; ANSWER SECTION:
not-foobar.example.com. 1 IN CNAME foobar.example.net.

Объяснения, которые вам даныне являются правильными и не применяются в вашем случае использования.Цитата будет применяться только к этому виду (недействительной) конфигурации:

*.example.com. CNAME <some name>
*.example.com. TXT <some text>

, но это не связано с подстановочным знаком, такая же проблема возникает со следующей конфигурацией, которая будет отклонена любым совместимым сервером имен:

foobar.example.com. CNAME <some name>
foobar.example.com. TXT <some text>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...