月別アーカイブ: 2009年6月

iij4u の IPv6 接続(3)

昨日は、対向側のリンクローカルアドレスに対する ping6 さえ届いていなかったのだが、これは pf でブロックしていたことが原因だった。

とりあえず pass inet6 all として、ping6 を打ってみると反応アリ。ここまでは O.k.。

だが、グローバルアドレスは相変わらず付いていない。

ネットの事例を参考に、dhcp6c を実行してみたがうまくいかない。

/usr/pkg/etc/dhcp6c.conf

interface ppp0 {
send ia-pd 0;
};
id-assoc pd {
prefix-interface wm0 {
sla-id 1;
sla-len 0;
};
};

/var/log/message

Jun 11 17:19:06 hanon dhcp6c[14352]: client6_recvadvert: advertise contains NoPrefixAvail status

iij4u の IPv6 接続(2)

/etc/ppp/peer/iij4u に

+ipv6
noccp

を追加。

Jun 10 12:39:17 hanon pppd[12532]: pppd 2.4.4 started by XXX, uid 0
Jun 10 12:39:17 hanon pppd[12532]: Using interface ppp0
Jun 10 12:39:17 hanon pppd[12532]: Connect: ppp0 <--> /dev/ttyp1
Jun 10 12:39:18 hanon pppd[12532]: CHAP authentication succeeded
Jun 10 12:39:19 hanon pppd[12532]: local  LL address fe80::69f0:75d6:2e77:ad64
Jun 10 12:39:19 hanon pppd[12532]: remote LL address fe80::021c:0eff:fe67:701b

ここまで来た。

$ ifconfig ppp0
ppp0: flags=8051 mtu 1500
inet6 fe80::69f0:75d6:2e77:ad64%ppp0 -> fe80::21c:eff:fe67:701b prefixlen 128 scopeid 0x5

でもグローバルアドレスがついてないし、経路の設定もされてないみたい。

/etc/ppp/ipv6-up に何か書かないといけないのかな。

iij4u の IPv6 接続(1)

先日、iij4u から「IPv6仮想アクセス」提供開始のお知らせが来ていた。

Windows Vista のみとなっているが、NetBSD でやってみる。

インストールしたもの

net/pptp (pptp-1.7.0nb2)
net/mppe-lkm (mppe-lkm-0.0.4nb2)

設定ファイル

/etc/ppp/options.pptp
/etc/ppp/chap-secrets
/etc/ppp/pears/iij4u

実行

$ sudo pppd debug call iij4u

/var/log/message のログ

Jun  9 17:45:04 hanon pppd[23205]: pppd 2.4.4 started by XXX, uid 0
Jun  9 17:45:04 hanon pppd[23205]: Using interface ppp0
Jun  9 17:45:04 hanon pppd[23205]: Connect: ppp0 <--> /dev/ttyp2
Jun  9 17:45:05 hanon pppd[23205]: CHAP authentication succeeded
Jun  9 17:45:05 hanon pppd[23205]: Unsupported protocol 'IPv6 Control Protocol' (0x8057) received
Jun  9 17:45:08 hanon pppd[23205]: MPPE required but peer negotiation failed
Jun  9 17:45:08 hanon pppd[23205]: Connection terminated.
Jun  9 17:45:08 hanon pppd[23205]: Exit.

Unsupported protocol ‘IPv6 Control Protocol’ (0x8057) received か。

imapfilter

cron で imapfilter とか動かしていると、SSL 証明書の確認メッセージが出っ放しになってメールキューがあふれたりするの続き。

ソースの該当箇所を調べてみた。

