クイックダウンロード:
IPv6トンネリングは、世界で最も遅いプロトコル移行期間中、インターネットを維持するための架け橋となっている。
-
IPv4はまだ廃止されておらず、少なくとも2030年代初頭までは廃止されないでしょう。IPv6トンネリングを利用すれば、移行期間中、ゼロから再構築することなく、IPv4インフラストラクチャ上でIPv6トラフィックを転送できます。
-
主な手法は3つあり、それぞれ異なるユースケースに対応しています。6in4は手動で精密に制御されたトンネル向け、6to4は動的で宛先に依存しない展開向け、そして6RDはISP規模のステートレスな柔軟性を実現するものです。
-
デュアルスタックルーターは、エッジでIPv6パケットをIPv4ヘッダー内にカプセル化し、反対側でそれを取り除いて、両方のプロトコル世界が相互に通信できるようにするという、重労働を担います。
-
デプロイ前に、リソースのベンチマークを実施してください。どのトンネリング方式も、CPU、メモリ、帯域幅といったオーバーヘッドを増加させます。実装前後の影響を測定しないと、手探りでデバッグすることになります。
IPv6トンネリング:例と手順を含むチュートリアル
インターネットは、約半世紀前の誕生以来、最も根本的な変革期を迎えています。私たちは現在、インターネットがIPv4からIPv6へと移行する、まさにその転換期を目の当たりにしているのです。
この変化にはいくつかの理由があり、その中でも最も顕著なのは、地域インターネットレジストリ(RIR) 使い果たした または 疲れ果てそう それらのIPv4サブネットプール。
IPv6は正式に定義され、公開されました。 RFC 2460 後半1998インチ 世界IPv6ローンチデー 2012年6月6日に宣言されましたが、 Googleによるとこの記事執筆時点では、世界のIPv6普及率は依然として約40%にとどまっている。
ご覧のとおり、この移行には文字通り数十年かかっています。 ここでは説明しない理由つまり、IPv4は今も存在しており、今後も長期間存続すると予想されているということです。IPv4は今後も世界のインターネット上で相当な存在感を維持すると推定されています。 2030年代初頭まで続く.
実際問題として、現状では、IPv4とIPv6の同時運用に対応できる堅牢で成熟したネットワークメカニズムを開発する必要があります。そのようなメカニズムの一つがIPv6トンネリングです。これは、IPv6パケットをIPv4パケット内にカプセル化できる機能です。最も基本的な形では、IPv4インフラストラクチャを介して2つのIPv6ネットワーク間でIPv6トラフィックをトンネル化できます。これを実現する方法はいくつかあり、中には紛らわしいほど似た名前のものもありますが、ここではそれらについて説明します。また、具体的な簡単なシナリオでIPv6トンネリングを使用する方法についても検討します。
主要概念の要約
IPv6トンネリングは、IPv4からIPv6への移行プロセスを実現するための重要な手段の一つです。IPv6トンネリングに関連する最も重要な概念のいくつかを以下の表に示し、この記事で詳しく解説します。
| IPv6トンネリング | これは、IPv4ネットワーク上でIPv6パケットを送信するための、一般的なIPv6移行メカニズムです。 |
| IPv6トンネリングの仕組み | IPv6パケットは、IPv4ヘッダー内にカプセル化されるため、IPv4パケットのペイロードとなる。 |
| IPv6トンネリング方式 | 一般的な方法としては、6in4、6to4、およびIPv6ラピッドデプロイメント(RD)などがある。 |
| IPv6トンネリングの設定 | IPv6トンネリングは、1つ以上のトンネリング方式を採用するデュアルスタックルータで設定されます。 |
| IPv6トンネリングに関する注意点 | 実装上の懸念事項としては、ネットワークおよびシステムリソースのオーバーヘッド、セキュリティ、他のネットワークサービスとの連携などが挙げられる。 |
IPv6トンネリングについて解説します
以下のセクションでは、IPv6トンネリングについて深く掘り下げ、それが何であるか、どのように機能するか、そしてどのように実装できるかを理解していきましょう。
IPv6移行メカニズム
インターネットの各地域は、異なる時期と異なるペースでIPv6への移行を進めています。つまり、IPv4とIPv6の共存が以前から必要とされており、この状況は今後も続くでしょう。
IPv6 トンネリングは、この共存を実現するのにどのように役立つのでしょうか? パブリック IPv6 アドレスの範囲を購入した企業ネットワークがあると想像してください。これらの IP アドレスは、ユーザー デバイスとネットワーク サービスの両方を含む、ネットワークの内部ホストに使用されます。しかし、企業の物理的な場所には、IPv6 インフラストラクチャを提供する ISP がありません。つまり、その地域のインターネットは IPv4 のみをサポートしています。どうしますか?

