IPv6（IP version6）

# IPv6特徴

+ **膨大なアドレス**
128ビットで約340澗個利用できる

+ **IPアドレスの自動設定**
IPv6ではIPアドレスを次の方法で設定することができる。

:::note info
+ 手動による設定
+ DHCPサーバによる自動設定
+ **オートコンフィギレーションによる自動設定（SLAAC**）
ルータがLAN上のホストに対してネットワークアドレスを送信し、ホスト側で受診したネットワークアドレスとホストのMacアドレスから一意のIPv6アドレスを生成する。

:::


起動するだけでネットワークに接続するために必要な情報を自動で設定する機能を**プラグアンドプレイ**という。

+ **ブロードキャストアドレスの廃止**
IPv6ではブロードキャストアドレスではなく、マルチキャストアドレスを使用してネットワーク全体へと通信を送信するようになっている。

#### パケットヘッダの簡素化
IPv4のパケットヘッダに比べてサイズは大きくなっているが、内部のフィールド数は少なくなっている。そのため、ルータにおけるパケットの処理効率が向上している。


![IPv6header](https://image.itmedia.co.jp/ait/articles/0110/05/r10zu02.gif)

| 項目 | ビット数 | 説明 |
|:-:|:-:|:-:|
| バージョン  |  4 | IPのバージョン番号。6が入る  |
| トラフィッククラス  | 8  | パケットの優先度をつける  |
| フローラベル  | 20  | アプリケーションフローの識別  |
| ペイロード長  | 16  | IPv6ヘッダを除くパケットのデータ部の長さ  |
| ネクストヘッダ  | 8  | IPv6ヘッダの次に来るヘッダのタイプを示す  |
| ポップリミット  | 8  | 通過できるルータの数(IPv4のTTLと同じ)  |
| 送信元アドレス  | 128  | 送信元のIPv6アドレス  |
| 宛先アドレス  | 128  | 宛先のIPv6アドレス  |

#### 階層化されたアドレス
グローバルアドレスの管理はIANAが行っており、各地域ごとに割り振られる。

![キャプチャ14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/2aefeac3-5172-bd97-3964-f97e9ff098ba.png)

#### モビリティとセキュリティの強化
移動式の端末を利用して業務などを行うことをモビリティという。端末が移動しても割り当てたアドレスを変更せずに通信ができるようにするためのmobile IPの機能が強化されている。
パケットの認証や暗号化を行うことができるIPsecの実装が標準で可能。

### アドレスの表記と構造
以下で構成されていて、どちらも**64ビット**になっている。

+ **サブネットプレフィックス**：IPv4のネットワーク部に相当する部分
+ **インタフェース識別子（Interface-ID）**：ホスト部に相当する部分
インターフェイスIDは手動で設定することもEUI‐64形式で自動生成することも出来る。


6ビットずつ8つのブロックに区切られた**16進数**で表す。表示する際のルールが以下存在する

+ **各ブロックの先頭の0は省略できる**
+ **1か所だけ、0が連続するブロックは省略して「::」と表記できる**
+ **IPアドレス部分は括弧で囲み、末尾にポート番号と分かるように区別している**

## IPv6アドレスの種類

### ユニキャストアドレス
IPv4と同様に、個々のネットワークインターフェースに割り当てるアドレスで、1対1の通信で使用する。ユニキャストアドレス宛てのパケットは、そのアドレスをもつインターフェイスに転送される。

通信可能範囲によって更に3種類に分類される。

:::note info
**ループバックアドレスもユニキャストアドレス**
:::


#### グローバルユニキャストアドレス
グローバルアドレスとも呼ばれ、IPv4でのグローバルアドレスと同じ扱いで、全世界で一意となりインターネット状で通信が可能。最初の3ビットが「**001**」から始まり`2000::/3`と表記される。

:::note info
**16進数では2または3から始まるアドレスが該当する**。
:::


| アドレス範囲 | 用途 |
|:-:|:-:|
| 2001::/16  | インターネット用  |
| 2002::/16  | 6to4用のアドレス  |
| 2003::/16~3FFD::/16  | 未割当  |

IPv4でのホストアドレスに当たるインターフェースIDは、アドレス自動設定機能を活用するために64ビットにするのが一般的。そのため、前半64ビットのうちプロバイダから割り当てられたプレフィックス分を除いた部分がサブネット用のビットになる。

![キャプチャ15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/1c81cd4c-213a-9029-e297-3e44916b1abc.png)

#### リンクローカルユニキャストアドレス
リンクローカルアドレスとも呼ばれ、**同じサブネット内でのみ通信可能なアドレス**。IPv6が有効なネットワークインターフェースに必ず1つ設定することになっている。ネイバーの探索などでも使用される。
最初の10ビットが「**1111111010**」で始まり、`fe80::/10`と表記される。

:::note info
+ ホスト間で一意になる
+ 手動で設定しない場合、自動生成されたリンクローカルアドレスが設定される
+ IPv6を扱うインターフェース全てに設定される
+ ルーティングの宛先になれない

:::


![キャプチャ16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/c398c306-567e-98c2-e616-317ca5a3c3b1.png)



#### ユニークローカルユニキャストアドレス
企業や家庭内でのみ使用されるアドレス。閉じられたネットワークでのみ使用されるため、セキュリティが確保される。ローカルではあるものの、できるだけ世界で一意のアドレスとなるように設定することが推奨されている。
最初の7ビットが「**1111110**」で始まり、`fc00::/7`また`fd00::/8`と表記される。

![キャプチャ17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/d74633c3-c6d8-76fb-a1d4-727458e34c3c.png)

### マルチキャストアドレス
特定のグループ（インターフェイスの集合）に対する通信の宛先となるアドレスで、1対多の通信で使用する。IPv6では1対全の通信にも使用される。
最初の8ビットが「**11111111**」で始まり、`ff00::/8`と表記される。

![キャプチャ18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/82b2114e-f03b-bd42-328a-b24ab4f0ad02.png)

マルチキャストアドレスの一部はあらかじめIANAによって予約されている。

| アドレス | 説明 |
|:-:|:-:|
| FF02::1  | 全てのノード  |
| FF02::2  | 全てのルータ  |
| FF02::5  | 全てのOFPSが動作しているルータ  |
| FF02::6  | 全てのOSPF DR |
| FF02::9  | 全てのRIPルータ |
| FF02::a  | 全てのEIGRPルータ |


+ フラグ
マルチキャストアドレスのタイプを表す。

| 値 | 内容 |
|:-:|:-:|
| 0000  | IANAによって割り当てられた永続的なマルチキャストアドレス  |
| 0001  | 一時的に割り当てられたマルチキャストアドレス  |

+ スコープ
マルチキャストアドレスの有効範囲を表す。

![kk41076.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/4afd4900-a146-a3bc-d886-ffd953ecdab0.jpeg)


| 値 | 16進数 | 第一フィールド | 説明 |
|:-:|:-:|:-:|:-:|
| 0001  | 1  | FF01  | インターフェイスローカルの有効範囲  |
| 0010  | 2  | FF02  | リンクローカルの有効範囲  |
| 0101  | 5  | FF05  | サイトローカルの有効範囲  |
| 1000  | 8  | FF08  | 組織ローカルの有効範囲  |
| 1110  | E  | FF0E  | グローバルの有効範囲  |



#### 要請ノードマルチキャストアドレス
IPv6アドレスとMACアドレスの解決に使用する。先頭104ビットが「FF02::1::FF」と固定され、後続の24ビットにユニキャストアドレスの下位24ビットを付加して生成する。


### エニーキャストアドレス
複数のノードに同じユニキャストアドレスを割り当てておき、ルーティング上「最も近いノード」だけにパケット転送するときに使われるアドレスの割り当て方法。同じユニキャストアドレスを複数の機器に割り当て、ネットワーク的に最も近い機器と通信させるためのアドレスで、DNSルートサーバでは、耐障害性を高めたり、応答を速める目的で使用されている。


![64027.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/2025063d-b2a1-8e25-0f1e-3f6d50fc3c32.jpeg)


### 特殊なアドレス

| プレフィックス | 用途 |
|:-:|:-:|
| ::/128  | 未指定アドレス  |
| ::1/128  | ループバックアドレス  |
| 2002::/16  | 6to4トンネリング  |


## SLAAC(StateLess Address Auto Configuration)
IPv6に標準で搭載されたアドレス自動設定機能のこと。ICMPv6のNDPを利用して自動設定を行う。

#### アドレス設定の流れ


1. IPv6ルーティングが有効なルータが定期的にRA(ルータ広告)によって、そのセグメントのプレフィックスを広告する
2. ネットワークに追加されたホストはRS(ルータ要請)を送信し、ルータがRAを即時に送信するよう要求する
3. ホストは、受信したRAからプレフィックスを、EUI-64によってインターフェースIDを取得し、IPv6アドレスを自動設定する。また、RAを送信したルータのIPv6アドレスをデフォルトゲートウェイとして設定する
4．アドレス設定が完了し、通信が可能になる


### NDP(Neighbor Discovery Protocol)
ステートレスアドレス自動設定の際に使用するプロトコル。IPv6アドレスの自動設定以外にもデータリンク層のアドレスの解決、アドレスの重複チェックなどが出来るようになる。

ステートレス設定では、クライアント端末はまず自身のリンクローカルユニキャストアドレスを決定する。このとき、NSメッセージやNAメッセージを使用してアドレスが重複していないかどうかを確認する。

| 種類 | ICMPv6 | 説明 |
|:-:|:-:|:-:|
| NS(Neighbor Solicitation)  | 135  | 特定のノードのMACアドレスを解決するための要求を表し、IPv4のARP要求と同じように動作する  |
| NA(Neighbor Advertisement)  | 136  | NSに対する応答を表す。IPv4のARP応答と同じように動作する  |
| RS(Router Solicitation)  | 133  | 端末からネットワーク上のルータに向けて、プレフィックス、デフォルトゲートウェイなどの情報を取得したい場合に要求として送信される  |
| RA(Router Advertisement)  | 134  | RSへの応答を表し、プレフィックス、デフォルトゲートウェイなどの情報が含まれる。ルータから定期的に送信されているが、RSを受信した際は即座にRAを応答する  |

:::note info
NDPは同一セグメント上のデバイスのMACアドレス、IPv6アドレスを調べるためにICMPv6パケットを使用する。
:::


#### DAD(Duplicate Address Detection)
自身のIPv6アドレスが他の端末と重複していないかどうかを確認する際にNSメッセージを使用する仕組み

## 移行技術
IPv6に一斉に切り替えるのではなく、IPv6に徐々に移行していく必要があり一時的に併用する手段が用いられる。

### デュアルスタック
IPv4アドレスとIPv6アドレスを1つのノードで共存させる仕組み。PCやルータにIPv4アドレスとIPv6アドレスの両方を設定しておき、通信時に使い分ける。

### トンネリング
IPv4ネットワークを経由して、IPv6で通信するための技術。通信に使用するプロトコルを更に別のプロトコルでカプセル化して異なるネットワーク内を通過させることが目的。

![キャプチャ25.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/b174b749-89b3-2340-a1fe-0e2b1b6b8b0a.png)


| 種類 | 説明 |
|:-:|:-:|
| 手動トンネル  | ルータ間でIPv4の送信元アドレスと宛先アドレスを相互に指定してトンネルを確立する  |
| 自動トンネル(6to4トンネル)  | ルータ間でトンネルを生成するが、宛先アドレスを指定せず、受信したIPv6の宛先アドレスから自動的に宛先IPv4を指定する。`2002::/16`のアドレスフォーマットを使用する必要がある  |
| ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)トンネル  | IPv4ネットワーク上のIPv4対応ホストがIPv6ネットワークに接続できるようにするためのトンネルで、ホスト自信がIPv6アドレスを生成することで接続可能になる  |
| Teredoトンネル  | インターネット上にあるTeredoサーバと連携してトンネルを自動生成する  |
| GREトンネル  | IPv6だけではなく、様々なネットワーク層のパケットを熱のネットワーク層のパケットにカプセル化し転送できる  |

