Записи MX, краща настройка для балансування навантаження та відмовлення


9

Візьміть домен example.com, у нього є два поштові сервери mail1.example.com та mail2.example.com, обидва вже налаштовані, як правило, я б пішов із наступною установкою:

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      10 mail2.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

Співробітник запропонував такі налаштування:

example.com.           1200    IN      MX      10 mail.example.com.
mail.example.com.      1200    IN      A       172.16.10.1
mail.example.com.      1200    IN      A       172.16.10.2

mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

Одне нове ім'я хоста з двома записами A, що вказує на два сервери, як він стверджує, що деякі клієнти неправильно роблять обертовий робін з тим же пріоритетом MX, це має бути законна установка, але чи все ще правильно підтримує відмову, наприклад, 172.16. 10.1 невдало, чи пробують доставку 172.16.10.2? Або ще краще налаштування типу:

example.com.           1200    IN      MX      10 mail.example.com.
example.com.           1200    IN      MX      20 mail1.example.com.
example.com.           1200    IN      MX      20 mail2.example.com.
mail.example.com.      1200    IN      A       172.16.10.1
mail.example.com.      1200    IN      A       172.16.10.2

mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

Дякую.

Відповіді:


11

RFC, які визначають, як MTA повинен обробляти записи MX, - це RFC974 , RFC1123 , розділ 5.3.4 , RFC2821, розділ 5 і RFC5321, розділ 5 .

Статус RFC974 тепер ІСТОРИЧНИЙ . Згідно з цим, очікується, що учасники MTA запитують список MX-записів, пов’язаних із доменом, і "заохочуються" спробувати всі (або фіксовану кількість) SMTP-серверів у порядку зростання. Якщо є кілька записів MX з рівним значенням переваг, MTA повинні намагатися доставити повідомлення на всі SMTP-сервери до тих пір, поки це не вдасться. Порядок спроб є вибором MTA, тобто RFC не виключає, чи повинні SMTP-сервери повинні зв’язуватися випадковим чином або в порядку, заданому DNS-сервером. Крім того, RFC не виключає, як обробляти MX-регістр, який посилається на кілька записів A.

(...) If the list of MX RRs is not empty, the mailer should try to deliver
the message to the MXs in order (lowest preference value tried
first). The mailer is required to attempt delivery to the lowest
valued MX. Implementors are encouraged to write mailers so that they
try the MXs in order until one of the MXs accepts the message, or all
the MXs have been tried. A somewhat less demanding system, in which
a fixed number of MXs is tried, is also reasonable. Note that
multiple MXs may have the same preference value. In this case, all
MXs at with a given value must be tried before any of a higher value
are tried. In addition, in the special case in which there are
several MXs with the lowest preference value, all of them should be
tried before a message is deemed undeliverable. (...)

Статус RFC1123 - ІНТЕРНЕТ СТАНДАРТ . Розділ 5.3.4 має на меті "вдосконалити" процедури RFC974 про те, як обробляти записи MX. Тепер він вимагає від MTA спробувати всі SMTP-сервери у порядку зростання, поки не вдасться. Однак це все ще дозволяє встановити обмеження кількості спроб. Якщо є кілька записів MX з рівним значенням переваг, RFC рекомендує (та не вимагає) MTA вибрати один запис навмання. Однак якщо запис MX посилається на кілька записів A (адреси IPv4), RFC вимагає, щоб MTA зв'язувався з усіма цими адресами до тих пір, поки не вдасться, у порядку, заданому сервером DNS.

(...) When it succeeds, the mapping can result in a list of
alternative delivery addresses rather than a single address,
because of (a) multiple MX records, (b) multihoming, or both.
To provide reliable mail transmission, the sender-SMTP MUST be
able to try (and retry) each of the addresses in this list in
order, until a delivery attempt succeeds. However, there MAY
also be a configurable limit on the number of alternate
addresses that can be tried. In any case, a host SHOULD try at
least two addresses.

The following information is to be used to rank the host
addresses:

(1) Multiple MX Records -- these contain a preference
indication that should be used in sorting. If there are
multiple destinations with the same preference and there
is no clear reason to favor one (e.g., by address
preference), then the sender-SMTP SHOULD pick one at
random to spread the load across multiple mail exchanges
for a specific organization; note that this is a
refinement of the procedure in [DNS:3].

