sendmailのIPv6設定

IPv6化は,完了していませんでした.

実は,IMAPのIPv6化を追求していたときに既に気がついていました.sendmailが,プロバイダーのメールサーバーにメールを送るときは,IPv6のアドレスで送るのですが,受け取るときは,いつもIPv4なのです.たまたまなのかと思っていましたが,LAN内のテストでも,IPv6で接続できないことが解りました.

で,まずは,何も考えずにネット検索です. “sendmail IPv6″で検索すると,sendmail.mcに,

DAEMON_OPTIONS(`Name=IPv4, Family=inet, Port=smtp')dnl
DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Port=smtp')dnl

の2行を追加して,sendmail.cfを作成せよ,という回答が多数を占めます.で,何も考えずにやってみますが,

daemon IPv4: problem creating SMTP socket

というエラーが出てしまいます.

さらに何も考えずに検索で見つかったことを片っ端から試しましたが,上記のエラーが出ます.

そこで,自分の頭で考えてみることにしました.そもそも,STARTTLSに対応させるために,私のsendmail.mcには,

DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

というDAEMON_OPTIONSがあります.これが前述の追記したDAEMON_OPTIONSとコンフリクトするのでしょう.ということで,両者を合体させた,

DAEMON_OPTIONS(`Port=smtp, Name=MTA, Family=inet6')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s, Family=inet6')dnl

というのに書き換えてみて,makeしたら,うまく動くようになりました(つまりDAEMON_OPTIONSはこの2行のみにした).

IPv4の記述(inet)はありませんが,なくても動くだろうという読みは当たりました(つまりデフォルトでサポートされているというか,IPv6に内包されている).

しかし,IPv6を使おうって意識の高い人たちが,STARTTLSを使ってない(使っていれば上記問題に遭遇するはず)ってのは理解不能です.

これも,解ってしまえばこれだけの話なんです.これだけのことで半日つぶしましたとさ.めでたしめでたし^^;

関連記事

Twitterまる6年

フォローもしてないボットから,「今日でTwitterを始めてまる6年ですね」というメッセージが届きました.ボットはblockしました.

6年は早いんだか遅いんだか^^; 小学校の6年間は長かったです.多くの人がそう言いますね.

大学の学部+修士課程の6年間は,長くも短くもなく,実感のある6年間でした.

東日本大震災に見舞われたのは,Twitterを始めてからまる1年経っていたんですね.当時東京に離れて暮らしていた長男は被災時には川崎市内にいて,Twitterでのみ連絡が取れました.その日のうちに東京に戻るのは得策ではないと伝え,川崎の知人宅に泊まらせました.

以後Twitterは欠かせないものになっています.

この6年間はいろいろあって,長いといえば長いでした.

Slackwareのbuildスクリプトのバグ発見

UW IMAPは,make時にIP=6を与えないといけないのです.

普通は,configure時のオプション設定で,そうした設定をして足りるんですが,たまにこういうオレ流なパッケージがあります.

Slackware-currentのalpine.Slackbuildですが,

# Build and install:
# Since we build non-compliant to RFC3501 we have to answer 'y' half-way:
echo y | make EXTRACFLAGS="-fPIC" SSLTYPE=unix || exit 1

# Build and install:
# Since we build non-compliant to RFC3501 we have to answer 'y' half-way:
echo y | make EXTRACFLAGS="-fPIC" SSLTYPE=unix IP=6 || exit 1

にしないと,IPv6サポートになりません.

そう,これだけのこと^^; オレの週末を返せぇ!

Slackware付属のIMAPデーモン(サーバー)が,IPv6で使えない問題の解決策の話です.

UW IMAPのIPv6解決

光明をたどったんですが,芳しくありませんでした.IPv6+SSLのパッチが当たったというRedhat系のrpmのソースをいろいろいじっていましたが,IMAP部分だけではbuildできません

そこで,Slackwareに戻って,Slackware-currentにあるalpine-2.20について,コマンドを受け取るルーチンに,受け取ったコマンドをログに書き出すように細工して確認したところ,IPv6だと,文字化けして受け取っています.たとえば,こんな感じです.

Feb 28 12:43:54 je1sgh imapd[1807]: Slurp input (dump): ^V^C^A^B

ですが,それが解っても,これ以上はどうしようもありません.

一つ腑に落ちないのが,Slackwareで使用している,alpine-2.20というソースの出所が見つからないのです.UW IMAPを引き継いだPanda IMAPとかいうプロジェクトらしいんですが.

もうあきらめようと思って,ダメ元でUW IMAPのサイトにある,alpine.tar.bz2をbuildしてみました.展開すると,alpine-2.00というディレクトリーに展開されます.バージョン番号から,Slackwareのものよりずいぶん前のものと推測され,期待薄です.

ところが,buildしてimapdだけコピーしてみると,なんと,全く問題なくIPv4, IPv6のどちらの接続も受け付けます.

なんだったんでしょう^^;

imap-ssl-ipv6

少なくとも,Slackware-14.1, -currentのIMAPサーバーはぶっ壊れています.

追記

その後の調べで,Alpine 2.20のソースでもOKです.パッチを当てずにオーソドックスにbuildしてできたimapdを/usr/sbinに置けばちゃんと動きます.

しかし,どうしたわけか,alpine.Slackbuildでbuildすると,だめです.alpine.Slackbuildも,imapdにはパッチを当ててないんですが.

また,上記のalpine-2.00もalpine.Slackbuildでbuildすると,IPv6を受け付けなくなります.

できれば,原因を解明して,Slackwareの開発者にフィードバックしたいのですが,全く解りません^^;

解決

Slackwareの問題点解りました.ただし,開発者への連絡法が解りません^^;

また,RPM系はどういうわけか,shared libraryにこだわっていて,関連ライブラリーなどをsharedとしてインストールしなければなりません.はまり始めると,底なしの依存性地獄に陥るでしょう^^;
slurpというサブルーチン.
configureのオプション,makeのオプションは,はalpine.Slackbuildを参照.