これは Linux のトンネリング機能の、また別の利用例です。 これは IPv6 を初期に導入した人 (あるいは「先駆者」) たちに人気があります。以降で記述されている「実践的」な説明は、 もちろん IPv6 トンネリングを実現する唯一の方法というわけではありません。 しかしこれは、IPv6 機能を持った Cisco ルータと Linux とをトンネルするのによく用いられる方法ですし、 我々の経験によれば、多くの人々が従っているやり方でもあります。 これがあなたにも当てはまるであろうことは、まず間違いないと思いますね ;-)
IPv6 アドレスに関して少々:
IPv6 アドレスは、IPv4 のアドレスに比べると、非常に巨大 (128 ビット対 32 ビット) です。これによって、我々の望むものが提供されます。 すなわち、たくさんの、たくさんの IP アドレス、正確に言えば 340,2822,6692,0938,4634,6337,4607,4317,6821,1465 個のアドレスです。 これ以外にも、IPv6 (あるいは IPng: IP Next Generation) では、 インターネットのバックボーンルータにおける経路テーブルが小さくなり、 機器の設定がより単純になり、IP レベルでのセキュリティが より堅固になると期待されています。
例: 2002:836b:9820:0000:0000:0000:836b:9886
IPv6 をすべて書き下すのは、かなりの重荷です。 よって、生活を楽にするための規則がいくつかあります。
先頭から続く 0 は使いません。IPv4 と同じです。
16 ビットごと (2 バイトごと) にコロンで区切ります。
0 がたくさん連続するところは :: のように書けます。 ただしこれが行えるのはアドレスのうちの一箇所だけで、 また 16 ビットの単位に対してのみ使えます。
アドレス 2002:836b:9820:0000:0000:0000:836b:9886 は、 2002:836b:9820::836b:9886 のようにも書けます。 後者のほうがちょっとは親しみやすいでしょう。
別の例、アドレス 3ffe:0000:0000:0000:0000:0020:34A1:F32C は 3ffe::20:34A1:F32C とも書けます。ずっと短いですね。
IPv6 は現在の IPv4 の後継者となるべく開発されました。 しかし IPv6 はやや新しい技術なので、 まだ世界規模のネイティブな IPv6 ネットワークはありません。 6bone は、この移行を速やかにするために導入されました。
ネイティブな IPv6 ネットワーク同士を接続するのに、 IPv6 プロトコルを IPv4 パケットにカプセルし、 既存の IPv4 インフラを通して、 相手の IPv6 サイトに送るのです。
ここでまさにトンネルを利用することになるわけです。
IPv6 を有効にするには、カーネルのサポートが必要です。 これには多くの良質な文書が存在していますが、 結局のところはいくつかの段階に分割できます。
適切な glibc を備えた、 最近の Linux ディストリビューションを入手します。
最新のカーネルソースを入手します。
/usr/src/linux に移動し、 "make menuconfig" と入力します。
"Networking Options" を選びます。
"The IPv6 protocol", "IPv6: enable EUI-64 token format", "IPv6: disable provider based addresses" を選択します。
別の言い方をすれば、IPv6 をカーネルの「組み込み」にしてください。 続いて通常のように設定を保存し、カーネルのコンパイルに移ってください。
ヒント: その前に、Makefile を編集して EXTRAVERSION = -x ; --> ; EXTRAVERSION = -x-IPv6 のようにしておくといいかもしれません。
カーネルのコンパイルとインストールにあたっては良い文書がたくさんありますが、 この文書はそこまでは書きません。もしこの段階でトラブルが生じたら、 自分で設定した Linux カーネルのコンパイルに関する文書を探して読んでください。 最初は /usr/src/linux/README ファイルから見てみるといいでしょう。
これらがすんだら、新しいカーネルで再起動してください。 ここで '/sbin/ifconfig -a' とすると、'sit0' という新しいデバイスができていることに気づくでしょう。 SIT は Simple Internet Transition を意味します。 自分を誉めてあげましょう。あなたは次世代の IP へと向かう、 大きな一歩をいま踏み出したのです。
では次の一歩に向かいましょう。自分のホスト (あるいは LAN 全体) を IPv6 機能を持った別のネットワークに接続します。 この相手は、この目的のために特別に設定された "6bone" となるでしょう。
あなたの IPv6 ネットワークが 3ffe:604:6:8::/64 で、 6bone (あるいは友人) に接続することを意図しているとします。 ここで /64 というサブネット表記は、通常の IP アドレスの場合とちょうど同じような意味を持ちます。
あなたの持っている IPv4 アドレスは 145.100.24.181 で、 6bone ルータの IPv4 アドレスは 145.100.1.5 だとしましょう。
# ip tunnel add sixbone mode sit remote 145.100.1.5 [local 145.100.24.181 ttl 255] # ip link set sixbone up # ip addr add 3FFE:604:6:7::2/126 dev sixbone # ip route add 3ffe::0/16 dev sixbone |
説明しましょう。最初の行では sixbone という名前の トンネルデバイスを生成しています。 これには mode sit (IPv6 を IPv4 にトンネリングする) を与え、 行き先 (remote) と発信元 (local) を指定しています。 TTL は最大の 255 にしています。
次に、このデバイスをアクティブにしています (up)。 その後、我々のネットワークのアドレスを追加し、 3ffe::/15 (現在のところ 6bone の全体) への経路をこのトンネルにしています。 もしこれを実行したマシンが、あなたの IPv6 ゲートウェイなら、 次の内容を実行するといいでしょう。
# echo 1 >/proc/sys/net/ipv6/conf/all/forwarding # /usr/local/sbin/radvd |
二番目の行の radvd は (zebra のような) ルータ広報デーモンで、 IPv6 の自動設定機能をサポートしています。 必要なら、お好みの検索エンジンで調べてみてください。 では次のようにしてチェックを行いましょう。
# /sbin/ip -f inet6 addr |
radvd が IPv6 ゲートウェイで動作しており、 IPv6 機能を持った Linux が LAN 上のマシンで起動していれば、 IPv6 自動設定の恩恵を楽しめるはずです。
# /sbin/ip -f inet6 addr 1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue inet6 ::1/128 scope host 3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100 inet6 3ffe:604:6:8:5054:4cff:fe01:e3d6/64 scope global dynamic valid_lft forever preferred_lft 604646sec inet6 fe80::5054:4cff:fe01:e3d6/10 scope link |
では引き続き IPv6 アドレスに対して bind の設定を行いましょう。 A タイプは IPv6 では AAAA となります。 in-addr.arpa は ip.int となります。 この話題に関しては、たくさんの情報が得られるでしょう。
IPv6 が使えるアプリケーションの数は増え続けています。 secure shell, telnet, inetd, Mozilla ブラウザ, webserver Apache, ほかにもたくさんあります。しかしそれは、 この「経路」に関する文書の範疇を超えています :-)
Cisco 側での設定は、次のような感じになります。
! interface Tunnel1 description IPv6 tunnel no ip address no ip directed-broadcast ipv6 address 3FFE:604:6:7::1/126 tunnel source Serial0 tunnel destination 145.100.24.181 tunnel mode ipv6ip ! ipv6 route 3FFE:604:6:8::/64 Tunnel1 |