図に示すように、IPv6トンネリングを実装します。上記のシナリオでは、エンタープライズエッジルータがIPv6トンネリングのエンドポイントの1つであり、そこでIPv6パケットがIPv4パケットにカプセル化され、IPv4専用のインターネット経由で送信され、トンネルのもう一方のエンドポイントとして機能する別のルータで受信されます。パケットがそのエンドポイントに到達すると、カプセル化が解除され、IPv6インフラストラクチャ内で送信されます。
トンネリングエンドポイントの役割を果たすルーターは、IPv4とIPv6の両方のプロトコルスタックをサポートするため、デュアルスタックルーターとも呼ばれます。
IPv6をIPv4にカプセル化する
IPv6パケットは、ヘッダーとペイロードで構成されます。ヘッダーには、送信元および宛先のIPv6アドレスに加え、セキュリティ、ルーティング、サービス品質、その他IPv6固有の機能に関する追加情報が含まれます。このようなパケットがカプセル化のためにデュアルスタックルータに到達すると、IPv4ヘッダーがIPv6パケットに追加されます。つまり、IPv6パケットは実質的にIPv4パケットのペイロードとなります。次の図は、このカプセル化を示しています。

IPv4ヘッダーには、2つのトンネリングエンドポイントに対応する送信元および宛先IPv4アドレスが含まれており、IPv6ヘッダーには、実際に通信を行うホストの送信元および宛先IPv6アドレスが含まれています。
IPv6トンネリングの種類
ここまで、IPv6トンネリングの基本的な概念について説明してきました。次に、特定のネットワークのニーズに応じて実装できる、さまざまな「種類」のIPv6トンネリングを見ていきましょう。最も一般的なトンネリング技術には、次のようなものがあります。
これらの手法の命名規則には注意してください。特に、次のような用語の違いに注意してください。 6to4 (NAIST) と 6in4. という方法もあります 6over4ここでは詳しく説明しませんが、注意しないとこれらの用語がすぐに混同される可能性があることを強調するために、あえて触れておきます。
手動で設定されたトンネル
この手法を用いると、IPv6トラフィックを伝送できるIPv4トンネルを静的に作成できます。この手法には2種類あります。
- 最初のタイプは、 6in4は、手動で作成されたトンネルです。 RFC 4213 これは、IPv6をIPv4パケットにカプセル化する方法を定義するものです。
- 2つ目のタイプは、汎用ルーティングカプセル化(GRE)トンネリングです。これはIPv4上で動作するトンネリング方式であり、IPv6専用ではありません。様々なプロトコルのトンネリングに使用できます。
動的マルチポイントIPv6トンネリング
これは、明示的なトンネルを設定することなく、IPv4ネットワーク上でIPv6パケットを送信できる方法です。名前にある「動的」とは、トンネルが動的に作成され、IPv4エンドポイントアドレスが動的に決定されることを意味します。この方法には2つの種類があります。
- オートマチック 6to4 トンネリングとは、IPv6アドレスからエンドポイントのIPv4アドレスを特定する手法です。この目的のために、特定のIPv6プレフィックスである2002::/16を使用します。
- サイト内自動トンネルアドレス指定プロトコル(ISATAP)は、 RFC 5214 これは同様の方法ですが、ISATAPサーバールーターが1つ以上のクライアントルーターへのトンネルを動的に作成するサーバー・クライアントモデルを採用しています。
IPv6ラピッドデプロイメント(RD)—6to4からの改良
6RDは、 RFC 5569は、ISPのIPv4インフラストラクチャ上にIPv6トンネルを動的に作成するステートレスなメカニズムです。6to4に似ていますが、いくつかの点で6to4を改良しています。
- これはステートレスであるため、カプセル化された特定のプレフィックスを追跡するデバイスは存在しません。
- カプセル化は、設定されたルータがIPv6パケットを受信するたびに「オンザフライ」で行われます。カプセル化されたパケットは、IPv4ネットワーク経由で境界ルータに送信され、境界ルータでデカプセル化されてIPv6ネットワークに転送されます。
- 特定のIPv6プレフィックスの使用に限定されず、各加入者のネイティブIPv6アドレスを使用することも可能です。
- IPv6 RDは通常、IPv4のみを扱っているISPのネットワーク内で、IPv6アドレス空間を持つ顧客に対応しようとする場合に利用されます。
実装例
以下のセクションでは、Ciscoルーター上で手動による6in4トンネルと自動による6to4トンネルを実装する方法について説明します。
6in4 IPv6トンネルの手動設定
最初の構成として、以下のネットワークトポロジーを考えてみましょう。