### トランスレータ
IPv6パケットをIPv4パケットに変換、またはその逆の変換を行うことで、IPv6とIPv4の機器間で通信できるようにするために技術。

| 技術 | 説明 |
|:-:|:-:|
| NAT-PT  | ルータがIPv6パケットをIPv4パケットに変換する。ドメイン名の変換が必要な場合はDNS-ALGと連携する。推奨はNAT64  |
| NAT64  | IPv4とIPv6の変換を1対多で紐づけるステートフルNAT64と、1対1でIPv4とIPv6を紐づけるステートレスNAT64がある。ドメイン名の変換が必要な場合はDNS64と連携する  |



# IPv6の設定
リンクローカルユニキャストアドレスやグローバルユニキャストアドレスなどの種類があるが、IPv6は1つのインターフェイスに複数の種類のアドレスを設定することが可能。

Cisco製のルータにIPv6アドレスを設定すると、そのインターフェイスは以下の表に示すマルチキャストグループに参加する

| アドレス | 説明 |
|:-:|:-:|
| FE02::1  | リンクローカル内の全ノード宛のマルチキャストグループ  |
| FE02::2  | リンクローカル内の全ルータ宛のマルチキャストグループ  |
| FE02::1:FFxx:xxxx  | 要請ノードマルチキャストアドレスのマルチキャストグループ。xx:xxxxはインターフェイスのIPv6アドレスの下から24ビットが入る  |