int
write_cert(X509 *cert)
{
(略)
do {
printf("(R)eject, accept (t)emporarily or "
"accept (p)ermanently? ");
fgets(buf, sizeof(buf), stdin);
c = tolower((int)(*buf));
} while (c != 'r' && c != 't' && c != 'p');

なんという手抜き。最新の 2.0.10 でも変更なし。

spool があふれた

メールが届かないと思ったら、/var/spool があふれていた。

/var/spool/clientmqueue に巨大なファイルができていて、中身を見ると NUL の羅列。

# strings (問題のファイル) | head -c 256

として見ると、

(R)eject, accept (t)emporarily or accept (p)ermanently?

という文字列が繰り返し出てきている。

sendmail を停止してからファイルを削除して /var/spool の空き容量が元に戻ったことを確認してから、sendmail を再起動する。
TLS 経由で送るように設定されたメールクライアントからメールを送ってみると、
SSL の証明書が期限切れとのダイアログが表示された。

証明書を作り直して、TLS でメールが送信できることを確認し、しばらく様子を見ることにする。

ここで、以前にも同様のトラブルがあったことを思い出した。これは cron で動かしている imapfilter が出しているメッセージだったように思う。

imapfilter を実行すると、はたして例のメッセージが出力された。

$ imapfilter
Server certificate subject: (略)
Server certificate issuer: (略)
Server key fingerprint: (略)
(R)eject, accept (t)emporarily or accept (p)ermanently? 

p を押して証明書を受け入れ、.imapfilter/certificates の中身を確認すると、imapd のほうの証明書だった。sendmail は関係なし。

ためしに標準入力を閉じて imapfilter を実行してみる

$ imapfilter <&-

fingerprint の表示の後、反応がなかったが、しばらくして入力プロンプトの羅列が大量に出続けた。メールキューのファイルと同様である。これが cron のメッセージとして sendmail に送られたのだろう。

原因は imapfilter であったことが確定したが、このままでは imapd の証明書が更新されるたびに同じ障害が発生することになる。どうしたものか。まあ、証明書を更新したら、imapfilter を実行するのを忘れないようにすれば良いのだけれども。

ちなみに imapfilter のバージョンは 2.0.6

imap-uw + SSL

NetBSD で pkgsrc の imap-uw を SSL 付きで使用するときに、鍵とか証明書の置き場とかをよく忘れるのでメモ。確認した環境は NetBSD/i386 5.0 release , pkgsrc-2008Q4。

  1. imap-uw の SSL で使用するファイルのファイル名は pkgsrc でバイナリに埋め込まれる。ファイル名はインストール時のメッセージとして表示され、pkg_info -D imap-uw で後からでも確認できる。
    $ pkg_info -D imap-uw
    (略)
    The imapd daemon looks for the following files to use SSL:
    /etc/openssl/certs/imapd.pem (certificate)
    /etc/openssl/private/imapd.pem (private key)
    (略)
  2. 上記のように、秘密鍵は証明書とファイル名が同じで、置き場所だけが異なる。証明書と秘密鍵を結合したものを /etc/openssl/certs/imapd.pem に置くだけでも動作する。ブログなどでは、後者のように秘密鍵と証明書を結合したファイルを使用する例が見られるが、本来は別ファイルとして運用するものだと思う。(/etc/openssl/certs のパーミッションは 755、/etc/openssl/private のパーミッションは 700 になっている)

    秘密鍵と証明書を別ファイルで運用する場合に、ファイル名が同じだと紛らわしいが、imap-uw のソース埋め込みで変更できない模様。

NetBSD 5.0

2009年4月29日にNetBSD 5.0 がリリースされた。

まずは、ソースツリーのアップデートを行う。

cvs update -PdAC -rnetbsd-5-0-RELEASE

5.0 から GENERIC カーネルが MP になった。

4.0.1 のときには、 MP のカーネルで LKM の PF を使う場合には
-D MULTIPLOCESSOR を指定して /usr/lkm/pf.o を作り直さないといけなく、
面倒なので PF はカーネルオプションの方で指定していた。

5.0 ではその必要がなく、GENERIC カーネルのままで MP も PF もいけるということだ。

とはいえ、PF 経由のリモートから作業している環境で、
ユーザーランドが 4.x のまま 5.0 のカーネルでリブートすると、
はまるのは必至なので、
まずは PF を組み込んだカーネルを作成する。

カーネルコンフィグ

include "arch/i386/conf/GENERIC"
pseudo-device   pf                      # PF packet filter
pseudo-device   pflog                   # PF log if

カーネルの作成~リブートまで

$ cd <srcdir>
$ ./build.sh -O <workdir> tools kernel=<kernel_conf_name>
$ cd <workdir>/sys/arch/i386/compile/<kernel_conf_name>
$ sudo make install
<reboot>
$ cd <srcdir>
$ ./build.sh -O <workdir> -U distribution
$ sudo ./build.sh -O <workdir> -U install=/
$ EDITOR=vi sudo etcupdate -al -s <srcdir>
$ sudo postinstall -s <srcdir> -d / fix obsolete
<reboot>