R1とR3は、L0ループバックインターフェースにIPv6アドレスを持つデュアルスタックルーターです。R1とR3は、R2を介してIPv4インフラストラクチャにも接続されています。ループバック同士が通信できるように、手動で6in4 IPv6トンネルを作成したいと考えています。R1とR3には、トンネルの終端に使用するL1ループバックインターフェースも備わっています。
上記のIPv4およびIPv6アドレス設定は既にすべてのルータで構成されており、すべてのIPv4アドレス間のルーティングはEIGRPなどの動的ルーティングプロトコルを使用して確立されているものとします。
まず、R1とR3上にL1インターフェースで終端するトンネルを作成しましょう。
R1(config)#interface tunnel 0
R1(config-if)#tunnel source loopback 1
R1(config-if)#tunnel destination 3.3.3.3
R1(config-if)#tunnel mode ipv6ipR3(config)#interface tunnel 0
R3(config-if)#tunnel source loopback 1
R3(config-if)#tunnel destination 1.1.1.1
R3(config-if)#tunnel mode ipv6ipCisco デバイスでトンネルを設定した経験のある方は、これが通常の GRE トンネルの設定と同じだと思われるかもしれませんが、それは正しいです。ただし、通常の GRE トンネルにはない特定のコマンドが 1 つあります。それは tunnel mode ipv6ip コマンドです。このコマンドは、RFC で定義されている 6in4 IPv6 トンネルをアクティブ化します。
show interfaces tunnel 0 コマンドを使用して、R1 と R3 の両方からトンネルの状態を確認してみましょう。
R1#show interfaces tunnel 0
Tunnel0 is up, line protocol is up
Hardware is Tunnel
MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 1.1.1.1 (Loopback1), destination 3.3.3.3
Tunnel protocol/transport IPv6/IPR3#show interfaces tunnel 0
Tunnel0 is up, line protocol is up
Hardware is Tunnel
MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 3.3.3.3 (Loopback1), destination 1.1.1.1
Tunnel protocol/transport IPv6/IP最後の行で、トンネルプロトコル/トランスポートがIPv6/IPとして定義されていることに注目してください。これはまさに私たちが求めているものです。
トンネルは完成しましたが、IPv6ループバック間ではまだ通信できません。トンネルインフラストラクチャを介して相互に通信できるように、IPv6ルーティングを設定する必要があります。そのためには、R1とR3でルーティングプロトコルRIPngを有効にしましょう。これらのルーターの設定は以下のとおりです。
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router rip RIPNG
R1(config-rtr)#exit
R1(config)#interface loopback 0
R1(config-if)#ipv6 rip RIPNG enable
R1(config-if)#exit
R1(config)#interface tunnel 0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 rip RIPNG enableR3(config)#ipv6 unicast-routing
R3(config)#ipv6 router rip RIPNG
R3(config-rtr)#exit
R3(config)#interface loopback 0
R3(config-if)#ipv6 rip RIPNG enable
R3(config-if)#exit
R3(config)#interface tunnel 0
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 rip RIPNG enable上記のコマンドは、IPv6ルーティングを有効にし、ループバック0インターフェースに表示されるIPv6アドレスをアドバタイズします。R1とR3のルーティングテーブルを見てみましょう。
R1#show ipv6 route rip
IPv6 Routing Table - 4 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::3/128 [120/2]
via FE80::303:303, Tunnel0R3#show ipv6 route rip
IPv6 Routing Table - 4 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/128 [120/2]
via FE80::101:101, Tunnel0他のルーターの IPv6 ネットワークは RIP を介してローカル ルーティング テーブルで見つかることに注意してください。また、その特定のプレフィックスの出口インターフェイスは トンネル0 インタフェース。
準備は万端です!それでは、pingを使ってIPv6接続をテストしてみましょう。pingの送信元がIPv6アドレスを持つループバック0であることを確認する必要があります。
R1#ping 2001::3 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001::2, timeout is 2 seconds:
Packet sent with a source address of 2001::1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/8/8 msIPv6トラフィックは現在、手動で作成された6in4 IPv6トンネルを経由しています。
自動6to4トンネル構成
この構成では、以前と同じトポロジーを使用しますが、今回はIPv4トンネルを終端するためにループバックは使用しません。

