IPv6環境への移行するのにあたり、全ての機器がIPv6をサポートしているとは限りません。もし、IPv4のみをサポートする機器を経由したいならば、IPv6パケットをIPv4でカプセル化して通信を実現します。
概要
IPv6 tunnelについてまとめます。IPv6 tunnelとは、IPv6に対応していない区間についてIPv6パケットをIPv4でカプセル化することで疎通可能にする技術です。
Ciscoルータが対応している代表的なIPv6 tunnelの実装は以下の通りです。
設定コマンド | 説明 |
---|---|
tunnel mode gre (省略可) | GREによるカプセル化を行います。 |
tunnel mode ipv6ip | IPv6パケットをIPv4で直接カプセル化します。 GRE headerがないのでGREよりもオーバーヘッドが少なくなります。 |
tunnel mode ipv6ip auto-tunnel | 非推奨 |
tunnel mode ipv6ip 6to4 | 2002::/16 prefixを使用します。 17bitから48bitまではIPv4アドレスと紐づきます。 |
tunnel mode ipv6ip isatap | 下位64bitのアドレスがIPv4アドレスと紐づきます。 |
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# interface tunnel <num> Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <dst_ip> Router(config-if)# ipv6 address <ipv6_addr> Router(config-if)# tunnel mode ipv6ip Router(config-if)# tunnel mode ipv6ip 6to4 Router(config-if)# tunnel mode ipv6ip isatap
構成図
以下の環境にて動作確認を行います。
e0/0 e0/1 .2+--------+::2 ┌----+ R2 +-- e0/1 e0/0 │ +--------+ ::1+--------+.1 │ 2001:CC1E:1:2::/64 ----+ R1 +----┤ +--------+ │ 2001:CC1E:1:1::/64 │ e0/0 e0/1 │ .3+--------+::3 └----+ R3 +-- 192.168.123.0/24 +--------+ 2001:CC1E:1:3::/64 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32
[R1] ipv6 unicast-routing ! interface Loopback0 ip address 10.1.1.1 255.255.255.255 ! interface Ethernet0/0 ip address 192.168.123.1 255.255.255.0 ! interface Ethernet0/1 no ip address ipv6 address 2001:CC1E:1:1::1/64 no keepalive ! router ospf 1 network 10.1.1.1 0.0.0.0 area 0 network 192.168.123.1 0.0.0.0 area 0 [R2] ipv6 unicast-routing ! interface Loopback0 ip address 10.2.2.2 255.255.255.255 ! interface Ethernet0/0 ip address 192.168.123.2 255.255.255.0 ! interface Ethernet0/1 no ip address ipv6 address 2001:CC1E:1:2::2/64 no keepalive ! router ospf 1 network 10.2.2.2 0.0.0.0 area 0 network 192.168.123.2 0.0.0.0 area 0 [R3] ipv6 unicast-routing ! interface Loopback0 ip address 10.3.3.3 255.255.255.255 ! interface Ethernet0/0 ip address 192.168.123.3 255.255.255.0 ! interface Ethernet0/1 no ip address ipv6 address 2001:CC1E:1:3::3/64 no keepalive ! router ospf 1 network 10.3.3.3 0.0.0.0 area 0 network 192.168.123.3 0.0.0.0 area 0
設定全文は下記ファイルです。詳細設定は下記を参照ください。
仕様説明
GRE tunnel
GRE tuunelによるカプセル化設定は以下の通りです。GRE tunnelを作成し、tunnel interfaceに対してIPv6 addressを割り当てます。
Router(config)# interface tunnel <num> Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <dst_ip> Router(config-if)# ipv6 address <ipv6_addr>
ipv6ip tunnel
ipv6ip tuunelによるカプセル化設定は以下の通りです。GREの設定と異なり、”tunnel mode ipv6ip”と指定して下さい。
Router(config)# interface tunnel <num> Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <dst_ip> Router(config-if)# ipv6 address <ipv6_addr> Router(config-if)# tunnel mode ipv6ip
isatap tunnel
“tunnel mode ipv6ip isatap”と指定して下さい。また、IPv6アドレスはEUI-64形式で指定します。末尾64bitがIPv4アドレスと紐付けられます。
例えば、2001:CC1E:0123:0000:0000:5EFE:C0A8:0101ならば、末尾C0A80101を10進数に変換すると192.168.1.1なので、tunnel destinationは192.168.1.1になります。
Router(config)# interface tunnel <num> Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <dst_ip> Router(config-if)# ipv6 address <ipv6_addr>/64 eui-64 Router(config-if)# tunnel mode isatap
6to4 tunnel
“tunnel mode ipv6ip 6to4″と指定して下さい。また、IPv6アドレスはIPv4アドレスと紐付ける必要があります。
Router(config)# interface tunnel <num> Router(config-if)# tunnel source <interface> Router(config-if)# tunnel destination <dst_ip> Router(config-if)# ipv6 address <ipv6_addr> Router(config-if)# tunnel mode 6to4
6to4は2002::/16のアドレス帯域を使用します。アドレス体系は以下の通りです。例えば、tunnelの送信元が172.16.1.1であるとします。その場合は、172.16.1.1を16進数に変換したAC10:101を使い、2002:AC10:101:X::Yのようなアドレスを設定して下さい。
+------+--------------+-----------+--------------------------------+ | 2002 | IPv4 Address | Subnet ID | Interface ID | +------+--------------+-----------+--------------------------------+ <----> <------------> <---------> <------------------------------> 16 bit 32 bit 16 bit 64 bit
GRE tunnel
設定投入
R1, R2間でGREによるIPv6 tunnelを作成します。また、ルーティング可能になるようOSPFv3も設定します。
[R1] interface Tunnel12 tunnel source Loopback0 tunnel destination 10.2.2.2 ipv6 address 2001:CC1E:1:12::1/64 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0 [R2] interface Tunnel12 tunnel source Loopback0 tunnel destination 10.1.1.1 ipv6 address 2001:CC1E:1:12::2/64 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0
疎通確認
R1, R2間で疎通可能である事を確認します。
[R1] R1#ping 2001:CC1E:1:2::2 source Ethernet 0/1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2001:CC1E:1:2::2, timeout is 2 seconds: Packet sent with a source address of 2001:CC1E:1:1::1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 16/33/72 ms R1#
パケット観察
上記pingをキャプチャした結果は以下の通りです。IPv6パケットがGREによりカプセル化されている事が分かります。
Frame 4: 138 bytes on wire (1104 bits), 138 bytes captured (1104 bits) Ethernet II, Src: cc:00:15:9c:00:00 (cc:00:15:9c:00:00), Dst: cc:01:15:9c:00:00 (cc:01:15:9c:00:00) Internet Protocol Version 4, Src: 10.1.1.1 (10.1.1.1), Dst: 10.2.2.2 (10.2.2.2) Generic Routing Encapsulation (IPv6) Internet Protocol Version 6, Src: 2001:cc1e:1:1::1 (2001:cc1e:1:1::1), Dst: 2001:cc1e:1:2::2 (2001:cc1e:1:2::2) Internet Control Message Protocol v6
ipv6ip tunnel
設定投入
R1, R2間でipv6ipによるIPv6 tunnelを作成します。先程のGREとの違いは”tunnel mode ipv6ip”のみです。
[R1] interface Tunnel12 tunnel source Loopback0 tunnel destination 10.2.2.2 tunnel mode ipv6ip ipv6 address 2001:CC1E:1:12::1/64 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0 [R2] interface Tunnel12 tunnel source Loopback0 tunnel destination 10.1.1.1 tunnel mode ipv6ip ipv6 address 2001:CC1E:1:12::2/64 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0
疎通確認
R1, R2間で疎通可能である事を確認します。
[R1] R1#ping 2001:CC1E:1:2::2 source Ethernet 0/1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2001:CC1E:1:2::2, timeout is 2 seconds: Packet sent with a source address of 2001:CC1E:1:1::1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 16/33/72 ms R1#
パケット観察
上記pingをキャプチャした結果は以下の通りです。GRE tunnelと異なりGRE headerが存在しない事が読み取れます。ipv6ip tunnelはGRE tunnelよりもオーバーヘッドが少ないプロトコルと言えます。
Frame 5: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) Ethernet II, Src: cc:00:15:9c:00:00 (cc:00:15:9c:00:00), Dst: cc:01:15:9c:00:00 (cc:01:15:9c:00:00) Internet Protocol Version 4, Src: 10.1.1.1 (10.1.1.1), Dst: 10.2.2.2 (10.2.2.2) Internet Protocol Version 6, Src: 2001:cc1e:1:1::1 (2001:cc1e:1:1::1), Dst: 2001:cc1e:1:2::2 (2001:cc1e:1:2::2) Internet Control Message Protocol v6
isatap tunnel with static route
設定投入
R1, R2, R3間でisatap tunnelを作成します。”tunnel mode ipv6ip isatap”と指定し、IPv6アドレスはEUI-64形式で指定します。
[R1] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 address 2001:CC1E:123::/64 eui-64 [R2] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 address 2001:CC1E:123::/64 eui-64 [R3] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 address 2001:CC1E:123::/64 eui-64
互いに疎通可能になるようstatic routeを定義します。
[R1] ipv6 route 2001:CC1E:1:2::/64 2001:CC1E:123::5EFE:A02:202 ipv6 route 2001:CC1E:1:3::/64 2001:CC1E:123::5EFE:A03:303 [R2] ipv6 route 2001:CC1E:1:1::/64 2001:CC1E:123::5EFE:A01:101 ipv6 route 2001:CC1E:1:3::/64 2001:CC1E:123::5EFE:A03:303 [R3] ipv6 route 2001:CC1E:1:1::/64 2001:CC1E:123::5EFE:A01:101 ipv6 route 2001:CC1E:1:2::/64 2001:CC1E:123::5EFE:A02:202
疎通確認
R1, R2, R3間で疎通可能である事を確認します。
R1#ping 2001:CC1E:1:3::3 source Ethernet 0/1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2001:CC1E:1:3::3, timeout is 2 seconds: Packet sent with a source address of 2001:CC1E:1:1::1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 16/28/60 ms R1#
パケット観察
上記pingをキャプチャした結果は以下の通りです。GRE headerが存在しないオーバーヘッドの少ない転送形式です。
Frame 9: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) Ethernet II, Src: cc:00:14:ac:00:00 (cc:00:14:ac:00:00), Dst: cc:02:14:ac:00:00 (cc:02:14:ac:00:00) Internet Protocol Version 4, Src: 10.1.1.1 (10.1.1.1), Dst: 10.3.3.3 (10.3.3.3) Internet Protocol Version 6, Src: 2001:cc1e:1:1::1 (2001:cc1e:1:1::1), Dst: 2001:cc1e:1:3::3 (2001:cc1e:1:3::3) Internet Control Message Protocol v6
isatap tunnel with dynamic routing
設定投入
isatap tunnelとdynamic routingを併用した設定例です。
isatap tunnelはNBMAなので、unicastによってneighborを確立しなければなりません。ospf network typeをnon-broadcastなどに変更し、neighborコマンドでneighborを指定します。neighborのlink local addressは”show ipv6 interface brief”コマンドなどで調べる事ができます。
[R1] interface Tunnel123 ipv6 address 2001:CC1E:123::/64 eui-64 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 ospf network non-broadcast ipv6 ospf neighbor FE80::5EFE:A02:202 ipv6 ospf neighbor FE80::5EFE:A03:303 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0 [R2] interface Tunnel123 ipv6 address 2001:CC1E:123::/64 eui-64 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 ospf network non-broadcast ipv6 ospf neighbor FE80::5EFE:A01:101 ipv6 ospf neighbor FE80::5EFE:A03:303 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0 [R3] interface Tunnel123 ipv6 address 2001:CC1E:123::/64 eui-64 tunnel source Loopback0 tunnel mode ipv6ip isatap ipv6 ospf network non-broadcast ipv6 ospf neighbor FE80::5EFE:A01:101 ipv6 ospf neighbor FE80::5EFE:A02:202 ipv6 ospf 1 area 0 ! interface Ethernet0/1 ipv6 ospf 1 area 0
疎通確認
R1, R2, R3間でneighborが確立され、疎通可能になった事を確認します。
R1#show ipv6 ospf neighbor Neighbor ID Pri State Dead Time Interface ID Interface 10.3.3.3 1 FULL/DROTHER 00:01:54 10 Tunnel123 10.2.2.2 1 FULL/DR 00:01:48 10 Tunnel123 R1# R1# R1#ping 2001:CC1E:1:3::3 source Ethernet 0/1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2001:CC1E:1:3::3, timeout is 2 seconds: Packet sent with a source address of 2001:CC1E:1:1::1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 16/28/60 ms R1#
6to4 tunnel
アドレス見直し
検証の都合上、IPv6アドレスを以下のように変更します。
e0/0 e0/1 .2+--------+::2 ┌----+ R2 +-- e0/1 e0/0 │ +--------+ ::1+--------+.1 │ 2001:A02:202:2::/64 ----+ R1 +----┤ +--------+ │ 2001:A01:101:1::/64 │ e0/0 e0/1 │ .3+--------+::3 └----+ R3 +-- 192.168.123.0/24 +--------+ 2001:A03:303:3::/64 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32
設定投入
R1, R2, R3間で6to4 tunnelを作成します。
IPv6アドレスはIPv4アドレスと互換性があるように設定して下さい。
[R1] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip 6to4 ipv6 address 2002:A01:101::1/64 ! interface Ethernet0/1 ipv6 address 2002:A01:101:1::1/64 [R2] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip 6to4 ipv6 address 2002:A02:202::2/64 ! interface Ethernet0/1 ipv6 address 2002:A02:202:2::2/64 [R3] interface Tunnel123 tunnel source Loopback0 tunnel mode ipv6ip 6to4 ipv6 address 2002:A03:303::3/64 ! interface Ethernet0/1 ipv6 address 2002:A03:303:3::3/64
疎通可能になるようstatic routeを定義します。
[R1, R2, R3] ipv6 route 2002::/16 Tunnel123
疎通確認
R1, R2, R3間で疎通可能である事を確認します。
R3#ping 2002:A02:202:2::2 source Ethernet 0/1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2002:A02:202:2::2, timeout is 2 seconds: Packet sent with a source address of 2002:A03:303:3::3 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 12/31/64 ms R3#
パケット観察
上記pingをキャプチャした結果は以下の通りです。GRE headerが存在しないオーバーヘッドの少ない転送形式です。
Frame 2: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) Ethernet II, Src: cc:02:1b:70:00:00 (cc:02:1b:70:00:00), Dst: cc:01:1b:70:00:00 (cc:01:1b:70:00:00) Internet Protocol Version 4, Src: 10.3.3.3 (10.3.3.3), Dst: 10.2.2.2 (10.2.2.2) Internet Protocol Version 6, Src: 2002:a03:303:3::3 (2002:a03:303:3::3), Dst: 2002:a02:202:2::2 (2002:a02:202:2::2) Internet Control Message Protocol v6
Tips
EUI-64
EUI-64形式のアドレスをど忘れした場合は、以下のshowコマンドで調べる事もできます。
R3(config)#int tun 123 R3(config-if)# *Mar 1 00:02:30.787: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel123, changed state to down R3(config-if)#tunnel mode ipv6ip isatap R3(config-if)#tunnel source Loopback 0 R3(config-if)# *Mar 1 00:03:01.079: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel123, changed state to up R3(config-if)#ipv6 address 2001:CC1E:123::/64 eui-64 R3(config-if)#do show ipv6 int bri Ethernet0/0 [up/up] Ethernet0/1 [up/up] FE80::CE02:14FF:FEAC:1 2001:CC1E:1:3::3 Ethernet0/2 [administratively down/down] Ethernet0/3 [administratively down/down] Loopback0 [up/up] Tunnel123 [up/up] FE80::5EFE:A03:303 2001:CC1E:123::5EFE:A03:303 R3(config-if)#