Почему записи MX не могут указывать на IP-адрес?

89

Я понимаю , что вы не должны указывать запись MX на IP - адрес непосредственно, но должен вместо этого направить его на Aзапись, которая, в свою очередь, указывает на IP - адрес вашего почтового сервера.

Но в принципе зачем это нужно?

dayuloli
источник
Если вы можете настроить запись MX, вы также можете установить запись A. Я не вижу здесь проблемы.
Джошудсон
26
@joshudson Это не проблема, просто я пытаюсь понять почему, а не просто следовать тому, что делают все остальные.
Dayuloli
Я только что попробовал в CloudFlare. Он не принимает IP-адрес в качестве значения для записи MX.
LinuxBabe
Я никогда не заботился об этом, пока не добавил запись SPF, и у меня было слишком много поисков. Пришлось найти другой способ вырезать.
gbryant

Ответы:

90

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

Причины этого в 1980-х годах, когда спецификации были изначально написаны, почти такие же, как причины этого сегодня: хост может быть подключен к нескольким сетям и использовать несколько протоколов.

Еще в 80-х годах нередки были почтовые шлюзы, которые подключались как к (относительно новому) Интернету, использующему TCP / IP, так и к другим традиционным сетям, которые часто использовали другие протоколы. Указание MX таким образом позволило для записей DNS, которые могли бы определить, как достичь такого хоста в сети, отличной от Интернета, такой как Chaosnet . Однако на практике этого почти никогда не было; фактически каждый реорганизовал свои сети, чтобы стать частью Интернета.

Сегодня ситуация такова, что хост может быть доступен по нескольким протоколам (IPv4 и IPv6) и по нескольким IP-адресам в каждом протоколе. Одна запись MX не может содержать более одного адреса, поэтому единственный вариант - указать хост, где затем можно найти все адреса этого хоста. (В качестве оптимизации производительности DNS-сервер будет отправлять записи адресов для хоста в дополнительном разделе ответа, если он имеет для них авторитетные записи, сохраняя в оба конца.)

Существует также ситуация, когда ваши почтовые обменники предоставляются третьей стороной (например, Google Apps или Office 365). Вы указываете свои записи MX на их имена хостов, но может случиться так, что поставщику услуг потребуется изменить IP-адреса почтовых серверов. Поскольку вы указали на хост, поставщик услуг может сделать это прозрачно, и вам не нужно вносить какие-либо изменения в свои записи.

Майкл Хэмптон
источник
2
Это не мешает совместимости с IP-адресами; на самом деле, большинство SMTP-серверов / клиентов прекрасно работают с IP-адресами в записях MX из небольшого тестирования, которое я провел. Я думаю, что целью было отговорить индустрию от массового использования IP-адресов - что, скорее всего, и произошло бы, если бы это правило не было заявлено, - а не в каждом конкретном случае. Следовательно, «должен», а не «должен». +1 за отличную информацию, хотя. Я никогда не думал об этом.
Zenexer
16
@ Zenexer Право дорожного движения не существует из-за неудобств относительно небольшого количества опытных водителей, которые точно знают, что безопасно, а что нет. Они существуют из-за гораздо большей группы идиотов, которые думают, что знают, что делают, но не знают.
Шадур
7
@ Zenexer Вы можете обнаружить, что определенный MTA терпит это сегодня, а не завтра. В конце концов, это не поведение, разрешенное стандартом. И, конечно, не все MTA будут поддерживать его, поэтому это означает, что вы гарантированно потеряете почту.
Майкл Хэмптон
1
@MichaelHampton: если запись MX ДОЛЖНА содержать имя хоста вместо IP-адреса, то MTA ДОЛЖЕН принять IP-адрес. Гипотетически, если запись MX ДОЛЖНА содержать имя хоста, тогда MTA ДОЛЖЕН принять IP-адрес. Вот как работает RFC. Контрагент «СЛЕДУЕТ» рекомендациям по реализации может оптимизировать предположение, что совету следуют, но это почти все, что вы можете с ним сделать.
MSalters
2
@MSalters Я думаю, вы в замешательстве. Я никогда не говорил, ДОЛЖЕН ничего. Действительно, я сказал, что запись MX ДОЛЖНА содержать имя хоста, что также говорит RFC.
Майкл Хэмптон
18

DNS как протокол имеет несколько различных типов значений, которые не являются взаимозаменяемыми.

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

Например: записи держит адрес IPv4 (4 байта данных, фиксированной длины). Запись занимает IPv6 - адреса (16 байтов данных, фиксированной длины).
A
AAAA

MXЗапись, с другой стороны, имеет имя (последовательность меток на формате <int number of bytes> <label> <int number of bytes> <label> <int 0>, переменная длиной).

Это не возможно для MXзаписи , чтобы иметь IP - адрес в качестве своих данных.

Хокан Линдквист
источник
Вы можете сделать метку текстовым представлением IP-адреса, но это не имеет никакого смысла, так как это не может быть разрешено как имя хоста.
Майкл Хэмптон
@MichaelHampton Действительно, возможно иметь имя с полностью числовыми метками, которое в обычном удобном для человека представлении выглядит на первый взгляд как адрес IPv4. Это действительно ничего не меняет, когда дело доходит до вопроса, хотя, поскольку оно все равно будет именем и, следовательно, будет обрабатываться как имя (имя, которое, по крайней мере, в общедоступном Интернете, просто будет NXDOMAIN).
Хокан Линдквист
Это на самом деле не отвечает на вопрос ОП. Вы в основном говорите «потому что так оно и есть» .
Dr01
@ dr01 Учитывая, что вопрос ясно показывает, что он не знает о том, «как оно есть» («вам не следует указывать запись MX непосредственно на IP-адрес, а вместо этого указывать на запись A», когда это фактически не дает возможности имеют любое другое значение, кроме имени), я не думаю, что неуместно указывать на то, как обстоят дела, и почему это делает невозможным любой другой вариант. У меня такое чувство, что ты много читаешь на вопрос, которого на самом деле нет.
Хокан Линдквист,
@ dr01 Т.е., не думайте, что вопрос читается как академический вопрос о проектных решениях на заре DNS или чего-то подобного, а просто вопрос о том, как MXзаписи или записи, которые действительно существуют в мире, могут или должны использоваться.
Хокан Линдквист,
6

Я выброшу это как предположение. Конечно, я дома с гриппом, так что, может быть, я сумасшедший.

RFC 974 заявляет:

Первым шагом для почтовой программы в LOCAL является выдача запроса для MX RR для REMOTE. Настоятельно рекомендуется делать этот шаг каждый раз, когда почтовый клиент пытается отправить сообщение. Надежда состоит в том, что изменения в базе данных домена будут быстро использоваться почтовыми программами, и, таким образом, администраторы домена смогут перенаправлять транзитные сообщения для дефектных хостов, просто изменяя свои базы данных домена.

Требуя имя вместо IP, оно настоятельно поощряет эту практику. Имена могут остаться прежними, и в случае балансировки нагрузки или аварийного восстановления вам не придется беспокоиться об изменении самой записи MX и ожидании распространения DNS.

Очиститель
источник
8
Отвечаю на вопросы об обмене стеками в ваш выходной, пока вы болеете гриппом ... Я даю вам шляпу, сэр!
Майк Б
3

Некоторые почтовые серверы (например, exim) специально не разрешают отправлять в MX записи, которые указывают на чистый IP-адрес, поэтому вам необходимо использовать для этого полное доменное имя, чтобы быть совместимым. Это связано с тем, что большинство серверов ожидают, что запись MX будет содержать имя хоста, а не IP (для этого предназначены записи A).

Редактировать: для уточнения, в DNS каждая запись имеет строгие требования к типу данных, которые может содержать каждая запись. В случае записей MX это только имя хоста .

Натан С
источник
Так почему же exim не позволил MX-записям указывать на IP-адрес? Кажется странным для меня! Я понимаю, что не должен из-за соглашения, но я не понимаю, почему это сделано незаконным .
Dayuloli
1
Я не вижу, как какой-либо MTA мог бы поддерживать это, поскольку MXзапись не может иметь IP-адрес в качестве значения.
Хокан Линдквист
@ HåkanLindqvist Ваш ответ выше прояснил этот момент для меня! Спасибо!
Dayuloli
2

В RFC 1025 записи MX указывают только на RR (запись ресурса) записи A или CNAME.

Таким образом, почтовый сервер, отправляющий почту, запрашивает RR записи MX, запись mx перечисляет записи серверов A, почтовый сервер выполняет прямой просмотр, чтобы получить запись A, а затем пересылает почту через smtp на хост службы, указанный как почтовый сервер, «желающий» получать почту для этого домена.

Ваш вопрос - почему почта не может быть отправлена ​​на IP-адрес

Ответ - из-за доверия

Многие из действующих правил, касающихся почты, эволюционировали, чтобы поддерживать доверие между доменами к тому, что сообщения, отправляемые туда и обратно, действительно действительны. Все это должно в конечном итоге уменьшить СПАМ.

  • Обратный IP-поиск
  • Предварительный поиск имени по этому вопросу

Все эти важнейшие компоненты для основы, на которой строится почтовый сервер, имеют, по крайней мере, небольшой компонент, созданный для создания надежных коммуникаций и сокращения ненадежных коммуникаций.

Ссылка - RFC 1035 и 974

https://www.ietf.org/rfc/rfc1035.txt35

https://www.ietf.org/rfc/rfc974.txt

Гражданин
источник
2

Целью MXзаписей является то, что приложение (передача почты) может узнать об используемом хосте. На уровне приложения имена хостов являются правильными (не IP-адреса).

Кроме того, добавление концепции DNS-записи в DNS вводит множество сложностей и, следовательно, является точкой входа для проблем, неудач реализации, проблем безопасности. Например, 1.2.3.4.example.com.является допустимым именем хоста (да, это так, даже в свете RFC1034, 3.5). Указание этого хоста, как MXв файле конфигурации связывания для example.com, может выглядеть следующим образом

.  MX 10  1.2.3.4

и предположительно это точно так же, как должна выглядеть запись MX с IP. И даже для передачи информации в датаграмму DNS требуются некоторые причудливые дополнения; Самый простой способ - ввести новый тип записи ресурса, MXAскажем, для устранения неоднозначности. Но опять же, зачем вводить бремя такого нового типа записи, когда

. MXA 10 5.6.7.8

всегда можно заменить на

. MX 10 dummy
dummy A 5.6.7.8

(и будут ли поддерживаться также DNS-клиентами, не знающими о MXAзаписях)?

Хаген фон Айцен
источник