Record MX, migliore impostazione per il bilanciamento del carico e il failover


9

Prendi il dominio example.com, ha due server di posta mail1.example.com e mail2.example.com, entrambi già configurati, di solito andrei con la seguente configurazione:

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

Un collega ha suggerito la seguente configurazione:

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

Un singolo nuovo nome host con due record A che punta ai due server, poiché afferma che alcuni client non eseguono correttamente round-robin con la stessa priorità MX, dovrebbe essere una configurazione legittima, ma supporta comunque correttamente il failover, ad esempio 172.16. 10.1 fallito, 172.16.10.2 è in prova per la consegna? O sarebbe ancora meglio un setup come:

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

Grazie.

Risposte:


11

Le RFC che specificano come un MTA deve gestire i record MX sono RFC974 , RFC1123 sezione 5.3.4 , RFC2821 sezione 5 e RFC5321 sezione 5 .

Lo stato RFC974 è ora STORICO . In base a ciò, gli MTA dovrebbero interrogare l'elenco dei record MX associati a un dominio e sono "incoraggiati" a provare tutti (o un numero fisso) di server SMTP, in ordine crescente di preferenza. Se sono presenti più record MX con un valore di preferenza uguale, gli MTA devono tentare di recapitare il messaggio a tutti i server SMTP fino a quando uno ha esito positivo. L'ordine dei tentativi è una scelta dell'MTA, ovvero l'RFC non stabilisce se i server SMTP devono essere contattati in modo casuale o nell'ordine indicato dal server DNS. Inoltre, RFC non stabilisce come gestire un registro MX che fa riferimento a più record 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. (...)

Lo stato RFC1123 è INTERNET STANDARD . La sezione 5.3.4 mira a "perfezionare" le procedure RFC974 su come gestire i record MX. Ora è necessario che gli MTA provino tutti i server SMTP in ordine crescente di preferenza fino a quando non si riesce. Tuttavia, consente comunque un limite configurabile sul numero di tentativi. Se ci sono più record MX con un uguale valore di preferenza, la RFC raccomanda (e non richiede) agli MTA di selezionare un record a caso. Tuttavia, se un record MX fa riferimento a più record A (indirizzi IPv4), l'RFC richiede agli MTA di contattare tutti questi indirizzi fino a quando uno ha esito positivo, nell'ordine indicato dal server 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.

Lo stato RFC2821 è PROPOSED STANDARD . Questo RFC oscura RFC974 e, nell'ambito della gestione dei record MX, differisce leggermente da RFC1123. Mentre il primo RICHIEDE una selezione casuale di un server SMTP tra più record MX con un valore di preferenza uguale, il secondo lo CONSIGLIA.

(...) 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. (...)

Lo stato RFC5321 è DRAFT STANDARD . Questo RFC oscura RFC2821 e, nel contesto della risoluzione DNS, sostanzialmente riscrive la stessa procedura di ricerca del server e presenta una nuova sezione che discute leggermente sulla gestione dei record MX che fa riferimento a indirizzi 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. (...)

Immagino che un moderno agente di trasferimento della posta segua almeno le procedure RFC2821 o RFC5321, quindi tutte e tre le configurazioni DNS offrono funzionalità di failover. Tuttavia, solo la prima configurazione può fornire un migliore bilanciamento del carico. Se provi la seconda o la terza configurazione, dovrai assicurarti che il tuo server DNS fornisca le risposte in un ordine casuale. Inoltre, i record DNS possono essere memorizzati nella cache dagli stessi MTA o dai server DNS ricorsivi, quindi la casualità non può essere garantita. Penso mail1.example.comche riceverà la maggior parte dei messaggi.

Un altro motivo che indirizza la mia opinione contro la seconda e la terza configurazione è il riferimento di più nomi a un indirizzo IP. I server di posta su Internet generalmente rifiutano i messaggi dagli host la cui mappatura IP address => PTR => hostname => A => IP addressnon corrisponde (come la restrizione Postfix reject_unknown_client_hostname ), quindi dovrai prestare particolare attenzione all'impostazione dei record PTR.

I client che non provano i record MX in un ordine casuale stanno già violando gli standard RFC2821 e RFC5321. Quindi, penso che non vi sia alcuna garanzia che questi client provino automaticamente anche l'indirizzo IP secondario. Per questo motivo, preferisco la configurazione DNS più semplice:

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: aggiunti riferimenti a RFC1123.


Grazie per i riferimenti dettagliati, forse ci aspettiamo troppo senza un adeguato bilanciamento del carico, come Marki afferma di seguito; hai un punto anche sul PTR, la mancata corrispondenza può causare problemi e dovrebbe essere curata.
Krdan,

2

La seconda installazione non supporta il failover. Diciamo che mail.example.com è stato risolto in 172.16.10.1 e non riesce. Quindi 172.16.10.2 non verrà provato poiché esiste un solo record MX.

La terza installazione genera il doppio traffico DNS come il primo. A parte il traffico, entrambi hanno lo stesso comportamento: come hai detto, alcuni client non eseguiranno correttamente il round robin con la stessa priorità MX.

Per avere sia il bilanciamento del carico che il failover, proverei:

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 record MX ------> Un qualche tipo di bilanciamento del carico
  • 20, 30 record MX -> Failover

1

Secondo me, la tua prima installazione è corretta. Le ragioni sono:

  1. Hai 2 record MX con la stessa priorità che è buona per il bilanciamento del carico. RFC5321 afferma che il server SMTP deve distribuire casualmente il carico per tutti i server che hanno la stessa priorità

  2. Come accennato, il record round robin A non eseguirà correttamente il failover. Si chiama multihomed-A record, il mittente invierà la posta alla prima voce A sulla risposta DNS e il server DNS deciderà l'ordine di restituzione dell'elenco. Pertanto, se è necessaria la distribuzione del carico o il failover, è necessario un server DNS in grado di farlo (heath e load monitor). Ancora una volta basato su RFC, tutti i mittenti devono prima provare tutti i server con la stessa priorità sui record MX, quindi è possibile eseguire il failover con due record MX.

rif: https://tools.ietf.org/html/rfc5321 pagina 69


0

Per il failover:

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

L'MTA proverà prima mail1, quindi mail2.

La combinazione di bilanciamento del carico e failover non è realmente possibile. Potresti fare:

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

L'MTA proverà prima mail1 che metà del tempo punta a .1 e l'altra volta a .2. Il problema qui è che mail2 può puntare allo stesso indirizzo di mail1 nello scenario in cui mail1 non è raggiungibile.

Quindi potresti anche provare

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

per ridurre il rischio che la connessione iniziale non funzioni. Tuttavia il rischio non sarà zero. Ma gli MTA ritenteranno la connessione in seguito.

Per un bilanciamento del carico e un failover mission-crticial efficaci, ottenere o mettere insieme un bilanciamento del carico (cluster).


Non sono totalmente d'accordo con Marki. Posso ancora eseguire il failover e il bilanciamento del carico con i record MX con la stessa priorità. L'ho usato nell'ambiente di produzione e funziona bene
Gk.

L'OP ha dichiarato di avere dubbi sul fatto che lo stesso prio MX funzionerà per il bilanciamento del carico. In tal caso dovrebbero acquisire un bilanciamento del carico :)
Marki,

-1

dipende da quale mailserver hai. Abbiamo un mailserver chiamato reddoxx - usa solo il primo record mx. (con la stessa priorità) Solo se non c'è risposta dal primo mx, si collegherà al secondo mx e così via. Il nostro mailserver ignora RFC5321


1
Quindi cosa farebbe con i due record A con lo stesso nome dell'OP descritto?
pulcini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.