NDP Proxy
NDP Proxyは、IPv6ネットワークにおいて、隣接探索(Neighbor Discovery: ND)メッセージを中継する役割を担うプロトコルです。
1. 概要
-
プロトコルの正式名称(略称)と発案された背景:
- 正式名称: Neighbor Discovery Protocol Proxy (NDP Proxy)
- 略称: NDP Proxy
- 発案された背景: IPv6ネットワークにおいて、隣接探索メッセージ(Neighbor Solicitation: NS, Neighbor Advertisement: NA)は通常、同じリンク内のノード間でやり取りされます。しかし、VLANや異なるサブネットにまたがる環境、あるいはセキュリティ上の理由から、直接的な隣接探索が困難な場合があります。NDP Proxyは、このような場合にNDメッセージを中継し、異なるネットワークセグメント間の通信を可能にするために考案されました。
-
主な用途、目的、解決する課題:
- 主な用途:
- VLAN間ルーティングにおけるIPv6アドレス解決
- 無線LAN環境におけるIPv6端末のローミングサポート
- セキュリティポリシーによるNDメッセージフィルタリング
- IPv6ネットワークの拡張
- 目的:
- 異なるネットワークセグメント間でのIPv6アドレス解決を可能にする
- NDメッセージのブロードキャスト範囲を制御する
- ネットワーク構成の柔軟性を高める
- 解決する課題:
- 異なるVLANやサブネット間で直接的な隣接探索ができない問題
- NDメッセージの過剰なブロードキャストによるネットワーク負荷
- IPv6アドレス解決におけるセキュリティ上のリスク
- 主な用途:
-
OSI参照モデルでの位置づけと他のプロトコルとの関係:
- 位置づけ: ネットワーク層(第3層)
- 関係するプロトコル:
- IPv6: NDP ProxyはIPv6を基盤として動作します。
- NDP (Neighbor Discovery Protocol): NDP ProxyはNDPメッセージを中継・処理します。
- ICMPv6: NDPはICMPv6メッセージを利用して隣接探索を行います。
- VLAN (Virtual LAN): NDP ProxyはVLAN環境で特に有用です。
-
主要な特徴と利点:
- 特徴:
- NDメッセージの中継機能
- アドレス解決プロセスの透過性
- 設定による柔軟なルーティング制御
- セキュリティ機能(フィルタリングなど)
- 利点:
- 異なるネットワークセグメント間でのIPv6通信を容易にする
- ネットワーク管理者の制御範囲を広げる
- ネットワークセキュリティを強化する
- 特徴:
-
一般的な使用シナリオ:
- 複数のVLANに接続されたIPv6ネットワーク
- 無線LAN環境におけるローミング
- データセンターにおける仮想マシン間の通信
- 異なるサブネット間のIPv6ルーティング
2. プロトコルフロー
NDP Proxyは、基本的にNDメッセージを傍受し、適切な宛先に転送する動作をします。 以下に主要な通信パターンを示します。
A) 基本パターン
sequenceDiagram
participant Node A
participant NDP Proxy
participant Node B
Node A->>NDP Proxy: Neighbor Solicitation (NS) for Node B's IPv6 address
activate NDP Proxy
NDP Proxy->>NDP Proxy: Check routing table/configuration
alt Node B is in reachable network segment
NDP Proxy->>Node B: Neighbor Solicitation (NS) for Node B's IPv6 address (unicast or multicast)
Node B->>NDP Proxy: Neighbor Advertisement (NA) with its IPv6 address and MAC address
NDP Proxy->>Node A: Neighbor Advertisement (NA) with Node B's IPv6 address and MAC address
else Node B is not reachable
NDP Proxy-->>Node A: (Optional) ICMPv6 error message (Destination Unreachable) or drop NS message
end
deactivate NDP Proxy
-
正常系の基本的な通信フロー:
- ノードAがノードBのIPv6アドレス解決のためにNeighbor Solicitation (NS)メッセージを送信します。
- NDP ProxyはNSメッセージを傍受します。
- NDP Proxyは、自身のルーティングテーブルまたは設定に基づいて、ノードBが接続されたネットワークセグメントにNSメッセージを転送します。
- ノードBはNSメッセージに応答して、Neighbor Advertisement (NA)メッセージをNDP Proxyに送信します。
- NDP ProxyはNAメッセージをノードAに転送します。
- ノードAは、ノードBのIPv6アドレスとMACアドレスのマッピングを自身のNeighbor Cacheに保存します。
-
各メッセージの目的と内容:
- Neighbor Solicitation (NS): IPv6アドレスに対応するリンクレイヤアドレス(MACアドレス)を要求するメッセージ。ターゲットアドレス(解決したいIPv6アドレス)を含む。
- Neighbor Advertisement (NA): NSメッセージへの応答、またはアドレス変更通知。送信元IPv6アドレス、ターゲットIPv6アドレス、リンクレイヤアドレス(MACアドレス)、およびフラグ(Solicited flag, Override flag)を含む。
- ICMPv6 Destination Unreachable: 宛先への到達不能を通知するエラーメッセージ。
-
タイミング要件:
- NDP Proxyは、NSメッセージを受信後、迅速に転送処理を行う必要があります。
- NAメッセージの転送も、遅延が少ないほど望ましいです。
- タイムアウト値は、ネットワーク環境に合わせて調整する必要があります。
B) エラーハンドリングパターン
sequenceDiagram
participant Node A
participant NDP Proxy
participant Node B
Node A->>NDP Proxy: Neighbor Solicitation (NS) for Node B's IPv6 address
activate NDP Proxy
NDP Proxy->>NDP Proxy: Check routing table/configuration
alt Node B is not reachable or NS message is invalid
NDP Proxy-->>Node A: ICMPv6 error message (Destination Unreachable or Parameter Problem)
else Timeout waiting for NA from Node B
NDP Proxy-->>Node A: ICMPv6 error message (Destination Unreachable) after retry (optional) or drop NS message
end
deactivate NDP Proxy
-
タイムアウト時の動作:
- NDP Proxyは、NSメッセージを転送後、一定時間内にNAメッセージを受信できなかった場合、タイムアウトと判断します。
- タイムアウト時には、ノードAに対してICMPv6 Destination Unreachableメッセージを送信するか、NSメッセージを破棄することができます。
- リトライ回数を設定し、NAメッセージを受信するまで再送を試みることも可能です。
-
再送メカニズム:
- NSメッセージの再送は、ネットワーク状況に応じて設定可能です。
- 再送間隔は、RFC4861で推奨される値を参考に設定することが望ましいです。
-
エラー応答時の処理:
- ICMPv6 Destination Unreachableメッセージを受信した場合、ノードAはアドレス解決に失敗したと判断します。
- ノードAは、一定時間後に再度NSメッセージを送信するか、エラー処理を行います。
C) 認証・認可パターン
NDP自体には認証・認可の機能は含まれていません。しかし、NDP Proxyの実装によっては、セキュリティを強化するために認証・認可機能を組み込むことができます。これは標準的な機能ではないため、実装に依存します。 以下は例です。
sequenceDiagram
participant Node A
participant NDP Proxy
participant AAA Server
Node A->>NDP Proxy: Neighbor Solicitation (NS) for Node B's IPv6 address
activate NDP Proxy
NDP Proxy->>AAA Server: Authentication Request (Node A's Credentials)
AAA Server-->>NDP Proxy: Authentication Response (Success/Failure)
alt Authentication Success
NDP Proxy->>AAA Server: Authorization Request (Request to proxy NS for Node A)
AAA Server-->>NDP Proxy: Authorization Response (Permitted/Denied)
alt Authorization Permitted
NDP Proxy->>Node B: Neighbor Solicitation (NS) for Node B's IPv6 address
Node B->>NDP Proxy: Neighbor Advertisement (NA) with its IPv6 address and MAC address
NDP Proxy->>Node A: Neighbor Advertisement (NA) with Node B's IPv6 address and MAC address
else Authorization Denied
NDP Proxy-->>Node A: ICMPv6 error message (Administratively Prohibited)
end
else Authentication Failure
NDP Proxy-->>Node A: ICMPv6 error message (Administratively Prohibited)
end
deactivate NDP Proxy
-
認証シーケンス:
- ノードAがNSメッセージを送信します。
- NDP Proxyは、ノードAの認証情報をAAA (Authentication, Authorization, Accounting) サーバに送信します。
- AAAサーバは、ノードAの認証情報を検証し、認証結果をNDP Proxyに返します。
-
認可確認フロー:
- 認証に成功した場合、NDP Proxyは、ノードAがNSメッセージを転送する権限を持っているかどうかをAAAサーバに確認します。
- AAAサーバは、ノードAの権限を検証し、認可結果をNDP Proxyに返します。
-
セッション確立プロセス:
- 認証・認可に成功した場合、NDP ProxyはノードAとの間にセッションを確立し、以降のNSメッセージをセッション内で処理します。
- セッションの有効期限を設定することができます。
D) 特殊パターン
- 初期化/終了シーケンス:
NDP Proxyの起動時と終了時に特別なシーケンスは通常必要ありません。 起動時にはルーティングテーブルや設定を読み込み、終了時にはリソースを解放する程度です。
- キープアライブメカニズム:
NDP Proxy自体は、ネイバーとのキープアライブを直接行いません。 IPv6ルータがネイバディスカバリでネイバーの到達可能性を確認するのとは異なります。 ただし、認証・認可機能を実装している場合、AAAサーバとの間でキープアライブメッセージを交換することがあります。
- バルク転送:
NDPは本来、少量の制御メッセージを扱うプロトコルであり、バルク転送は想定されていません。
- マルチパーティ通信:
NDP Proxyは、基本的にはユニキャストまたはマルチキャストによるアドレス解決をサポートします。 明示的なマルチパーティ通信の機能は持ちません。
3. メッセージフォーマット
NDP Proxyは、主に標準のNDPメッセージ(NS, NA)を処理します。ここでは、NDP Proxyが処理する主要なメッセージのフォーマットについて説明します。
A) 制御メッセージ
-
NDP Proxy自体が生成する制御メッセージは、エラー通知(ICMPv6 Destination Unreachableなど)に限られます。その他のメッセージは、NDPメッセージを転送する過程で傍受・処理するものです。
-
エラー通知 (ICMPv6 Destination Unreachable):
フィールド名 | サイズ(bit) | 説明 | 条件 |
---|---|---|---|
Type | 8 | ICMPv6メッセージのタイプ (Destination Unreachable = 1) | 必須 |
Code | 8 | Destination Unreachableの理由コード (例: No route to destination = 0, Administratively prohibited = 1, Beyond scope of source address = 2) | 必須 |
Checksum | 16 | ICMPv6メッセージ全体のチェックサム | 必須 |
Unused | 32 | 未使用領域 (0で埋める) | |
Original IPv6 Header | 可変長 | エラーを引き起こしたIPv6パケットのヘッダ | 必須 |
Original IPv6 Payload | 可変長 | エラーを引き起こしたIPv6パケットのペイロードの先頭8オクテット (十分な領域がない場合は可能な限り) | 必須 |
B) データメッセージ
NDPはデータ転送プロトコルではありません。
C) 状態管理メッセージ
NDP Proxy自体が状態管理メッセージを送受信することはありません。ただし、認証・認可機能を実装している場合、AAAサーバとの間で状態管理メッセージ(例:セッション維持、統計情報収集)をやり取りすることがあります。これらのメッセージフォーマットは、使用するAAAプロトコル(RADIUS, Diameterなど)に依存します。
4. 状態遷移
NDP Proxyの状態マシンは、比較的単純です。
-
各状態の定義:
- 初期化状態 (Initializing): NDP Proxyの起動処理中。設定ファイルの読み込み、ネットワークインターフェースの初期化など。
- 待機状態 (Idle): NDPメッセージの受信を待機している状態。
- 処理状態 (Processing): NDPメッセージのルーティング処理、認証・認可処理などを行っている状態。
- エラー状態 (Error): 致命的なエラーが発生し、正常な動作ができない状態。
-
状態遷移の条件:
- Initializing -> Idle: 初期化処理が完了した場合。
- Idle -> Processing: NDPメッセージを受信した場合。
- Processing -> Idle: NDPメッセージの処理が完了した場合。
- Any -> Error: 致命的なエラーが発生した場合。
-
各状態で許可されるメッセージ:
- Initializing: 設定ファイル、初期化コマンド
- Idle: NS, NAメッセージ
- Processing: NS, NAメッセージ、AAAサーバとの通信メッセージ
- Error: 管理者による診断コマンド
-
タイムアウトと再試行の動作:
- 処理状態において、AAAサーバとの通信がタイムアウトした場合、再試行を行うことがあります。
- 再試行回数を超えた場合は、エラー状態に移行するか、処理を中断してIdle状態に戻ります。
5. パケットの種類と用途
NDP Proxyが扱うパケットは、主に以下の通りです。
A) コントロールパケット
- 種類と目的:
- ICMPv6 Destination Unreachable: 宛先への到達不能を通知する。
- RADIUS/Diameter (認証・認可機能を実装している場合): 認証、認可、アカウンティング処理を行う。
- 使用されるシナリオ:
- 宛先ノードが存在しない、または到達不能な場合に、ICMPv6 Destination Unreachableを送信する。
- ユーザ認証が必要なネットワークにおいて、RADIUS/Diameterを使用してユーザ認証を行う。
- 特殊な処理要件:
- ICMPv6 Destination Unreachableは、TTL (Time to Live) を適切に設定する必要がある。
- RADIUS/Diameterは、セキュリティを考慮して暗号化通信を行う必要がある。
B) データパケット
NDPはデータ転送プロトコルではありません。
C) 管理パケット
- 種類と目的:
- SNMP (Simple Network Management Protocol): NDP Proxyの状態監視、設定変更を行う。
- Syslog: イベントログを出力する。
- 使用されるシナリオ:
- ネットワーク管理者がNDP Proxyの状態を監視する場合。
- NDP Proxyで発生したイベントを記録する場合。
- 特殊な処理要件:
- SNMPは、セキュリティを考慮してアクセス制御を行う必要がある。
- Syslogは、ログローテーションを適切に設定する必要がある。
エラーコード (ICMPv6 Destination Unreachable Code):
Code | 説明 |
---|---|
0 | No route to destination |
1 | Communication with destination administratively prohibited |
2 | Beyond scope of source address |
3 | Address unreachable |
4 | Port unreachable |
5 | Source address failed ingress/egress policy |
その他 | RFC4443に定義されているエラーコード |
6. プロトコルバリエーション
- バージョンによる違い:
- NDP自体にはバージョンによる大きな違いはありません。ただし、NDP Proxyの実装によっては、拡張機能やセキュリティ機能に違いがある場合があります。
- 実装環境による違い:
- OS、ハードウェア、ネットワーク構成によって、NDP Proxyの設定や動作が異なる場合があります。
- セキュリティレベルによる違い:
- 認証・認可機能を実装している場合、認証方式や暗号化アルゴリズムによってセキュリティレベルが異なります。
- 最適化オプションによる違い:
- キャッシュサイズ、ルーティングテーブルの更新頻度、再送回数などのパラメータを調整することで、パフォーマンスを最適化できます。
7. セキュリティ考慮事項
- 認証メカニズムの詳細:
- 認証方式: Pre-shared key, RADIUS, Diameterなど
- 認証情報: ユーザ名、パスワード、証明書など
- 認証プロトコル: PAP, CHAP, EAPなど
- 暗号化要件と推奨アルゴリズム:
- 認証情報の暗号化: AES, SHA-256など
- 通信経路の暗号化: IPsec, TLSなど
- 完全性保護の方法:
- メッセージ認証コード (MAC): HMACなど
- 既知の攻撃手法と対策:
- NDPスプーフィング: 送信元アドレス詐称による攻撃。対策: 送信元アドレス検証、アクセス制御リスト (ACL)
- DoS攻撃: 大量のNDメッセージを送信してリソースを枯渇させる攻撃。対策: レート制限、QoS (Quality of Service)
- セキュリティ監査の要件:
- 定期的なセキュリティ脆弱性スキャン
- アクセスログの監視
- 不正アクセスの検知と対応
- セッション管理の方法:
- セッションIDの生成
- セッションの有効期限管理
- セッション情報の保護
- 鍵管理に関する考慮事項:
- 秘密鍵の安全な保管
- 鍵のローテーション
- 鍵の配布と更新
8. 標準化と仕様
- 関連するRFC番号と概要:
- RFC4861: Neighbor Discovery for IP version 6 (IPv6)
- RFC4862: IPv6 Stateless Address Autoconfiguration
- RFC4443: Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
- 該当するRADIUS/Diameter の RFC (認証・認可機能を実装している場合)
- 標準化団体と策定プロセス:
- IETF (Internet Engineering Task Force)
- 仕様書の構成と主要な章の説明:
- RFC4861:
- Introduction: 概要
- Terminology: 用語定義
- Message Format: メッセージフォーマット
- Neighbor Discovery Operation: 隣接探索の動作
- Stateless Address Autoconfiguration: ステートレスアドレス自動設定
- Security Considerations: セキュリティ考慮事項
- RFC4861:
- バージョン間の主な違い:
NDP自体にはバージョン間の大きな違いはありません。
- 将来の拡張性に関する規定:
- NDPメッセージにオプションフィールドを追加することで、拡張機能を追加することができます。
- 準拠性要件:
- RFC4861に準拠していること。
9. 実装時の注意点
- 一般的な実装パターン:
- イベントドリブンアーキテクチャ
- マルチスレッド/マルチプロセス
- スケーラビリティに関する考慮事項:
- 負荷分散
- キャッシュサイズ
- ルーティングテーブルの最適化
- パフォーマンスチューニングのポイント:
- パケット処理の最適化
- メモリ管理の最適化
- コンテキストスイッチの削減
- デバッグとトラブルシューティング方法:
- ログ出力
- パケットキャプチャ
- デバッガ
- テスト時の検証項目:
- 正常系の動作
- エラー処理
- セキュリティ
- パフォーマンス
- スケーラビリティ
- 他システムとの統合時の注意点:
- 互換性
- セキュリティ
- パフォーマンス
- 運用監視の推奨事項:
- CPU使用率、メモリ使用量、ネットワークトラフィックの監視
- エラーログの監視
- セキュリティイベントの監視
10. 具体的な実装例
- このプロトコルを使っての一般的なクエリ/レスポンスのパケットダンプ例:
Frame 1: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: 00:11:22:33:44:55 (00:11:22:33:44:55), Dst: 33:33:00:00:00:01 (33:33:00:00:00:01)
Destination: 33:33:00:00:00:01 (33:33:00:00:00:01)
Source: 00:11:22:33:44:55 (00:11:22:33:44:55)
Type: IPv6 (0x86dd)
Internet Protocol Version 6, Src: fe80::211:22ff:fe33:4455, Dst: ff02::1
Version: 6
Traffic Class: 0x00
Flow Label: 0x00000
Payload Length: 54
Next Header: ICMPv6 (0x3a)
Hop Limit: 255
Source Address: fe80::211:22ff:fe33:4455
Destination Address: ff02::1
Internet Control Message Protocol v6
Type: Neighbor Solicitation (135)
Code: 0
Checksum: 0x37f6 [correct]
Reserved: 00000000
Target Address: 2001:db8:0:1::2
Option (Source link-layer address)
Type: Source link-layer address (1)
Length: 1 (8 bytes)
Link-layer address: 00:11:22:33:44:55
Frame 2: 66 bytes on wire (528 bits), 66 bytes captured (528 bits)
Ethernet II, Src: 00:aa:bb:cc:dd:ee (00:aa:bb:cc:dd:ee), Dst: 00:11:22:33:44:55 (00:11:22:33:44:55)
Destination: 00:11:22:33:44:55 (00:11:22:33:44:55)
Source: 00:aa:bb:cc:dd:ee (00:aa:bb:cc:dd:ee)
Type: IPv6 (0x86dd)
Internet Protocol Version 6, Src: 2001:db8:0:1::2, Dst: fe80::211:22ff:fe33:4455
Version: 6
Traffic Class: 0x00
Flow Label: 0x00000
Payload Length: 22
Next Header: ICMPv6 (0x3a)
Hop Limit: 255
Source Address: 2001:db8:0:1::2
Destination Address: fe80::211:22ff:fe33:4455
Internet Control Message Protocol v6
Type: Neighbor Advertisement (136)
Code: 0
Checksum: 0x3df8 [correct]
Flags: 0x60, Router, Solicited
1... .... = Router: Set
.1.. .... = Solicited: Set
..0. .... = Override: Not set
Reserved: 00000000
Target Address: 2001:db8:0:1::2
Option (Target link-layer address)
Type: Target link-layer address (2)
Length: 1 (8 bytes)
Link-layer address: 00:aa:bb:cc:dd:ee
- 実際のWiresharkキャプチャ例:
- Wiresharkなどのパケットアナライザを使用して、実際のNDPメッセージをキャプチャし、分析することができます。
11. 補足情報
- 一般的なユースケース:
- VLAN間ルーティング
- 無線LANローミング
- データセンターの仮想化環境
- 実装例や参考コード:
- オープンソースのNDP Proxy実装 (例: radvd)
- 関連ツールやライブラリ:
- Wireshark
- libpcap
- トラブルシューティングガイド:
- ログの確認
- パケットキャプチャ
- ネットワーク構成の確認
- 用語集:
- NDP: Neighbor Discovery Protocol
- NS: Neighbor Solicitation
- NA: Neighbor Advertisement
- VLAN: Virtual LAN
- MACアドレス: Media Access Control address
- 参考文献:
- RFC4861
- RFC4862
- RFC4443
このドキュメントは、NDP Proxyの実装、運用、トラブルシューティングに役立つ情報を提供することを目的としています。