ひよっこエンジニアの備忘録

日常とかSEとしての備忘を書いていきます。

IPv6

[IPv6とは]
IPv4アドレスが枯渇に備えて開発されたプロトコル
IPv4の32bitに対してIPv6は128ビット(※)のアドレス長のため実質無制限にアドレスを割り当てられる。。
※最大340澗 ( 340,282,366,920,938,463,463,374,607,431,768,211,456 ) 個

特徴としては
・16進数表記
→128ビットを16bitごとにコロン(:)で区切り、8つのフィールドに分け16進数で表記。
 さらに以下のような省略表記が可能。
 -先頭の0は省略OK(0111→111,0001→1)
 -全て0のフィールドは1つの0に省略OK(0000→0)
 -全て0のフィールドが連続している場合は、0を全て省略して
2重コロン(::)に省略OK。(2001:0000:0000:aaaa...→2001::aaaa...)
 ※ただしアドレス内で一度だけしか使えない。
・自動設定機能
 →IPv6は自動設定機能を備えており、クライアントPCは自動的に
  IPv6アドレスを使用できる。
・経路集約
 →IPv6アドレスの階層構造が厳密であるため、より効率的な経路集約を実現し
  ルータの負荷を軽減。
・シンプルなヘッダ
IPv6の簡素なヘッダにより、パケット転送の際のルーティング処理による
 負荷が軽減される。
 (具体的にはチェックサムが削除されたことでエラー処理が不要になった。)
・モビリティ(移動性)
→ IPv6のMobile IPv6により移動通信中でも同一のIPアドレスを使用して通信を途切れなく通信できる。
・セキュリティ(安全性)
IPv6IPsecの実装が必須であり、実装させたい場合は、特別な機器を必要せずIPsecを実装できる。
・複数アドレス
IPv4では1NIC1アドレスだったが、IPv6はリンクローカル&グローバル等
 複数タイプのアドレスが割り当てられる。


IPv6アドレスは、プレフィックスとインターフェースIDにより構成される。
※プレフィックス=IPv4のネットワーク部に該当。
 インターフェースID=IPv4ホスト部に該当。



[IPv6アドレスの種類]
▼アドレスタイプ
・ユニキャストアドレス(1対1)
IPv4のユニキャストと同じように、1対1の通信で利用されるアドレス。
 このアドレスを使用し、1つのインターフェースを特定することができる。
マルチキャストアドレス(1対グループ)
IPv4マルチキャストと同じく、1対グループの通信で利用されるアドレス。
 マルチキャストは複数のインターフェースに割り当てることのできるアドレス。
 IPv6ではブロードキャストアドレスが存在しないため、マルチキャストアドレス
 の一部を同様の用途に割り振ることでブロードキャストと同等機能を実現。
・エニーキャストアドレス(1対グループ内の1つ)
IPv4にはないアドレス。マルチキャストと同じくグループ宛ての通信となるが
 グループに属する1つのインターフェースにパケットが到達すると、それ以上は
 配送されない。つまりグループで最も近いデバイスとだけ通信するようになる。
 エニーキャストは複数のインターフェースに割り当てることのできるアドレス。


▼ユニキャストアドレス
・リンクローカル(同セグ用)
→同セグの端末と通信する場合に使用するアドレス。
 リンクローカルアドレス宛てのパケットはルーティングされない。
 ※ルータを超えられない。
 先頭の10ビットが「1111 1110 10(FE80::/10)」続く54bitが
 全て0になるため「FE80::/64」の範囲となる。

・ユニークローカル(イントラ用)
IPv4のプライベートアドレスに相当する。異なるセグメント上の端末と
 通信できるが組織内ネットワーク(イントラネット)でのみ有効なアドレス。
 アドレスブロックは「FC00::/7」のIPv6アドレスとなるが、正確には
 以下の2つの「/8」のグループに分類することができる。
 ・FC00::/8 将来の定義用
 ・FD00::/8 アドレス中のグローバル識別子部分をランダムな値とし自由に使用可能


・グローバルユニキャスト(グローバル)
IPv4のグローバルアドレスに相当する。全てのIPv6ネットワークで一意となる。
 ローカル、組織内、インターネット等スコープの制限はなくどこでも利用可能。
 IANAが管理しており、現在解放されているグローバルユニキャストアドレスは
 以下のとおり。

 ・「 2001::/3 」から始まるアドレス→ISP
 ・「 2000::/3 」を用途別に /16 で以下のように分類。
  →「 2001::/16 」 ⇒ IPv6インターネット用アドレス
  →「 2002::/16 」 ⇒ 6to4用アドレス
  →「 2003::/16 ~ 3FFD::/16 」 ⇒ 現在、未割り当て


マルチキャストアドレス
マルチキャストアドレスは先頭の8ビットが「1111 1111(FF00::/8)」から始まる。
 次の4ビットはフラグ、次の4ビットはスコープ、最後の112ビットはグループID。
 フラグは、IANAによって永続的に割り当てられるものは 0 、
 一時的に割り当てられるものは 1 と指定。


[アドレス割り当て]
IPv6アドレスは、64ビットのプレフィックスと64ビットのインターフェースIDにより
構成される。
インターフェースIDは「手動」/「自動」のどちらかで構成。

自動で生成する場合、EUI-64と呼ばれるフォーマットを使用して自動生成する。
EUI-64は、IEEEによって標準化された64ビット長の識別子。
EUI-64による自動生成は、48ビットのMACアドレスの中央に
16ビットの「FFFE」を追加して64ビットに拡張することで
インターフェースIDが生成される。

EX)0050:5680:ABCDの場合
 1.48bitのMACを24bitに分割し「FFFE」を挿入
  0050:56FF:FE80:ABCD
 2.先頭から7bit目を反転
  00000000→00000010
3.16進数に戻してインターフェースID完成
  0250:56FF:FE80:ABCD
4.完成したインターフェースIDにプレフィックスをプラスし
  リンクローカルアドレス完成。
  FE80::0250:56FF:FE80:ABCD/64

[Neighbor Discovery]
IPv6ではNeighbor Discovery(ND)機能を使用しアドレスを解決する。
IPv4でいうARP
このNeighbor Discovery(近隣探索)は、ICMPv6の
Neighbor Solicitation(NS)メッセージを送信し、本メッセージを受信したノードは
Neighbor Advertisement(NA)メッセージを送信して応答し、ノード間で
IPv6通信が可能となる。
NSメッセージがARPリクエスト、NAメッセージがARPリプライに相当。

MACアドレスを知るため、ICMPv6のNeighbor Solicitation送信
②ICMPv6のNeighbor Advertisement受信、(これにMACアドレスが乗っている)
MACアドレス情報をキャッシュへ保存

「show ipv6 neighbors」コマンドでキャッシュ情報を確認する。


[ステートレス/ステートフル自動設定]

▼ステートレス自動設定
ステートレス自動設定では「プレフィックス」が自動的に設定され、
「インターフェースID」はEUI-64で生成される。
このステートレス自動設定はオートコンフィグレーションとも呼ばれる。
この方法はIPv6対応のルータとIPv6対応の端末とが、RSとRAメッセージを
やり取りすることで実現。

・RS(Router Solicitation/FF02::2)
 ルータ要請。IPv6対応ホストが、IPv6対応ルータに送信するメッセージ。
 IPv6のプレフィックス、デフォルトゲートウェイ等を要求するメッセージ。
・RA(Router Advertisement/FF02::1)
 ルータアドバタイズメント。RSを受信したときに応答するメッセージ。
 ホストに割り当てるプレフィックス、デフォルトゲートウェイの情報を含む。

IPv6対応のホストはインターフェースでIPv6が有効であれば、
 リンクアップした時点でリンクローカルアドレスが自動設定される。
②次にそのリンクローカルアドレスを送信元アドレスとして同セグ内のルータへ
 RS(ルータ要請)メッセージを送信し、グローバルユニキャストの
 プレフィックスを得る。
③ホストからRSメッセージを受信したルータはRA (ルータアドバタイズメント) を
 送信します。この情報にIPv6ホストに割り当てるプレフィックス、
 デフォルトゲートウェイ、有効期限などの情報が含まれています。
④RAを受信したホストは受信したプレフィックスと自身のMACアドレスを利用して
 EUI-64により生成したインターフェースIDを組み合わせることで、
 グローバルユニキャストアドレスを生成し自動設定が完了する


▼ステートフル自動設定
ステートフル自動設定では「プレフィックス と インターフェースID」を
DHCPv6サーバにより割り当てます。
またDHCPv4と同様にDNSサーバ等の情報も割り当て可能。

①Solicit(要請)/host→Server
②Advertise(通知)/Server→host
③Request(要求)/host→Server
④Reply(アドレス、オプション情報提供)/Server→host

ただしDHCPv6サーバ単体だけでは完全に機能しない。
ルータが送信するRA(Router Advertisement)のMフラグ/Oフラグという
2つのフィールドと連携する必要がある。

・Mフラグ
 IPv6アドレスをDHCPv6サーバで取得するか、RAで得たプレフィックスから
 自身で生成するかを決定。
 ONの場合、DHCPv6サーバから取得する。
 OFFの場合、RAで得たプレフィックスから自身で生成する。
・Oフラグ
 IPv6アドレス以外のパラメータをDHCPv6サーバから取得するか、
 取得しないかを決定。
 ONの場合、DHCPv6サーバから取得する。
 OFFの場合、DHCPv6サーバから取得しない(手動設定)

Ciscoのインターフェースはデフォルトで、MフラグOフラグともに
OFF( 0 )のためステートレス自動設定となる。
※アドレスは自身で生成、その他(DNS等)は手動設定
Mフラグ、Oフラグの設定方法は以下のコマンドにより変更可能

 ◆ Cisco IOS - M(Managed)フラグのON(1)にするための設定
 Cisco(config-if) # ipv6 nd managed-config-flag
 ◆ Cisco IOS - O(Other Config)フラグのON(1)にするための設定
 Cisco(config-if) # ipv6 nd other-config-flag

またDHCPv6-PD(prefix delegation)と呼ばれる
ホストまたはルータにプレフィックスのみを払い出すものもある。