ここでも、すべてのルーター間でIPv4ルーティングが確立されていることを前提とします。
この方法の利点は、トンネルを作成する際に、R1またはR3上のトンネルの宛先を知る必要がないことです。宛先は、使用するIPv6アドレスから動的に作成されます。R1とR3のトンネルインターフェースの設定は以下のとおりです。
R1(config)#interface tunnel 0
R1(config-if)#ipv6 address 2002:C0A8:C01::1/64
R1(config-if)#tunnel source fastEthernet 0/0
R1(config-if)#tunnel mode ipv6ip 6to4R3(config)#interface tunnel 0
R3(config-if)#ipv6 address 2002:C0A8:1703::3/64
R3(config-if)#tunnel source fastEthernet 0/0
R3(config-if)#tunnel mode ipv6ip 6to4ここではトンネルにIPv6アドレスを使用していますが、宛先は指定していません。宛先は使用されているIPv6アドレスから推測されます。これはどのように行われるのでしょうか?すべての6to4アドレスは次の形式です。

プレフィックスは常に 2002: で、インターネット上で 6to4 IPv6 トンネリングで使用するために予約されています。次の 32 ビットを 16 進数で表すと、IPv4 アドレスに相当します。確認してみると、16 進数の C0A8:1703 は 192.168.23.3 に相当することがわかります。同様に、C0A8:C01 は 192.168.12.1 に相当します。
ここで注目すべきもう一つの重要な点は、使用されているトンネルモードです。これは、6to4キーワード付きのipv6ipモードであり、ルーターにIPv6アドレスからトンネルエンドポイントのIPv4アドレスを決定するように指示します。
最後にやるべきことが一つあります。2つのループバック0インターフェースが通信できるように、ルーティングを有効にする必要があります。手動トンネルとは異なり、自動6to4トンネルはスタティックルーティングまたはBGPのみをサポートするため、いくつかのスタティックルートを設定しましょう。
R1(config)#ipv6 route 2001::3/128 2002:C0A8:1703::3
R1(config)#ipv6 route 2002::/16 tunnel 0R3(config)#ipv6 route 2001::1/128 2002:C0A8:C01::1
R3(config)#ipv6 route 2002::/16 tunnel 0これでループバックインターフェース間の通信が有効になりました。
R1#ping 2001::3 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:3::3, timeout is 2 seconds:
Packet sent with a source address of 2001::1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/8/8 msWiresharkキャプチャ
では、IPv6トンネリングとはどのようなものなのでしょうか?IPv4パケット内にトンネルされたIPv6パケットのWiresharkキャプチャを見てみましょう。アドレスは上記の例とは異なりますが、概念は非常によく理解できます。

