Назад | Перейти на главную страницу

Постфикс: Использование зависимых от отправителя транспортных карт для резервирования и балансировки нагрузки

У меня есть сервер Postfix, и я пытаюсь использовать два разных IP-адреса в двух разных подключениях / ISP для отправки электронной почты.

Адрес 89.xxx.xxx.2 системный шлюз по умолчанию в eth0 И 188.xxx.xxx.2 это адрес в eth1 со специальной таблицей маршрутизации и настраиваемой ip правила (ip rule add from 188.xxx.xxx.2 table SECONDARY среди прочего), чтобы сделать возможной маршрутизацию. Оба могут подключаться ко всему Интернету, ping, wget и postfix могут использовать оба соединения для исходящего трафика.

В master.cf Я определил следующее:

out-one     unix  -       -       n       -       -       smtp
  -o smtp_bind_address=89.xxx.xxx.2 
  -o inet_interfaces=89.xxx.xxx.2
  -o myhostname=outone.example.org
  -o smtp_helo_name=outone.example.org
  -o syslog_name=smtp-out-one
out-two     unix  -       -       n       -       -       smtp
  -o smtp_bind_address=188.xxx.xxx.2
  -o inet_interfaces=188.xxx.xxx.2
  -o myhostname=outtwo.example.org
  -o smtp_helo_name=outtwo.example.org
  -o syslog_name=smtp-out-two

Сейчас в main.cf Я добавил:

sender_dependent_default_transport_maps = randmap:{out-one,out-two}
smtp_connection_cache_on_demand=no

Когда отправлено электронное письмо Postfix случайным образом выберет один из двух транспортов и отправит электронное письмо. Он отлично работает для балансировки нагрузки - Электронные письма отправляются с использованием обоих адресов с правильными именами хостов и всем остальным.

Теперь скажем, я снимаю eth1. Postfix по-прежнему сможет отправлять «половину» писем через eth0/89.xxx.xxx.2 а вот другая «половина» будет стоять в очереди:

postfix/smtp: fatal: parameter inet_interfaces: no local interface found for 188.xxx.xxx.2

Есть ли способ для Postfix повторить попытку с другой транспортной картой, если ранее выбранная не работает??

Если out-two не удается, снова вызовите randmap> в конечном итоге отправьте электронное письмо, используя out-one. Похоже, если я перезапущу сервер, он это сделает, но не сам.

Почему он всегда повторяет попытки с тем же транспортом, если не перезапускается? Можно ли изменить это поведение? Есть ли другой способ выполнить такое резервирование / балансировку нагрузки?