IPv6

ISP(Internet Service Provider)…エンドユーザーにIPv6の割り当てをしている

  • IPv4のアドレス枯渇問題を解決するため32ビットから128ビット(16ビットずつ8個のフィールドでフィールドでフィールドで16進数で表記)に拡張
  • ヘッダの簡素化
  • ブロードキャストの廃止
  • 階層構造による効率的なルート集約
  • 自動設定
  • IPsecのサポート必須

IPv6には、次の3種類のアドレスがあります。

  • ユニキャスト‥1体1の通信で利用される単一インターフェイス用のアドレス
  • マルチキャスト‥特定のグループに対する通信で利用されるアドレス
  • エニーキャスト‥グループ内の最も近いデバイスとの通信で利用されるアドレス
アドレス説明・覚え方
fc00::/7
ユニークローカルユニキャストアドレス
FC Tokyo 7人のユニークな住所はプライベートな話題
FE80::/10リンクローカルアドレス
鉄也を十分リンスしろ
FF0e::1同じインターネット上の全てのノードに送信
FF01::1同じノード上の全てのノードに送信
FF02::1同じリンク上の全てのノードに送信
FF02::5同じリンク上の全てのOSPFルータ
FF02::6同じリンク上の全てのOSPF指定ルータ
FF02::9同じリンク上の全てのRIPルータ
FF02::101同じリンク上の全てのNTPサーバ
FF05::1同じサイト内の全てのノードに送信
FF05::101サイトローカル上の全てのNTPサーバ
FF08::1同じ拠点内の全てのノードに送信

IPv6ヘッダ

  • フィールドの簡素化⇒処理が簡単に
  • IPv6ヘッダの方がサイズが大きくなっている
  • 40バイト固定長
  • チェックサムの削除
  • フローラベル(効率的にアプリケーションフローを識別)の追加
  • オプション機能は拡張ヘッダ
  • ルータでのフラグメント処理は禁止
  • ホップリミットは(IPv4のTTL:Time To Live生存期間)に相当

グローバルユニキャストアドレス

  • 世界中で一意
  • IANAで管理される
  • 最初の3ビットが001で始まる、2000::/3で表記されます。
  • 2001::/16 インターネット用のアドレス
  • 2002::/16 6to4トンネリング用のアドレス
  • 2003::/16〜3FFD::/16 役割が未定

グローバルプレフィックス(ランダム値、48ビット) サブネット(16ビット) インターフェースID(64ビット)

  • グローバルプレフィックス、サブネット、インターフェースIDの3フィールドで構成される
  • 前半64ビットはIPv4のネットワークアドレスに該当する
  • 一般的に64ビットのインターフェースIDを使用する

リンクローカルユニキャストアドレス

  • ホスト間で一意となる。
  • 同じサブネット上(同一リンク間)での通信が可能なアドレス
  • 最初の10ビットが1111111010で始まる、FE80::/10で表記されます。
  • 最初に続く54ビットは0
  • IPv6を扱う必ずインターフェース全てに設定されます。
  • ルーティングの対象になりません、このアドレスが送信元や宛先となっている場合、ルータはデータを転送しません。
  • リンクローカルアドレスを手動で設定しない場合、自動生成されたリンクローカルアドレスが設定される

ユニークローカルユニキャストアドレス

  • 企業などのローカルで使用されるアドレスで、IPv4のプライベートIPアドレスに相当します。
  • 最初の7ビットが1111110で始まる、FC00::/7で表記されます。

fd ランダム値(40ビット) サブネット(16ビット) インターフェースID(64ビット)

ユニキャストアドレスの特別なアドレス

  • ::/128 未指定アドレス
  • ::1/128 ループバックアドレス
  • ::FFFF:<IPv4> IPv4射影アドレス
    (例 0:0:0:0:0:FFFF:192.168.10.1)

マルチキャストアドレス

エニーキャストアドレス

エニーキャストアドレスでは、複数ノードのインターフェースに対して同じユニキャストアドレスを割り当てます。エニーキャストアドレス宛のパケットはそのアドレスを持つ最も近いノードのインターフェースに転送されます。

エニーキャストを使用しることでサーバの冗長化と負荷分散ができます。

IPv6アドレス割り当て

設定方法設定範囲
手動設定128ビット(config-if)#ipv6 address (アドレス/プレフィックス長)IPv6アドレス全桁設定
手動設定64ビット(config-if)#ipv6 address (サブネットID/64) eui-64サブネットIDを手動設定しインタフェースIDをeui-64で自動設定
ステートレス
自動設定
(SLAAC)
指定なし(config-if)#ipv6 address autoconfig [default]インタフェースIDをeui-64で自動設定
ステートフル
自動設定
(DHCPv6)
指定なし(config-if)#ipv6 address dhcp

EUI-64

EUI-64による自動生成は、48ビットのMACアドレスの中央に16ビットの「FFFE」を追加して64ビットに拡張することでインターフェースIDが生成されます。

  1. 48ビットを24ビットに分割
  2. 16ビットのFFFEを挿入
  3. インターフェイスの元のMACアドレスの7番目のビットを反転

インターフェイスをEUI-64で自動生成する場合はコマンドの末尾にeui-64キーワードを付加します。

(config-if)#ipv6 address <ipv6-address> / <prefix-length> [ eui-64 ] [ anycast ]

IPv6アドレスの手動設定

ルータのインターフェイスに対してIPv6ユニキャストアドレスを手動設定するには、ipv6 addressコマンドを使用してIPアドレスとプレフィックス長を設定します。

IPv6アドレスの自動設定

SLAAC

