なんとも不可解なIPv6 (2)

現在できていること

  • ホストマシンが,SLAACでIPv6アドレス・ルーティング情報を上流(プロバイダーのお仕着せルーター)から自動的に得ること
  • ホストマシンから外界へIPv6でつなぐこと
  • 外界からホストマシンのhttpd,sendmailなど公開しているサービスに,IPv4とIPv6で接続すること
  • ホストマシンからゲストマシンにdhcpdでIPv4のプライベートアドレスとIPv6のグローバルアドレスを与えること
  • ゲストマシンからIPv4のnatで外界につなぐこと
  • ホストマシンとゲストマシンの間のIPv6による双方向接続

できていないこと

  • ゲストマシンから外界にIPv6でつなぐこと

症状としては,例えばゲストマシンからSo-netのお仕着せルーターのIPv6アドレスをtraceroute6すると,ホストのvirbr0まで届くのですが,その先に行きません.ホストがブリッジ機能を果たしてくれません.

たぶん,引っかかっているのは,解ってしまえばなんでもないようなことだと思うのですが,この二日間悩んでいます.

KDDIのお仕着せルーターで,サーバー公開設定している.

Submission port (587)へのIPv6アクセス (Slackware 14.2へその13)

これは,Slackware 14.2のupgradeに直接関する問題ではなくて,IPv6化したあとの5か月越しの懸案でした.わが家のsendmailへ,IPv6ではsubmission port (587)へ接続できないのです.

lsof -i | grep sendmail
sendmail  29512   root    4u  IPv6 1301137      0t0  TCP *:smtp (LISTEN)
sendmail  29512   root    5u  IPv6 1301138      0t0  TCP *:smtps (LISTEN)
sendmail  29512   root    6u  IPv4 1301139      0t0  TCP *:submission (LISTEN)

てな具合です.そこで,ネット検索結果を参考に,sendmail.mcに,

DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea, Family=inet6')dnl

と加えて,なんやかんやしてsendmailをリスタートすると,

opendaemonsocket: daemon MSA: cannot listen: Address already in use

てな,エラーが出続けます.

想像するに,既に,IPv4オンリーでMSAが立ち上がったあとで,IPv6オプションを明示したMSAをもう一度立ち上げようとしている(あるいはその逆の順番)ことは解ります.だから,勝手に立ち上がるMSAを止めたい.

いつもながら,解ってしまえば簡単なことなんです.次のようなFEATURE文を一行書くだけです

FEATURE(`no_default_msa')dnl

無事動くようになりましたとさ.

sendmail  29792   root    4u  IPv6 1212952      0t0  TCP *:smtp (LISTEN)
sendmail  29792   root    5u  IPv6 1212953      0t0  TCP *:smtps (LISTEN)
sendmail  29792   root    6u  IPv6 1212954      0t0  TCP *:submission (LISTEN)

めでたしめでたし.

もちろん,上記のDAEMON_OPTIONS…も必要です.

IPv6で悩むその2 (Slackware 14.2へその11)

設定ファイル類は,32bit時代のものをそのまま使ってしまうことが多いのですが,どうもIPv6関係がうまくいきません.

そもそも我が家の前サーバー(32bit)は,Slackware 14.0あたりだったものに,いろいろ手でソフトを加えたりupdate, upgradeしてきたもので,かなりぐちゃぐちゃになっていました.設定なども,「動けば良いのだ」が基本で,正攻法ではない部分も多くありました.

IPv6に関しても,Nuroからau光に切り替えた頃,あれこれ試行錯誤して,動いたところで使っていました.IPv6に関しては,Nuroのルーターが使いやすかったです.

Slackware 14.0時代は,起動すると自動的にIPv6のアドレスを得るのですが,数分すると,IPv6が無効化されてしまいました.それを避けるのに,システムの起動直後に,いったんifconfigでIPv6を無効にして,再度IPv6のアドレスを設定する必要がありました.

Slackware64 14.2では,そんなことをしなくても,起動後に得たIPv6アドレスが保持されて,問題なくIPv6で接続できます

imapdに関しては,SlackBuildスクリプトにパッチ当てをしてbuildしなおすことでまったく問題ありません.

Apache httpdに関しては,32bit時代に動いていた設定そのままで動かしていたのですが,IPv6でつながったり,つながらなかったり,まったく因果関係が解りませんでした.

ところが,昨日辺りからはまったくつながらなくなりました.So-netのルーターがまた何かやってくれたのかなといろいろ設定を変えてみましたが,改善なしで,まったく出来の悪いルーターだなぁと憤懣やるかたなしでしたが,結果的にはルーターは無実でした^^;

結論的には,httpd.confに

Listen [::]:80
Listen 0.0.0.0:80

と明示することで,安定してIPv6でつながるようになりました

後の注: libvirtdが起動するときにネットの設定をしますが,そのことでkernelがルーターモードと判断して,自動取得したIPv6アドレスを放棄するものと推測されます.
後の注: この時点で,libvirtdがインストールされてなかったので,自動取得のIPv6アドレスが保持されたものと推測されます.
httpd-ssl.confにも,
Listen [::]:443
Listen 0.0.0.0:443

とします.

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を使ってない(使っていれば上記問題に遭遇するはず)ってのは理解不能です.

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

関連記事

IMAPサーバーの方針

ということで,IMAPサーバーのIPv6化について,一応方針が固まりました.まずは,UW IMAPのIPv6対応パッチがないか探してみます.これは,期待薄ですが.それでなければ,IPv6に対応しているとうたわれているCourier IMAPに乗り換えます.

Courier IMAPは,UNIX/Linuxのレガシーなmboxではなく,Maildirという各ユーザーのホームディレクトリー内にあるサブディレクトリーにメールを保存する方式だそうで,これを導入するためには,届いたメールをsendmailから受け取るローカルMDAと,CUIのメールクライアントソフトもMaildir対応のものに更新しなければなりません.

特に,ローカルMDAの切り替えは,sendmail.cfの書き換えを要しますので,失敗したり,切り替え作業時に届いたメールを永久に紛失してしまうことがあり得ますので,慎重に行わなければなりません.

現在プロバイダーの切り替えが完了してしなくて,これから,重要な連絡メールが届く予定もあり,実施すべきではありません.

ということで,逆に時間的に余裕があるので,じっくり取り組みたいと思います.