IPv6 over IPv4スタティックトンネルの概要

IPv6 over IPv4スタティックトンネル(以下、単に「スタティックトンネル」とします)は、IPv4ネットワークを介してIPv6パケットを転送するためのポイントツーポイント接続のトンネルです。スタティックトンネルのインタフェースにはIPv6アドレスを割り当てて、仮想的にIPv6ネットワークを接続します。

図 IPv6 over IPv4 スタティックトンネルの概要
図 IPv6 over IPv4 スタティックトンネルの概要

トンネルインタフェースでIPv6パケットを転送するときに、IPv6パケットを転送用のIPv4ヘッダでカプセル化します。スタティックトンネルでは、カプセル化するIPv4ヘッダの宛先IPv4アドレスをあらかじめ設定で決めておきます。

図 スタティックトンネルのカプセル化
図 スタティックトンネルのカプセル化

たくさんのIPv6ネットワークがあると・・・

スタティックトンネルによって、手軽にIPv4ネットワークを通じてIPv6ネットワークを接続することができます。しかし、IPv6ネットワークの数が多くなれば、拡張性に問題が出てくることがあります。1つのスタティックトンネルインタフェースでは、1つのIPv6ネットワークしか接続できません。そのため、多数のIPv6ネットワークが存在すれば、多数のスタティックトンネルのインタフェースが必要になります。

図 複数のIPv6ネットワークの接続
図 複数のIPv6ネットワークの接続

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

スタティックトンネルの設定の流れは次のようになります。

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

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

IPv4ネットワークとIPv6ネットワークの境界のルータでトンネルインタフェースを作成します。トンネルインタフェースは、グローバルコンフィグレーションモードで次のコマンドを入力します。

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

(config)#interface tunnel <num>
(config-if)#tunnel mode ipv6ip
(config-if)#tunnel destination <dst-ipv4-address>
(config-if)#tunnel source {<src-interface-name> | <src-ipv4-address>}

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

トンネルインタフェースはデフォルトでGREのカプセル化です。GREのヘッダを省略して、IPv6パケットを直接IPv4ヘッダでカプセル化するためにtunnel mode ipv6ipのコマンドを利用します。

そして、スタティックトンネルはtunnel destinationコマンドで転送用のIPv4ヘッダの宛先IPv4アドレスを明示的に設定しなければいけません。当然ながら、指定したIPv4アドレスへの接続性が必要です。

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

トンネルインタフェースでIPv6パケットを送受信するためには、トンネルインタフェースにIPv6アドレスを割り当てておかなければいけません。明示的にIPv6アドレスを設定してもいいですし、unnumberedで他のインタフェースのIPv6アドレスを使い回す設定でもOKです。

明示的にトンネルインタフェースのIPv6アドレスの設定は、トンネルインタフェースのコンフィグレーションモードで次のコマンドを入力します。

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

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

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

unnumberedで他のインタフェースのIPv6アドレスを使い回す設定は、以下のコマンドです。

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

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

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

IPv6のインタフェースにはリンクローカルアドレスも割り当てられます。トンネルインタフェースでは、リンクローカルアドレスとしてtunnel sourceのIPv4アドレスが含まれるアドレスが自動的に割り当てられます。

トンネルインタフェースのリンクローカルアドレス
FE80::<tunnel sourceのIPv4アドレス>

3. ルーティングの設定

スタティックトンネルを設定して、IPv6アドレスを割り当てただけでは、トンネルエンドポイントルータ同士がポイントツーポイント接続しただけです。トンネルインタフェース経由でIPv6パケットをルーティングできるように適切なルーティングの設定をしてください。

スタティックルートで設定しても、ルーティングプロトコルの設定でもOKです。ルーティングの設定もきちんと考えなければいけないということを忘れないようにしてください。

スタティックトンネルの設定例

スタティックトンネルの設定例として、以下のシンプルなネットワーク構成を考えます。

図 スタティックトンネルの設定例
図 スタティックトンネルの設定例

R1、R2それぞれのルータのLoopback0に設定したIPv6ネットワークを、スタティックトンネルで接続して通信できるようにします。

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

まず、R1-R2間でトンネルインタフェースを作成して、R1-R2間をポイントツーポイント接続にします。

R1

interface tunnel 0
 tunnel mode ipv6ip
 tunnel destination 192.168.1.2
 tunnel source fa 0/0

R2

interface tunnel 0
 tunnel mode ipv6ip
 tunnel destination 192.168.1.1
 tunnel source fa 0/0

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

トンネルインタフェース上でIPv6パケットを送受信できるように、トンネルインタフェースにIPv6アドレスを設定します。今回は、直接IPv6アドレスを設定する代わりに、unnumberedでLoopback0と同じIPv6アドレスを使うことにします。

R1

interface tunnel 0
 ipv6 unnumbered loopback0

R2

interface tunnel 0
 ipv6 unnumbered loopback0

ここまでの設定が正しくできていれば、R1でIPv6インタフェースの状態を確認すると、次のように表示されます。

R1

R1#show ipv6 interface brief
FastEthernet0/0            [up/up]
Loopback0                  [up/up]
    FE80::CE01:38FF:FE90:0
    2001:1:2:3::1
Tunnel0                    [up/up]
    FE80::C0A8:101
    unnumbered (Loopback0)
R1#show ipv6 interface tunnel 0
Tunnel0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::C0A8:101
  Interface is unnumbered. Using address of Loopback0
  No global unicast address is configured
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FFA8:101
  MTU is 1480 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds

ルーティングの設定

このままでは、ルーティングテーブルに相手のLoopback0に設定しているIPv6ネットワークのプレフィクスが存在しません。IPv6ネットワーク間で通信を行うためには、IPv6ルーティングの設定が必要です。今回はRIPngを使って次のようにIPv6ルーティングの設定を行います。

R1

ipv6 unicast-routing
!
ipv6 router rip RIPng
!
interface loopback 0
 ipv6 rip RIPng enable
!
interface tunnel 0
 ipv6 rip RIPng enable

R2

ipv6 unicast-routing
!
ipv6 router rip RIPng
!
interface loopback 0
 ipv6 rip RIPng enable
!
interface tunnel 0
 ipv6 rip RIPng enable

R1、R2それぞれがトンネルインタフェース上でRIPngを利用して、お互いのLoopback0のIPv6ネットワークプレフィクスを学習します。このときの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
C   2001:1:2:3::/64 [0/0]
     via ::, Loopback0
L   2001:1:2:3::1/128 [0/0]
     via ::, Loopback0
R   2001:100:200:300::/64 [120/2]
     via FE80::C0A8:102, Tunnel0
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0

R2

R2#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
R   2001:1:2:3::/64 [120/2]
     via FE80::C0A8:101, Tunnel0
C   2001:100:200:300::/64 [0/0]
     via ::, Loopback0
L   2001:100:200:300::2/128 [0/0]
     via ::, Loopback0
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0

これで、スタティックトンネルによってIPv6ネットワークを相互に接続して通信可能です。R1からIPv6の通信を確認するために、IPv6 Pingを行うと次のようになります。

R1

R1#ping 2001:100:200:300::2 source loopback 0

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