IPv6対応アプリケーションを使おう

(BSD Magazine No.08)

梅本肇 / ume@mahoroba.org

 ここまでの記事で、取り敢えずIPv6が使えるようになったと思う。ここでは、IPv6に対応したアプリケーションを見ていこう。

Web

 HTTPサーバーとしてもっとも有名なApacheであるが、KAMEからIPv6対応パッチが出ている。しかし、1.XではApacheの内部APIがIPv4依存になっており、IPv6パッチを当てたApacheでは動作しないモジュールがある。
 mod_sslについては筆者がKAMEパッチをベースにして作り直したものをhttp://www.imasy.or.jp/~ume/ipv6/test/に置いてある。一応私の使い方だと動いているように見えるがきちんと検証したわけではない。
 サードパーティのモジュールを利用しているようなサイトでは、当面、IPv4ではIPv6化していないApacheを起動しておき、IPv6版を別途IPv6のみで起動するようにしたほうが、IPv4での運用に影響が出ず良いかもしれない。
 現在バージョン2の開発が進んでおり、本稿執筆時点で2.0.16-beta*01)が公開されている。FreeBSDのportsにもなっているが、まだ品質は安定しているとは言い難い。最初からIPv6対応しているので、将来に期待したい。
 IPv6版ApacheをFreeBSDで動かした場合、デフォルトではIPv6でlistenしIPv4はmapped addressで受け付ける。この場合、REMOTE_ADDRにはIPv4アドレスは::ffff:202.227.26.36のようにmapped address表記で設定されるので既存CGIがとち狂うかもしれない。httpd.confで
Listen :: 80
Listen 0.0.0.0 80
と指定し、IPv6とIPv4共にlistenするようにしたほうが良いだろう。
 バーチャルホストの運用を行う場合、NameVirtualHostおよびVirtualHostを指定するが、これらに書くIPv6アドレスは「[」と「]」で囲む必要がある。これは、IPv6アドレスの表記中で使用される「:」と、Apacheがアドレスとポート番号の区切子として使用している「:」とがコンフリクトするためである(リスト1)。
リスト1 バーチャルホストの設定例
NameVirtualHost [3ffe:505:2:0:240:96ff:fe48:4ea8]:80

<VirtualHost [3ffe:505:2:0:240:96ff:fe48:4ea8]:80>
ServerName www.example.com
DocumentRoot /usr/local/www/data
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
</VirtualHost>

<VirtualHost [3ffe:505:2:0:240:96ff:fe48:4ea8]:80>
ServerName hogehoge.example.com
DocumentRoot /usr/local/www/hogehoge/data
ScriptAlias /cgi-bin/ "/usr/local/www/hogehoge/cgi-bin/"
</VirtualHost>
 ちなみに、URLにIPv6アドレスを直接指定するときもIPv6アドレスは「[」と「]」で囲む。考え方は同じである。ただし、この記法をサポートしていないブラウザもあるので注意願いたい。IPv6対応しているアプリケーションの多くがこの記法に準じているので、覚えておくと良いだろう。
 では、ブラウザのほうを見ていこう。
 IPv6対応しているWebブラウザには、有名どころではMozilla、w3m、lynxがある。これらはいずれもオリジナルでIPv6をサポートしているので、特別なパッチを当てる必要はない。
 ただし、lynxは開発版である2.8.4からのサポートである。FreeBSDのports/packagesの場合、lynx-currentを選択しよう。
 Mozilla(図1)もオリジナルからサポートしているが、FreeBSDではデフォルトではIPv6を有効にしていない。ports/packagesではmozilla+ipv6で有効にするようにしてあるので、こちらを利用願いたい。ちなみにNetBSDではデフォルトでIPv6が有効になるようになっている。
図1 Mozilla
Mozilla
 IPv6対応のアプリケーションの多くは、DNSを検索して、AAAAレコードが返ってきたらIPv6での接続を試みる。そして、接続できなければ、AレコードがあればIPv4での接続を試みるように作られている。このため、AAAAレコードがあるにもかかわらずIPv4のみでしか提供されていないサービスがあったとしても、うまくIPv4で接続できる。
 しかし、残念なことにMozillaはこのような作りになっていない。そのため、AAAAレコードがあるにもかかわらずIPv6でHTTPがサービスされていないサイトには接続できないということを覚えておこう。
 逆に、Webサーバーを作る場合は、AAAAレコードを登録するならIPv6でもHTTPをサービスするようにしたほうが良いかもしれない。
 なお、不幸なことにFreeBSD 4.2-RELEASEではC++関係のバグのためちゃんと動くバイナリを作成できない。FreeBSDでMozillaを使いたい場合は、ぜひとも4.3-RELEASEに上げよう*02)
 また、Netscape Navigator等のIPv6対応していないブラウザを使いたい場合は、wwwoffle*03)をパーソナルなプロキシとして噛ましてあげれば良い。wwwoffleはKAMEがIPv6化パッチを提供している。FreeBSDのports/packagesで入れるとIPv6対応になっている。