(2) Multihomed host -- The destination host (perhaps taken
from the preferred MX record) may be multihomed, in which
case the domain name resolver will return a list of
alternative IP addresses. It is the responsibility of the
domain name resolver interface (see Section 6.1.3.4 below)
to have ordered this list by decreasing preference, and
SMTP MUST try them in the order presented.

(...)

[DNS:3] "Mail Routing and the Domain System," C. Partridge, RFC-974,
January 1986.

Статус RFC2821 - ПРОПОЗИЦІЙНИЙ СТАНДАРТ . Цей RFC застаріває RFC974, і в обробці записів MX він трохи відрізняється від RFC1123. У той час як перший вимагає довільного вибору SMTP-сервера серед декількох записів MX з рівним значенням переваг, останній просто РЕКОМЕНДУЄ його.

(...) Multiple MX records contain a preference indication that MUST be used
in sorting (see below). Lower numbers are more preferred than higher
ones. If there are multiple destinations with the same preference
and there is no clear reason to favor one (e.g., by recognition of an
easily-reached address), then the sender-SMTP MUST randomize them to
spread the load across multiple mail exchangers for a specific
organization.

The destination host (perhaps taken from the preferred MX record) may
be multihomed, in which case the domain name resolver will return a
list of alternative IP addresses. It is the responsibility of the
domain name resolver interface to have ordered this list by
decreasing preference if necessary, and SMTP MUST try them in the
order presented. (...)

Статус RFC5321 - ПРОЕКТНА СТАНДАРТ . Цей RFC застаріває RFC2821, і в контексті роздільної здатності DNS він, в основному, переписує ту саму процедуру пошуку сервера і представляє новий розділ, який трохи обговорює обробку MX-записів, що посилаються на адреси IPv6.

(...) When a domain name associated with an MX RR is looked up and the
associated data field obtained, the data field of that response MUST
contain a domain name. That domain name, when queried, MUST return
at least one address record (e.g., A or AAAA RR) that gives the IP
address of the SMTP server to which the message should be directed.

(...) When the lookup succeeds, the mapping can result in a list of
alternative delivery addresses rather than a single address, because
of multiple MX records, multihoming, or both. To provide reliable
mail transmission, the SMTP client MUST be able to try (and retry)
each of the relevant addresses in this list in order, until a
delivery attempt succeeds.

(...)  MX records contain a preference indication that MUST be used in
sorting if more than one such record appears (see below). Lower
numbers are more preferred than higher ones. If there are multiple
destinations with the same preference and there is no clear reason to
favor one (e.g., by recognition of an easily reached address), then
the sender-SMTP MUST randomize them to spread the load across
multiple mail exchangers for a specific organization.

The destination host (perhaps taken from the preferred MX record) may
be multihomed, in which case the domain name resolver will return a
list of alternative IP addresses. It is the responsibility of the
domain name resolver interface to have ordered this list by
decreasing preference if necessary, and the SMTP sender MUST try them
in the order presented. (...)

Я думаю, що сучасний агент передачі пошти дотримується принаймні процедур RFC2821 або RFC5321, тому всі три установки DNS забезпечують можливість відмови. Однак, тільки перша установка може забезпечити кращу врівноваженість навантаження. Якщо ви спробуєте другий чи третій параметри, вам доведеться переконатися, що ваш DNS-сервер отримує відповіді у випадковому порядку. Крім того, записи DNS можуть кешуватися або самими MTA, або рекурсивними серверами DNS, тому випадковість не може бути гарантована. Я думаю mail1.example.com, отримаю більшість повідомлень.

Ще одна причина, яка спрямовує мою думку проти другої та третьої установок, - це посилання декількох імен на одну IP-адресу. Поштові сервери в Інтернеті зазвичай відхиляють повідомлення від хостів, відображення яких IP address => PTR => hostname => A => IP addressне відповідає (як і обмеження Postfix reject_unknown_client_hostname ), тому вам доведеться особливо обережно налаштувати записи PTR.

Клієнти, які не пробують записи MX у випадковому порядку, вже порушують стандарти RFC2821 та RFC5321. Отже, я думаю, немає гарантії, що ці клієнти також спробують вторинну IP-адресу автоматично. Через це я віддаю перевагу найпростішій конфігурації DNS:

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      10 mail2.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

EDIT: Додано посилання на RFC1123.


Дякую за детальні довідки, можливо, ми очікуємо занадто багато без належного балансира навантаження, як зазначає Маркі нижче; у вас є питання щодо PTR, невідповідність може спричинити проблеми, і їх слід обережно.
Крдан

2

Друга установка не підтримує відмову. Скажімо, адресу mail.example.com було вирішено до 172.16.10.1, і він не працює. Тоді 172.16.10.2 не буде випробовано, оскільки існує лише одна запис MX.

Третя установка генерує двічі трафік DNS як перший. Окрім трафіку, обидва вони мають однакову поведінку: як ви вже сказали, деякі клієнти не будуть правильно робити круговий рух з таким же пріоритетом MX.

Для того, щоб мати балансування навантаження та відмову, я б спробував:

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      10 mail2.example.com.
example.com.           1200    IN      MX      20 mail3.example.com.
example.com.           1200    IN      MX      30 mail4.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2
mail3.example.com.     1200    IN      A       172.16.10.1
mail4.example.com.     1200    IN      A       172.16.10.2
  • 10 MX записів ------> Якась балансування навантаження
  • Записи 20, 30 MX -> Відмовлення

1

На мою думку, ваша перша установка правильна. Причини:

  1. У вас є 2 MX записи з тим самим пріоритетом, що добре для балансування навантаження. RFC5321 зазначає, що SMTP-серверу потрібно випадковим чином розподіляти навантаження для всіх серверів, що мають однаковий пріоритет

  2. Як ви вже згадували, запис круглої робінки A не вийде з ладу неправильно. Це називається записом multihomed-A, відправник відправить пошту спочатку. Запис у відповіді DNS, і DNS-сервер визначає порядок повернення списку. Тож якщо вам потрібен розподіл навантаження або перехід з ладу, вам потрібен сервер DNS, це можна зробити (монітор Heath і load). Знову на основі RFC, всі відправник повинен спершу спробувати всі сервери з однаковим пріоритетом у записах MX, так що ви можете зробити відмову з двома записами MX.

посилання: https://tools.ietf.org/html/rfc5321 стор. 69


0

Для виходу з ладу:

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      20 mail2.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

MTA спочатку спробує mail1, потім mail2.

Поєднувати балансування навантаження та відмову не реально. Ви можете зробити:

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      20 mail2.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail1.example.com.     1200    IN      A       172.16.10.2    
mail2.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

MTA спочатку спробує mail1, половина часу якої вказує на .1, а інший раз на .2. Проблема тут полягає в тому, що mail2 може вказувати на ту саму адресу, що і mail1 у сценарії, коли mail1 недоступний.

Тож ви також можете спробувати

example.com.           1200    IN      MX      10 mail1.example.com.
example.com.           1200    IN      MX      10 mail2.example.com.
example.com.           1200    IN      MX      20 mail2.example.com.
example.com.           1200    IN      MX      20 mail1.example.com.
mail1.example.com.     1200    IN      A       172.16.10.1
mail1.example.com.     1200    IN      A       172.16.10.2    
mail2.example.com.     1200    IN      A       172.16.10.1
mail2.example.com.     1200    IN      A       172.16.10.2

знизити ризик того, що початкове підключення не спрацює. І все-таки ризик не буде нульовим. Але MTA спробує з'єднання пізніше.

Для ефективного збалансування навантаження та відмови від навантаження, складіть або складіть балансир навантаження (кластер).


Я не повністю згоден з Маркі. Я все ще можу робити відмову і завантажувати балансування з записами MX з тим же пріоритетом. Я використовував це у виробничих умовах, і він добре працює
Gk.

В ОП заявили, що вони сумніваються, що той самий пріо MX буде працювати для збалансування навантаження. У такому випадку вони повинні придбати балансир навантаження :)
Marki

-1

залежить від того, який у вас поштовий сервер. У нас є поштовий сервер, який називається reddoxx - він використовує лише перший запис mx. (з таким же пріоритетом) Тільки якщо немає відповіді від першого mx, він підключиться до другого mx тощо. Наш поштовий сервер просто ігнорує RFC5321


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