【IPv6サーバーをたてる】まずはじめにIPv6アドレスについて

1 はじめに

ネット回線をIPv4 over IPv6にしたことにより、
動的IPv4の下で運用していたWebサーバーやメールサーバーの継続は難しくなりました。

それなら、いっそのことサーバーをIPv6対応に変えちゃえ!、
と思ってIPv6を勉強しようにも、参考書類は分厚くわけの分からなん言葉ばかり。

ということで、ゆっくり少しずつIPv6について勉強していこうかなと思っています。

本記事は、まずIPv6アドレスについてから始めます。
IPv6を利用するには、IPv6アドレスをきちんと理解しておかないと何も始められません。

IPv6アドレスについて解説したWebページは既に多数ありますし、
書籍も多数発行されています。
でも、読んでいるだけではなかなか理解が進みません。

こうして、自分なりに整理をしていくと理解が深まります。
この記事は、わたしの備忘録を目的として作成したものです。

今後、サーバーをたてるまでに、次のような記事をまとめていくことになるのかな?

・ ローカル内端末のIPv6アドレスの割り振りについて
IPv6用のダイナミックDNSサービス
・ フィルタリングは必要?
IPv4サーバーからIPv6対応への変更について

【参考Webページ、および資料】
本記事は、主に次のWebページを参考にしてまとめました。
 
IPv6アドレス / ウィキペディア
IPv6 - unicast address
IPv6 - anycast address
IPv6 - multicast address

2 IPv6アドレス

2.1 IPv6アドレスの種類

IPv6アドレスは、以下の3種類に分類される。

ユニキャストアドレス
エニーキャストアドレス
マルチキャストアドレス

ユニキャストアドレス
単一のインターフェースのための識別子。
 
インターネットプロトコルは、ユニキャストアドレスに送られたパケットを、
そのアドレスによって識別されるインターフェースに配送する。

エニーキャストアドレス
インターフェース集合(通常は異なるノードに属する)のための識別子。
 
エニーキャストアドレスに送られたパケットは、
そのアドレスで識別されるインターフェースの内で、
ルーティングプロトコルの距離の定義に従って
最も近く」(nearest)にあるただ1つのインターフェースに配送される。
 
エニーキャストアドレスユニキャストアドレスと同じフォーマットのため、
表記上は区別がつかない。
ただ、同じアドレスが複数のインターフェースに設定されるかどうかの違いしかない。

マルチキャストアドレス
エニーキャストと同様にインターフェース集合のための識別子であるが、
マルチキャストアドレスに送られたパケットは、
そのアドレスを持つすべてのインターフェースに配送される。  
IPv6にはブロードキャストアドレスは存在せず、その機能はマルチキャストアドレスが果たす。

2.2 表記法

IPv6アドレスは、128ビットを16ビットずつの8つのグループに区切って
それぞれのグループを4桁の十六進数で表記し、グループとグループの間をコロンで仕切る。

例えば以下のように表現される。

2001:0db8:85a3:0000:0000:8a2e:0370:7334

十六進数は大文字・小文字を区別しないが、 IETFでは小文字を使用するよう推奨している。

この表記は、以下に示す方法で短く表現することができる。

0の連続
各区切りの先頭の連続する0は省略できる。
このルールを適用すると、上記に例示したアドレスは以下のように表記できる。
 
2001:db8 :85a3:0:0 :8a2e:370:7334
0だけのグループ
1つ以上の0だけのグループは、"::"で表すことができる。
このルールを適用すると、上記に例示したアドレスは以下のように表記できる。
 
2001:db8:85a3::8a2e:370:7334
 
localhost(ループバック)アドレス 0:0:0:0:0:0:0:1::1 と、
IPv6未指定アドレス 0:0:0:0:0:0:0:0:: と表現できる。
 
1つのアドレス内では :: は1回しか使用できない。
これは、:: を2回以上使用すると、
それぞれの省略した箇所のビット長がわからなくなるためである。
IPv4アドレスが埋め込まれている場合
IPv4IPv6が混在している環境で、IPv4IPv6に変換して使用する場合、
下位32ビットにIPv4アドレスを含んだIPv4変換IPv6アドレス
IPv4射影IPv6アドレスを使用する。
 
この場合、IPv4アドレスの部分を、通常IPv4アドレスを表記するときに使用する、
十進数と”.”による記法で表現することができる。
 
例えば、IPv4射影IPv6アドレスの ::ffff:c000:0280 は、
 ::ffff:192.0.2.128 と表現することができる。

3 ユニキャストアドレス

3.1 ユニキャストアドレスのフォーマット

ユニキャストアドレスは、通常2つの部分に分けられる。

前半の64ビット(ネットワークプリフィックス)はルーティングに使用され、
後半の64ビット(インターフェース識別子)は サブネット内での個別のインターフェースを指し示す。

ネットワークプリフィックス(「ルーティングプリフィックス」と「サブネットID」)は、
アドレスの中の上位64ビットである。

ルーティングプリフィックスのサイズは可変である。
プリフィックスのサイズが大きくなると、その分だけサブネットIDのサイズが小さくなる。

サブネットIDのビットのフィールドは、
ネットワーク管理者が与えられたネットワーク内でサブネットを定義するのに使用することができる。

64ビットの「インターフェース識別子」は、下に示すいずれかの方法で決められる。

・インターフェースのMACアドレスからmodified EUI-64を使用して自動的に決定される
DHCPv6サーバーから取得する
・ランダムに決定される
・手動で設定する

3.2 ユニキャストアドレスのスコープ

IPv6ではパケットの到達範囲(スコープ)が、
グローバルユニークローカルリンクローカルの3つある。

