6to4トンネルとは

6to4トンネルとは、IPv4ネットワークを通じてIPv6通信を実現するためのトンネル技術です。6to4トンネルのインタフェースはポイントツーマルチポイントなので、1つの6to4トンネルインタフェースで複数のIPv6ネットワーク間との通信ができます。

図 6to4トンネルの概要
図 6to4トンネルの概要

6to4トンネルのアドレス

スタティックトンネルと異なり、6to4トンネルでは明示的にtunnel destinationを設定する必要はありません。6to4トンネルにルーティングするIPv6パケットの宛先IPv6アドレスに埋め込まれているIPv4アドレスを転送用IPv4ヘッダの宛先IPv4アドレスにします。

このように転送用IPv4ヘッダの宛先IPアドレスを決定するために、6to4トンネルでは次のIPv6アドレスを利用します。

  • 6to4プレフィクス
    2002:<IPv4アドレス>::/48

「2002」で始まるプレフィクスは6to4トンネル用に予約されています。2002に続く32ビットにIPv4アドレスを埋め込みます。そして、16ビットのサブネットIDでサブネットを識別します。6to4トンネルを利用する場合、IPv6アドレッシングは次のように考えます。

  • IPv4とIPv6の境界ルータのIPv4アドレスを埋め込んだ6to4プレフィクス(2002:<IPv4アドレス>::/48)を決定する
  • IPv6ネットワーク内のサブネットには、16ビットのサブネットIDで識別した/64ビットのプレフィクス(2002:<IPv4アドレス>:<Subnet-ID>::/64)でアドレッシングする
図 6to4トンネルのアドレッシング
図 6to4トンネルのアドレッシング

6to4トンネルのルーティング

スタティックトンネルでも解説していますが、トンネルインタフェースはただ単に設定するだけではダメです。トンネル経由でパケットをルーティングできるように、きちんとルーティングの設定を考えなくてはいけません。

6to4トンネル上でRIPngやOSPFv3のルーティングプロトコルを利用することはできません。6to4トンネル経由で他のIPv6ネットワークへルーティングするためには、スタティックルートの設定を行います。6to4トンネルの接続先のIPv6ネットワークのプレフィクスに対するルートは、次のようにロンゲストマッチを考慮して2002::/16に対するスタティックルートを設定します。

6to4トンネルのルーティング設定

(config)#ipv6 route 2002::/16 tunnel <num>

<num> : 6to4トンネルインタフェースのインタフェース番号

境界ルータ自身の配下のIPv6ネットワークプレフィクスは、ルーティングプロトコルを利用して詳細なルート情報を学習します。それら以外のプレフィクス、すなわち、リモート側の拠点のネットワークプレフィクスについては、6to4トンネルへルーティングすればよいです。この様子を図に示すと、次のようになります。

図 6to4トンネルでのルーティングの設定
図 6to4トンネルでのルーティングの設定

また、このようなルーティングテーブルのルート情報に基づいて、6to4トンネルにルーティングするときの様子を表すと次の図のようになります。

図 6to4トンネル経由でのパケットの転送
図 6to4トンネル経由でのパケットの転送

  • IPv4とIPv6の境界ルータに他の拠点あてのIPv6パケットが到達します。
  • ルーティングテーブルからルート情報を検索します。他の拠点の6to4プレフィクスに対してはロンゲストマッチより、2002::/16向けのスタティックルートが利用されます。そして、IPv6パケットは6to4トンネルインタフェースへルーティングされます。
  • 6to4トンネルインタフェースから出力するときに、転送用のIPv4ヘッダを付加します。このとき転送用のIPv4ヘッダは宛先IPv6アドレスに埋め込まれているアドレスを使います。実際に出力されるインタフェースは、上の図のFa0/0からです。IPv4ネットワークを通じてR2までルーティングされていきます。

他の拠点あてのパケットを境界ルータまでルーティングするためには、拠点内のIPv6ルータに2002::/16のルート情報を学習させる必要があります。そのために、境界ルータでスタティックルートをRIPngやOSPFv3に再配送します。

6to4トンネルの設定

6to4トンネルインタフェースを通じて、IPv6パケットを転送するための設定の流れは次のようになります。

  1. 6to4トンネルインタフェースの作成
  2. トンネルインタフェースにIPv6アドレスを割り当て
  3. ルーティングの設定

1. 6to4トンネルインタフェースの作成

6to4トンネルの設定は、トンネルインタフェースを作成して次のようにトンネルモードを6to4に変更します。

6to4トンネルインタフェースの作成

