>[оверквотинг удален]
>> натиться в соответствующие IP-адреса выданные провайдерами. При этом конфигурация МТА
>> будет статичной, но нужно будет как-то сообщать MTA что какой-то из
>> каналов лёг и не нужно использовать соответствующий source_IP для отправки.
> К сожалению, проблема не внутри, а снаружи локальной сети. MTA и так
> уже имеет информацию о текущем внешнем роутинге (файлик на FTP в
> локалке содержит эту информацию и обновляется роутером при смене маршрута).
> Но необходимости переписывать HELO/EHLO в соответствии с (новым)именем хоста почтовика
> (имена ведь разные по разным внешним адресам/маршрутам) это не отменяет. Возможно,
> я не вполне понял, что имеется в виду под статичной конфигурацией
> MTA. Попытаться сделать HELO/EHLO динамически (скриптом)?Возможно я не вполне корректно применил слово "статичный". Конечно, так как в вашей схеме при смене маршрута меняется IP-адрес с которого почта уходит во внешний мир, то полностью исключть обмен информацией между роутером и МТА невозможно. Однако можно свести к минимуму число меняющихся параметров МТА при смене маршрута, вплоть до изменения одного флага в SQL-табличке. Слегка погуглив я обнаружил, что в postfix пожно сделать то о чём я писал в своих "философских" рассуждениях:
master.cf
Create different Interfaces. One for each domain:
rotate1 unix - - n - - smtp
-o syslog_name=postfix-rotate1
-o smtp_helo_name=domainone.com.br
-o smtp_bind_address=173.111.111.1
rotate2 unix - - n - - smtp
-o syslog_name=postfix-rotate2
-o smtp_helo_name=domaintwo.com.br
-o smtp_bind_address=173.111.111.2
main.cf
Disable all other transport maps, i.e.: # transport_maps = xxxxx
Enable dependent transport map (require postfix 2.7.x or later)
sender_dependent_default_transport_maps = mysql:/etc/postfix/config/transport_random_dependent.cf
transport_random_dependent.cf
Example:
user = postfix
password = mypassword
dbname = postfixdb
hosts = localhost
query = SELECT transport FROM transport_random WHERE domain = '%d' AND status='1' ORDER BY RAND() LIMIT 1
Table transport_random
Column "transport" = rotate1, rotate2, rotate3, rotate4 (etc)
Column "domain" = sender domains (replaced by %d)
Column "status" = boolean (0 or 1) if is enabled the transport.
The instruction "RAND() LIMIT 1" is necessary only if you want to use random transports for the same domain.
In example, you want to send from mydomain.com from 3 different IPs.
Then, you create 3 transports (rotate1, rotate2 and rotate3) with 3 different IPs, then set at mysql lines:
transport = rotate1 | domain = mydomain.com
transport = rotate2 | domain = mydomain.com
transport = rotate3 | domain = mydomain.com
Then, when postfix will randomize three different transports (rotate one to three) to send this emails.
Моя мысль была следующей: МТА для отправки почты всегда использует все имеющиеся каналы, перебирая их случайным образом. В таком случае нет вопроса о переключении канала (смене настроек МТА) - есть вопрос использовать или не использовать данный канал. Если какой-то из каналов лёг, роутер должен сообщить МТА об этом, чтобы тот перестал его использовать. Так вот, если мой английский меня не подводит, кусок конфига приведённый выше как раз и намекает на возможность реализации данной схемы работы. Чтобы исключить транспорт (канал) из списка используемых нужно просто полю status в таблице transport_random присвоить значение 0. В идеале роутер по ssh с авторизацией по ключам заходит на хост с СУБД, которую использует МТА и дёргает SQL-скрипт. Достаточно элегантно? Понятно, что с AS не сравнится, но при данной структуре сети выглядит весьма не плохо :)
Всё выше сказанное - на правах "философских рассуждений" так как эксперементального стенда нет. Просто задача интересная. :)