DNS: Субдомени, що вимагають запису MX та CNAME


17

Скажімо, у нас є зона mywebservice.com.

Я хотів би, щоб кожен із моїх клієнтів отримав свій піддомен, наприклад, customer.mywebservice.com.

customer.mywebservice.com повинен бути CNAME для певного серверного місця. Оскільки цей сайт керує власним обладнанням і може змінювати адреси в будь-який момент часу, CNAME є вимогою.

Люди також повинні мати можливість надсилати електронну пошту на inbox@customer.mywebservice.com, що вимагатиме простого запису MX.

Однак і тут я хочу порадити:

Відповідно до RFC 1034 :

If a CNAME RR is present at a node, no other data should be
present; this ensures that the data for a canonical name and its aliases
cannot be different.

Я також переконався, що мій DNS-сервер відмовиться обслуговувати що-небудь, крім CNAME для хостів, які ними користуються.

Отже, здається, що у мене може виникнути програш. Якщо я хочу використовувати запис MX, мені потрібно використовувати A замість CNAME.

Хтось може придумати якісь обхідні шляхи? Спасибі!

Відповіді:


20

На жаль, те, що ви стикаєтесь, є обмеженням специфікації DNS. Маючи запис MX для того ж імені хоста, яке визначено як запис CNAME, не вдасться у більшості реалізацій сервера DNS. Деякі старі сервери DNS дозволять це, але вони здебільшого припинялися на користь нових, більш безпечних реалізацій.

Замість використання записів CNAME вам потрібно буде використовувати записи "A" з IP-адресами веб-сайтів клієнтів безпосередньо, а не псевдоніми імен.


Так, я думаю, що я просто зіткнуся з цим. Спасибі!
Майкл Горшух

2
Я також повинен зазначити, хто читає це в дорозі, що причина цього обмеження полягає в тому, що CNAME повинен посилатися на "канонічне ім'я" для хоста, який шукають. Наприклад, якщо у вас є хост, x2.example.com, який є записом CNAME, що вказує на x1.example.com, то будь-який резолютор, який шукає x2, повинен побачити CNAME, замінити все, що він робить для x2, на x1, і почати заново . Якщо у вас був запис MX для x2 на додаток до CNAME, тоді, якщо у x1 також був MX, є ймовірність, що вони будуть різними, що небажано, тому вони просто забороняють його.
Джастін Скотт

18

Після багато роботи та досліджень тут я знайшов прийнятне рішення. По-перше, важливо, щоб ми всі дотримувались RFC. Я зафіксував свій DNS-сервер, щоб порушити RFC, і я виявив, що кілька інших основних DNS-серверів не поважають ці зміни.

Відповідним кроком є ​​розміщення MX на хості, на який вказує CNAME. Отже, якщо customer.mywebservice.com є CNAME для запису A load load -lancer.mywebservice.com, правильно створити MX-запис для loadbalancer.mywebservice.com. Я переконався, що це працює з усіма основними рішеннями.

Якщо MX-запит зроблений для customer.mywebservice.com, бібліотека роздільної здатності слідкує за CNAME та отримає належний MX для остаточного запису A. Ура!


4

customer.mywebservice.com повинен бути CNAME для певного серверного місця. Оскільки цей сайт керує власним обладнанням і може змінювати адреси в будь-який момент часу, CNAME є вимогою.

Хтось може придумати якісь обхідні шляхи? Спасибі!

Ви маєте вимогу, щоб клієнти мали змогу змінити адресу, чи вирішили Ви дозволити клієнту динамічно оновлювати власний запис? За допомогою динамічного dns ви можете використовувати запис A, а клієнт може змінювати запис за потребою. Це займе трохи роботи, але кожен окремий піддомен можна виділити як окрему зону, щоб ви могли переконатися, що клієнт може торкатися лише своєї власної зони.

Я не пробував цього, але, як видається, gnudip є інструментом з відкритим кодом для полегшення динамічних оновлень без необхідності мати справу з автентифікацією та налаштуванням багатьох зон на сервері DNS.


3

Якщо ваші записи MX будуть однаковими для всіх цих записів, ви можете спробувати використовувати DNAME для перенаправлення XYZ.mywebservice.com на hosting.mywebservice.com. Під hosting.mywebservice.com додайте свої відповідні записи MX та A.