IPv6ヘッダー内にある6to4ゲートウェイ情報に注目してください。 この特定のpcapキャプチャファイルをさらに詳しく調べる この機能の動作についてより深く理解するには、ご自身のWiresharkアプリケーションを使用してください。
成功のための考慮事項
IPv6トンネルは慎重に適用する必要があります。多くの同様のメカニズムと同様に、その技術のさまざまな制限事項と、実装におけるベストプラクティスを念頭に置くことが重要です。IPv6トンネルを設計する際に留意すべき事項を以下に示します。
トンネル掘削場所
カプセル化とデカプセル化をどのデバイスが実行するのかは、必ずしも明確ではありません。トポロジーや関係するエンティティによっては、トンネリングはISPのネットワーク内で完全に実行される場合もあれば、企業がプロセスに参加する場合もあります。組織のエンタープライズネットワーク内でIPv6トンネリングを完全に実装したい場合もあるでしょう。これは、大規模ネットワークをIPv4からIPv6に移行する際に特に役立ちます。
たとえローカルISPがトンネルサービスを提供していなくても、トンネルブローカーを使用することで、IPv6トラフィックを伝送するだけでなく、BGPルーティングプロトコルを使用してインターネット上でIPv6ネットワークをアドバタイズできるIPv6トンネルを作成することが可能です。
オーバーヘッド
あらゆる種類のトンネリングと同様に、IPv6トンネリングも基盤となるネットワークのパフォーマンスに多少のオーバーヘッドをもたらします。このオーバーヘッドは、各IPv6パケットに追加されるIPv4ヘッダーという形で現れます。また、トンネリングを実行するデバイスのCPUとメモリ使用量にもオーバーヘッドが発生します。手動トンネルはプレフィックスが固定されているため、このようなオーバーヘッドは最小限で済みますが、自動および動的トンネリングメカニズムは、正常に動作するためにより多くのメモリとCPUサイクルを消費します。後ほど説明するセキュリティ機能を実装する場合は、さらにオーバーヘッドが増加します。
これは、この機能が極めて多くのリソースを消費するようになるという意味ではありませんが、考慮に入れるべき点です。IPv6トンネリングがこれらのリソースに与える影響を評価するため、実装前後に、対象となるデバイスのCPU、RAM、およびネットワーク帯域幅への負荷を監視することをお勧めします。
セキュリティ
すべてのトンネルと同様に、通信の機密性を確保するために、暗号化などのセキュリティ機能を容易に追加できます。IPSecは、GREを活用するカプセル化技術に適用可能です。
とはいえ、セキュリティは一般的に最優先事項ではありますが、この場合はそれほど重要ではありません。なぜなら、IPv6自体にペイロードを保護するためのセキュリティ機能が組み込まれているからです。組織がカプセル化プロセス自体を保護し、IPv4パケットがIPv6パケットを伝送しているという事実を隠蔽しようとしない限り、IPv6トンネルでの暗号化は通常不要です。
他のネットワーク機能との連携
IPv6トンネルを実装する際には、DNS、ルーティング、マルチキャストといった他のネットワーク機能も考慮する必要があります。これらの機能が実装する特定のIPv6トンネルとどのように相互作用するかを理解することは、ネットワークが正しく動作するために重要です。例えば、自動6to4はIGPをサポートしておらず、スタティックルーティングとBGPルーティングのみをサポートしています。
結論
これまで見てきたように、IPv6トンネリングはIPv4インフラストラクチャ上でIPv6パケットを転送するために使用されます。IPv6トンネリングには、さまざまな状況や要件に適した多様な方法があります。手動で設定するもの、必要なトンネルを動的に作成するもの、ステートレスに動作し、実装の柔軟性をさらに高めるものなどがあります。
また、IPv6トンネリングに伴ういくつかの制限事項や問題点、そしてそれらを実装前にどのように考慮すべきかについても見てきました。
とはいえ、IPv6トンネリングは今日のインターネットにとって極めて重要です。IPv6への移行は数年、場合によっては10年以上かかる継続的なプロセスであるため、これらの機能はインターネットだけでなく企業ネットワークでもますます導入が進んでいます。
IPv6トンネルの実際のパフォーマンスを見てみましょう
デュアルスタックルーター、トンネルインターフェース、および基盤となるIPv4パスを1か所で監視することで、輻輳、CPUスパイク、MTUの問題が障害に発展する前に発見できます。
よくあるご質問
APIアーキテクチャとAPI設計の違いは何ですか?
APIアーキテクチャは、APIの構築方法を規定する構造パターンと制約(レイヤー、通信プロトコル、インタラクションモデルなど)を定義します。API設計は、そのフレームワーク内でエンドポイント、リクエスト/レスポンス形式、命名規則などを定義する、より詳細な作業です。アーキテクチャが先にあり、設計はその内部で行われます。
マイクロサービスに最適なAPIアーキテクチャスタイルはどれですか?
RPCは、低遅延、効率的なプロトコルバッファによるシリアル化、ストリーミングの組み込みサポートといった特長から、マイクロサービスにおいて広く好まれています。一方、RESTは、特に外部向けAPIにおいて、そのシンプルさから広く利用されています。最適な選択は、パフォーマンス(gRPC)、幅広い互換性(REST)、柔軟なデータクエリ(GraphQL)のどれを優先するかによって異なります。
APIアーキテクチャはスケーラビリティにどのような影響を与えるのか?
アーキテクチャ上の決定は、APIのスケーラビリティに直接影響します。ステートレスなRESTアーキテクチャは、最小限の調整で水平スケーリングを可能にします。GraphQLは、複雑なクエリにおけるラウンドトリップを削減できます。gRPCは接続多重化をサポートします。トラフィックパターンに合わないアーキテクチャを選択すると、負荷が増加した際にコストのかかるリファクタリングを余儀なくされる可能性があります。
APIアーキテクチャにおけるAPIゲートウェイの役割は何ですか?
APIゲートウェイは、クライアントからのリクエストに対する単一のエントリポイントとして機能し、ルーティング、認証、レート制限、負荷分散、ログ記録を処理します。クライアント向けの契約とバックエンドサービスの実装を分離することで、既存のサービスに影響を与えることなく内部サービスを容易に進化させることができます。




