Страница Википедии о подстановочном знаке 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>