### ipv6 unicast-routingコマンド
ルータでIPv6ルーティングを有効にするコマンド。グローバルコンフィギュレーションモードで行う必要がある。

:::note warn
CiscoルータではIPv4ルーティングはデフォルトで有効になっているが、IPv6ルーティングは有効になっていないので注意
:::

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

### ipv6 enableコマンド
インターフェイスでIPv6を有効にしてリンクローカルユニキャストアドレスを**自動で設定する**コマンド。インターフェイスコンフィギュレーションモードで行う必要がある。MACアドレスを基にしたEUI-64形式のアドレスが自動生成される。

### ipv6 addressコマンド
**書式：ipv6 address [アドレス] link-local**
任意のリンクローカルユニキャストアドレスを**手動で設定する**コマンド。インターフェイスコンフィギュレーションモードで行う必要がある。有効なFE80で始まるアドレスを指定する。


## グローバルユニキャストアドレスの設定

### ipv6 addressコマンド
**書式：ipv6 address [アドレス] / [プレフィックス長] [eui-64]**
グローバルユニキャストアドレスを手動で設定するコマンド。インターフェイスコンフィギュレーションモードで行う必要がある。プレフィックス長の指定が必要になる。[eui-64]を指定することで、インターフェースIDの部分をMACアドレスを基に自動で生成する。

