registros MX, melhor configuração para balanceamento de carga e failover

9

Pegue o domínio exemplo.com, ele tem dois servidores de correio mail1.example.com e mail2.example.com, ambos já configurados, normalmente eu usaria a seguinte configuração:

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

Um colega de trabalho sugeriu a seguinte configuração:

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

Um novo nome de host com dois registros A que aponta para os dois servidores, como ele afirma que alguns clientes não fazem round-robin com a mesma prioridade MX, ele deve ser uma configuração legítima, mas ainda suporta corretamente o failover, por exemplo 172.16.10.1 falhar, é 172.16.10.2 sendo julgado para entrega? Ou seria ainda melhor uma configuração como:

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

Obrigado.

    
por Krdan 06.04.2016 / 15:24

5 respostas

11

As RFCs que especificam como um MTA deve lidar com registros MX são RFC974 , < href="https://www.rfc-editor.org/rfc/pdfrfc/rfc1123.txt.pdf"> RFC1123 seção 5.3.4 , RFC2821 seção 5 e RFC5321 seção 5 .

O status RFC974 agora é HISTÓRICO . De acordo com ele, espera-se que os MTAs consultem a lista de registros MX associados a um domínio e sejam "encorajados" a experimentar todos (ou um número fixo de) servidores SMTP, em ordem crescente de preferência. Se houver vários registros MX com um valor de preferência igual, os MTAs devem tentar entregar a mensagem a todos os servidores SMTP até que um seja bem-sucedido. A ordem das tentativas é uma escolha do MTA, ou seja, o RFC não determina se os servidores SMTP devem ser contatados aleatoriamente ou na ordem dada pelo servidor DNS. Além disso, o RFC não rege como lidar com um registro MX que faça referência a vários registros 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. (...)

O status RFC1123 é PADRÃO DA INTERNET . Seção 5.3.4 visa "refinar" os procedimentos RFC974 sobre como lidar com registros MX. Agora, é necessário que o MTA tente todos os servidores SMTP em ordem crescente de preferência até que um seja bem-sucedido. No entanto, ainda permite um limite configurável no número de tentativas. Se houver vários registros MX com um valor de preferência igual, o RFC recomenda (e não requer) MTAs para selecionar um registro aleatoriamente. No entanto, se um registro MX fizer referência a vários registros A (endereços IPv4), o RFC exigirá que os MTAs contatem todos esses endereços até que um seja bem-sucedido, na ordem fornecida pelo servidor 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.

O status de RFC2821 é PROPOSTO PADRÃO . Este RFC se torna obsoleto com o RFC974 e, no escopo do gerenciamento de registros MX, difere ligeiramente do RFC1123. Enquanto o primeiro REQUER uma seleção aleatória de um servidor SMTP entre vários registros MX com um valor de preferência igual, o último apenas RECOMENDA.

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

O status RFC5321 é o PROJETO DE PADRÃO . Esse RFC obsoleta o RFC2821 e, no contexto da resolução do DNS, ele basicamente reescreve o mesmo procedimento de pesquisa do servidor e apresenta uma nova seção que discute um pouco o tratamento de registros MX que fazem referência a endereços 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. (...)

Acho que um agente de transferência de e-mail moderno segue pelo menos os procedimentos RFC2821 ou RFC5321, portanto, todas as três configurações de DNS fornecem recursos de failover. No entanto, somente a primeira configuração pode fornecer um melhor balanceamento de carga. Se você tentar a segunda ou a terceira configuração, terá que certificar-se de que seu servidor DNS entrega respostas em uma ordem aleatória. Além disso, os registros DNS podem ser armazenados em cache, seja por próprios MTA ou por servidores DNS recursivos, para que a aleatoriedade não possa ser garantida. Acho que mail1.example.com receberá a maioria das mensagens.

Outro motivo que direciona minha opinião contra a segunda e terceira configurações é a referência de vários nomes para um endereço IP. Servidores de correio na Internet normalmente rejeitam mensagens de hosts cujo mapeamento IP address => PTR => hostname => A => IP address não corresponde (como a restrição do Postfix reject_unknown_client_hostname ), então você terá que tomar um cuidado especial ao configurar registros PTR.

Clientes que não testam registros MX em uma ordem aleatória já estão violando os padrões RFC2821 e RFC5321. Portanto, acho que não há garantia de que esses clientes também tentem o endereço IP secundário automaticamente. Por causa disso, eu prefiro a configuração de DNS mais simples:

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

EDITAR: Adicionadas referências ao RFC1123.

    
por 06.04.2016 / 19:09
2

A segunda configuração não suporta failover. Digamos que mail.example.com tenha sido resolvido para 172.16.10.1 e falhe. Então 172.16.10.2 não será tentado, pois há apenas um registro MX.

A terceira configuração gera duas vezes o tráfego DNS como o primeiro. Além do tráfego do fom, ambos têm o mesmo comportamento: Como você disse, alguns clientes não farão o round-robin com a mesma prioridade MX.

Para ter balanceamento de carga e failover eu tentaria:

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 registros MX ------ > Algum tipo de balanceamento de carga
  • 20, 30 registros MX - > Failover
por 06.04.2016 / 18:05
1

Na minha opinião, sua primeira configuração está correta. As razões são:

  1. Você tem dois registros MX com a mesma prioridade, o que é bom para o balanceamento de carga. RFC5321 afirma que o servidor SMTP precisa distribuir aleatoriamente a carga para todos os servidores com a mesma prioridade

  2. Como você mencionou, o registro de round robin A não fará o failover corretamente. Ele é chamado de registro multihomed-A, o remetente enviará mensagens para a primeira entrada A na resposta do DNS e o servidor DNS decidirá a ordem de retorno da lista. Então, se você precisa de distribuição de carga ou failover, você precisa de um servidor DNS para fazê-lo (monitor de carregamento e carregamento). Novamente, com base no RFC, todos os remetentes precisam testar todos os servidores com a mesma prioridade nos registros MX primeiro, para que você possa fazer o failover com dois registros MX.

ref: link página 69

    
por 06.04.2016 / 17:18
0

Para o 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

O MTA primeiro tentará mail1 e, em seguida, mail2.

A combinação de balanceamento de carga e failover não é realmente possível. Você poderia fazer:

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

O MTA primeiro tentará o mail1, que metade do tempo aponta para .1 e o outro para .2. O problema aqui é que o mail2 pode apontar para o mesmo endereço que mail1 no cenário em que mail1 não está acessível.

Você também pode tentar

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

para diminuir o risco de que a conexão inicial não funcione. Ainda assim, o risco não será zero. Mas os MTAs tentarão novamente a conexão mais tarde.

Para um balanceamento de carga e failover efetivo e missionário, obtenha ou monte um balanceador de carga (cluster).

    
por 06.04.2016 / 17:50
-1

depende do servidor de correio que você tem. Nós temos um servidor de e-mail chamado reddoxx - ele usa apenas o primeiro registro mx. (com a mesma prioridade) Somente se não houver resposta do primeiro mx, ele se conectará ao segundo mx e assim por diante. Nosso servidor de e-mail simplesmente ignora o RFC5321

    
por 03.05.2017 / 16:19