DNS, имеют ли подстановочные знаки записи приоритет над более конкретными CNAME?

18

У нас есть подстановочный знак, настроенный для обработки всех поддоменов для "example.com"

ЗАПИСЬ: * .example.com указывает на 10.10.10.10

У нас есть более конкретная запись A для обработки специального субдомена (это прекрасно работает):

Запись: staging.example.com указывает 10.10.10.9

Проблема, с которой мы сталкиваемся, заключается в том, что мы переносим этапы в новую среду хостинга, и нам было поручено использовать CNAME:

CNAME: new-staging.example.com указывает на proxy.heroku.com

Мы думали, что это сработает. Однако new-staging.example.com преобразуется в подстановочный знак верхнего уровня 10.10.10.10 и не указывает на proxy.heroku.com.

Что мне не хватает? Это не возможно? Или это плохая практика? Благодарность,

zdennis
источник
1
Вы настраиваете это в прямом эфире через веб-интерфейс интернет-провайдера или, например, используете BIND или djbdns?
Джонатан Росс
Когда вы говорите «разрешает подстановочный знак верхнего уровня», как вы делаете это разрешение? dig -t ANY new-staging.example.com?
Никгрим
@Jonathan, в настоящее время мы используем Slicehost для управления DNS, поэтому через веб-интерфейс.
Зденнис
@nickgrim при запуске dig -t ЛЮБОЙ new-staging.example.com мы получаем: new-staging.example.com. 82880 IN CNAME proxy.heroku.com.example.com. proxy.heroku.com.example.com. 86400 IN 10.10.10.10
Зденнис

Ответы:

15

Ответ обычно «Нет» - более конкретная запись должна победить, поэтому она должна работать так, как вы описали / ожидали. Я предполагаю, что у вас где-то кешируется запись шаблона A, и вам нужно дождаться окончания срока действия этого кэша.

быстрый тест с BIND 9.6.2-P2 / FreeBSD 8.1:
зона, содержащая записи:

example.net.                IN      A      127.0.0.2
*.test.example.net.         IN      A      127.0.0.1
specific.test.example.net.  IN      CNAME  example.net.

Решается следующим образом:

% dig specific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> specific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17222
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;specific.test.example.net. IN  A

;; ANSWER SECTION:
specific.test.example.net. 3600 IN  CNAME   example.net.
example.net.               3600 IN  A   127.0.0.2

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.

;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Возвращает CNAME)
и

% dig nonspecific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> nonspecific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26980
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;nonspecific.test.example.net.  IN  A

;; ANSWER SECTION:
nonspecific.test.example.net. 3600 IN   A   127.0.0.1

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.


;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Возвращает подстановочный знак A)

voretaq7
источник
Это в стандартах DNS, или это зависит от реализации?
Bigbio2002
@ Bigbio2002 Я считаю, что это является частью стандарта - RFC 4592 является подходящим местом для поиска - мой мозг слишком утомителен от написания документации весь день, чтобы читать желудок RFC, хотя, если я ошибаюсь, пожалуйста, дайте мне соответствующий раздел :-)
voretaq7
7

Согласно вашему комментарию на вопрос:

при запуске dig -t ЛЮБОЙ new-staging.example.com мы получаем: new-staging.example.com. 82880 IN CNAME proxy.heroku.com.example.com. proxy.heroku.com.example.com. 86400 В 10.10.10.10

... вы неправильно настроили DNS. Вам нужно установить цель CNAME proxy.heroku.com.- последний период важен! Без этого ваш DNS-сервер предполагает, что вы ссылаетесь на хост в своей example.comзоне proxy.heroku.com.example.com- и это фиксируется подстановочной записью.

nickgrim
источник
У нас есть запись CNAME, установленная на «proxy.heroku.com». Когда мы копаем сервер имен slicehost напрямую (dig @ ns1.slicehost.com), единственный предоставленный ответ указывает на CNAME для proxy.heroku.com. Когда мы копаем без указания, это дает нам два ответа (те, которые я разместил выше, отражает ваш ответ здесь). Это заставляет меня думать, что, возможно, @ voretaq7 может и вправду думать, что есть проблема с кешем? Это соответствует тому, что я вижу при копании?
Зденнис
Да, это, похоже, подразумевает, что вышестоящий DNS-кеш кэшировал неверную (непериодическую) версию. Вам нужно будет дождаться истечения срока действия TTL и / или установить другое имя ( new-new-staging?).
Никгрим
Недостающая точка - это то, что сбило меня с толку.
loevborg
0

Я сталкивался с этой статьей, исследуя, как это делается на общем сервере Plesk Linux. В их примере они ссылаются на комбинированное решение DNS / vhost.conf, где вы должны добавить как vhost.conf, так и обновить DNS.

Цитата: «Он должен быть последним в списке поддоменов, который упорядочен в алфавитном порядке, поэтому начинайте его имя с« zz ». Http://kb.parallels.com/2239

Я предполагаю, что это отличается от «нормальной» теории DNS, в которой будет возвращена более конкретная запись.

Евгений ван дер Мерве
источник