手動設定、DHCPサーバによる自動設定に加え、IPv6ではSLAAC(Stateless Address Auto Configuration : ステートレスアドレス自動設定)という自動設定機能があります。

  • SLAACのRAメッセージには64bitのプレフィックスが含まれる
  • 各ホストのIPv6アドレス=ルータが送信したプレフィクス(64ビット) +modified EUI-64形式でMACアドレスから生成したインタフェースID(64ビット)

(config-if)#ipv6 address autoconfig

前半64bit後半64bit
(アドバタイズされた)
リンクローカルプレフィックス
インターフェースID

IPv6ネイバーテーブル

IPv4のARPテーブルに似た役割を持ちます。

#show ipv6 neighbors

IPv6の近隣探索(ND)

ネイバー検出は、同じリンク上の異なるノードが近隣に存在をアドバタイズし、近隣の存在について学習できるプロトコルです。

IPv4ではデータリンク層のアドレス(MACアドレス)を解決するために、ARPブロードキャストによりアドレスを解決します。IPv6ではNeighbor Discovery(ND)機能を使用しアドレスを解決しています。

タイプメッセージ
133RS:Router Solicitation(ルータ要請)
134RA:Router Advertisement(ルータ広告)
135NS:Neighbor Solicitation(近隣要請)
136NA:Neighbor Advertisement(近隣通知)
137Redirect(リダイレクト)

IPv6ルーティングの有効化

(config)#ipv6 unicast-routing

IPv6への移行技術

デュアルスタック

デュアルスタックとは、IPv4とIPv6の両方のプロトコルが処理できるように構築することです。

トランスレータ

トランスレータは、パケット変換を行います。(カプセル化しない)
NAT-PT、NAT64などの種類があります。

手動トンネル

デュアルスタックルータを使用してIPv6パケットをIPv4プロトコルでカプセル化する。

管理者が宛先と送信元のルータを手動で設定します。

GREトンネル

IPv6パケット以外にも多くのパケットを転送できます。手動トンネルよりもオーバーヘッドが大きくなります。

自動トンネル(6to4トンネル)

IPv4グローバルアドレスを一つ以上持つサイトに対してIPv6アドレスを割り当て、カプセル化したIPv6パケットを転送します。

IPv6アドレスの名前解決

pingコマンドやtalentコマンドを実行する際に、長いIPv6アドレスを指定するのは面倒です。そこでホスト名とIPv6アドレスのマッピング情報を事前に用意しておくと、ホスト名を指定して通信できるため便利です。

ホスト名とIPv6アドレスのマッピング情報の登録
(config)#ipv6 host <word> <ipv6-address1> [ <ipv6-address> ……<ipv6-address4> ]
*word…任意のホスト名、*IPv6-address…最大4つまで指定

IPv6 ACL

IPv6でサポートするのは、名前付きACLのみです。

IPv6はアドレス解決にARPではなくICMPを使用します。そのため、IPv6 ACLではIPv6近接探索を有効するために、「暗黙のpermit」条件も設定されています。

  • permit icmp any any nd-ns(ICMP NSを許可)
  • permit icmp any any nd-na(ICMP NSを許可)
  • deny ipv6 any any

【ACLを作成】

Exampleという名前でIPv6 ACLを作成
(config)#ipv6 access-list Example

サブネット2001:db8: 0:1::/64からサーバ2001:db8:0:3::200へのUDPトラフィックを無視する
(config-ipv6-acl)#deny udp 2001:db8: 0:1::/64 host 2001:db8:0:3::200

ホスト2001:db8:0:1::11からのTelnetを全て拒否する
(config-ipv6-acl)#deny tcp host 2001:db8:0:1::11 any eq telnet(またはeq 23)

その他IPv6トラフィックを全て許可する
(config-ipv6-acl)#permit ipv6 any any(省略可能)

ルータのFa0/0インターフェイスのアウトバウンド方向にIPv6 ACL「Example」
(config)#interface fa0/0
(config-if)#ipv6 traffic-filter Example out

「2001:db8:0:3::/64からのpingを拒否する」条件のステートメントをシーケンス番号15で追加
(config-ipv6-acl)#sequence 15 deny icmp 2001:db8:0:3::/64 any any echo-request

IPv6 ACLの検証

IPv6 ACLの表示
#show [ ipv6 ] access-list [ <acl-name> ]

インターフェイスへ適用したACLの確認
#show ipv6 interface [ <interface-id> ]

NDP

NDP(Neighbor Discovery Protocol:近隣探索プロトコル)

<NDPの機能>

  • MACアドレスの解決(IPv4のARPに相当)
  • SLAAC(StateLess Address Auto Configuration:アドレスの自動設定)
  • DAD(Duplicate Address Detection:重複アドレスの検出)
  • 同一セグメント上の機器を探索する

<NDPとICMPv6>

  • ICMPv6パケットを使用する
  • NDPは同一セグメント上のデバイスのMACアドレスを調べるために以下ICMPv6パケットを使用します。
    • NS(Neighbor Solicitation:近隣要請):MACアドレスを問い合わせるパケッ
    • NA(Neighbor Advertisement:近隣広告):NSへの応答パケット
  • NDPは同一セグメント上のデバイスのIPv6アドレスを調べるために以下のICMPv6パケットを使用します。
    • RS(Router Solicitation:ルータ要請):RAを要請するパケット
    • RA(Router Advertisement:ルータ広告):セグメントのプレフィックスなどを伝えるパケット

ICMPv6

ICMPv6は、IPv6用のICMPです。

  • エラー通知:パケットが破棄された理由を送信元に通知する機能
  • 近隣探索:同一セグメント上のデバイスのアドレスを調べる機能(NDやNDPとも呼ばれる)