バイト先の某会社某事務所で 3° したーい、という色々な意味でダメダメな目的のため、バイト先の某会社某事務所のネットワークの IPv6 化を行うことにした。
某事務所のネットワーク構成は以下の通りである。これは、とても一般的な構成である。もちろん某事務所で利用している FTTH サービスは IPv6 native 接続には対応していない。
+-----------+ |
| Windows |---+
+-----------+ |private segment
+-----------+ |192.168.x.0/24 PPPoE 接続の FTTH
| Windows |---+ +----------+
+-----------+ +---------| Linux |------------ Internet
+-----------+ | eth1+----------+eth0
| Windows |---+ ppp0
+-----------+ |
+-----------+ |
| iMac |---+
+-----------+ |
.
.
.
このネットワークのそれぞれの Windows で 3° を(IPv6 を使って)動かすことを目的とする。
このネットワークのそれぞれの Windows で 3° を動かすため、それぞれが IPv6 reachable にならねばならない。よって、1 つの IPv4 アドレスに対して 1 つの IPv6 アドレスが割り当てられる 6to4 では目的を達成できない。6to4 では 1 台の Windows しか 3° を利用できない。6to4 では /64 の prefix がもらえるので、アドレス数問題は解決可能である。だが、トンネルが帯域的なボトルネックらしい(伝聞)。 また、6to4 では IPv4 アドレスが変化すると IPv6 プレフィックスも変化する。また、IRCnet.JP の IRC サーバである irc6.nara.wide.ad.jp に接続する際に、権限が制限されるという問題がある。ので、やめ(ぉ。
となると、残りの手段としては、Linux からどこかにトンネル接続し、IPv6 を通すという方法しかない。ここで、利用している ISP に IPv6 tunnel 接続できれば一番よいのであるが、現状で利用している ISP は IPv6 tunnel 接続のサービスを提供していない。
世の中にはフリー(無料)の tunnel 接続サービスを提供している団体がある。代表的なものに freenet6 と Feel6がある。freenet6 を利用する場合は、Debian であれば apt-get install freenet6 で完了である。しかし、freenet6 はトンネル先のサーバが海外にあるため、遅延が大きいという欠点がある。そこで、今回は Feel6 を利用することにした。
Feel6 では公式には WindowsXP と MacOS X、YAMAHA RTA55i しかサポートしていない。しかし、トンネルを張るために DTCP という標準化されたプロトコルを用いているため、DTCP クライアントが動作する OS であればトンネルを張れ、Feel6 を利用することが可能である。
まず、Feel6 のサイト へ行き、実験参加の申し込みを行い、ID とパスワードを取得する。
(03/10/28 現在では申し込みは出来ない)
次に、DTCP クライアントである dtcpc を make する。dtcpc は元々 KAME 用に Ruby で書かれており、KAME の配布物に入っているが、KAME 用の dtcpc をそのまま Linux で利用することはできない。
Linux 用の dtcpc は Linux 用の IPv6 開発プロジェクトである USAGI Project の配布物に付属している。そこで、 USAGI Project へ行き、最新の USAGI SNAP を落としてくる。(別に USAGI STABLE でもよいが・・・) このあたり に置いてあるようだ。とりあえず、使用している kernel が 2.4 であれば usagi-linux24-* というものを取ってくればよい。というか、どの tarball を取ってきても dtcpc は入っている。今回は usagi-linux24-s20031027.tar.bz2 を取ってきた。
取ってきたら適当なディレクトリに展開し、make の準備をする。
tar xvfj usagi-linux24-s20031027.tar.bz2 cd usagi make prepare TARGET=linux24dtcpc を使うために USAGI kernel を作成したり、USAGI kernel 起動する必要はないので、今回は最小限の dtcpc のみ make する。また、通常の dtcpc では起動時にトンネル接続のためのパスワードを手入力せねばならない。これは個人的に面倒だと感じたので、パスワードを起動時のオプションとして指定するためのパッチを作成した。そのパッチは ここ に置いてある。必要な人は当てると良いと思う。なお、このパッチでは ps でプロセス一覧を表示しても、パスワードは見えないようになっているが、パスワードの文字数はわかってしまう。
cd usagi/libnetlink ./configure make cd ../dtcp wget http://www.tugumi.net/tips/feel6linux/dtcpc.c.password.diff patch -p0 < dtcpc.c.password.diff ./configure --prefix=/usr/local make sudo make installこれで dtcpc が /usr/local/sbin 以下にインストールされる。
そして、起動用のシェルスクリプトを作成する。内容の例は以下の通り。
#!/bin/sh /usr/local/sbin/dtcpc -u username -P password -t network -n eth1 dtcp.feel6.jpスクリプトに パスワードが書かれている場合は、スクリプトを chmod 700 しておいたほうがよい。
最後に、radvd の設定をする。/etc/radvd.conf の例は以下の通り。
interface eth1
{
AdvSendAdvert on;
prefix 2001:3e0:xxxx::1/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
radvd を動かして、Windows PC で IPv6 アドレスが取得でき、ping6 www.kame.net で返事が返ってくるかどうか確認する。以上で完了である。
dtcpc を終了させると、たまに dtcp ネットワークインタフェイス、IPv6 アドレス、経路が残ったりする。その状態で再度 dtcpc を起動しようとしてもうまく起動しない。そのような場合は以下のように後始末をしてから dtcpc を再起動させる。
ifconfig dtcp down ifconfig sit0 down ifconfig eth1 del 2001:3e0:xxxx::1/64 ip -f inet6 route del 2001:3e0:xxxx::/48