メール

 sendmail 8.9.XではWIDEパッチを当てることでIPv6対応していたが、8.10.X以降では標準でIPv6をサポートしている。ただし、-DNETINET6を付けてコンパイルする必要がある。FreeBSD添付のsendmailはIPv6を有効にしてコンパイルされており、IPv6が使用できる環境であれば、何も考えなくてもIPv6でメールを出すことができる。しかし、sendmail.cfでIPv4のみlistenするようになっているので、そのままではIPv6でメールを受けることはできない。.mcファイルでリスト2のように指定しsendmail.cfを作ると、どちらもlistenするようになる。ちなみに、デフォルトで有効になっていないのは、IPv4のみのkernelだとsendmailが動かなくなるためである。
リスト2
DAEMON_OPTIONS(`Name=MTA-v4, Family=inet')
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
 なお、FreeBSDでのデフォルトなどmapped addressが有効な環境だとリスト3だけを指定してもIPv4も吸い込んでしまう。この場合IPv4はmapped addressで入ってくることになるので、リスト4も必ず指定しておこう。
リスト3
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
リスト4
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
 また、accessやmailertable等のデータベースにIPv6アドレスをそのまま記述することができる。ただし、8.12.0.Betaでは
IPv6:IPv6アドレス
と「IPv6:」を頭に付けて記述するように変更されているので、バージョンアップの際には注意が必要である。
 次に、POPサーバーであるが、Qpopperをはじめ、多くがすでにIPv6対応になっている。
 QpopperにはIPv6化パッチがある*04)。FreeBSDのports/packagesはこのパッチを当ててIPv6対応している。ports/packagesではQpopperの3.X以降はqpopperという名称でインストールされる。ちなみに最新は4.0.2である。
 /etc/inetd.confにtcp6のエントリを追加することでIPv6でも接続を受け付けるようになる(リスト5)。また、Qpopperはconfigure時に--enable-standaloneオプションを指定するとinetdを使用せず自らデーモンとして動作するバイナリを作成できる。この場合、引数にバインドするアドレスを指定できる。たとえばIPv6のみでlistenするようにするには、
/usr/local/libexec/qpopper '[::]:110'
となる。
リスト5 /etc/inetd.confでのQpopperの設定
pop3	stream	tcp	nowait	root	/usr/local/libexec/qpopper	qpopper -s
pop3	stream	tcp6	nowait	root	/usr/local/libexec/qpopper	qpopper -s
 IMAP4サーバーとしては、バージョン2以降のCyrus IMAPD用にパッチがある*05)
 Cyrus IMAPDはバージョン1ではinetdより起動されていたが、バージョン2ではmasterという専用のデーモンを使用するようになっておりcyrus.conf*06)で設定する。
 FreeBSDのports/packagesでcyrus-imapdをインストールすると、デフォルトでIPv6、IPv4両方でlistenするようになっている。
 各サービス毎にbindしたいアドレスをポート番号との組で指定できるので、IPv6のみでlistenしたい場合、
listen="[::]:imap"
のように指定すると良いだろう(リスト6)。
リスト6 IPv6のみでlistenする場合のcyrus.confの例
# standard standalone server implementation

START {
  # do not delete these entries!
  mboxlist	cmd="ctl_mboxlist -r"
  deliver	cmd="ctl_deliver -r"

  # this is only necessary if using idled for IMAP IDLE
#  idled		cmd="idled"
}

# UNIX sockets start with a slash and are put into /var/imap/socket
SERVICES {
  # add or remove based on preferences
  imap		cmd="imapd" listen="[::]:imap" prefork=0
  imaps		cmd="imapd -s" listen="[::]:imaps" prefork=0
  pop3		cmd="pop3d" listen="[::]:pop3" prefork=0
  pop3s		cmd="pop3d -s" listen="[::]:pop3s" prefork=0
  sieve		cmd="timsieved" listen="[::]:sieve" prefork=0

  # at least one LMTP is required for delivery
#  lmtp		cmd="lmtpd" listen="lmtp" prefork=0
  lmtpunix	cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0
}

EVENTS {
  # this is required
  checkpoint	cmd="ctl_mboxlist -c" period=30

  # this is only necessary if using duplicate delivery suppression
  delprune	cmd="ctl_deliver -E 3" period=1440
}
 次にメーラのほうを見てみよう。
 GTK+ベースのメーラとして最近ちょくちょく耳にするようになったsylpheedはIPv6対応である(図2)。現状ではPOP3のみでIMAP4は使えないようであるがTODOリストに入っているのでそのうちIMAP4も利用できるようになるだろう。
図2 Sylpheed
Sylpheed
 正確にはニュースリーダであるが、mnewsもIPv6対応メーラとして利用できる。
 Emacs系のメーラであるWanderlustやMewの開発版である1.95はEmacsをIPv6対応にすることで、IPv6で使用できるようになる。
 ports/packagesのEmacs 20.XはローカルパッチでIPv6対応になっている。
 XEmacsは21.2.Xで正式にIPv6対応している。FreeBSDのports/packagesはまだ21.1.Xなので、ports/packagesを利用する際は、宇羅さんが作成されているパッチ*07)を当てると良いだろう。
 なお、IMを使用するMew 1.94をIPv6で使いたい場合は、Perl5をIPv6対応にするモジュールであるSocket6.pm*08)をインストールし、Socket6.pmに同包されているパッチをIMに当てると良い。ports/packagesを使用する場合、net/p5-Socket6である。

FTP

 *BSDではデフォルトでIPv6、IPv4いずれでも接続できるよう/etc/inetd.confで設定されているので、特にIPv6だからといって意識することはない(リスト7)。
リスト7 /etc/inetd.confでのftpdの設定
ftp	stream	tcp	nowait	root	/usr/libexec/ftpd	ftpd -l
ftp	stream	tcp6	nowait	root	/usr/libexec/ftpd	ftpd -l
 非常にメジャーであるwu-ftpdにはKAMEがIPv6化パッチを提供している*09)
 クライアントのほうを見てみよう。標準添付されているものはもちろんのこと、多くのクライアントがIPv6対応している。
 NcFTPにはKAMEがIPv6化パッチを提供している*10)。FreeBSDのports/packagesではこのパッチを適用しIPv6 対応となっている。
 匿名FTPサイトのミラーに良く利用されているftpmirrorであるが、ports/packagesでインストールすると、Socket6.pmを利用してIPv6対応になる。ちなみにportで当てているパッチは、Socket6.pmの配布アーカイブに同包されている。

SSH

 最近の*BSDはOpenSSHが標準で含まれており、デフォルトの状態でIPv6、IPv4いずれでも接続できる。
 明示的にlistenするアドレスを指定したい場合は、/etc/ssh/sshd_configでListenAddressを指定する。

CVS

 KAMEがCVSに対するIPv6化パッチを提供している。このパッチを適用することで、pserverがIPv6対応になる。つまり、匿名CVSのサービスをIPv6でも行えるようになる。
 NetBSDのpkgsrcにあるCVSはこのパッチを適用しIPv6対応となっている。FreeBSDではCVSはcontrib扱いなので、残念ながら現状ではIPv6対応していない。

おわりに

 今回ここで紹介した以外にも多くのアプリケーションがIPv6化されており、日常生活でIPv6化されておらず困るケースはかなり少なくなってきている。また、本稿を書いている時点でも、多くのアプリケーションのIPv6対応が進行していることだろう。
 ports/packagesではIPv6対応しているアプリケーションはipv6カテゴリにリストされているので参考にして、いろいろなアプリケーションを試してみていただきたい。


*01) http://httpd.apache.org/dist/httpd/httpd-2_0_16-beta.tar.gz
*02) MozillaでIPv6が利用できるようになったのは4.2-RELEASEの前ぐらいからなので、4.3-RELEASEになって初めてリリースでまともに利用できるようになったとも言う。:-)
*03) http://www.gedanken.demon.co.uk/wwwoffle/
*04) http://www.imasy.or.jp/~ume/ipv6/qpopper4.0.1-ipv6-20010504.diff.gz(4.0.2に対してもそのまま適用できる)
*05) http://www.imasy.or.jp/~ume/ipv6/cyrus-imapd-2.0.13-ipv6-20010506.diff.gz
*06) FreeBSDのports/packageでインストールすると/usr/local/etc/にある。オリジナルは/etc。
*07) http://www.hiru.aoba.yokohama.jp/~ura/ipv6/xemacs-21.1.9-ipv6.20000303.diff.gz
*08) ftp://ftp.cpan.org/CPAN/modules/by-module/Socket6/Socket6-0.09.tar.gz
*09) ftp://ftp.kame.net/pub/kame/misc/wu-ftpd-261-v6-20001010.diff.gz
*10) ftp://ftp.kame.net/pub/kame/misc/ncftp-303-v6-20010421.diff.gz


All Rights Reserved, Copyright (C) 2001 Hajimu UMEMOTO
Last Modified Aug 23, 2001
ume@mahoroba.org