Треба сказати, що я ніколи не використовував записи DNAME у виробництві, але ви можете прочитати більше про них у RFC2672 .


Я хотів спробувати використовувати DNAME з деякими з наших доменів SSL, але я чув, що все ще є проблеми зі старими серверами DNS тощо. Це актуально? Або DNAME безпечно використовувати на виробничих серверах?
сухі змагання

Якби мені довелося здогадуватися, багато програм не очікують записів DNAME і, ймовірно, обриваються при їх використанні. Чи дотримуються всі поштові сервери DNAME, щоб шукати записи MX? Я не знаю, але вони повинні. Що стосується вашої проблеми з SSL, DNS-сервери, які не розуміють DNAME, повинні отримувати посилання CNAME. Я б ретельно перевірив це, перш ніж реалізувати його.
Дуг Люксем

Додаток, звичайно, НЕ повинен обробляти записи DNAME! Це робиться тільки на серверах імен.
борцмейер

3

Чи має RHS клієнта.mywebservice.com CNAME запис MX?

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


1

Відповідь Майкла Горшуха в основному правильна, ланцюжок CNAME -> A + MX працює ... здебільшого . Однак це призводить до поганої поведінки у певних МТА. Що я знайшов, щоб запустити це рішення в пристойному обсязі:

  • деякі МТА просто відмовляться знайти запис.
  • інші неправильно замінять запис A, де повинен бути CNAME: тобто я надіслав пошту на "joe@foo.example.com", яка CNAMES на web.example.com, яка має MX mail.example.com, і MTA переписує заголовок конверта як "До: joe@web.example.com".

Поки не ясно, наскільки поширені ці проблеми (google / hotmail / yahoo / тощо, схоже, вирішують це правильно), але вони, звичайно, шукають кращих рішень.


2
Це вірно; документально підтверджена поведінка для серверів SMTP, сумісних з RFC5321, спочатку перевіряє наявність MX запису для домену, і якщо це не вдається, перевірити наявність запису A. Така поведінка є реальною технічною причиною, чому MX не повинен бути CNAME: він перестане вирішуватися після першої відповідної відповіді.
адаптор

0

Можливим і правильним рішенням буде створення базового імені хоста для всіх ваших клієнтів і встановлення його на запис a-aaaa на веб-сервері за межами веб-сайту та на вашому mx, а потім CNAME для всіх ваших клієнтів домену для цього єдиного імені хоста. Таким чином, вам доведеться змінити один запис лише тоді, коли зміниться IP-адреса за межами сайту.

Це єдиний доблесний і можливий спосіб, оскільки CNAME є псевдонімом для повного набору записів, а не просто.


-4

MX і CNAME - це повністю окремі записи - перший визначає поштовий сервер для даного домену, другий - адресу для домену. Це має працювати:

@ IN SOA ns1.mywebservice.com. root.mywebservice.com. (
                        2009060201
                        12 год
                        1 год
                        1w
                        8 год
)

                        NS ns1.mywebservice.com.
                        NS ns2.mywebservice.com.

клієнт CNAME offsite.host.
клієнт MX 10 mail.server.

4
Це може працювати, але це порушує RFC1034 та RFC1219, які стверджують, що жоден інший запис ресурсів не може мати те саме ім'я, що і CNAME.
Doug Luxem

Мій демон DNS суворий RFC, який просто відмовляється відмовлятись надсилати відповідь на MX. Я вважаю, що є певні потенційні проблеми кешування на стороні клієнта, якби ми поставили це на місце.
Майкл Горшух

Який демон DNS? Я використовую BIND9, який повинен працювати з цією конфігурацією без проблем. Може, настав час оновити? Думаю, велика інфраструктура?
сухі змагання

Я використовую MyDNS. Це досить велика конфігурація, і цей маленький демон був благословенням до цього моменту. Я розглядаю можливість її виправлення, але не дуже зацікавлений у вирішенні будь-яких побічних ефектів, що призводять до появи. Якщо це суперечить RFC, це звучить як погана ідея.
Майкл Горшух

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