6.1. IPv6 トンネリング

これは 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 をすべて書き下すのは、かなりの重荷です。 よって、生活を楽にするための規則がいくつかあります。

アドレス 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 を有効にするには、カーネルのサポートが必要です。 これには多くの良質な文書が存在していますが、 結局のところはいくつかの段階に分割できます。

準備が整ったら、IPv6 機能を持つカーネルをコンパイルします。

ヒント: モジュールにはしないほうがいいでしょう。 うまくいかないことがよくあります。

別の言い方をすれば、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
もし思い通りになる Cisco がなければ、インターネットにたくさんある IPv6 トンネルブローカーのどれかを試してみましょう。 きっと Cisco の設定を行い、あなた用のトンネルを掘ってくれるでしょう。 たいていの場合は、使いやすい web インターフェースがあるはずです。 お好みの検索エンジンで、"ipv6 tunnel broker" をキーワードにして 探してみてください。