(config)#interface tunnel <num>
(config-if)#tunnel mode ipv6ip 6to4
(config-if)#tunnel source {<src-interface-name>|<src-ip-address>}

<num> : インタフェース番号
<src-interface-name> : 転送用IPv4ヘッダの送信元IPv4アドレスとして利用するインタフェース名
<src-ipv4-address> : 転送用IPv4ヘッダの送信元IPv4アドレス

tunnel destinationの設定がなくても、6to4トンネルのトンネルインタフェースはup/upになります。

トンネルインタフェースにIPv6アドレスを割り当て

トンネルインタフェースにIPv6パケットを送受信するためには、やはりIPv6アドレスの設定が必要です。6to4トンネルインタフェースにも6to4プレフィクスのIPv6アドレスを設定するか、unnumberedの設定を行います。

IPv6アドレスの割り当て

(config)#interface tunnel <num>
(config-if)#ipv6 address <ipv6-address>/<prefix-length>

<num> : インタフェース番号
<ipv6-address> : 設定するIPv6アドレス
<prefix-length> : プレフィクス長

IPv6アドレスの割り当て(unnumbered)

(config)#interface tunnel <num>
(config-if)#ipv6 unnumbered <interface>

<num> : インタフェース番号
<interface-name> : インタフェース名

6to4トンネルインタフェースにもリンクローカルアドレスが自動的に設定されます。6to4トンネルインタフェースのリンクローカルアドレスはFE80::<tunnel sourceのIPv4アドレス>です。

ルーティングの設定

前述のように。6to4トンネル経由で他のIPv6ネットワークへパケットをルーティングするためには2002::/16の6to4プレフィクスのスタティックルートを設定します。

6to4トンネル スタティックルートの設定

(config)#ipv6 route 2002::/16 tunnel <num>

<num> : 6to4トンネルインタフェースのインタフェース番号

このスタティックルートによって、自身の配下の6to4プレフィクスでないネットワークが宛先のIPv6パケットは、6to4トンネルインタフェースへとルーティングします。

6to4トンネルの設定例

6to4の設定例として、下記のネットワーク構成を考えましょう。

図  6to4トンネル 設定例
図 6to4トンネル 設定例

6to4トンネルの設定を行うための前提として、IPv4ネットワークとIPv6ネットワークの境界であるR1、R2のIPv4アドレスを埋め込んだアドレッシングを行います。R1のIPv6ネットワークには、R1の192.168.1.1のIPv4アドレスを埋め込んだ2002:C0A8:0101::/48の範囲からアドレッシングします。同様にR2のIPv6ネットワークには、R2の192.168.1.2のIPv4アドレスを埋め込んだ2002:C0A8:0102::/48の範囲からアドレッシングします。

6to4トンネルインタフェースの作成

R1とR2で6to4トンネルインタフェースを次のように作成します。

R1

interface tunnel 1
 tunnel mode ipv6ip 6to4
 tunnel source fa 0/0

トンネルインタフェースにIPv6アドレスを割り当て

6to4トンネルインタフェースにIPv6パケットをルーティングできるようにするためにIPv6アドレスを設定します。今回は、unnumberedそれぞれLoopback0のIPv6アドレスを使うように設定します。

R1

interface tunnel 1
 ipv6 unnumbered loopback 0

R2

interface tunnel 1
 ipv6 unnumbered loopback 0

ルーティングの設定

そして、お互いの6to4プレフィクスにルーティングできるように、2002::/16に対するルート情報をスタティックに設定します。

R1

ipv6 route 2002::/16 tunnel 1

R2

ipv6 route 2002::/16 tunnel 1

ここまでの設定で、R1、R2がお互いの6to4プレフィクスに対してルーティングすることが可能です。R1、R2のIPv6ルーティングテーブルは次のようになります。

R1

R1#show ipv6 route
IPv6 Routing Table - 5 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
S   2002::/16 [1/0]
     via ::, Tunnel1
C   2002:C0A8:101:1::/64 [0/0]
     via ::, Loopback0
L   2002:C0A8:101:1::1/128 [0/0]
     via ::, Loopback0
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0

R2

R2#sh ipv6 route
IPv6 Routing Table - 5 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
S   2002::/16 [1/0]
     via ::, Tunnel1
C   2002:C0A8:102:1::/64 [0/0]
     via ::, Loopback0
L   2002:C0A8:102:1::2/128 [0/0]
     via ::, Loopback0
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0

R1からR2の6to4プレフィクス(2002:c0a8:0102:1::2)にPingすると下記のように成功します。

R1

R1#ping 2002:c0a8:0102:1::2 source loopback 0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2002:C0A8:102:1::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms