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

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

У нас есть подстановочный знак для обработки всех поддоменов для 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.

Что мне не хватает? Это невозможно? Или это плохая практика? Спасибо,

Обычно ответ - «Нет» - должна победить более конкретная запись, поэтому все должно работать так, как вы описали / ожидали. Я предполагаю, что у вас где-то в кеше есть запись 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 с подстановочным знаком)

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

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

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

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

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

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