Postfix: インターネットにアクセスできる SMTP リレーにフォールバックする

Postfix: インターネットにアクセスできる SMTP リレーにフォールバックする

次のようなシナリオがあります:

  1. Postfix サーバー M (メールを保存)
  2. Postfix サーバー A (インターネット接続 IA を使用してメールを中継)
  3. Postfix サーバー B (インターネット接続 IB を使用してメールを中継)
  4. 内部 DNS サーバー (ローカルの名前解決を行う)

サーバー M、A、B は同じネットワーク LAN 内に存在するため、IA と IB のインターネット接続が切断されても、M & A と M & B 間の通信が必ずしも切断されるわけではありません。そのため、Postfix の smtp_fallback_relay オプションをこの目的に使用できません。

ここで、サーバー M は、リレー時にインターネット接続を持つサーバーにのみ送信する必要があります。

これを最も効果的に行うにはどうすればよいでしょうか?

私たちが試したこと

私の同僚と私は 2 つの選択肢を共有しました (網羅的ではありません):

  1. メールストア(M)の認識でリレーメールを「LAN」からオフラインにして、フォールバックリレーにフォールバックするスクリプトを作成します。
  2. DNS サーバー (D) (または M の etc ホスト、どちらでもかまいませんが、M にとって必須の DNS) にスクリプトを作成し、mail-relay.ourdomain.com を変更して、TTL が十分に小さい (たとえば 5 秒) インターネット アクセスを持つサーバー メール リレー A または B を指すようにします。

これらのオプションは両方ともほとんどの場合機能しますが、必要なのは、なぜ機能しないのか(どちらかを使用すると危険があるか)ということです。

答え1

どちらのアプローチでも問題はレースコンディションつまり、インターネットは機能しており、A または B は配信が成功したことを相手に通知しましたが、A または B がそれをインターネットに転送しようとしたときに接続が切断されました。

上記のシナリオは、電子メールが Postfix 内でどのように流れるかによって可能になりました。

Email from client ---> Received ---> Queued -> Sent

サーバー A の Postfix は、電子メールがキューに入れられたときに、電子メールが A によって受け入れられたことを M に確認送信します。そのため、Postfix がインターネットに電子メールを送信しようとすると、接続が切断され、接続が回復するまで電子メールがキューに入れられる可能性があります。

注意: この動作は一般的なMTAでは予想されたものです。SMTPは保存して転送するプロトコル。

関連情報