## ステートレスアドレス自動設定(SLAAC)による設定

### ipv6 address autoconfigコマンド
ルータのインターフェイスのIPv6アドレスをSLAACによって割り当てるコマンド。インターフェイスコンフィギュレーションモードで行う必要がある。接続したネットワークのプレフィックスとゲートウェイアドレスを取得し、インターフェイスIDをEUI-64で自動設定させる。

## ルータの設定の確認

### show ipv6 interfaceコマンド
**書式：show ipv6 interface [インターフェイス]**
インターフェイスのIPv6アドレスを確認するコマンド。特権EXECモードで行う必要がある。

```markdown:show ipv6 interfaceコマンド
R0#show ipv6 interface GigabitEthernet 0/0
GigabitEthernet0/0 is up, line protocol is down
  IPv6 is tentative, link-local address is FE80::1 [TEN]
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:1::1, subnet is 2001:1::/64 [TEN]
  Joined group address(es):
    FF02::1
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.
```

### show ipv6 interface briefコマンド
インターフェースの情報を要約して表示し、インターフェースに設定されたIPv6アドレスを確認することできるコマンド。特権EXECモードで行う必要がある。

![k61726.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/3c698e37-569f-a45e-170d-81408b6190fd.jpeg)



### ping ipv6コマンド
IPv6で疎通の確認を行うコマンド。特権EXECモードで行う必要がある。グローバルユニキャストアドレスやユニキャストローカルアドレスの場合は、出力インターフェースを指定する必要はないが、リンクローカルアドレス宛てに疎通確認を行う場合は**自身の出力インターフェイスを指定する**必要がある。

:::note info
宛先IPv6アドレスの指定が正しければ、pingの後のipv6部分は省略することができる。
:::



### IPv6の設定例

<details><summary>IPv6の設定例</summary>

以下の構成図をもとにそれぞれのルータの疎通ができるように設定を行っていく。IPv6を設定する際、グローバルユニキャストアドレス、リンクローカルユニキャストアドレスの両方を付けることができるため、それぞれ設定していく。

![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/08ed71c0-a11d-a2ca-97f8-5fefabdcb607.png)


```markdown:R0の設定
Router>ena
Router#conf t
Router(config)#hostname R0
R0(config)#ipv6 unicast-routing 
R0(config)#interface GigabitEthernet 0/0
R0(config-if)#ipv6 address FE80::1 link-local 
R0(config-if)#ipv6 address 2001:1::1/64
R0(config-if)#no shutdown 
R0(config-if)#end
```

