梅本肇 / ume@mahoroba.org
この原稿は4.5-RC上で書いています。ひょっとしたら
皆さんがこの記事を読まれる頃には4.5-RELEASEがリリー
スされているかもしれません。IPv6的には4.4-RELEASE
からは特に変化はありません。期待している方がおられ
たらごめんなさい。
これまではIPv6のネットワークにつなぐことを主にし
てきました。今回はアプリケーション寄りの部分を見て
いくことにしましょう。
多くのデーモンはinetdから起動されます。起動され るデーモンがIPアドレスを意識していない作りであれば、 特にIPv6対応をする必要なく、/etc/inetd.confでIPv6 を受けるように設定してあげるだけで、そのまま使用す ることができます。
リスト1 FTPをIPv4とIPv6で受け付ける例 ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -l
[IPv6アドレス]/プレフィックス長となります。
[IPv6アドレス%スコープ]/プレフィックス長となります。リスト2に/etc/hosts.allowの例を示しま す。この例では、wi0のリンクローカルアドレスは許可 し、それ以外のリンクローカルアドレスは拒否します。 また、3ffe:505:2::/48からのアクセスは、IDENTクエリ をおこなった上でで許可しています。
リスト2 /etc/hosts.allowの例 ALL : [fe80::%wi0]/16 : allow ALL : [fe80::]/16 : deny ALL : ALL@[3ffe:505:2::]/48 : allow
DAEMON_OPTIONS(`Name=MTA-v4, Family=inet')と指定してsendmail.cfを作り直します。これで、IPv6、 IPv4共にlistenするようになります。
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')だけを指定しても、IPv4もmapped addressで入ってくる ことになります。
DAEMON_OPTIONS(`Name=MTA-v4, Family=inet')も指定しておきましょう。
図1 QpopperでIPv6のみ受け付ける例 /usr/local/libexec/qpopper '[::]:110'
Cyrus IMAPdは認証にSASLライブラリを使用します*8)。
実は、SASLライブラリにもIPv4依存部分があります。
SASLは、IPアドレスも認証に使用できるように設計され
ているためです。IPv6対応にするパッチはあり*9)、ports
では適用しています。
しかし、実際に使用しているのはKerberosIV認証だけ
です。KerberosIVはそもそもIPv6に対応していません。
つまり、IPv4をmapped addressで受け付けるアプリケー
ションでKerberosIV認証を使用したい場合にのみ必要に
なります。現実的には、ほとんどこのパッチは適用する
必要はないでしょう。
ちなみに、最近リリースされたSASLバージョン2*10)
では正式にIPv6対応しています。ただし、バージョン1
とAPIの互換性はありません。
つい先日、SASLバージョン2に対応した2.1.1がリリー
スされました*11)。SASLライブラリが正式にIPv6対応し
ましたのでIMAPdの方もと期待するところですが、残念
ながらまだマージされていません。IPv6化パッチは用意
してあり*12)、将来的にマージする方向で検討が進めら
れています。なお、2.1.1のportは現在準備中です。
また、Mewバージョン1などで使用しているIMはPerlで
書かれており、Perl側でのIPv6対応を必要とします。
getaddrinfo()などのIPv6で使用するAPIをPerlから利用
できるようにするSocket6.pmというモジュール*14)をイ
ンストールし、IMにパッチ*15)を当てることでIPv6対応
になります。Socket6.pmはports/packagesになっていま
す (ports/net/p5-Socket6)。
ちなみに、Perlはバージョン6で正式にIPv6対応作業
が進められています。
GTK+を使用したメーラであるSylpheedはオリジナルで
IPv6対応しています。GUIを使用したメーラをお探しな
ら良いかもしれません。portsではports/mail/sylpheed
にあります。
GUIということでは、Mozillaという選択肢もあります。
CUIを使用したメーラではMuttがIPv6をサポートして
いるようです。
IPv6対応したhttpdを起動すれば、デフォルトでIPv6 でlistenします。IPv4 mapped IPv6 addressが有効になっ ていると、この状態でもIPv4での接続も受け付けます。 しかし、IPv4はmapped IPv6 addressで入ってくること になるため、REMOTE_ADDRには::ffff:192.168.0.1のよ うな感じで設定されます。CGIなどでクライアントのIP アドレスを見ているような場合、これでは困るかもしれ ません。httpd.confにリスト3のように指定し、IPv6と IPv4それぞれにlistenするようにしておいた方が良いで しょう。また、この方法だと、IPv4 mapped IPv6 addressを無効にしていてもIPv6とIPv4といずれの接続 も受け付けることができます。
では、REMOTE_ADDRについてちょっと触れましたので、 クライアントからの接続がIPv6かIPv4かをSSIを使って 判定してみましょう。
リスト3 Listen :: 80 Listen 0.0.0.0 80
リスト4 IPv6かIPv4かの判定 (fromv6p) #!/usr/bin/perl if ($ARGV[0] =~ /^(::ffff:)?\d+\.\d+\.\d+\.\d+$/o) { print "IPv4"; } elsif ($ARGV[0] =~ /^[0-9a-f:]+$/o) { print "IPv6"; } else { print "unknown"; }
リスト5 fromv6pの呼び出し Your are using <!--#exec cmd="./fromv6p $REMOTE_ADDR" -->, from <!--#echo var="REMOTE_ADDR" -->
リスト6 出力例 IPv6の場合: Your are using IPv6, from 3ffe:505:2:0:202:2dff:fe0a:6bee IPv4 の場合: Your are using IPv4, from 202.227.26.44 IPv4 の場合 (mapped address): Your are using IPv4, from ::ffff:202.227.26.44
NFSをamdと組み合わせて使用されている方も多いと思 います。amdは残念ながらIPv6対応していませんので、 amdでマウントしようとすると必ずIPv4を使用します。 am-utils*19)の最新スナップショットを見てもIPv6を サポートしている気配がありませんので、当面サポート されることはないと思われます。
表1 NFSバージョンとプロトコルの組み合わせ NFSv2 NFSv3 UDP × ○ TCP ○ ○
定番とも言えるアプリケーションの多くは既にIPv6対
応しており、日常生活に困らない程度にはなってきてい
ると思います。しかし、まだまだ最初から対応している
アプリケーションは少ないのが実情です。
最初から対応していないと、新しいバージョンが出た
際に、そのバージョンに対応したIPv6パッチが出るまで
しばらく待たなければいけないことになります。
セキュリティホールが見つかって、その修正をおこなっ
たバージョンが出たとします。新しいバージョンに対し
て、以前のバージョンへのIPv6パッチがそのまま適用で
きなかったりすると、結構深刻な問題になりえます。
そうでなくても、意欲的に開発がおこなわれ頻繁に新
しいバージョンがリリースされるアプリケーションにつ
いては、パッチでの追従は大変です。たとえば、最近、
wgetはIPv6対応パッチが出るまでの遅延を嫌って、IPv6
対応版とオリジナル版にportが分離されました。
ports/ftp/wgetがオリジナル版で、
ports/ftp/wget+ipv6 がIPv6対応版です。
さて、自宅のADSL接続に使用しているFreeBSDを 4.5-PRERELEASEに上げて以降、ADSLのリンクが切れた際 に再接続に失敗するという現象に悩まされていました。 どうも、PPPoE接続が切れている時に、本来gif0に流れ るはずのIPv6パケットがtun0に洩れるという現象が起こ り、pppが消化不良を起こしてしまうようです。とりあ えず、ip6fwでtun0に対してIPv6パケットが流れないよ うにフィルタしておくと、回避できます。4.5-RELEASE までに対策ができると良いのですが…
| tcp46とtcpを指定することもできますが、意味がないでしょう。 | |
| net.inet6.ip6.v6onlyの値が0。FreeBSDではデフォルトです。 /etc/rc.confのipv6_ipv4mapping変数で変更できます。 | |
| デフォルトで-wWは指定されています。 また、FreeBSDでは特に必要がないので、これまでtcpdは提供されていませんでしたが、 inetd以外を使用する場合のために欲しいという要望があり、 5-CURRENTでは提供されるようになりそうです。 | |
| sendmail 8.12.XではIPv6:3ffe:505:9999::という感じで 「IPv6:」を頭に付けて記述するように変更されています。 バージョンアップの際には注意しましょう。 ちなみに、FreeBSD付属のsendmailは本稿執筆時点で8.11.6です。 | |
| http://www.imasy.or.jp/~ume/ipv6/qpopper4.0.3-ipv6-20010504.diff.gz | |
| http://www.imasy.or.jp/~ume/ipv6/cyrus-imapd-2.0.16-ipv6-20020118.diff.gz | |
| ports/mail/cyrusはバージョン1の最終版である1.6.24です。 お間違いのないように。 | |
| ports/security/cyrus-sasl。 portsからインストールする場合、 もちろん依存関係にしたがって自動的にインストールされます。 | |
| http://www.imasy.or.jp/~ume/ipv6/cyrus-sasl-1.5.27-ipv6-20020106.diff.gz | |
| ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.0.tar.gz | |
| ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.1.1.tar.gz | |
| http://www.imasy.or.jp/~ume/ipv6/cyrus-imapd-2.1.1-ipv6-20020118.diff.gz | |
| パッチは、ports/editors/emacs20/files/にあり、 patch-ccの一部およびpatch-cd、patch-cgが該当します。 | |
| ftp://ftp.cpan.org/pub/CPAN/modules/by-module/Socket6/Socket6-0.11.tar.gz | |
| http://www.imasy.or.jp/~ume/ipv6/im-140-Socket6-20011107.diff.gz | |
| バージョン1にはパッチがありますが、さすがに古すぎますよね。:-) | |
|
| |
| 従来のRPCではDARPAポート番号とのマップにはportmapを使用していましたが、 TI-RPCではrpcbindを使用します。 | |
| http://www.cs.columbia.edu/‾ezk/am-utils/ |