つまり、ユニキャストアドレスと一口にいっても、
スコープにより以下の3種類のアドレスが存在する。

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

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

グローバルユニキャストアドレスは、
IPv4のグローバルアドレスと同様にIANAが管理しているアドレスである。

現在IANAが解放しているグローバルユニキャストアドレスは、
3ビットが「001」から始まるアドレス
で「 2000::/3 」と表記することができる。

また、用途別に「/16」で以下の通り分類できる。

グローバルユニキャストアドレス
ISPから割り当てられるグローバルルーティングプレフィックスと、
組織でサブネットを識別するために割り当てるサブネットID
ホストのインターフェース識別子の3つのフィールドで構成される。

3.2.2 ユニークローカルアドレス

ユニークローカルアドレスは、IPv4でいえばプライベートIPアドレスである。

アドレスブロックは「fc00::/7」のIPv6アドレスですあるが、
現在の運用では上記ブロックの下位に1ビット付加した以下の2つの「/8」のグループに
分類して利用されている。

fc00::/8  将来の定義用
fd00::/8  アドレス中のグローバル識別子部分
ランダムな値としていつでも誰でも利用可能なアドレス

3.2.3 リンクローカルアドレス

リンクローカルアドレスは、同一セグメント上で使用するアドレスである。

リンクローカルアドレスは、必ず各インターフェースで必要なアドレスであり、
IPv6が有効なインターフェースでは自動的に割り当てられる

先頭の10ビットが「1111 1110 10」から始まる。
16数で表記すると「fe80::/10」であるが、続いてのフィールド 54bitが全て 0 なので、
リンクローカルアドレスといえば「fe80::/64」となる。

4 エニーキャストアドレス

エニーキャストアドレスとは、
複数のノードのインターフェースに割り当てた同一のIPアドレスのことである。

複数のノードで同じIPアドレスを共有することになり、
送信元ノードからエニーキャストアドレスに対してパケットを送信した場合は、
このエニーキャストアドレスを持つ最も近いノードへパケットが転送される。

4.1 エニーキャストアドレスのフォーマット

エニーキャストアドレスのフォーマットは、ユニキャストアドレスと同じである。

4.2 エニーキャストの通信例

図4.2-1における通信の結果は、
ユニキャスト通信と同様に1対1の通信が行われる。

エニーキャストアドレスにはグローバルユニキャストアドレスが使用されることから、
エニーキャストアドレスと言っても、
表記上ではグローバルユニキャストアドレスエニーキャストアドレスの区別はつかない。

図4.2-1において、
サーバーのインターフェースに、
一意であるグローバルユニキャストアドレスが割り当てられているのに加えて、
グループを識別するエニーキャストアドレスが割り当てられている。

ノードのインターフェースでは、受信したデータグラムの宛先アドレスを調べて、
ユニキャストアドレスエニーキャストアドレスなのかを調べてしかるべき処理を行う。

5 マルチキャストアドレス

5.1 マルチキャストアドレスのフォーマット

マルチキャストアドレスは、いくつかの特別なルールに従ってフォーマットされている。

全てのマルチキャストアドレスで、prefix(プリフィックス)は二進数の値 1111 1111 である。

(1)flg(フラグ)フィールド
flg(フラグ)フィールドの4つのビットのうち3つは値の意味が定義されているが、
最上位ビットは将来のために予約されている。  
(2)スコープフィールド
4ビットのscスコープフィールド)は、
アドレスが有効でユニークとなる有効範囲を示すのに使われる。
 
マルチキャストのために、マルチキャストアドレス
2つ目のオクテットの最下位4番目のビット(ff0s::)がアドレスのスコープ(scope)、
すなわち、マルチキャストアドレスが伝達される範囲を示す。
 
現在定義されているスコープを、表5.1-2に示す。
 

5.2 主な予約済みマルチキャストアドレス

マルチキャストアドレス ff0X::(Xは 十六進数の値)は予約されており、
いかなるマルチキャストグループにも割り当ててはならない。
IANA(Internet Assigned Numbers Authority)が アドレスの予約を管理している。

ff0X::のIPv6マルチキャストアドレスは、 表5.2-1に示すよう割り当てられている。

5.3 要請ノードマルチキャストアドレス

IPv6要請ノードsolicited-nodeマルチキャストアドレスは、
データリンク層のアドレス解決で使用されて、IPv4アドレスARPに相当する。

要請ノードには、特別なマルチキャストアドレスが与えられる。

sc(スコープ)フィールドは二進数値0010(リンクローカル)である。

IPv6の要請ノードマルチキャストアドレス[ff02::1:ffxxxxxx]の ”x”は、
自身のIPv6が有効なインターフェースのIPv6ユニキャストアドレス
またはエニーキャストアドレスの下位24ビットから自動的に構成される。

例えば、 インターフェースに「2037::01:800:200d8c6c」アドレスが割り振られていた場合、
そのインターフェースの要請ノードマルチキャストアドレスは「ff02::1:ff0d8c6c」となる。

IPv4ではMACアドレスの解決にARPを使用するが、
IPv6ではMACアドレスの解決にICMPを使用する。

IPv6ノードが宛先のノードのIPv6アドレスが分かるが、MACアドレスが分からない場合、
ICMP Type 135Neighbor Solicitation Message)の
要請ノードマルチキャストアドレスを宛先として送信する。

例えば宛先IPアドレスが fe80::1a3b5c7e である場合、
IPv6ノードはそのIPv6アドレスから作成したff02::1:ff3b5c7e
要請ノードマルチキャストアドレス宛にICMPを送信し、MACアドレスの解決を図ろうとする。

このように要請ノードマルチキャストアドレスは、Neighbor Discoveryの際に使用する。

以上

HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