Loadbalance de e-mail de saída com vários IPs

1

Eu quero carregar e-mails de saída através de múltiplos IPs, existe alguma ferramenta embutida ou alguma maneira fácil de fazê-lo com postfix, sendmail ou exim? por exemplo, se eu atribuir três IPs ao servidor de e-mail e os e-mails forem enviados por todos os ips, um por um.

    
por Toqeer 10.09.2012 / 19:40

3 respostas

3

Se você quiser enviar e-mails de IPs diferentes de um único servidor de e-mail, você deve pensar em múltiplas instâncias do postfix em um único host. E você pode atribuir um endereço IP diferente para cada instância e sua instância nula enviará mensagens para cada instância. para mais detalhes você pode consultar esses links Este é um exemplo de como atribuir o Ip e todo o link e isso para todas as informações básicas sobre como criamos e como a instância funciona link

    
por 10.09.2012 / 19:55
6

Com o Postfix 2.7 ou posterior, é muito fácil.

Primeiro, crie uma entrada para cada IP no master.cf, desta forma:

out1  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-out1
      -o smtp_helo_name=out1.yourdomain.tld
      -o smtp_bind_address=a.b.c.1
out2  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-out2
      -o smtp_helo_name=out2.yourdomain.tld
      -o smtp_bind_address=a.b.c.2
[...]
outN  unix -       -       n       -       -       smtp
      -o syslog_name=postfix-outN
      -o smtp_helo_name=outN.yourdomain.tld
      -o smtp_bind_address=a.b.c.N

Em seguida, crie um mapa de transporte dependente do remetente em main.cf, desta forma:

sender_dependent_default_transport_maps = mysql:/etc/postfix/config/transport_roundrobin.cf

Comente todos os outros transport_maps em main.cf, assim:

#transport_maps = ...

Agora aqui está o truque, esta tabela de transporte estará usando RAND () para randomizar o uso de todos os transportes de saída [1..n] listados em master.cf.

Em /etc/postfix/config/transport_roundrobin.cf escreva:

user = dbuser
password = dbpass
dbname = dbname
hosts = dbhost
query = SELECT transport FROM transport_roundrobin ORDER BY RAND() LIMIT 1

Por fim, crie uma tabela chamada 'transport_roundrobin' no db 'dbname' em execução no 'dbhost' e insira uma linha para cada transporte:

CREATE TABLE transport_roundrobin (transport varchar(40) not null)
INSERT INTO transport_roundrobin (transport) VALUES ('out1');
INSERT INTO transport_roundrobin (transport) VALUES ('out2');
[...]
INSERT INTO transport_roundrobin (transport) VALUES ('outN');

O postfix selecionará uma linha aleatória da tabela mysql transport_roundrobin e, em seguida, usará o valor obtido para selecionar o transporte correspondente em master.cf. Cada transporte usará um endereço IP diferente, de acordo com o -o smtp_bind_address

    
por 19.11.2015 / 19:26
2

Verifique esta solução se estiver usando o postfix 3, ele usa randmap , assim você não precisará da função RAND() do mysql. link

Você pode fazer o master.cf config sugerido e adicionar o seguinte main.cf (supondo que você tenha 3 entradas em master.cf ):

sender_dependent_default_transport_maps = randmap:{out1,out2,out3}
smtp_connection_cache_on_demand=no
    
por 26.01.2017 / 22:50