```markdown:R1の設定
Router>ena
Router#conf t
Router(config)#hostname R1
R1(config)#ipv6 unicast-routing 
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ipv6 address FE80::2 link-local 
R1(config-if)#ipv6 address 2001:1::2/64
R1(config-if)#no shutdown 
R1(config-if)#exit
R1(config)#interface GigabitEthernet 0/1
R1(config-if)#ipv6 address FE80::1 link-local 
R1(config-if)#ipv6 address 2001:2::1/64
R1(config-if)#no shutdown 
```

```markdown:R2の設定
Router>enable 
Router#conf t
Router(config)#hostname R2
R2(config)#ipv6 unicast-routing 
R2(config)#interface GigabitEthernet 0/0
R2(config-if)#ipv6 address FE80::2 link-local 
R2(config-if)#ipv6 address 2001:2::2/64
R2(config-if)#no shutdown 
R2(config-if)#end     
```
次に、それぞれのセグメントへ疎通できるようにスタティックルートの設定をしていく。


```markdown:R0のスタティックルートの設定
R0#conf t
R0(config)#ipv6 route 2001:2::/64 2001:1::2
R0(config)#end
R0#show ipv6 route
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
C   2001:1::/64 [0/0]
     via GigabitEthernet0/0, directly connected
L   2001:1::1/128 [0/0]
     via GigabitEthernet0/0, receive
S   2001:2::/64 [1/0]
     via 2001:1::2
L   FF00::/8 [0/0]
     via Null0, receive 
```


```markdown:R2のスタティックルートの設定
R2#conf t
R2(config)#ipv6 route 2001:1::/64 2001:2::1
R2(config)#end
R2#show ipv6 route
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
S   2001:1::/64 [1/0]
     via 2001:2::1
C   2001:2::/64 [0/0]
     via GigabitEthernet0/0, directly connected
L   2001:2::2/128 [0/0]
     via GigabitEthernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive
```

ここですべてのルータから疎通確認を行うとつながるようになる。
</details>


# IPv6のルーティング
異なるネットワークの端末とIPv6で通信するには、ルータにIPv6用のルーティングテーブルを作成する必要がある。

### ipv6 routeコマンド
**書式：ipv6 route [宛先] [転送先] [アドミニストレーティブディスタンス値]**
スタティックルートを設定するコマンド。グローバルコンフィギュレーションモードで行う必要がある。転送先に宛先ネットワークに向かう時のネクストホップまたは自身の出力インターフェイスを指定する。

| 宛先 | 説明 |
|:-:|:-:|
| ホストルート  | そのアドレスの持つホストへの経路。プレフィックスに`/128`を使用する。  |
| ネットワークルート  | そのネットワークへの経路。プレフィックスに`/64`を使用する。  |
| デフォルトルート  | 未知のネットワークにパケットを転送する際に使用する経路。宛先アドレスに`::`を指定し、プレフィックスに`/0`を使用する。|

| 転送先 | 説明 |
|:-:|:-:|
| 直接接続スタティックルート  | 出力インターフェイスのみを指定する方法。宛先ネットワークに到達するための出口となるインターフェイスが1つしかないポイントツーポイントのような場合に使用する。  |
| 再起スタティックルート  | ネクストホップアドレスのみを指定する方法。ネクストホップ向けの出力インターフェイスはルーティングテーブルをもとに解決する。  |
| 完全指定スタティックルート  | 出力インターフェイスとネクストホップアドレスの両方を指定する方法。出力インターフェイスがEthernetのようなマルチアクセスで、ネクストホップを明示的に指定する必要がある場合に使用する。  |

:::note warn
リンクローカルアドレスをネクストホップとして使用する場合、自身の出力インターフェースの指定も必要となる（完全指定スタティックルート）
:::




## ルーティングテーブルの確認

### show ipv6 routeコマンド
ルーティングテーブルを確認するコマンド。特権EXECモードで行う必要がある。

```markdown:show ipv6 routeコマンド
R2#show ipv6 route
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
S   2001:1::/64 [1/0]
     via 2001:2::1
C   2001:2::/64 [0/0]
     via GigabitEthernet0/0, directly connected
L   2001:2::2/128 [0/0]
     via GigabitEthernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive
```