FreeBSDではじめるIPv6 第6回
(FreeBSD PRESS No.11)
梅本肇 / ume@mahoroba.org
先号は特別号でしたので、本連載はお休みさせていた
だきました。前回の原稿を書いていた時は4.5-RCでした
が、気づくともう4.6-PRERELEASEです。月日が経つのが
早いのか、それともFreeBSDのリリースペースが早いの
か…
なんにしても、4.5-RELEASEには、IPv6、特にトンネ
ルで使用する際に致命的な問題を抱えていましたので、
4.6-RELEASEが待ち遠しい今日このごろです。
今回は、日本においても身近になってきた6to4関連の
話題と、前回以降大きく進展があったWebまわりについ
て少し紹介したいと思います。
1. 6to4
1.1 6to4とは
6to4*1)はIPv6をIPv4にカプセル化して流すトンネル
技術のひとつで、2002::/16から始まる6to4のアドレス
空間について、IPv4の経路表を見て経路制御をおこなう
のが特徴です。gifではトンネルごとに両端で設定が必
要ですが、6to4では必要ありません。
6to4は、IPv4アドレスから一意に導出されるIPv6ア
ドレスを使用します。先頭16ビットが2002で、次の32
ビットがIPv4アドレスの16進数表現となります。
例えば、IPv4アドレスが202.227.26.34の場合、
2002:cae3:1a22::/48が6to4アドレスとなります。(図1)
図1 6to4アドレス
2002:cae3:1a22:0000:0000:0000:0000:0001
^^^^ ^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^
| | | |
| | | +-- インタフェース識別子
| | +--------------- SLA識別子
| +---------------------- IPv4アドレスの16進数表現
+------------------------------ 6to4プレフィックス
|
6to4アドレス空間内のノードに対しては、直接やりと
りをおこないます。6to4のアドレス空間と6to4以外の
IPv6アドレス空間との通信は6to4リレールータと呼ばれ
るルータを経由することによって実現されます。
6to4アドレス空間とIPv6アドレス空間との通信におい
ては、行きと帰りとで別の経路を通ることが一般的です。
行きに通る6to4リレールータはIPv6デフォルト経路で指
定したものとなりますが、帰りは、IPv6的に近い6to4リ
レールータを通ることになるからです(図2)。
これまで、6to4リレールータはMicrosoft社とCicso社
が提供するものをはじめいくつかありましたが、日本か
ら利用するには遠く、あまり実用的ではありませんでし
た。しかし、最近、KDDI研究所により6to4.jpの実験運
用が開始され*2)、日本においてもかなり快適に利用で
きる環境になってきました。
図2 6to4空間とIPv6空間の通信
|
1.2 6to4の設定
FreeBSDでももちろん6to4が利用できます。6to4トン
ネルにはstf仮想ネットワークイ・インタフェースを使
用します。/etc/rc.confで6to4に関係する設定項目は以
下の4つです。
- stf_interface_ipv4addr=""
- 自ホストのIPv4アドレスを指定します。この項
目を指定すると、6to4インタフェースが有効に
なります。
- stf_interface_ipv4plen="0"
- 接続相手先のIPv4アドレスの範囲を制限したい
場合に、6to4で使用するIPv4アドレスのプレ
フィックス長を指定します。有効な値は0から
31で、0を指定すると全てのIPv4アドレス空間
を対象とします。通常は、デフォルトの0から
変更する必要はないでしょう。
- stf_interface_ipv6_ifid="0:0:0:1"
- 6to4で使用するIPv6アドレスのホスト部を指定
します。AUTOを指定した場合、MACアドレスか
ら生成されるEUIアドレスを使用します。
- stf_interface_ipv6_slaid="0000"
- SLA識別子を指定します。
1.3 単一ノードを6to4で接続
たとえば、単一ノードを6to4で接続する場合の
/etc/rc.confは図3のようになります。この場合、図4の
ように6to4アドレスが算出されます。
また、IPv6デフォルト経路を6to4.jpが提供する6to4
ルータに向けています*3)。
図3 単一ノードを接続する場合の/etc/rc.confの例
ipv6_enable="YES"
stf_interface_ipv4addr="202.227.26.34"
ipv6_defaultrouter="2002:caff:2d05::1"
|
図4 /etc/rc.confの設定項目と生成される6to4アドレス
+--------------------------- stf_interface_ipv4plen="0"
|
v
2002:cae3:1a22:0000:0000:0000:0000:0001
^^^^ ^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^
| | | |
| | | +-- stf_interface_ipv6_ifid="0:0:0:1"
| | +--------------- stf_interface_ipv6_slaid="0000"
| +---------------------- stf_interface_ipv4addr="202.227.26.34"
+------------------------------ 6to4プレフィックス
|
1.4 ネットワークを6to4で接続
6to4アドレスは、IPv4アドレス1個に対して/48の空間
が使用できます。6to4 でネットワークを接続する場合、
図5のような感じになるでしょう*4)。
この時の/etc/rc.confは図6のようになります。6to4
接続をおこなう部分(先頭から3行)は単一ノード接続の
場合と変わりません。後の5行はローカルのネットワー
ク側の設定です。
図5 ネットワーク接続
|
図6 6to4接続ルータの/etc/rc.confの例
ipv6_enable="YES"
stf_interface_ipv4addr="202.227.26.34"
ipv6_defaultrouter="2002:caff:2d05::1"
ipv6_network_interfaces="fxp0"
ipv6_prefix_fxp0="2002:cae3:1a22:1"
ipv6_gateway_enable="YES"
rtadvd_enable="YES"
rtadvd_interfaces="fxp0"
|
ローカルのネットワーク側にはstf0に付けたものと異
なったプレフィックスを割り当てます。
stf0の設定についてはrc.confに項目が用意されてい
ますが、それ以外は特に用意されていません。ローカル
のネットワーク側に割り当てるプレフィックスを自分で
算出してipv6_prefix_*に書く必要があります。
先頭16ビットは2002で固定です。次の32ビットはIPv4
アドレスの16進表記です。ここまでは、stf0に割り当て
たプレフィックスと変わりません。SLA識別子つまり次
の16ビットを、stf_interface_ipv6_slaidと異なる値に
します。stf_interface_ipv6_slaidをデフォルトのまま
使用している場合、0以外にします。図6の例では1を使
用しています。
残りの設定で、ルーターとして機能するようフォワー
ディングを有効にし、ローカルのネットワーク側にRAを
流すようにしています。
1.5 IPv4アドレスが固定でない環境での6to4
6to4アドレスはIPv4アドレスから一意的に決定されま
す。そのため、IPv4アドレスが固定ではない環境では、
IPv6アドレスも変化する可能性があります。
単一ノードを接続するだけであれば、IPv4アドレスが
固定ではない環境であっても、IPv4でダイアルアップし
ているのとそんなに状況は変わらず、快適に利用できま
す。しかし、6to4でネットワークを接続しようとすると、
IPv4アドレスが変化するたびに、ルータ・リナンバリン
グが発生することになります。
ルータ・リナンバリングには、DNSとの同期をどうす
るかなど課題が多く、現状では、6to4をネットワークで
使用するのは現実的ではないでしょう。
また、rtadvdは、どういうRAを送出するかについて、全て任せるか全て設定するかのどち
らかという考え方で作られています。ダイナミックに割
り当てたプレフィックスに対しては、有効期限をデフォ
ルトの値から変更することができません。このデフォル
ト値は非常に長く*5)、プレフィックスが変化した場合、
新しいアドレスはすぐに割り当てられますが、古いアド
レスがいつまでも残ってしまい、このような環境で使うには具合が良くありません。
IPv4アドレスが固定ではない環境で6to4をネットワー
クでどうしても使いたい場合は、IPv4アドレスが変化し
た際に/etc/rtadvd.confを書き出し、rtadvdを再起動す
るというスクリプトを用意することになるでしょう。
加えて、一旦deprecated状態になったアドレスについ
て、同じプレフィックスを公告するRAを受け取っても
deprecatedが消えないという不具合がありました。この
問題は4.6-RELEASEで直っています。
1.6 ダイアルアップで6to4
ダイアルアップやIPv4アドレスが固定でないADSLでの
常時接続環境では、PPP接続時にIPv4アドレスが確定す
るため、6to4の設定を/etc/rc.confに書いておくことが
できません。
そこで、PPPリンク確立時に6to4の設定をおこなうよ
うにするとよいでしょう。
リスト1は6to4の設定をおこなうスクリプトの例です。
実際に6to4トンネルを設定する部分は/etc/rc.network6
のnetwork6_stf_setupをを呼び出しているだけです。
PPPで割り当てられたIPv4アドレスと、IPv6デフォルト
経路を引数に与えます。
リスト1 /etc/ppp/6to4.sh
#!/bin/sh
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
source_rc_confs
elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
stf_interface_ipv4addr="$1"
ipv6_defaultrouter="$2"
case ${ipv6_enable} in
[Yy][Ee][Ss])
if [ -r /etc/rc.network6 ]; then
. /etc/rc.network6
network6_stf_setup
route add -inet6 default ${ipv6_defaultrouter}
fi
;;
esac
|
PPPリンク確立時に6to4.shを呼び出すよう
/etc/ppp/ppp.linkupに記述します。tun0に割り当てら
れたIPv4アドレスはMYADDRで得られますので、第1引数
に指定しています。また、第2引数で、IPv6デフォルト
経路を6to4.jpに向けています(リスト2)。
リスト2 /etc/ppp/ppp.linkupの設定例
MYADDR:
! sh -c "/etc/ppp/6to4.sh MYADDR 2002:caff:2d05::1"
|
PPPリンクが切れた時に6to4の設定を削除します。リ
スト3の例では、stfカーネル・モジュール自体をアンロー
ドしています。ちょっと野蛮ではありますが、6to4アド
レスを求めたりするのをサボることができます。ただし、
kernelにstfを組み込んでいる場合には使えない手です
*6)。
なお、kernelにインタフェースが組み込まれていない
場合、必要になった時点でifconfigが自動的にロードし
ますので、明示的にif_stfをkldloadする必要はありま
せん。
リスト3 /etc/ppp/ppp.linkdownの設定例
MYADDR:
! sh -c "kldunload if_stf"
|
6to4.shでは/etc/rc.confでipv6_enable="YES"が指定
されている場合のみ6to4の設定をおこなうようにしてあ
りますので、/etc/rc.confに指定しておきます。
また、インタフェース識別子やSLA識別子をデフォル
トから変更したい場合は、/etc/rc.confに
stf_interface_ipv6_ifidやstf_interface_ipv6_slaid
を指定しておきます(図7)。
図7 /etc/rc.confの設定例
ipv6_enable="YES"
|
2 Webまわりの近況
2.1 Mozilla
前回は、Mozillaのports/packagesにはIPv4のみの版
とIPv6対応版があるという話をしましたが、その後、大
きく進展がありました。
IPv6サポートを有効にした場合にあった
- IPv6を有効にしたkernel上でないと動作ない
- IPv4のみのサイトへのアクセスにIPv4 mapped
IPv6 addressが必要
- IPv6でアクセスできなかった場合にIPv4にフォー
ルバックしない
という問題が解決され、めでたく、ports/www/mozilla
ひとつに統合されました。4.6-RELEASEには
ports/www/mozilla+ipv6はありませんので、迷わず
ports/www/mozillaをインストールしましょう。
2.2 Apache2
いよいよ、IPv6を正式にサポートしているApacheバー
ジョン2が正式版になりました。本稿執筆時点で2.0.36
となっており、ports-currentのports/www/apache2も
2.0.36になりました。
とはいうものの、対応するサードパーティ・モジュー
ルはまだまだ少ないです。また、Apache2対応をうたっ
ていたとしても、必ずしもIPv6に対応しているとは言え
ないでしょう。
筆者はまだ試していませんが、mod_php4はApache2に
対応しています。ソースを軽く眺めた感じでは、IPv6も
考慮しており、FTPなどはIPv6をしゃべることができる
ようです。しかし、sockets拡張APIの部分はまだIPv6対
応していないように見えます。
mod_php4はportsからインストールする際に、
WITH_APACHE2=yesを指定すると、Apache2用に作られま
す。
3. おわりに
日本は6bone-JPがあり、これまでも比較的容易にIPv6
接続をおこなえる環境ではありました。しかし、まだま
だ敷居が高いと敬遠される方が多かったようです。また、
Freenet6は敷居が低いものの、日本からは遠く快適に利
用できるものではありませんでした。6to4リレールータ
の運用が始まったことで、気軽にIPv6を始められるよう
になったと思います。まだIPv6 接続されていない方は、
一度試されてみてはいかがでしょうか?
All Rights Reserved, Copyright (C) 2002 Hajimu UMEMOTO
Last Modified Nov 14, 2002
ume@mahoroba.org