Há uns tempos estive de fazer algo similar - o objetivo final era basicamente o mesmo, routear o endereço de saída de forma rotativa para um determinado serviço.
A iptables tem um módulo porreiro -
statistic. Do
man:
statistic
This module matches packets based on some statistic condition. It supports two distinct modes settable with the --mode option.
Supported options:
--mode mode
Set the matching mode of the matching rule, supported modes are random and nth.
--probability p
Set the probability from 0 to 1 for a packet to be randomly matched. It works only with the random mode.
--every n
Match one packet every nth packet. It works only with the nth mode (see also the --packet option).
--packet p
Set the initial counter value (0 <= p <= n-1, default 0) for the nth mode.
statistic match options:
--mode mode Match mode (random, nth)
random mode:
--probability p Probability
nth mode:
--every n Match every nth packet
--packet p Initial counter value (0 <= p <= n-1, default 0)
É uma solução "porca", mas funciona. A ideia é, na iptables, adicionares
n regras na chain
POSTROUTING da tabela
NAT que determinam que em cada x pacotes, o pacote é traduzido para outro IP.
Genericamente, configuras uma interface virtual para cada endereço de IP que te foi atribuído (imaginando eth0:1, eth0:2, eth0:3).
Crias as regras na firewall:
iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 5 -j SNAT --to-source xxx.xxx.xxx.1
iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 5 -j SNAT --to-source xxx.xxx.xxx.2
E por ai fora...
Outra alternativa mais "clean" seria lançares uma instância do MTA que utilizas para cada um dos IP's da máquina. E depois criar uma solução numa camada mais "elevada" ao nível de software (Python\PERL\...) - eu diria que esta seria a solução mais eficaz.
Até porque poderias associar a cada um IP\instância do MTA um domínio diferente (o que suponho seja elemento determinante para ficares listados nos servidores que recebem os mails) e poderias até balancear a carga para os MTA's consoante o tamanho da fila de mensagens do MTA e o domínio do email de destino (distribuir o número de envios equitativamente para esse mesmo domínio para reduzir a probabilidade de ficares listado).
A ideia seria alterares o código do software que utilizas para em vez de enviar logo o pedido via SMTP, para o colocar num tipo de base de dados, ou até mesmo utilizar IPCS (uma lista, ou memória partilhada) - dependendo da quantidade de mails e a memória que a máquina tem. A daemon que crias, está "à escuta" dessa base de dados, vai puxando os mails, analisa-os e distribui-os pelos diferentes MTA's.
Se estiver complicado, apita.