Мне трудно понять конкретный эффект разрешения имен DNS для имен поддоменов, который обнаружился при включении функции шифрования.
Контекст моего вопроса:
У меня есть домен (basjes.nl), и я установил для всех имен хостов в этом домене один и тот же IP-адрес.
В пользовательском интерфейсе моего DNS-провайдера (Transip) я вижу что-то вроде этого:
@ A x.x.x.x
* CNAME @
Теперь я могу это сделать, чтобы получить указанный IP-адрес.
dig blurp.basjes.nl
Недавно я развернул Инструмент ACME-DNS и настройте соответствующие записи DNS (т.е. делегируйте auth.basjes.nl моему собственному серверу ACME-DNS), чтобы позволить Lets Encrypt проверить, что я владею указанным именем хоста через DNS.
Для этого конкретного имени хоста я хочу иметь сертификат HTTPS с полным именем (то есть не подстановочный знак), поэтому я добавил что-то вроде этого:
_acme-challenge.blurp CNAME something.auth.basjes.nl.
После добавления этой записи я обнаружил, что dig blurp.basjes.nl
больше не работает. Странно то, что я не получаю сообщение об ошибке (значит нет NXDOMAIN), я либо ничего не получаю, либо просто
;; AUTHORITY SECTION:
basjes.nl. 300 IN SOA ns0.transip.net. hostmaster.transip.nl. 2018041107 14400 1800 2419200 300
Итак, на данный момент у меня есть что-то вроде этого:
@ A x.x.x.x
* CNAME @
_acme-challenge.blurp CNAME something.auth.basjes.nl.
Я обнаружил, что если я добавлю явную запись DNS для этого имени хоста, то внезапно он снова ДЕЙСТВУЕТ:
@ A x.x.x.x
* CNAME @
blurp CNAME @
_acme-challenge.blurp CNAME something.auth.basjes.nl.
Эффекты, которые я хотел бы понять:
Почему он больше не разрешается при запросе обычного DNS-сервера?
Запись "*" все еще присутствует!
dig blurp.basjes.nl @1.1.1.1
Почему он разрешается при запросе напрямую DNS-сервера SOA Transip?
dig blurp.basjes.nl @ns0.transip.net
Почему это разрешается при добавлении явной записи?
Это то, что я сейчас использую как обходной путь, чтобы заставить его работать на меня.
P.S. Я связался со службой поддержки Transip перед тем, как опубликовать этот вопрос. Они не знали, что здесь пошло не так и / или почему это происходит.
DNS является иерархическим. Когда вы добавили имя _acme-challenge.blurp.basjes.nl
, это означало, что blurp.basjes.nl
также был добавлен неявно. Здесь может быть удивительно то, что имя может существовать без какого-либо содержания. Когда вы использовали dig
просить blurp.basjes.nl
, вы получили совершенно правильный и точный ответ: имя существует, но не содержит записей. Этот случай, когда имя существует только потому, что под ним в дереве DNS есть другие имена, называется пустой нетерминальный. Вы можете погуглить этот термин, если хотите узнать больше.
Это первая часть вашего сбивающего с толку поведения. Вторая часть заключается в следующем: запись с подстановочными знаками используется для генерации ответа тогда и только тогда, когда запрошенное имя еще не существует. Итак, сначала вы попросили blurp.basjes.nl
и получил ответ, сгенерированный подстановочным знаком. Затем вы добавили _acme-challenge.blurp.basjes.nl
. Когда вы спросили снова после этого, имя blurp.basjes.nl
действительно существует (как описано выше), поэтому подстановочный знак не использовался. Но с тех пор blurp.basjes.nl
в нем не было записей, все, что вы получили, - это пустой ответ. После этого вы добавили CNAME
запись для blurp.basjes.nl
, поэтому, когда вы спросили еще раз, это то, что вы получили обратно.
Это проясняет ситуацию?