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アドレスが埋め込まれている場合
-
IPv4とIPv6が混在している環境で、IPv4をIPv6に変換して使用する場合、
下位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:ffxx:xxxx]の
”x”は、
自身のIPv6が有効なインターフェースのIPv6ユニキャストアドレス、
またはエニーキャストアドレスの下位24ビットから自動的に構成される。
例えば、
インターフェースに「2037::01:800:200d:8c6c」アドレスが割り振られていた場合、
そのインターフェースの要請ノードマルチキャストアドレスは「ff02::1:ff0d:8c6c」となる。
IPv4ではMACアドレスの解決にARPを使用するが、
IPv6ではMACアドレスの解決にICMPを使用する。
IPv6ノードが宛先のノードのIPv6アドレスが分かるが、MACアドレスが分からない場合、
ICMP Type 135(Neighbor Solicitation Message)の
要請ノードマルチキャストアドレスを宛先として送信する。
例えば宛先IPアドレスが fe80::1a3b:5c7e である場合、
IPv6ノードはそのIPv6アドレスから作成したff02::1:ff3b:5c7e の
要請ノードマルチキャストアドレス宛にICMPを送信し、MACアドレスの解決を図ろうとする。
このように要請ノードマルチキャストアドレスは、Neighbor Discoveryの際に使用する。
以上
HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。