6to4
1. 概要
1.1 プロトコルの正式名称(略称)と発案された背景
- 正式名称: 6to4
- 発案された背景: IPv4ネットワーク上でIPv6を導入するための移行メカニズムとして考案されました。IPv6の本格的な普及が遅れていた時期に、既存のIPv4インフラストラクチャを活用しつつ、IPv6ネットワークへの接続を可能にするために設計されました。IPv6への移行初期段階における、IPv4ネットワークを介したIPv6通信の実現が主な目的です。
1.2 主な用途、目的、解決する課題
- 主な用途:
- IPv4ネットワークを介したIPv6通信の実現
- IPv6ネットワークに接続されていないIPv6ホストが、他のIPv6ホストと通信できるようにすること
- 目的:
- IPv6普及への過渡期において、IPv4ネットワーク上でIPv6通信を可能にすることで、IPv6移行を促進する。
- IPv4アドレスをIPv6アドレスにマッピングするメカニズムを提供することで、IPv4ネットワークを経由したIPv6トラフィックのルーティングを可能にする。
- 解決する課題:
- IPv4アドレスしかない環境において、IPv6ネットワークに接続できない問題の解決
- IPv6導入の初期段階における、IPv6ネットワークの接続性の確保
- 既存のIPv4ネットワークインフラストラクチャを最大限に活用し、IPv6移行をスムーズに進めること
1.3 OSI参照モデルでの位置づけと他のプロトコルとの関係
- OSI参照モデル:
- ネットワーク層(Layer 3)に位置します。
- IPv4パケット内にIPv6パケットをカプセル化するトンネリングプロトコルです。
- 他のプロトコルとの関係:
- IPv4: IPv4ネットワークを基盤とし、IPv4パケット内にIPv6パケットをカプセル化して転送します。
- IPv6: 6to4はIPv6アドレスを生成し、IPv6パケットを転送するために使用されます。
- ICMP: ICMPv4およびICMPv6を使用して、エラーメッセージや制御メッセージを伝送します。
- ルーティングプロトコル: 6to4ルータは、IPv6ルーティング情報を伝達するために、BGPなどのルーティングプロトコルを使用する場合があります。
1.4 主要な特徴と利点
- 利点:
- 容易な設定: IPv4アドレスがあれば、IPv6ネットワークに参加するための特別な設定が不要。
- 自動設定: IPv6アドレスはIPv4アドレスに基づいて自動的に生成されるため、手動設定の手間が少ない。
- グローバル接続: IPv6アドレスはグローバルにユニークであるため、異なる6to4ネットワーク間での接続が可能。
- 特徴:
- IPv4アドレスを基にしたIPv6アドレスの生成
- IPv4パケット内へのIPv6パケットのカプセル化
- エニキャストアドレス(192.88.99.1)を用いた6to4リレーの利用
1.5 一般的な使用シナリオ
- IPv6ホストがIPv4ネットワークを介してインターネットに接続する場合: IPv6ホストがIPv4ネットワークの向こう側にあるIPv6ネットワークにアクセスする必要がある場合に使用されます。
- IPv6ネットワークへの段階的な移行: IPv4インフラストラクチャを維持しながら、IPv6対応を部分的に進めるために使用されます。
- 個人や小規模ネットワークでのIPv6接続: IPv4ネットワークしかない環境で、IPv6を使用したい場合に使用されます。
2. プロトコルフロー
A) 基本パターン
sequenceDiagram
participant IPv6 Host A
participant 6to4 Router
participant 6to4 Relay
participant IPv6 Host B
IPv6 Host A ->> 6to4 Router: IPv6 Packet
6to4 Router ->> 6to4 Router: カプセル化(IPv6 in IPv4)
6to4 Router ->> 6to4 Relay: IPv4 Packet(Encapsulated IPv6)
6to4 Relay ->> 6to4 Router: IPv4 Packet(Encapsulated IPv6)
6to4 Router ->> 6to4 Router: デカプセル化
6to4 Router ->> IPv6 Host B: IPv6 Packet
IPv6 Host B ->> 6to4 Router: IPv6 Packet
6to4 Router ->> 6to4 Router: カプセル化(IPv6 in IPv4)
6to4 Router ->> 6to4 Relay: IPv4 Packet(Encapsulated IPv6)
6to4 Relay ->> 6to4 Router: IPv4 Packet(Encapsulated IPv6)
6to4 Router ->> 6to4 Router: デカプセル化
6to4 Router ->> IPv6 Host A: IPv6 Packet
- 説明:
- IPv6 Host A が IPv6 パケットを送信します。
- 6to4ルータ は、IPv6パケットをIPv4パケット内にカプセル化します。IPv4の宛先アドレスは、宛先IPv6アドレスに含まれるIPv4アドレスとなります。
- 6to4ルータ は、IPv4パケットを 6to4リレー (エニキャストアドレス 192.88.99.1) に送信します。
- 6to4リレー は、カプセル化されたIPv4パケットを 宛先ネットワークの6to4ルータ に転送します。
- 宛先6to4ルータ は、IPv4パケットからIPv6パケットをデカプセル化し、宛先の IPv6 Host B に転送します。
- IPv6 Host B からの応答も同様の手順で IPv6 Host A に届きます。
- 各メッセージの目的と内容:
- IPv6 Packet: 実際のIPv6データ。
- IPv4 Packet (Encapsulated IPv6): IPv6パケットをカプセル化したIPv4パケット。IPv4ヘッダの宛先アドレスは、送信元IPv6アドレスに含まれるIPv4アドレスを基に、宛先6to4ルータのアドレスが決定されます。
- タイミング要件:
- 6to4プロトコル自体に厳密なタイミング要件はありませんが、ネットワークの遅延や輻輳によって転送遅延が発生する可能性があります。
B) エラーハンドリングパターン
sequenceDiagram
participant IPv6 Host A
participant 6to4 Router
participant 6to4 Relay
IPv6 Host A ->> 6to4 Router: IPv6 Packet
6to4 Router ->> 6to4 Router: カプセル化
6to4 Router ->> 6to4 Relay: IPv4 Packet
alt エラー発生(リレーで問題発生など)
6to4 Relay -->> 6to4 Router: ICMPv4 Error (Destination Unreachableなど)
6to4 Router -->> IPv6 Host A: ICMPv6 Error (Destination Unreachableなど)
end
- 説明:
- IPv6 Host AがIPv6パケットを送信します。
- 6to4ルータはIPv6パケットをカプセル化し、IPv4パケットを6to4リレーに送信します。
- もし、6to4リレーでのエラーが発生した場合(宛先不明、ネットワーク到達不能など)、6to4リレーはICMPv4エラーメッセージを6to4ルータに返します。
- 6to4ルータは、受け取ったICMPv4エラーメッセージを基に、対応するICMPv6エラーメッセージをIPv6 Host Aに返します。
- タイムアウト時の動作:
- 6to4プロトコル自体にタイムアウトの概念は含まれていません。しかし、IP層以下でパケットが消失した場合には、上位層のプロトコル(TCPなど)によって再送処理が行われることがあります。
- 再送メカニズム:
- 6to4プロトコル自体には再送メカニズムはありません。再送はTCPなどの上位レイヤプロトコルが担当します。
- エラー応答時の処理:
- 6to4ルータは、ICMPv4エラーを受け取ると、対応するICMPv6エラーを送信元ホストに送信します。エラーの種類には、宛先到達不能、プロトコル到達不能などがあります。
C) 認証・認可パターン
- 6to4プロトコルには、認証・認可のメカニズムはありません。パケットの送信元アドレスに基づいたルーティングと、ICMPエラーメッセージによる簡単なエラー通知のみが実装されています。6to4を介した通信のセキュリティは、IPsecなどの他のプロトコルを使用する必要があります。
D) 特殊パターン
- 初期化/終了シーケンス: 6to4には、明示的な初期化/終了シーケンスはありません。デバイスは、IPv4アドレスを設定すると、自動的に6to4を介して通信を開始できます。
- キープアライブメカニズム: 6to4には、明示的なキープアライブメカニズムはありません。接続状態を維持するためには、TCPなどの上位層プロトコルを使用する必要があります。
- バルク転送: 6to4プロトコルは、TCPなどの上位層プロトコルを介してバルク転送に対応できます。
- マルチパーティ通信: 6to4はユニキャスト通信を基本とするため、マルチパーティ通信には対応していません。
3. メッセージフォーマット
6to4プロトコルは、IPv4パケット内にIPv6パケットをカプセル化するのみで、独自の制御メッセージやデータメッセージは定義していません。したがって、以下ではカプセル化されたIPv4/IPv6パケットの構成を説明します。
A) 制御メッセージ
6to4は、ICMPv4やICMPv6メッセージを使用して、エラーや制御情報を伝達します。以下にICMPメッセージの例を示します。
フィールド名 | サイズ(bit) | 説明 | 条件 |
---|---|---|---|
IPv4 ヘッダ | 可変 | IPv4ヘッダ | 必須 |
- バージョン | 4 | 4 | 必須 |
- IHL | 4 | IPヘッダ長 | 必須 |
- DSCP | 6 | 優先度 | 必須 |
- ECN | 2 | 輻輳通知 | 必須 |
- 合計長 | 16 | IPv4パケット全体の長さ | 必須 |
- ID | 16 | パケットID | 必須 |
- フラグ | 3 | フラグ | 必須 |
- フラグメントオフセット | 13 | フラグメントオフセット | 必須 |
- TTL | 8 | 生存時間 | 必須 |
- プロトコル | 8 | 上位層プロトコル (41: IPv6) | 必須 |
- チェックサム | 16 | ヘッダチェックサム | 必須 |
- 送信元IPv4アドレス | 32 | 送信元IPv4アドレス | 必須 |
- 宛先IPv4アドレス | 32 | 宛先IPv4アドレス | 必須 |
IPv6 ヘッダ | 可変 | IPv6ヘッダ | 必須 |
- バージョン | 4 | 6 | 必須 |
- トラフィッククラス | 8 | 優先度 | 必須 |
- フローラベル | 20 | フローラベル | 必須 |
- ペイロード長 | 16 | IPv6ペイロード長 | 必須 |
- ネクストヘッダ | 8 | 上位層プロトコル | 必須 |
- ホップリミット | 8 | 生存時間 | 必須 |
- 送信元IPv6アドレス | 128 | 送信元IPv6アドレス | 必須 |
- 宛先IPv6アドレス | 128 | 宛先IPv6アドレス | 必須 |
IPv6 ペイロード | 可変 | IPv6ペイロード | 必須 |
- ICMPv4 エラーメッセージ:
- タイプ (8bit): エラーの種類を示す
- コード (8bit): エラーの詳細コード
- チェックサム (16bit): チェックサム
- その他(可変): ICMP固有のデータ (例: 問題のあるIPヘッダ)
- ICMPv6 エラーメッセージ:
- タイプ (8bit): エラーの種類を示す
- コード (8bit): エラーの詳細コード
- チェックサム (16bit): チェックサム
- その他(可変): ICMP固有のデータ (例: 問題のあるIPv6ヘッダ)
B) データメッセージ
6to4は、IPv6パケットをIPv4パケット内にカプセル化して転送するのみで、独自のデータメッセージ形式は定義しません。
C) 状態管理メッセージ
6to4には状態管理メッセージはありません。
4. 状態遷移
6to4プロトコルには、明確な状態遷移はありません。6to4ルータは、IPv4アドレスが設定されていれば、常にIPv6パケットの転送が可能となります。
- 各状態の定義:
- 初期状態: IPv4アドレスが設定され、6to4が有効になっていない状態
- 稼働状態: IPv4アドレスが設定され、6to4が有効になっている状態
- 状態遷移の条件:
- 初期状態 -> 稼働状態: IPv4アドレスが設定され、6to4が有効になった場合
- 各状態で許可されるメッセージ:
- 稼働状態: IPv6パケットをカプセル化し、IPv4パケットとして送信する。ICMPv4のエラーを受け取り、対応するICMPv6エラーを返す。
- タイムアウトと再試行の動作:
- 6to4プロトコル自体にタイムアウトと再試行のメカニズムはありません。これらは上位層プロトコル(TCPなど)が担当します。
5. パケットの種類と用途
A) コントロールパケット
- 種類と目的:
- ICMPv4 エラーメッセージ: IPv4ネットワークで発生したエラーを通知するために使用されます。
- ICMPv6 エラーメッセージ: IPv6ネットワークで発生したエラーを通知するために使用されます。
- 使用されるシナリオ:
- ネットワーク到達不能、プロトコル到達不能などのエラーを報告する場合。
- 特殊な処理要件:
- 6to4ルータは、ICMPv4のエラーをICMPv6のエラーに変換して、IPv6ホストに通知する必要があります。
B) データパケット
- ペイロードの形式:
- IPv6パケット全体がIPv4パケットのペイロードとしてカプセル化されます。
- フラグメンテーション:
- IPv4ネットワークで最大伝送ユニット(MTU)を超える場合は、IPv4レベルでフラグメンテーションが必要になる場合があります。
- 6to4ルータは、フラグメンテーションが発生した場合、IPv4パケットの再構築と、IPv6パケットのフラグメンテーション/再構築を処理する必要があります。
- 再組み立て要件:
- IPv4レイヤでフラグメンテーションされたパケットは、宛先ルータで再構築されます。
C) 管理パケット
6to4には、専用の管理パケットはありません。
エラーコードの詳細
6to4は、ICMPv4とICMPv6のエラーコードを利用します。以下は、一般的なエラーコードの一例です。
ICMPv4:
タイプ | コード | 説明 |
---|---|---|
3 | 0 | ネットワーク到達不能 |
3 | 1 | ホスト到達不能 |
3 | 3 | ポート到達不能 |
11 | 0 | TTL切れ |
ICMPv6:
タイプ | コード | 説明 |
---|---|---|
1 | 0 | ネットワーク到達不能 |
1 | 1 | ホスト到達不能 |
1 | 3 | アドレス到達不能 |
3 | 0 | TTL切れ |
6. プロトコルバリエーション
- バージョンによる違い:
- 6to4プロトコルには、バージョンによる違いはありません。RFC 3056で規定されたものが唯一の仕様です。
- 実装環境による違い:
- 6to4ルータの実装によって、パフォーマンスやセキュリティ機能に違いが出る可能性があります。
- 例えば、ソフトウェアルータとハードウェアルータでは、処理能力が異なる場合があります。
- セキュリティレベルによる違い:
- 6to4自体は、セキュリティ機能を持たないため、セキュリティレベルの違いはありません。IPsecなどの他のプロトコルと組み合わせてセキュリティを確保する必要があります。
- 最適化オプションによる違い:
- 6to4の実装において、パケット転送の最適化(高速化など)に関するオプションは実装に依存します。
7. セキュリティ考慮事項
- 認証メカニズムの詳細:
- 6to4プロトコルには、認証メカニズムはありません。
- 暗号化要件と推奨アルゴリズム:
- 6to4通信のセキュリティを確保するためには、IPsecなどの暗号化プロトコルを使用することが推奨されます。
- 推奨アルゴリズムとしては、AES (Advanced Encryption Standard) やSHA (Secure Hash Algorithm) があります。
- 完全性保護の方法:
- IPsecを使用する場合、完全性保護はAH (Authentication Header) やESP (Encapsulating Security Payload) によって実現されます。
- 既知の攻撃手法と対策:
- なりすまし攻撃: 6to4ルータが不正なIPv4アドレスを使用した場合に発生する可能性があります。IPsecなどで認証を導入して対策します。
- 中間者攻撃: ネットワーク経路上でパケットを盗聴・改ざんする攻撃。IPsecによる暗号化で対策します。
- サービス拒否攻撃: 大量のトラフィックを6to4ルータに送りつけて、サービスを妨害する攻撃。レート制限などの対策が必要です。
- セキュリティ監査の要件:
- 6to4ネットワークを運用する際には、定期的なセキュリティ監査を行い、潜在的な脆弱性を早期に発見する必要があります。
- セッション管理の方法:
- 6to4にはセッション管理のメカニズムはありません。
- 鍵管理に関する考慮事項:
- IPsecを使用する場合、鍵管理はIKE (Internet Key Exchange) などのプロトコルを使用して行います。
8. 標準化と仕様
- 関連するRFC番号と概要:
- RFC 3056: 6to4 Tunneling Specification. 6to4プロトコルの基本的な仕様を定義しています。
- 標準化団体と策定プロセス:
- IETF (Internet Engineering Task Force) が6to4プロトコルを標準化しました。
- 仕様書の構成と主要な章の説明:
- RFC 3056は、はじめに、導入、6to4アドレスフォーマット、6to4カプセル化、ルーティング、セキュリティの考慮事項など、6to4プロトコルに関する詳細な情報を提供しています。
- バージョン間の主な違い:
- 6to4プロトコルには、バージョンによる違いはありません。
- 将来の拡張性に関する規定:
- 6to4プロトコルは、IPv6の普及に伴い、廃止が推奨されているため、将来の拡張性は考慮されていません。
- 準拠性要件:
- 6to4プロトコルの実装は、RFC 3056の仕様に準拠する必要があります。
9. 実装時の注意点
- 一般的な実装パターン:
- 6to4ルータとして動作するソフトウェアやハードウェアを実装します。
- 6to4ルータは、IPv4インターフェースとIPv6インターフェースを持ち、パケットをカプセル化/デカプセル化する必要があります。
- スケーラビリティに関する考慮事項:
- 6to4リレーへのトラフィック集中を避けるため、複数のリレーを使用するなどの対策が必要です。
- 6to4ルータの処理能力は、多数の6to4トンネルを同時に処理できるだけの十分な能力が必要です。
- パフォーマンスチューニングのポイント:
- パケットの転送処理を最適化し、カプセル化/デカプセル化のオーバーヘッドを最小限に抑える。
- フラグメンテーション処理を効率化する。
- デバッグとトラブルシューティング方法:
- パケットキャプチャツール(Wiresharkなど)を使用して、パケットの流れを監視する。
- ログを解析して、問題の原因を特定する。
- テスト時の検証項目:
- IPv6パケットが正しくカプセル化/デカプセル化されるか。
- IPv4フラグメンテーションが発生した場合でも、パケットが正しく転送されるか。
- エラーメッセージが正しく伝達されるか。
- 他システムとの統合時の注意点:
- 6to4は、他のトンネリング技術(Teredoなど)と競合する可能性があるため、注意が必要です。
- IPsecなどの他のプロトコルと組み合わせて使用する場合は、互換性を確認する必要があります。
- 運用監視の推奨事項:
- 6to4ルータの負荷状況を監視し、過負荷にならないように管理する。
- ネットワークのトラフィック量を監視し、問題発生時に迅速に対応できるようにする。
10. 具体的な実装例
パケットダンプ例
送信 IPv6 パケット (簡略化):
IPv6 Header:
Version: 6
Traffic Class: 0
Flow Label: 0
Payload Length: 20
Next Header: 17 (UDP)
Hop Limit: 64
Source Address: 2002:c0a8:0101::1
Destination Address: 2001:db8::1
UDP Header:
Source Port: 12345
Destination Port: 53
Length: 20
Checksum: 0x1234
Payload:
... (DNS Query)
カプセル化された IPv4 パケット (簡略化):
IPv4 Header:
Version: 4
IHL: 5
DSCP: 0
ECN: 0
Total Length: 40
ID: 12345
Flags: 0
Fragment Offset: 0
TTL: 64
Protocol: 41 (IPv6)
Header Checksum: 0x5678
Source Address: 192.168.1.1
Destination Address: 192.88.99.1 (6to4 Relay Anycast)
IPv6 Header:
Version: 6
Traffic Class: 0
Flow Label: 0
Payload Length: 20
Next Header: 17 (UDP)
Hop Limit: 64
Source Address: 2002:c0a8:0101::1
Destination Address: 2001:db8::1
UDP Header:
Source Port: 12345
Destination Port: 53
Length: 20
Checksum: 0x1234
Payload:
... (DNS Query)
Wiresharkキャプチャ例
Wiresharkで6to4トラフィックをキャプチャした場合、以下のような情報が表示されます。
- IPv4:
- ソースアドレス: IPv4アドレスを持つ6to4ルータのアドレス
- デスティネーションアドレス: 192.88.99.1 (6to4リレーのエニキャストアドレス)
- プロトコル: 41 (IPv6)
- IPv6:
- カプセル化されたIPv6パケット
- ソースアドレス: 2002:xxxxxxxx::/48 (6to4のアドレスプレフィックス)
- デスティネーションアドレス: IPv6ネットワーク上のアドレス
11. 補足情報
- 一般的なユースケース:
- IPv4のみのネットワーク環境で、IPv6ネットワークに接続する際に使用されます。
- IPv6対応が進んでいないISPでも、IPv6への移行を試みたい場合に利用されます。
- 実装例や参考コード:
- Linuxカーネルには、6to4サポートが含まれており、
ip
コマンドで設定できます。 - 他のOSやルータでも、6to4機能が搭載されている場合があります。
- Linuxカーネルには、6to4サポートが含まれており、
- 関連ツールやライブラリ:
- Wireshark: パケットキャプチャツール
ip
コマンド: Linuxにおけるネットワーク設定コマンド
- トラブルシューティングガイド:
- 6to4ルータが正しく設定されているか確認します。
- ファイアウォールがIPv4/IPv6パケットをブロックしていないか確認します。
- ネットワークの接続状態を確認します。
- 用語集:
- 6to4リレー: 6to4トンネルエンドポイント。IPv4とIPv6ネットワークの間でパケットを転送します。
- カプセル化: IPv6パケットをIPv4パケット内に格納する処理。
- デカプセル化: IPv4パケットからIPv6パケットを取り出す処理。
- エニキャストアドレス: 同じアドレスを持つ複数のサーバにパケットを送信するアドレス。
- 参考文献:
- RFC 3056: 6to4 Tunneling Specification