DNS, чи мають шаблони запису Record пріоритет перед більш конкретними 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.

Що я пропускаю? Хіба це неможливо? Або це погана практика? Спасибі,


1
Ви налаштовуєте це в прямому ефірі через веб-інтерфейс провайдера або, наприклад, використовуєте BIND або djbdns?
Джонатан Росс

Коли ви говорите "вирішує підстановку верхнього рівня", як ви робите цю резолюцію? dig -t ANY new-staging.example.com?
nickgrim

@Jonathan, ми зараз використовуємо Slicehost для управління DNS, тому це через веб-інтерфейс.
zdennis

@nickgrim при запуску dig -t будь-якого 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
zdennis

Відповіді:


15

Відповідь, як правило, "Ні" - більш конкретний запис повинен виграти, тому це має працювати так, як ви описали / очікували. Я здогадуюсь, що у вас є дебютний запис Запис, десь зберігається, і вам потрібно чекати закінчення терміну дії кешу.

швидкий тест з 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)


Це в стандартах DNS чи це специфічна реалізація?
Bigbio2002

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

7

Відповідно до Вашого коментаря до питання:

при запуску dig -t будь-якого new-staging.example.com ми отримуємо: new-staging.example.com. 82880 В 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- і це потрапляє під запис підстановки.


У нас є запис CNAME, встановлений на "proxy.heroku.com". Коли ми викопуємо безпосередньо сервер імен slicehost (dig @ ns1.slicehost.com), єдиний відповідь надає CNAME для proxy.heroku.com. Коли ми копаємо, не вказуючи, це дає нам два відповіді (ті, які я розмістив вище, що ваша відповідь тут відображається). Це змушує мене думати, що, можливо, @ voretaq7 може правильно думати, що існує проблема кешу? Чи відповідає це те, що я бачу при копанні?
zdennis

Так, це, мабуть, означає, що кеш-пам'ять DNS вище за вами кешувала неправильну (неперіодичну) версію. Вам доведеться почекати, коли термін дії TTL закінчиться та / або встановить інше ім’я тим часом ( new-new-staging?).
nickgrim

Відсутня крапка - це те, що мене і збудило.
loevborg

0

Я наткнувся на цю публікацію, досліджуючи, як це робиться спільним сервером Plesk Linux. У своєму прикладі вони посилаються на комбінацію рішення DNS / vhost.conf, де вам потрібно додати і vhost.conf, і оновити DNS.

Цитата: "Він повинен бути останнім у списку субдоменів, який впорядкований в алфавітному порядку, тому починайте його ім'я з" zz " http://kb.parallels.com/2239

Я думаю, що це відрізняється від "нормальної" теорії DNS, згідно з якою буде повернуто більш конкретний запис.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.