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

DNS: субдомены, требующие записи MX и CNAME

Допустим, нам принадлежит зона 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.

Кто-нибудь может придумать обходные пути? Спасибо!

К сожалению, вы столкнулись с ограничением спецификации DNS. Наличие записи MX для того же имени хоста, которое определено как запись CNAME, не удастся в большинстве реализаций DNS-серверов. Некоторые старые DNS-серверы позволяют это, но в основном они были заменены более новыми, более безопасными реализациями.

Вместо использования записей CNAME вам нужно будет использовать записи A с IP-адресами сайтов клиентов напрямую, вместо псевдонимов имен.

После долгой работы и исследований я нашел приемлемое решение. Во-первых, важно, чтобы мы все следовали RFC. Я исправил свой DNS-сервер, чтобы нарушить RFC, и обнаружил, что несколько других основных DNS-серверов не будут уважать это изменение.

Соответствующий шаг - разместить MX на хосте, на который указывает CNAME. Итак, если customer.mywebservice.com является CNAME для записи A loadbalancer.mywebservice.com, целесообразно также создать запись MX для loadbalancer.mywebservice.com. Я убедился, что это работает со всеми основными резолверами.

Если запрос MX сделан для customer.mywebservice.com, библиотека преобразователя последует за CNAME и получит правильный MX для последней записи A. Ура!

customer.mywebservice.com должен быть CNAME для заданного внешнего сервера. Поскольку этот сайт управляет собственным оборудованием и может менять адреса в любой момент времени, CNAME является обязательным требованием.

Кто-нибудь может придумать обходные пути? Спасибо!

У вас есть требование, чтобы клиенты имели возможность изменять адрес. Рассматривали ли вы возможность для клиента динамически обновлять свою собственную запись? С динамическим DNS вы можете использовать запись A, и заказчик может изменить запись по мере необходимости. Это потребует некоторой работы, но вы можете сделать каждый отдельный субдомен отдельной зоной, чтобы вы могли убедиться, что клиент может касаться только своей собственной зоны.

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

Если ваши записи MX будут одинаковыми для всех этих записей, вы можете попытаться использовать DNAME для перенаправления XYZ.mywebservice.com на hosting.mywebservice.com. В разделе hosting.mywebservice.com добавьте соответствующие записи MX и A.

Я должен сказать, что я никогда не использовал записи DNAME в производстве, но вы можете узнать о них больше в RFC2672.

Есть ли в правой части CNAME customer.mywebservice.com запись MX?

Если да, то почтовый сервер будет использовать этот MX для поиска почтового сервера. Надеюсь, вы сможете это контролировать.

Ответ Майкла Горсача в основном правильный, цепочка CNAME -> A + MX действительно работает ... в основном. Однако это вызывает некоторую некорректную работу некоторых MTA. Что я обнаружил при запуске этого решения в приличном масштабе:

  • некоторые MTA просто откажутся найти запись.
  • другие будут неправильно подставлять запись A там, где должно быть CNAME: т. е. я отправил письмо на адрес «joe@foo.example.com», что CNAMES на web.example.com, у которого есть MX mail.example.com, а MTA переписывает заголовок конверта как «Кому: joe@web.example.com».

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

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

Это единственный возможный способ проверки, поскольку CNAME - это псевдоним для полного набора записей, а не только для файла.

MX и CNAME - это полностью отдельные записи: первая определяет почтовый сервер для данного домена, вторая дает адрес домена. Это должно работать:

@       IN      SOA     ns1.mywebservice.com. root.mywebservice.com. (
                        2009060201
                        12h
                        1h
                        1w
                        8h
)

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

customer                CNAME   offsite.host.
customer                MX 10   mail.server.