UNIXやLinux: 2016年11月アーカイブ

いやあ、まあ、今時?な話なんで、こんなところに書いてもあんまり参考になりませんが、俺の備忘録代わりに。

もうずっと(サーバは乗り換えつつも基本的な環境は変更せず)動いてるシステムがあって、そのメールサーバが、tcpserver(ucspi-tcp)+qmail という形で構築されている。

今回、このメールサーバを某プロバイダのロードバランサー(以降 LB)の下に移動することになった。
MX にロードバランサーの IP を指定して、外部からのメールは LB の 25番ポートに届くんで、それをネットワーク内部にいるメールサーバの 25番に振り分ける・・・っていう運用ね。

これが上手くいかないの(^^;

/etc/tcp.smtp には LB の IP も登録し、実際、/var/log/messages を見ると、LB からメールサーバの 25番ポートには接続に来ている。
実際、メールサーバ側の /usr/local/bin/tcpserver も起動するしね。
しかし、送り元に 220 コード(正常に接続できたという意味のコードNo)は返ってこない。

$ telnet smtp.exsample.co.jp 25
Trying 202.XXX.XXX.116...
Connected to smtp.exsample.co.jp.
Escape character is '^]'.
Connection closed by foreign host.

と切れちゃう。

正常に接続できれば、

$ telnet smtp.exsample.co.jp 25
Trying 202.XXX.XXX.116...
Connected to smtp.exsample.co.jp.
Escape character is '^]'.
220 smtp.exsample.co.jp ESMTP
QUIT
221 smtp.exsample.co.jp
Connection closed by foreign host.

と、こんな感じなんだけど。

なんじゃあ???
送った側の /var/log/maillog 見てみると、

Nov 22 16:02:12 smtp qmail: 1479798132.340284 delivery 1015263: deferral: Connected_to_202.XX.XX.116_but_connection_died._(#4.4.2)/

だって。
接続後数秒してから切れるので、タイムアウトくさい。tcpserver が答えを返さない?あるいは tcpserver が必要としている情報が LB から来ない?(直接インターネットから接続すると上手くいくので、LB 独自の何か・・・なんだろうけど)

結論から言うと、tcpserver が TCPREMOTEINFO を取得しようとするが、LB からは取得できず待ちにはいっちゃって、LB側がセッションを切ってる感じかな?
LB 側のセッション切れた後も、しばらく tcpserver は起動しているからそういうこと?

結局、tcpserver の起動オプションに「接続元ホストから $TCPREMOTEINFO を取得しない」という意味の R をつければよかった。

/usr/local/bin/tcpserver -v -u ~(以下略)
 ↓
/usr/local/bin/tcpserver -vR -u ~(以下略)

という感じ。

これで、問題なく LB 経由で内部のメールサーバにメールが届くようになった。

このアーカイブについて

このページには、2016年11月以降に書かれたブログ記事のうちUNIXやLinuxカテゴリに属しているものが含まれています。

前のアーカイブはUNIXやLinux: 2015年12月です。

次のアーカイブはUNIXやLinux: 2016年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら