IPv6ってなに?

ネットワーク

IPv6

IPv6ってなんでしょう。
まったくわからんので改めて復習します。
というのも、きっかけとしては最近良く聞くSRv6というセグメントルーティング。
これはIPv6の拡張ヘッダを使うものらしく、IPv6って普段あまり使っていないので
今後のために一度おさらいです。

IPv6の基礎知識

IPアドレスとして普段良く利用するのはIPv4アドレス。
しかしこのアドレスは世界中で利用され枯渇してきているため、IPv6アドレスが開発された。
このIPv6アドレスは128bitであり個数としては340かんという莫大な数が用意できる。
したがって、NATの実装は不要となり、全端末にグローバルアドレスが割り当てることが出来る
そのためセキュリティを保つためにフィルタリングを行う必要がある。

128bitのアドレス

128bitのアドレスは通常16進数で表され、4bitを1文字として16bit(4文字)ごとに「:」で区切る。
また、表記には楽をするためのルールが存在する。

  1. フィールド毎の先頭の0埋めは必要ない。(001a→1a)
  2. フィールド内が全て0の場合は0に省略可(0000→0)
  3. 連続した0のみのフィールドが続く場合は::で省略可(1:0000:0000:ab→1::ab)
    ※ただし::は一回しか使えない。

例) 2001:db8::acae:1a1e:3dab:ffa5

また、IPv4に合ったホスト部とネットワーク部の概念も引き継がれているが、
IPv6ではホスト部をインターフェースIDといい、ほとんどが64bitで利用される。
詳しくは後ほど

ドキュメント用のアドレス

ドキュメントやサンプル等で例示する際に使われるアドレスの範囲として、
2001:db8::/32と定められている。

To reduce the likelihood of conflict and confusion when relating documented examples to deployed systems, an IPv6 unicast address prefix is reserved for use in examples in RFCs, books, documentation, and the like. Since site-local and link-local unicast addresses have special meaning in IPv6, these addresses cannot be used in many example situations. The document describes the use of the IPv6 address prefix 2001:DB8::/32 as a reserved prefix for use in documentation.

RFC3849より引用
IPv6ヘッダ

IPv6ヘッダは大きさはIPv4より大きくなっている(アドレスが大きいため)ものの
ヘッダのフィールド数は減ってシンプルになっている。
IPv4ではアドレス以外に10フィールドあったものがIPv6では6フィールドになっている。

フィールド名ビット内容
バージョン4IPバージョン。IPv6を表す「0110」を格納する。
トラフィッククラス8IPv4でいうTOS。優先度を識別する。
フローラベル20通信品質確保、経路優先選択に利用される。IPv4にはない。
ペイロード16拡張ヘッダとデータの合計。IPv4ではヘッダも含んでいた。
ネクストヘッダ8IPv4でいうプロトコル。拡張ヘッダや上位プロトコルを示す。
ホップリミット8IPv4でいうTTL。通過するルータの数を制限する。

拡張ヘッダは可変であり、IPsecのAH,ESPのような認証ヘッダやMTUをあわせるフラグメントに利用されたりする。

IPv6アドレスのタイプとスコープ

IPv6は3つのタイプが存在する。

ユニキャストアドレス1:1IPv4のユニキャストと等しい。
マルチキャストアドレス1:GroupIPv4のマルチキャストと等しい。
マルチキャストを利用してブロードキャストと同様の動作を行う。
エニーキャストアドレス1:1(group内)IPv4には存在しない。
グループ宛の通信で最も近いノードにユニキャストする。
(ルーティングメトリックにより判断)

上の通り、IPv6にはブロードキャストが存在しない。
したがって、マルチキャストを利用して同等の動作を行う。(ff02::1)

続いてスコープについて(到達範囲)

リンクローカル同一セグメントfe80::/64同一セグメントでのみ利用されるアドレス。ルータ超えは出来ない。
ユニークローカル組織内fc00::/7IPv4でいうプライベートアドレス。組織内で利用する。
グローバルグローバル2001::/16IPv4でいうグローバルアドレス。インターネット上でも利用される。
プレフィックス

IPv4にはネットワーク部とホスト部をサブネットマスクによって分ける仕組みがあったが、
IPv6も似たようにプレフィックスとインターフェースIDをプレフィックス長で分ける。
IPv6では基本的に64bitのプレフィックス長が利用される。(RFC7421)
ただしpoint-to-pointは除く。
インターフェースIDはEUI-64にて自動生成され、サブネット部はプレフィックスに
16bit含まれている。
実際RFCで色々修正がなされているようで何が正しいのかわからない…
ここは慎重に調査が必要かもしれない。

また、本来サブネット部としてはプレフィックスの16bitを使うようだが、
家に届くIPv6は/64であったためサブネットは使えないっぽい?

IPアドレスの割当(DHCPv6, RA)

IPv6ではアドレスの割り当て方が複数ある。
組み合わせとしては以下の通り

  • 手動設定
  • SLAAC
  • DHCPv6 ステートフル
  • DHCPv6 ステートレス
  • SLAAC+DHCPv6ステートフル

手動設定
手動設定は言うまでもなく手動で設定する。

SLAAC
SLAACは(Stateless Address Auto Configuration)であり、L3でアドレスを取得する仕組み。
IPv6ではARPがないため、リンクローカルアドレスを自動生成し、NSを利用してMACアドレスを解決する。その後、IPアドレスをICMPのRAを利用してルータ等から取得する。
しかし実際に取得するのはプレフィックスのみ。
インターフェースIDの部分は自分で生成してプレフィックスと組み合わせる。
そのアドレスをICMPのNSで重複してないか確認する。
作られた当初はDNS情報を取得できなかったが、最近はDNS情報をRDNSSとして取得可能。

WindowsにおけるIPv6アドレス

EUI-64はMACアドレスを元に生成するものであり、アドレスからMACアドレスを特定することも可能であることから、秘匿性は低いとされている。
Windowsでは24時間のランダムなインターフェースIDを作成して、一時IPv6アドレスとして利用される。

DHCPv6 ステートフル
DHCPv6をつかって、IPアドレス、その他の情報(DNS, ドメイン)を取得する。
すべての情報をDHCPv6でやりとりするため、SLAACは利用しない。

DHCPv6 ステートレス
SLAACを利用してIPアドレスを取得し、DHCPv6を使ってその他の情報(DNS,ドメイン)を取得する。
DHCPサーバがIPv6の状態を管理しないのでステートレスと呼ばれる。
※デフォルトゲートウェイは配布されない

SLAAC+DHCPv6ステートフル
これはどちらの仕組みも使ってアドレスを取得する。したがってIPv6アドレスが2つ割り当てられる。

MOフラグ

上の割当方法を判断する方法としてMOフラグというものがある。
ルータから送られてきたRAを見てどこをDHCPから取得するのか確認するために利用される。
MフラグはManaged address configuration(アドレス情報)
OフラグはOther configuration(その他のDNSなどの情報)

MフラグOフラグ内容
00DHCPv6を利用せずRAを利用する。RDNSS(RFC8106)に対応していれば問題ない。
01DNSだけDHCPv6で取得する。DHCPv6ステートレス(主流)
10IPアドレスだけDHCPで取得し、その他は手動。
11DHCPv6で全て取得する。※デフォルトゲートウェイの取得が出来ない。

注意点

DHCPv6やRAを利用する方法は様々だが、クライアントの対応状況に合わせて設定が必要。
例えばAndroidはDHCPv6に対応していないため、注意が必要。

GoogleがDHCPv6を支持していないようでビジネス的な理由があるとかないとか?
英語読めないのであれですが。。。ここ最近はどうなのでしょう?
以前DHCPv6の対応issuesが合ったようですが”Won’t Fix (Intended Behavior)” 
“修正しない(意図した動作)”となっているようです。
調べて何かわかったら教えて下さい。

Google Issue Tracker

以上でIPv6の基本をおさらい。
次はIPv6を実際に機器に設定して見ようかと思う。

コメント

タイトルとURLをコピーしました