456

ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 2: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

ゴールドスポンサー

シルバースポンサー

ここに掲載するスポンサーの皆さまには、IPv6に関する技術情報を広く公開するという趣旨に賛同いただき、本書の執筆と制作、公開にあたって多大な協賛をいただきました。

日本ネットワークイネイブラー株式会社様

NTTコミュニケーションズ株式会社様

株式会社日本レジストリサービス様

BBIX株式会社様

Professional IPv6

byAkimichi Ogawa

本書はCC-BY-SA-NCライセンスによって許諾されています。

本書中の会社名や製品名は該当する各社の商標または登録商標です。

Page 3: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

序文

多くの人々が「インターネット」として知っている世界規模の巨大ネットワークはインター

ネットプロトコルバージョン4、すなわち IPv4で作られました。IPv4で使われる IPv4アドレ

スの数には制約があり、そのうち IPv4アドレスが足りなくなることは予想されていました。そ

の対策として、インターネットプロトコルのバージョン6である IPv6が開発されました。

IPv6そのものは、決して新しい技術ではありません。IPv6の最初の基本仕様であるRFC

1883†1は1995年に発行されています。そのRFCに関連する議論は、それよりも前から開始さ

れています。しかし、IPv6の普及はなかなか進まず、IPv4のみが利用され続ける状況が長く続

きました。IPv4アドレスの在庫が枯渇することはかなり昔から予想されており、その対策とし

て作られた IPv6でしたが、IPv4との間で互換性がないこともあって、なかなか普及しなかっ

たのです。

ところが、2011年に IPv4アドレスの中央在庫が現実に枯渇したことにより、IPv6への注目

が高まります。IPv6を利用したインターネットも急速に拡大していきました。筆者が IPv6に

ついて解説するために資料を集め始めた2011年の段階では、世界中のインターネットユーザ

が利用しているインターネットプロトコルは IPv4でしたが、2017年の段階では IPv6普及率が

50%を超える地域も登場しています。

インターネットにおける IPv6対応が進んだ大きな要素としては、Apple社が2016年6月か

ら iOSアプリの審査基準として IPv4に依存するコードを禁止したことも挙げられます。これ

により、非常に多くのモバイルアプリケーションが IPv6に対応しました。

普及に伴い、IPv6に関する知識を求めるエンジニアは増え続けています。その一方で、IPv6

に関するまとまった情報は、あまり多くありません。本書は、多くのエンジニアが IPv6に関す

るまとまった情報を得やすくすることを目指して執筆したものです。

混ざりつつも、似て非なるプロトコルIPv6の最大の特徴は、IPアドレスが128ビットで表現されるという点です。IPv4の IPアド

レスは32ビットで表現されるので、IPv6は IPv4の4倍のビット数、表現できる IPアドレスは

2の96乗倍です。

IPv6は、IPv4と同じ「インターネットプロトコル」なので、IPアドレスを表現するビット長

だけが IPv4と IPv6の違いだと誤解されがちです。しかし、その中身を少しでも見ると、IPv6

†1 RFC 1883:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1995年12月

Page 4: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

iv 序文

が IPv4とは似て非なるものだとわかります。似ている部分も多いのですが、さまざまな違い

があるプロトコルであり、互いに直接の互換性はありません。

直接の互換性がないので、「インターネットプロトコル」という視点で見ると、IPv4と IPv6

とはまったく別々のネットワークになります。とはいえ、すべてが異なるネットワークという

わけでもないので、実際の運用では IPv4と IPv6とで同じ物理回線やサーバを共有するのが一

般的です。

さらに、「インターネットは1つである」という考えもあって、DNSによる名前空間など、と

ころどころで意図的にまぜこぜにされている部分もあります。IPv4だけでも難解でわかりに

くいインターネットの仕組みが、IPv4とは似て非なる IPv6が並行運用されることにより、さ

らにややこしいものになりつつあるのが現状です。

本書では、IPv4と IPv6との似て非なる部分を明確にしつつ、まぜこぜに並行運用されるデュ

アルスタック環境についても解説します。

背景や経緯の説明IPv6に関連する仕様の多くは、RFCという形で標準化され、その内容は誰でも読める形で公

開されています。しかし、RFCに記述されているのはプロトコルの詳細であることが多く、そ

のプロトコルがなぜ必要なのかや、他のプロトコルとの位置づけの違いなどに関しては、書か

れていないことも少なくありません。そのため、慣れていないと、RFCを読んでも仕様の意味

を理解しにくいといえます。本書は、RFCを読むだけでは理解しにくい部分を補うことを目指

しています。

さらに、IPv6は、標準化された当初と比べると、その中身が大きく変わっています。本書執

筆中も、各種プロトコルの更新に関する議論が続けられています。IPv6そのものだけではな

く、IPv6に関連する新しいプロトコルも議論されています。IPv6とその周辺技術は常に更新

され続けています。

これだけ変化が激しい IPv6とその関連技術を理解するには、プロトコルそのものの解説だ

けではなく、各種プロトコルが考案された背景を含めた解説が必要でしょう。本書の執筆にあ

たっては、この点も重視しています。これまでの背景をしっかり理解しておけば、さらに新し

いプロトコルが議論され始めたときなどにも理解しやすくなるはずです。

無償配布本書は、紙の書籍を販売する一方で、紙の書籍と同じコンテンツを電子版として無償配布し

ます。これは、本書企画段階で筆者の知る限りでは IPv6に関するまとまった確かな情報がな

く、それならば IPv6に関する情報を広くたくさんの人々が知る機会を本書で作りたいと考え

たためです。

IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ

ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

発生を少しでも防げればという想いもあります。

無償配布版の「プロフェッショナル IPv6」は、クリエイティブコモンズライセンスのBY-NC-

Page 5: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

序文 v

SA(表示 -非営利 -継承)のライセンスのもとに公開します。たとえば、この本に含まれる文

章や図を、学校の授業や企業での研修などを目的として複製する場合には、特に申請していた

だかなくても大丈夫です。それらの用途のために、発表資料や配布資料の中で文章や図を使っ

たり、PDF本体を複製して組織内で配布していただくことに関しても、特別な許可は必要あり

ません。

PDFの取得先は、本書の出版元であるラムダノート株式会社のWebサイトにてご確認くだ

さい。

r https://www.lambdanote.com/products/ipv6IPv6に興味を抱いている一人でも多くの方の手に本書が届けば幸いです。

本書の構成本書は5部構成になっています。第 I部は「本書を読むにあたっての前提知識」というタイ

トルで、IPv6の解説をする前にインターネットそのものの解説などをしています。ユーザ環境

における IPv6対応とサーバ環境における IPv6対応とは何かを整理し、IPv4と IPv6という2つ

の異なるプロトコルが共存するデュアルスタックのインターネットをいままでどおり1つのイ

ンターネットとして利用するための鍵となるDNSについても解説しています。スマホアプリ

などでも必要になるNAT64やDNS64の概要も第 I部で紹介しています。

第 II部には、IPv6プロトコルとその周辺技術がまとめられています。本書執筆で最も時間を

かけた部分であり、本書の心臓部にあたります。IPv6アドレスの自動設定やマルチプレフィッ

クスに関連する章は特に執筆に注力した部分です。

第 III部は、IPv6と IPv4のデュアルスタックに関する解説です。IPv4と IPv6の名前解決を両

方とも同時に扱い、ユーザが IPv4と IPv6の違いを認識せずに使えるようにするため、DNSが

どのような役割を果たしているかを見ていきます。IPv6インターネットと IPv4インターネッ

トという、直接の互換性がない異なる2つのインターネットが1つになっている構造を解説し

ています。

第 IV部は、IPv4と IPv6の共存技術です。IPv6と IPv4には直接の互換性がないので、さまざ

まな IPv4/IPv6共存技術が周辺技術として提案されています。過去に提案された手法が改良さ

れて新しい手法として提案されることもあります。この章では、過去の歴史的経緯も含めてさ

まざまな IPv4/IPv6共存技術を紹介しています。

第V部は、IPv4アドレス在庫枯渇問題に関連する内容です。IPv6を理解するうえで IPv4の

知識が必須ということはありません。しかし、IPv4アドレス在庫枯渇問題は、インターネット

そのものを理解するうえで避けては通れない話題であると筆者は考えています。この第V部で

は、IPv4アドレス在庫枯渇問題そのものだけではなく、IPv4 NATについても解説しています。

最後の付録では、NTT NGNにおける IPv6について解説しています。NTT NGNにおける

IPv6は、特に日本国内で IPv6について語るときには大きな要素です。この付録の内容を理解

するには、第 II部のデフォルト IPv6アドレス選択およびマルチプレフィックス、マルチホーム

問題に関する章の内容を先に読むことをお勧めします。

Page 6: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

vi 序文

本書は上記のような構成になっていますが、その執筆は、正直なところ、途中で断念したく

なるぐらい大変なものでした。IPv6の解説書があまり世に出ていないのは、本気で書こうと思

うと限りなく書くべきことが見つかるからかもしれません。筆者が IPv6に関する記事を書き

始めたのは2011年のことですが、それなりに時間をかけて書き続けてきたにもかかわらず、

こうして書籍として公開できる形にできたのはようやく2018年のことです。その間、IPv6を

取り巻く世界の状況はかなり変化し、仕様もどんどん変化していきました。書けば書くほど、

「あ、これも書かないと……」という発見があり、扱うテーマも雪だるま式に増えていきまし

た。2017年にクラウドファンディングを立ち上げてからは、ブログもあまり書かずに本書の

執筆に全力でコミットし、何とか書籍としてまとまった状態になりました。それでも、まだま

だ書ききれていない部分があります。たとえば、ルーティングプロトコル、マルチキャスト

ルーティングプロトコル、モバイル IP、IPsecについては、仕様の詳細を解説できていません。

それ以外のトピックについても、解説が深い部分と、ある程度さらっと紹介するだけに留まっ

ている部分と、ところどころ濃淡が残っています。

本書を出版しているラムダノート社は、アップデートしていく書籍を目指している変わった

出版社です。ひとまず一通り形にまとめて初版の出版となりましたが、今後も可能であれば追

加や更新を続けていきたいと考えています。

2018年6月

小川晃通

Page 7: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

目次

序文 iii

第 I部 本書を読むにあたっての前提知識 1

第1章 インターネット概要 3

1.1 IPはパケット交換技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 層に分かれるネットワーク. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.3 トランスポート層の役割 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.4 オープンなプロトコルとRFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

第2章 IPv6でインターネットはどう変わるか 37

2.1 IPv6と IPv4の違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.2 IPv6対応とは. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2.3 IPv6インターネットと IPv4インターネットを同時に使う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2.4 IPv6ネットワークから IPv4インターネットに接続する. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

第 II部 IPv6プロトコルとその周辺技術 53

第3章 IPv6アドレスとそのテキスト表記 55

3.1 IPv6アドレス空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.2 IPv6アドレスのテキスト表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

3.3 IPv6アドレスの省略表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

第4章 IPv6アドレス体系 63

4.1 IPv6アドレスの種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

4.2 IPv6アドレス空間の使い方は IANAが管理している . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4.3 IPv6におけるユニキャストアドレスの構成要素. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.4 IPv6アドレスのスコープ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.5 IPv6ノードに要求される IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

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

4.7 スコープのゾーン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Page 8: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

viii 目次

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

4.9 ULA(Unique Local IPv6 Unicast Addresses) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

4.10 IPv4-Mapped IPv6アドレス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

4.11 例示用 IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

4.12 ユーザへの IPv6アドレス割り当て . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

第5章 IPv6パケットの構成 83

5.1 IPv6ヘッダの各フィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

5.2 上位層でのチェックサム計算に使う仮想ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

5.3 IPv6拡張ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

第6章 ICMPv6 101

6.1 ICMPv6フォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

6.2 ICMPv6エラーメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

6.3 ICMPv6情報メッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

第7章 近隣探索プロトコル 113

7.1 近隣探索プロトコルの機能と利用するメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

7.2 ルータとプレフィックス情報の発見 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

7.3 リンク層アドレスの解決と近隣不到達性の検知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

7.4 Redirectメッセージ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

7.5 近隣探索メッセージのオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

7.6 IPv6におけるon-linkとoff-link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

第8章 IPv6アドレスの自動設定 145

8.1 SLAACの流れ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

8.2 小規模ネットワークにおけるSLAACの利用例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

8.3 リンクローカル IPv6アドレスの生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

8.4 SLAACにおけるインターフェース識別子の生成方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

8.5 DAD(Duplicate Address Detection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

8.6 グローバル IPv6アドレスの生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

8.7 Router AdvertisementメッセージによるDNS情報の配送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

第9章 DHCPv6 159

9.1 IPv4のDHCPとDHCPv6の違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

9.2 IPv4のDHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

9.3 DHCPv6の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

9.4 DUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Page 9: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

目次 ix

9.5 ステートレスDHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

9.6 ステートフルDHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

9.7 DHCPv6-PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

第10章 IPフラグメンテーション 185

10.1 IPv4におけるフラグメンテーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

10.2 IPv6フラグメントヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

第11章 Path MTU discovery 197

11.1 Path MTU discoveryに関係する IPv4の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

11.2 Path MTU discoveryに関係する IPv6の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

11.3 上位層プロトコルとPath MTU Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

11.4 Path MTU Discoveryの仕組みを悪用したDoS攻撃 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

第12章 IPv6マルチキャスト 203

12.1 IPv6のマルチキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

12.2 マルチキャストのスコープ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

12.3 Solicited-Nodeマルチキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

12.4 マルチキャストにおけるゾーン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

12.5 MLD(Multicast Listener Discovery) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

12.6 ルータを越えるマルチキャスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

12.7 MRD(Multicast Router Discovery) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

12.8 リンク層でのマルチキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

第13章 IPv6エニーキャスト 221

13.1 IPv4におけるエニーキャスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

13.2 IPv6のエニーキャスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

13.3 IPv6サブネットルータエニーキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

13.4 ユニキャストとしての利用を避けるべき IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

13.5 エニーキャストの注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

13.6 IPv6エニーキャストとBCP 38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

第14章 IPv6におけるマルチプレフィックス 227

14.1 デフォルト IPv6アドレスの選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

14.2 マルチプレフィックスによるマルチホームの問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

14.3 IPv6サイトリナンバリング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Page 10: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

x 目次

第15章 IPv6とセキュリティ 245

15.1 IPv6は IPv4よりもセキュアというわけではない . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

15.2 近隣探索プロトコルとセキュリティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

15.3 SEND(SEcure Neighbor Discovery) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

15.4 不正なRouter Advertisementメッセージ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

15.5 DHCPv6-Shield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

15.6 IPv6アドレスとプライバシー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

15.7 IPv6サブネットに対するスキャン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

15.8 IPsec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

15.9 ICMPv6を無条件にすべてフィルタリングすべきではない . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

15.10 トンネル技術が抱える問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

15.11 IPv4-Mapped IPv6アドレスの問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

15.12 ブラックホール用 IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

第16章 プログラマにとっての IPv6対応 265

16.1 Socket APIと IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

16.2 単なる IPv6対応では不十分な場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

16.3 Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

16.4 IPv6ソケットと IPv4-Mapped IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

16.5 ポリシーテーブルの実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

第 III部 DNSと IPv6 277

第17章 DNSの基礎と IPv6対応 279

17.1 DNSの仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

17.2 DNSサーバへの再帰問い合わせと反復問い合わせ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

17.3 DNSメッセージフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

17.4 IPv4と IPv6アドレスの問い合わせ例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

17.5 DNSの逆引き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

17.6 DNSメッセージの512オクテット問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

17.7 IPv6環境におけるDNSの運用上の注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

17.8 廃止された仕様. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

第18章 DNSによるデュアルスタック環境の実現と運用 305

18.1 デュアルスタック環境の実現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

18.2 IPv6から IPv4へのフォールバック. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

18.3 キャッシュDNSサーバとCDNに関する問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

Page 11: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

目次 xi

18.4 デュアルスタック環境におけるSRVの利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

18.5 IPv6 DNSホワイトリストとブラックリスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

18.6 アプリケーションの IPv6対応とデュアルスタック環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

第 IV部 IPv4/IPv6共存技術 317

第19章 IPv4/IPv6共存技術の分類 319

19.1 IPv4/IPv6共存技術のバリエーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

19.2 ステートフルとステートレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

19.3 IPv4/IPv6共存技術利用のパターン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

19.4 今後も多くの試みが誕生する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

第20章 トンネル技術 323

20.1 6to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

20.2 Teredo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

20.3 ISATAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

20.4 6rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

20.5 4rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

20.6 6PE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

20.7 トンネル技術とセキュリティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

第21章 IPv4/IPv6変換技術 345

21.1 IPv4/IPv6変換の枠組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

21.2 SIIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

21.3 ステートフルNAT64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

21.4 IPv4/IPv6変換機用 IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

21.5 DNS64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

21.6 ALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

第22章 IPv4/IPv6共存技術の運用形態 355

22.1 DS-Lite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

22.2 Lightweight 4over6(lw4o6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

22.3 A+P. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

22.4 4rd、MAP-E、MAP-T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

22.5 CGNを利用して徐々に IPv6対応していく方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

22.6 464XLAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Page 12: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

xii 目次

第23章 プロキシ方式 367

23.1 HTTPプロキシ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

23.2 TRT方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

23.3 SIP用 IPv6プロキシ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

第V部 IPv4アドレス在庫枯渇対策 371

第24章 IPv4アドレス在庫枯渇とは 373

24.1 インターネットの成長と IPv4アドレス在庫の枯渇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

24.2 IPアドレス管理の階層構造と IPv4アドレス在庫枯渇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

24.3 IPv4アドレス在庫枯渇の対策 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

24.4 IPv4アドレス移転、IPv4アドレス売買、IPv4アドレス市場 . . . . . . . . . . . . . . . . . . . . . . . . . 381

第25章 IPv4 NATとCGN 387

25.1 NATとNAPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

25.2 CGN .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

25.3 CGNが抱える課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

25.4 CGNの普及とサーバにおけるアクセスログ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

25.5 ISP Sharedアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

第26章 STUN 399

26.1 STUN概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

26.2 旧STUNと新STUN .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

26.3 NATの分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

26.4 NAT機器に要求される挙動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

26.5 TURN .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

付録A NTT NGNでの IPv6 409

A.1 NTT閉域網 IPv6フォールバック問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

A.2 NTT NGN IPv6マルチプレフィックス問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

A.3 IPv6 PPPoEと IPv6 IPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

あとがき 427

クラウドファンディングにて本書をご支援いただいた皆さま . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

索引 432

Page 13: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

更新履歴 xiii

更新履歴各刷における主な修正点および追加点は下記のとおり。その他の変更点に関してはラムダノートのWebサイト(https://www.lambdanote.com)の本書のページを参照してください。

■ 第1版第2刷(2019年2月)r TURNの解説を追加(第26章)

Page 14: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 15: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第I部

本書を読むにあたっての前提知識

ここでは、IPv6に関する説明に入る前に、インターネットそのものの仕組みを IPv6を中心

におさらいします。また、ユーザ環境における IPv6対応とサーバ環境における IPv6対応とは

何かを整理します。さらに、IPv4と IPv6という2つの異なるプロトコルが共存するデュアル

スタックのインターネットをいままでどおり1つのインターネットとして利用するための鍵と

なるDNSについて概説し、スマホアプリなどでも必要になるNAT64やDNS64の概要を紹介

します。

Page 16: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 17: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第1章

インターネット概要

インターネットという名前は、「~間の」という意味を持つ「inter」という単語と、ネット

ワークである「net」を組み合わせたものです。複数のネットワーク同士をつないで相互通信

を行うには、どのようなデータをどのような方法で送受信するのかを決めておく必要がありま

す。そういった取り決めのことをプロトコル(protocol)と呼びます。

インターネットを実現するためのプロトコルがインターネットプロトコル(IP、Internet

Protocol)です。本書で解説する ‌IPv6‌は、インターネットプロトコルのバージョン6というわ

けです。

IPv6が開発された背景には、IPv4(インターネットプロトコルのバージョン4)アドレス在

庫枯渇問題があります。ここでアドレスというのは、文字どおり住所や宛先の意味です。インターネットプロトコルで使う住所や宛先は ‌IPアドレスといいます。

IPv4では、IPアドレスとして、長さが32ビットの値を使うことになっています。32ビット

で表現可能な値の数は、2の32乗通りです。2の32乗は42億9496万7296なので、IPv4アド

レスの理論上の総数は約43億個となります。「IPv4アドレス空間の大きさは32ビットである」

とか「IPv4アドレス空間からは最大で約43億個のアドレスが割り当て可能である」という表

現は、このことをいっています。

インターネットが世界的に普及し、インターネット利用者数の増加に伴って、インターネッ

トに接続する端末の数も増えました。インターネットに接続する端末には、IPアドレスが割り

当てられます。必然的に、端末数の増加に応じて利用される IPアドレスの数も増えます。そ

して、ついに2011年、IPv4アドレスの中央在庫が枯渇してしまいました。IPv4アドレスの中

央在庫が枯渇するということは、新しい IPv4アドレスが供給されなくなることを意味します。

中央在庫が枯渇しても、まだ供給した先には IPv4アドレスの在庫がありましたが、それがなく

なるのも時間の問題でした。そのため、「IPv4アドレス中央在庫の枯渇」以降、各所でさまざ

まな形の「IPv4アドレス在庫の枯渇」が発生し、いままで配布できていた IPv4アドレスが供給

できず、インターネットの規模が今以上に拡大しにくくなってしまったのです。

このような IPv4アドレスの在庫枯渇は突然起こったわけではなく、枯渇すること自体、

以前から予想されていたことでもあります。実際、枯渇を遅らせる方法として、IPv4アド

Page 18: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4 第1章 インターネット概要

レスを節約するためのCIDR(Classless Inter-Domain Routing)、NAT(Network Address

Translation)、プライベート IPv4アドレスなど、さまざまな仕組みが考案されました。それと

同時に、IPアドレス空間そのものを大きくすべく1990年代に検討が始まったのが、本書の主

題である IPv6です。

IPv6では、IPアドレスを128ビットで表現します。IPv4アドレスは32ビットで表される数

ですから、アドレスの長さでいえば4倍になったことになります。しかし、それによって利用

可能になるアドレス空間の大きさは、IPv4のときの4倍どころではありません。2の128乗通

り、すなわち、IPv4アドレスの2の96乗倍にもなります。この非常に大きな IPアドレス空間

を利用できるようにすることこそが、IPv6の最大の特徴であり、IPv6が開発された理由なの

です。

1.1 IPはパケット交換技術本章の冒頭で述べたように、複数のネットワーク同士をつなぎ合わせて通信できるように

したのがインターネットです。その通信を行う単位をパケットと呼びます。英語のパケット(packet)には、小包という意味があります。インターネットを流れるすべてのデータは、IP

パケットという小包によって、IPアドレスで示される宛先へと届けられます。

インターネットの前身であるARPANETが開始された1970年頃は、通信技術としてのパ

ケットそのものが最新の研究分野でした。小分けにしてデータを相手に送ることができるパケット交換方式が実用化されるまで、電話をはじめとする従来の通信では、回線交換方式という技術が利用されていました。

回線交換方式では、通信中に1つの回線を占有します。通信中に回線を専有するということ

は、その回線を利用して同時に行える通信が1つだけになってしまうということです。複数の

通信を同時に行う場合には、複数の回線を物理的に用意する必要がありました。

一方、パケット交換方式では、小分けにした個々のデータが回線を専有する時間を短くする

ことで、あたかも複数のデータが1つの回線を同時に使っているように錯覚させることができ

ます。複数の通信を1つの回線で共有できれば、回線の利用効率が良くなるので、回線を運用

するコストも下がります。回線交換方式よりも費用対効果が高いパケット交換方式を実現する

手法のひとつとして研究されていたネットワークが、現在のインターネットへと成長したの

です。

1.1.1 IPパケットのフォーマット通信データを小分けにしたパケットは、その名のとおり、データの小包のようなものです。

小包を宛先に届けるには、宛先などの情報も必要です。IPパケットの場合は、IPアドレスとし

て宛先を指定します。

IPパケットのどこにどのように宛先 IPアドレスが記載されているのか、通信を行う機器同士

の認識がバラバラだと、パケットを正しい宛先に届けることができません。インターネット上

でさまざまな機器同士が通信できるのは、IPパケットがどのような構造をしているのか、すべ

ての機器が共通の認識を持っているからです。

Page 19: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 5

コンピュータの世界では、データなどを表現する型のことをフォーマット(format)と呼び

ます。IPパケットにもフォーマットが定義されています。インターネット上を転送されていく

IPパケットのフォーマットも、インターネットプロトコルで定義されています。

IPパケットは、大きくヘッダ(header)とペイロード(payload)に分けられます。ヘッダ

には英語で「見出し」という意味があります。「頭」や「先頭」という意味のheadの末尾にer

が付いた英単語であり、文字どおり IPパケットの先頭部分です。IPv6ヘッダに続くペイロー

ドには、IPパケットで転送するデータなどが格納されます。

図1.1は、ネットワーク上を流れるパケットを図示して説明するときによく用いる、便宜的

なパケットの姿です。本書でも、図中でパケットを表すときにこのような絵として描くことが

あります。

ヘッダ ペイロード

パケット

▲ 図1.1 パケットのヘッダとペイロード

図ではこのように表現されていますが、実際のパケットは、バイト列です。IPv6パケット

を、1バイト(8ビット†1)ずつ十六進表記で表せば、図1.2のようになります。

IPv6ヘッダ

IPv6パケット

ペイロード

1バイト

0x60 0x00 0x00 0xXX… …0xXX 0xXX

▲ 図1.2 IPv6パケット

IPv6ヘッダの部分には、宛先 IPv6アドレスをはじめとして、パケットをインターネットで

転送するために必要な情報が格納されます。これらの情報に注目して、IPv6ヘッダの中身を

ビットごとに示したのが、図1.3です。

このようなヘッダの構成図のことを、一般にヘッダフォーマットと呼びます。

†1 現在のほとんどのシステムでは1バイトが8ビットですが、過去にはそうでないシステムもありました。そのような事情もあり、ネットワークに関する仕様では、8ビットを1オクテットという場合もあります。

Page 20: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6 第1章 インターネット概要

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Version Traffic Class Flow Label

Payload Length Next Header Hop Limit

Source Address

Destination Address

IPv6ペイロード

▲ 図1.3 IPv6パケットのヘッダフォーマット

IPv6パケットのヘッダフォーマットは、インターネットプロトコルを構成する非常に重要な

要素です。各フィールドにどのような情報がどのような形で格納されるかについては、第5章

で詳しく説明します。

■ エンディアンとネットワークバイトオーダーパケットのヘッダフォーマットなど、通信プロトコルやフォーマットを理解するための要素

として、エンディアンとネットワークバイトオーダーが挙げられます。ヘッダフォーマットの

図をなんとなく眺めるのであれば、それらの点をあまり理解しなくても大丈夫であることも多

いのですが、実際に通信プログラムを実装したりするときに、こういった点を理解していない

と問題が発生することがあります。ありがちなのが、リトルエンディアンを採用しているハー

ドウェアを使って通信プログラムを書いたときに、うまくパケットのヘッダを生成できないバ

グになってしまうというものです。

もう少し詳しく見てみましょう。図1.3のようなフィールドを持つバイト列としてパケット

を処理するのは、コンピュータです。コンピュータは、CPUがメモリ上のデータを操作するこ

とでさまざまな処理を実行します。このとき、パケットのようなバイト列をメモリ上にどのよ

うに配置するかが問題になります。複数のバイト列をまとめて扱うとき、メモリ上にバイト単

位で割り当てられている番地(アドレス)の小さい側にバイト列の上位の桁を配置するのか、

それとも下位の桁を配置するのかについて、統一の基準がないからです†2。

そうしたバイト列の並べ方のことをバイトオーダーと呼び、並べ方の具体的な種類のことをエンディアンと呼びます†3。エンディアンの代表はビッグエンディアンとリトルエンディアンです。

†2 この辺の話は少しわかりにくいです。具体的な例を示しつつ、この部分の説明が後ほど登場します。†3 日本語では「エンディアン」ですが、英語では “endianness”と呼ばれているので、RFCなどを読むときには注

意が必要です。

Page 21: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 7

ビッグエンディアンとリトルエンディアンの語源は、小説『ガリバー旅行記』の中に出てく

る、卵の殻の正しいむき方をめぐる意見の相違から戦争が起きる話にあります。卵の殻を大き

い側からむく勢力がビッグエンディアン、小さいほう側からむく勢力がリトルエンディアンで

す。コンピュータの世界では、ビッグエンディアンは大きな桁を表すビットを含むバイトから

最初に並べる方式、リトルエンディアンは小さな桁を表すビットを含むバイトから最初に並べ

る方式を指します。ビット列のうち最も大きな桁を表すビットを ‌MSB‌(Most Significant Bit)、

逆に最も小さな桁を表すビットを ‌LSB‌(Least Significant Bit)と呼ぶので、MSB側のバイトか

ら並べるのがビッグエンディアン、LSB側のバイトから並べるのがリトルエンディアンだとい

えます。

多少ややこしいのですが、RFCなどで表現される図は、ネットワーク上で物理的にやり取り

されるビットの順番を示しているわけではありません。物理的にどのような順番でビットが転

送されるのかは、物理層を構成する仕組みに依存します。バイトオーダーは、機器内のメモリ

上にどのようにバイトを配置するのかや、RFCなどの文書でどのように表現をするのかという

話なのです。

実際の例で見てみましょう。まず、32ビットの値をビッグエンディアン、リトルエンディ

アンでバイト単位に並べることを考えます。例として、0001 0010 0011 0100 0101 0110

0111 1000という32ビットの値(1バイトずつ16進表記で書くと0x12 0x34 0x56 0x78)

を、それぞれビッグエンディアンとリトルエンディアンで並べたものを、図1.4に示します。

リトルエンディアンはLSBが先頭になり、ビッグエンディアンはMSBが先頭になっているのが

わかると思います。

0x12 0x34 0x56 0x78

0x78 0x56 0x34 0x12

メモリアドレス小 メモリアドレス大

メモリアドレス小 メモリアドレス大

0001 0010 0011 0100 0101 0110 0111 1000

0x12345678

32ビットの値

十六進表記

ビッグエンディアンで配置

リトルエンディアンで配置

MSB LSB

▲ 図1.4 32ビットの値を配置するときのエンディアンの違い

注意が必要なのは、コンピュータが複数のビット列を1つの単位として扱うとき、その単位

が32ビットに限定されるわけではないという点です。32ビットで扱われるときには、その32

ビット内でのMSBとLSBがあり、16ビットで扱われるときには16ビット内でMSBとLSBがあ

るのです。

次は、16ビットの値を2つ連続して配置する例です。先ほどの図のように32ビットという

単位でMSBとLSBがあるのではなく、16ビットという単位でMSBとLSBがあります。

図1.5は、0001 0010 0011 0100(1バイトずつ十六進表記すると0x12 0x34)という16

ビットの値と、0101 0110 0111 1000(同じく0x56 0x78)という16ビットの値が連続し

ている場合に、これらをビッグエンディアン、リトルエンディアンで並べた例です。

Page 22: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8 第1章 インターネット概要

0x12 0x34 0x56 0x78

0x34 0x12 0x78 0x56

メモリアドレス小 メモリアドレス大

メモリアドレス小 メモリアドレス大

0001 0010 0011 0100 0101 0110 0111 1000

0x1234 0x5678

16ビットの値× 2

十六進表記

ビッグエンディアンで配置

リトルエンディアンで配置

MSB LSB MSB LSB

▲ 図1.5 16ビットの値を2つ配置するときのエンディアンの違い

図1.5と図1.4を比べるとわかるように、16ビットの値が2つ並んだ32ビットをリトルエン

ディアンで配置した場合と、ビット列としては同じ32ビットの値をリトルエンディアンで1

つ並べる場合とでは、同じビットの配置になりません。この違いだけを見るとリトルエンディ

アンのほうに違和感があるかもしれませんが、CPUのレジスタで扱うときの単位が16ビット

の値を16ビットずつ独立して扱うので、これでもコンピュータにとって不都合があるわけで

はありません。実際にバイト列をプログラムで扱うときに便利な面もあるので、システムに

よってはリトルエンディアンを使用しています。たとえば、インテルのx86系CPUはリトル

エンディアンです。

一方、ビッグエンディアンを採用したシステムとしては、かつてのサン・マイクロシステム

ズ(現在のOracle)によるSPARCなどが知られています。ARMなど、設定によってエンディ

アンを切り替えられるCPUもあります。

世界中のすべてのコンピュータが同じエンディアンを採用していれば、エンディアンについ

て気にする必要はないでしょう。しかし、通信プロトコルでは、異なるエンディアンの機器同

士でも通信できるようにする必要があるので、エンディアンの扱いについても考慮しなければ

なりません。異なるエンディアンを採用する機器同士でも問題なく通信できるのは、エンディ

アンをどうするかを含めて通信プロトコルが定義されているからです。

ここまで説明してきたリトルエンディアンとビッグエンディアンはビット列の扱いに関する

話です。インターネットで利用するプロトコルという視点で見たとき、8ビットを1単位とし

たオクテット単位でのデータの並べ方という視点もあります。このとき、8ビットのデータ列

はバイトと表現され、そのバイト列がどのように並ぶのかは、バイトオーダーと呼ばれます。

TCP/IPでも、エンディアンが異なるシステム間でデータを問題なくやり取りできるように、

バイトオーダーが事実上ビッグエンディアンに統一されています。インターネットで使われる

バイトオーダーでは、MSBを含むオクテット(バイト)を最初に並べることになっています。

この、ネットワークで利用されるバイトオーダーのことを、ネットワークバイトオーダーと呼びます。それに対し、各コンピュータ内でのエンディアンはホストバイトオーダーと呼ばれます。

Page 23: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 9

■ 本書のフォーマット図のバイトオーダー本書では、パケットヘッダのフォーマット図などを示すとき、IPv4の基本仕様を規定した

RFC 791†4のAppendix Bに示されたものと同様の方式で表現します。RFC 791のAppendix

Bには、「データが転送される順番どおりに示すヘッダやデータの図を示すときには左側から

右側に流れる形にすること」とあります。したがって、たとえば図1.6のようにバイト列を示

した場合、このデータが実際にオクテット単位(8ビット単位)で転送されるときは、左側か

ら右側へと流れます(一番右側に進んだあとは、次の行へと進みます)。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

1 2 3 4

5 6 7 8

9 10 11 12

▲ 図1.6 オクテット単位でのデータの転送順序

また、図1.7のようにビット列を表現するときは、一番左側(0番のビット)がMSBを示す

ものとします。図1.7の8ビットのデータは、0番め、2番め、4番め、6番めのビットが1なの

で、16進数で示すと0xaaであり、10進数で示すと170です。

0 1 2 3 4 5 6 7

1 0 1 0 1 0 1 0

▲ 図1.7 オクテット単位でのデータの転送順序

NOTE

ネットワークバイトオーダーをTCP/IP全体の仕様として定めるRFCなどの文書はありません。IPv4仕様のRFC 791 Appendix Bに記載されているバイトオーダーも、「this

document(この仕様書)」が対象なので、IPを利用している上位層のプロトコルすべてが同様のルールであると述べているわけではないのです。ただし、各種のヘッダフォーマットをはじめ、厳密にはバイトオーダーが問題になる図は、すべてネットワークバイトオーダーを前提として描かれています。なお、この並べ方について、IPv4の基本仕様を示しているRFC 791では「英語と同じように(“which they are read in English”)」とされています。インターネットが米国で生まれたからこそ、基本仕様がこのような表現になっているのでしょう。

1.1.2 IPパケットを転送するルータIPパケットをインターネット上で転送していく機器はルータと呼ばれます。「経路」という意味を持つ route(ルートもしくはラウトと発音)という英単語から、経路を提供するという

†4 RFC 791:J. Postel, “Internet Protocol”, 1981年9月

Page 24: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10 第1章 インターネット概要

意味で router(ルータやラウターと発音)というわけです。

インターネットを構成する各ルータは、インターネットの全体像を把握しているわけではあ

りません。ルータの仕事は、IPパケットに記載されている宛先などの情報を見ながら、次の

ルータに向けてパケットを転送するだけで、ルータが IPパケットのヘッダに記載されている宛

先 IPアドレスがどこにあるのかを知っているとは限りません。

ルータは、自分がどのような通信を実現しているのかといった細かいことは気にせず、個々

のパケットに記載された宛先 IPアドレスに従ってパケットをひたすら転送することだけに専

念します。インターネットの設計では、できるだけ単純な作業だけをしているのです。

IPパケットがどのような情報を保持しており、ルータは IPパケットから何を読み取ること

ができるのかがインターネットプロトコルで決められています。IPパケットを送出する側は、

インターネットプロトコルで決められた方式に従った IPパケットを作成し、送出しています。

インターネットプロトコルという共通言語があるからこそ、ルータはパケットに記載された情

報を読み取りながらパケットを転送できるのです†5。

ルータが適切に次の転送先を判断できるのは、「この宛先に届けたいときにはどっちに転送

すればいいか」を確認できる、ルーティングテーブルを持っているためです。パケットを受け取ったルータでは、IPパケットに記載された「○○宛」という宛先 IPアド

レス情報を、ルーティングテーブルに記載されている経路情報と突き合わせて、適切な「次の

ルータ」へと送り出します。宛先 IPアドレスとルーティングテーブルとの突き合わせにマッチ

した「次のルータ」へ転送するだけなので、あまり深く考えなくても処理ができます(図1.8)。

宛先IPアドレス 送出先〇〇★★××▲▲■■

①①②③④

ルーティングテーブル

〇〇

★★

××

▲▲

■■

ルータ

▲ 図1.8 ルータの中にあるルーティングテーブル

このようにルータは、基本的には「どのようなパケットがいつどこでどのように転送された

のか」をまったく把握せず、各パケットに記載された情報と、あらかじめ用意されたルーティ

†5 インターネットプロトコルは、経路を判断して転送する部分に関しては規定していません。受け取った IPパケットをどこにどのように転送すればよいのかを判断するための仕組みは、インターネットプロトコルとは別の仕組みとして定義されています。

Page 25: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 11

ングテーブルの情報だけで稼働しています†6。

ルーティングテーブルは道路標識

もう少しわかりやすくするために、現実世界に当てはめて考えてみましょう。いま、宛先が東京都千代田区○×のとある住所、出発地点は名古屋、パケットは目的地へと向かう車とします。車は、名古屋から東京に向かうために、東名高速道路に乗ったとします。高速道路には行き先を示す道路標識があります。そこには、その車を運転している人が行きたい住所がそのまま書かれているわけではなく、大まかに「東京はこっち」というようなことが書いてあるだけです。東名高速道路を降りて、さらに目的地に近づいていくと、徐々に標識に書いてある地名も詳細なものになっていき、最終的に車が目的地に到着できます。

千葉

東京

横浜

横浜千葉

東京

▲ 図1.9 ルーティングテーブルは地図ではなく道路標識

ルーティングテーブルは、図1.9のように、「○○という宛先へ行くならこっちへ進め」という情報(経路情報)が記されている道路標識のようなものであると考えることができます。各ルータが把握しているのは、大まかな宛先に対して向かうべき方向を示した経路だけです。ルーティングテーブルには、宛先までの詳細な道筋や、インターネットの全体像は記されていません。車の運転であれば、カーナビや地図を見ながら運転手が宛先までの道を考えて自分で進むこともできますが、パケットの場合は、ルータに設けられた道路標識だけを頼りに、宛先まで場当たり的に向かっていくような感じだと思ってください。ルーティングテーブルは「地図」ではなく、あくまでも「道路標識」なのです。そして各ルータ単体では、宛先までの方向を示すという単純な作業しかしませんが、複数のルータが互いに連携して転送していくことで最終的には IPパケットが送信元から宛先へ届きます。そこが、インターネットの面白いところです。

†6 本書の主題とは異なりますが、1つのルータ内で仮想的に複数のルーティングテーブルを運用するVRF(Virtual

Routing and Forwarding)という手法もあります。

Page 26: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12 第1章 インターネット概要

1.1.3 ルータ、ホスト、ノード少し話の流れが途切れてしまいますが、ここでいくつかの用語の定義をしておきます。本書

では、ルータ、ホスト(host)、ノード(node)という単語を使い分けています。

ノード(node)という英単語は、節や節点という意味を持ちます。ネットワークを図示した

ときに、何らかの節点となる存在は、すべて「ノード」なのです。たとえば、ネットワークの

末端に接続された機器も「ノード」ですし、ネットワークの中心部に接続されつつパケットを

転送する存在も「ノード」です。先ほどから登場しているルータも、パケットを転送するノードなのです。IPv6の基本仕様を示したRFC 8200†7では、「node」という用語の定義を、「IPv6

を実装した機器」としています。

ホスト(host)という英単語は、「主人」や「主催者」という意味を持つ英単語です。ユー

ザに対してコンピュータ資源の利用環境を提供する存在といったニュアンスで、コンピュータ

そのものをホストと呼ぶことがあります。しかし、ネットワークという文脈でホストという用

語が使われるときは、パケットを転送する機能を持たずネットワークの末端に接続されたノー

ドのことを特に示します。RFC 8200では、「ホスト」の定義を、「ルータではないノード」と

しています。

ネットワークの末端に接続されたノードは、ホストと呼ばれることもありますが、エンドノードと呼ばれることもあります。ルータではないノードにはそれより先のネットワークが存在しないので、ネットワークの末端、つまり「エンド」ノードなのです。

1.1.4 IPアドレスの構成ここまでの説明では、IPパケットはインターネット上でルータによって転送されること、

ルータの内部にはルーティングテーブルというものが存在し、そこには IPパケットの宛先に対

応する経路情報が記載されていることを紹介しました。では、実際にルーティングテーブルに記載されている情報とは何でしょうか?

ルーティングテーブルに登録されているのは、IPアドレスの集合体を表す情報です。経路情

報として扱うのは、機器の個々のインターフェースに付いている具体的な IPアドレスではな

く、ある範囲の IPアドレスを集約したもっと大まかな情報なのです。この情報のことを、サブネットとか、単にネットワークなどと呼びます。ネットワークは、IPアドレスのことを番地情報を含めた詳細な住所を示すものだと考えれ

ば、市町村レベルを大まかに示すものだといえます。たとえば、「千葉県浦安市舞浜1番地1」

が詳細な住所とすれば、「千葉県浦安市」が市町村です。道路標識に記載されるのも「浦安市

はこちら」といった市町村レベルの情報であり、「千葉県浦安市舞浜1番地1はこちら」のよ

うには示されません。同じようにルータでも、インターネット上の経路として IPアドレスを

扱うときには、具体的な IPアドレスではなくネットワークで示します。IPアドレスは固定長

のビット列なので、そのうちの前半部分をネットワークを示すものとして扱い、後半部分を機

器のネットワークインターフェースを示すために使います。IPアドレスの全体が異なっていて

も、前半部分が共通であれば、同じネットワークと考えます。

†7 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月

Page 27: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 13

IPv4アドレスでは、前半部分をネットワーク部、後半部分をホスト部と呼びます。IPv6アド

レスでは、前半部分をネットワーク識別子、後半部分をインターフェース識別子と呼びます。

NOTE

IPv6アドレスでは、一部の例外を除いて基本的に、128ビットのうち前半64ビットをネットワーク識別子、後半64ビットをインターフェース識別子として使います。IPv6

アドレスの構成については4.3節で改めて説明します。

一般にコンピュータの世界では、あるデータから特定の情報を取り出すとき、マスク(またはビットマスク)という処理を使います。口や顔を覆うマスクのように、データの一部分を覆い隠すビット列を使って情報を取り出すわけです。ビット列すべてを使って表したものが IP

アドレスであり、その一部分を抜き出したものがネットワークなので、IPアドレスからネット

ワークを示す部分を取り出すのにもマスクを使えます。そのためのマスクをネットマスクと呼びます。IPアドレスは、IPv4の場合は32ビット、IPv6の場合は128ビットなので、それぞれ

の長さのビット列で先頭からネットワークを示すまでの部分をすべて1、それ以降をすべて0

にしたものがネットマスクになります。

ネットワークを示す部分だけのビット列を得るには、IPアドレスとネットマスクとでビッ

ト演算のANDをとります。ビット演算のANDは、2つの入力の両方が1であるときに1にな

り、どちらかが0であれば0という結果を返す演算です。IPアドレスとネットマスクを利用し

てANDのビット演算を行うと、IPアドレスのビットのうち、ネットマスクのビットが1となっ

ている部分だけのビットが1になります。ネットマスクで0となっているビットの部分は「マ

スクされる」わけです。

IPv6アドレスとネットマスクの例を見てみましょう。2001:db8::1という IPv6アドレス

と、ffff:ffff:ffff:ffff::というネットマスクを利用して、ネットワーク識別子を抽出す

る場合を考えてみます(図1.10)。ネットマスクの128ビットのうち、上位64ビット分が1に

なっているので、IPv6アドレスの上位64ビット以外はすべて0になります。そのため、2001:

db8::1という IPv6アドレスに対するffff:ffff:ffff:ffff::というネットマスクを使っ

て得られるネットワーク識別子は2001:db8::になります。

NOTE

128ビットの IPv6アドレスは、この例のように16ビットずつを「:」で区切って十六進表記で書き表します(「::」となっている部分は、連続するゼロが省略されていることを示します)。IPv6アドレスのテキスト表記と省略ルールについては3.2節および3.3

節で改めて説明します。

Page 28: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14 第1章 インターネット概要

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ネットマスク

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

IPv6アドレス 2001:db8::1

2001:db8::

ffff:ffff:ffff:ffff::

ビットのAND演算

ネットワーク部に相当

▲ 図1.10 IPv6でのネットマスクの例

IPv4アドレスとネットマスク

IPv4アドレスとネットマスクの例を見てみましょう。192.0.2.14という IPv4アドレスと、255.255.255.0というネットマスクを利用して、ネットワーク部を抽出する場合を考えます(図1.11)。IPアドレスとネットマスクとを入力とするビットのAND演算を行うと、ネットマスクが255.255.255.0なので、IPアドレスの32ビットのうち最初の24ビットの値がそのままとなり、IPアドレスの最後の8ビットがすべて0になります。そのため、192.0.2.14という IPアドレスと、255.255.255.0というネットマスクで表される経路は、192.0.2.0というネットワークを宛先としたものになります。

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0ネットマスク

1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0

1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

IPv4アドレス 192.0.2.14

192.0.2.0

255.255.255.0

ビットのAND演算

ネットワーク部に相当

▲ 図1.11 IPv4でのネットマスクの例

Page 29: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 15

1.1.5 プレフィックス長ネットワークは、ネットマスクではなく、プレフィックス長で表現されることもあります。

プレフィックス(prefix)は、英語で「接頭辞」や「前に置くもの」という意味を持つ単語です。

IPアドレスの前半部分のうちのどこまでのビットで示されるネットワークについて表現する

のかを指定するときに使われます。ネットマスクを使って同様の表現も可能ですが、ネットマ

スクの先頭から連続する1の数を表現するので、プレフィックス長として示すほうがシンプル

です。

プレフィックス長を使ってネットワークを表現するときは、そのネットワークを IPアドレス

と「/」に数字が続く形で表現します。たとえば、2001:db8::/32という表現は、2001:db8:

:という IPアドレスのうち最初の32ビットによるネットワークプレフィックスである、という

ことを意味します。

IPv4アドレスを人間にとって見やすい形で書き表すときは8ビットごとにドット区切りに

し、IPv6アドレスの場合には16ビットごとにコロンで区切りますが、プレフィックス長は8

や16の倍数とは限らないことに注意してください。IPv6では、16ビットごとに:で区切った

部分の中身を表現しますが、4ビットごとに16進数で表現するため、プレフィックス長が4の

倍数となっていると人間にとって理解しやすくなります。

プレフィックス長とネットワークプレフィックスの例をいくつか見てみましょう。図1.12

のように、2001:db8:ffff::1という IPアドレスがあったとして、プレフィックス長が/32、

/33、/34、/35、/36のとき、それぞれのネットワーク部はどのようになるでしょうか?

プレフィックス長が32の場合、ネットマスクは128ビットのうちの先頭32ビットが1なの

で、ffff:ffff::になります。2001:db8:ffff::1とffff:ffff::のAND演算を行うと、

2001:db8::となるので、2001:db8::がネットワークプレフィックスになりますが、このと

き、プレフィックス長と一緒に2001:db8::/32と表記します。

次は、プレフィックス長が/33の場合を考えましょう。プレフィックス長が/33の場合、

ネットマスクは128ビットのうちの先頭33ビットが1なので、ffff:ffff:8000::になりま

す。2001:db8:ffff::1とffff:ffff:8000::のAND演算を行うと、2001:db8:8000::と

なるので、2001:db8:8000::/33がネットワークプレフィックスになります。このように、

プレフィックス長が/33の場合は、16の倍数ではないので、/32の場合と比べて少しわかりに

くくなります。

同様な計算で、/34の場合は2001:db8:c000::/34、/35の場合は2001:db8:e000::/35、

/36の場合は2001:db8:f000::/36となります。

IPv4ではエンドノードが接続されているサブネットのプレフィックス長が環境によって異

なるのが一般的ですが、IPv6では、エンドノードが接続されている個々のサブネットでは/64

というプレフィックス長でのサブネットプレフィックスが使われるのが一般的です。その一方

で、IPアドレスの割り当てや割り振り、ルーティングなどでは、IPv6でも IPv4同様にさまざ

まなプレフィックス長が使われます。

Page 30: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16 第1章 インターネット概要

IPアドレス

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

2001:db8::/32

2001:db8:ffff::1

ネットマスク(ffff:ffff::)

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

ネットマスク(ffff:ffff:8000::)

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

ネットマスク(ffff:ffff:c000::)

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

ネットマスク(ffff:ffff:e0000::)

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

ネットマスク(ffff:ffff:f0000::)

2001:db8:8000::/33

2001:db8:c000::/34

2001:db8:e000::/35

2001:db8:f000::/36

▲ 図1.12 IPv6でのプレフィックス長の例(プレフィックス長が32、33、34、35、36の場合)

1.1.6 ルーティングテーブルはどのように生成されているのかルータが受け取ったパケットをルーティングテーブルに従って転送する行為はフォワーディングと呼ばれています。受け取ったパケットを次のルータへとフォワード(forward)、つま

り転送するからです。フォワーディングでは、作成済みのルーティングテーブルを参照しなが

らパケットを転送します。ここまでの説明も、各ルータがすでに IPアドレスに対応する経路

を知っている、つまりルーティングテーブルを持っている状態であることを前提にしていま

した。

ルーティングテーブルの生成方法にはさまざまなものがあります。どれか1つだけに決まっ

ているわけではありませんが、「人間が手動で設定する静的な方法」と、「インターネット上の

ルータ同士が協調してルーティングテーブルを自分たちで生成する動的な方法」に大別でき

ます。

ルータ同士が協調して経路を把握し、動的にルーティングテーブルを生成する仕組みは、イ

Page 31: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 17

ンターネットを理解するうえで非常に重要なポイントです。そのため、そのような仕組みはプ

ロトコルとして規定され、利用されています。そのようなプロトコルはルーティングプロトコルと呼ばれています。以降では、ルーティング方法の生成について、まずは静的な方法を説明してから、動的な方

法を説明します。

■ 小規模なネットワークでの静的なルーティングテーブル生成例ルーティングテーブルが作成される過程を知るために、とても単純なネットワークを例にし

て考えてみましょう。図1.13のような、3台の機器が数珠つなぎになったトポロジがあったと

します。トポロジとは、ネットワークの構成やネットワーク全体の形状のことです。

BA

a1b1 b2 c1

C

▲ 図1.13 3台の機器が数珠つなぎになったトポロジ

機器Aのネットワークインターフェースは a1、機器Bのネットワークインターフェースは

b1とb2、機器Cのネットワークインターフェースはc1とします。

図1.13のようなトポロジでは、複雑なルーティングは必要ありません。末端にいるAとC

は、Bへとパケット転送を依頼する以外に方法がありません。間にいるBも、宛先に応じてパ

ケットをAかCに転送すれば済みます。このネットワークでは、間にいる機器Bが「自分のつ

ながっているネットワークをすべて知っている」ので、その情報だけでルーティングが可能

です。

図1.13のネットワーク例で、AとBとCに対して静的にルーティングテーブルを作成してみ

ましょう。静的な設定なので、管理者が作成したルーティングテーブルをAとBとCに対して

個別に手動で設定します。管理者は、トポロジをあらかじめ把握しているものとします。

まず、Aのルーティングテーブルを考えてみましょう。図1.13のネットワークにはAとBと

Cしか存在しないので、Aは、BおよびCと通信できれば十分です。Aのa1とBのb1は直接接

続されているので、Aが通信に利用しているネットワークインターフェースa1に対してパケッ

トを送信すれば、Bに届くことが期待できます。

さらに、AがCと通信するためには、Bがパケットを転送する必要があるので、AからCへの

通信もAのネットワークインターフェースa1に対してパケットを送信するように手動設定し

ます。

図1.13の例では、CもAと同様の状況です。Cについても、BとAに対してパケットを送信

するとき、ネットワークに接続しているネットワークインターフェース c1経由で送信するよ

うにルーティングテーブルを設定します。

AおよびCと違い、図1.13のBはb1およびb2という2つのネットワークインターフェース

Page 32: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18 第1章 インターネット概要

を持っています。まず、BがAと通信したい場合について考えましょう。BはAとb1を通じて

接続しているので、BがAにパケットを送信したいのであれば、b1へとパケットを送信する必

要があります。

そのため、Bのルーティングテーブルには、「Aへの経路はb1」という設定を施します。同様

に、「Cへの経路はb2」というルーティングテーブルをBに追加したうえで、Bがルータとして

動作するように受け取ったパケットを他のネットワークインターフェースへと転送できるよう

に設定すれば、BがAからのパケットをCへと転送できるようになります。

このように、A、B、Cすべての機器を個別に手動設定することで、図1.13のトポロジで機

器同士が相互に通信できるようになります。

■ デフォルトルータ先ほどの例では、機器AとCはネットワークインターフェースを1つしか持っていないの

で、どのような通信であれ、とりあえず自分のネットワークインターフェース経由でパケット

を送信するという設定でも通信できてしまいます。どうせ出口は1つしかないので、深く考え

ずにすべてのパケットをその1つのネットワークインターフェースで行えばいいからです。こ

のような場合、通常はデフォルトルータを設定します†8。

コンピュータ用語としてのデフォルト(default)という単語には、適切な選択肢が存在し

ない場合に採用される標準の設定という意味があります。つまり、デフォルトルータは、明示

的に指定された経路以外の宛先へのパケットを送信してもらうためのルータです。明示的に指

定されていない「その他全部」がデフォルトになります。この場合には、そもそも「その他全

部」ではない経路が1つも設定されていないので、毎回必ず「その他」の設定が採用されます。

皆さんが普段、家庭や職場のネットワークで利用する手もとの機器では、デフォルトルータ

が設定されていることが多いでしょう。ルータ1台に依存すればよい機器は、依存すべきルー

タを「その他全部」として設定するという単純な設定により、インターネットと通信ができる

ようになるからです。たとえば、図1.14のような家庭内ネットワークとインターネットの橋

渡しをするルータが1台だけという単純な状況を考えてみます。

デフォルトルータ インターネット

家庭内ネットワーク

▲ 図1.14 家庭内ネットワークで利用されるデフォルトルータ

図1.14のような環境では、家庭内ネットワークに接続する機器は「インターネットと通信を

†8 デフォルトゲートウェイという表現もありますが、本書ではデフォルトルータという表現を使います。

Page 33: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.1 IPはパケット交換技術 19

するのであれば、このルータにパケット転送を依頼すればOK!」という設定で十分でしょう。

このような場合、機器にデフォルトルータを設定するだけでインターネットとの通信が可能に

なります。

■ 動的なルーティングテーブル生成では、デフォルトルータの先にあるルータでは、どのようにしてルーティングテーブルを用

意しているのでしょうか? すべての相手までの経路情報をあらかじめ手動で設定することも

できなくはないでしょうが、ネットワークに何らかの変化が発生するたびに設定を手動ですべ

て変更しなくてはなりません。ネットワークの規模が大きくなれば、すべてを手動で設定する

のは困難です。小規模ではないネットワークでは、ルータ同士が協調しつつ経路情報をやり取

りして自動的にルーティングテーブルを計算する動的ルーティング(ダイナミックルーティン

グ)が使われます。そのための仕組みがルーティングプロトコルです。動的ルーティングにもいくつかの種類があります。なかでもシンプルなのは、すべての

ルータが自分の隣にある機器を伝言ゲームのように伝えていく、ディスタンスベクタ型と呼

ばれる方式です。ディスタンスベクタ型のルーティングプロトコルとしては、 ‌RIP ‌(Routing

Information Protocol)が有名です。ただし、RIPそのものはARPANET時代から使われ続け

ている非常に古いルーティングプロトコルであり、IPv4でしか使えません。IPv6用のRIPと

しては、オリジナルのRIPが改良されたRIPv2の IPv6拡張版として、1997年にRFC 2080†9と

RFC 2081†10で ‌RIPng ‌というプロトコルが規定されています。RIPngは、1990年代後半から

2000年代前半ぐらいまで、IPv6のためのルーティングプロトコルの実装がほかに存在しない

状況だったこともあり、比較的よく使われていたプロトコルです。現在も小規模ネットワーク

で動的ルーティングを利用する選択肢となりえますが、昔ほど利用頻度は多くないでしょう。

すべてのルータが「自分の周囲にある機器の一覧表」を他のすべてのルータと共有し、それ

ぞれが集めた一覧表からネットワーク全体の地図を作るという方法もあります。この方法の

ルーティングプロトコルはリンクステート型と呼ばれ、その代表は、組織やプロバイダの内部

ネットワークでよく利用される ‌OSPF‌(Open Shortest Path First)です。IPv4で利用されてい

るOSPFは、OSPFv2というバージョンで、「自分の周囲にある機器の一覧表」をサブネット単

位で計算します。IPv6では、同一リンク上に複数のサブネットが存在可能であり、かつ同一リ

ンク上の異なるサブネット同士が直接通信することも可能なので、リンク単位で計算を実行す

る ‌OSPFv3‌が利用されます。OSPFv3は、RFC 5340†11で規定されています。OSPFv3について

詳しくはRFC 5340を参照してください。

NOTE

OSPFv3が作られた当初は、OSPFv3が IPv6専用のプロトコル、OSPFv2が IPv4専用のプロトコルとなっており、IPv4と IPv6の両方でOSPFを使うにはOSPFv2とOSPFv3を両

†9 RFC 2080:G. Malkin, R. Minnear, “RIPng for IPv6”, 1997年1月†10 RFC 2081:G. Malkin, “RIPng Protocol Applicability Statement”, 1997年1月†11 RFC 5340:R. Coltun, D. Ferguson, J. Moy, A. Lindem, “OSPF for IPv6”, 2008年7月

Page 34: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20 第1章 インターネット概要

方使う必要がありました。その後、RFC 5838†12によってOSPFv3が複数アドレスファミリに対応し、IPv4と IPv6の両方を扱えるようになっています。

OSPFと同じリンクステート型のルーティングプロトコルとして、 ‌IS-IS ‌(Intermediate

System to Intermediate System)と呼ばれるものもあります。IS-ISは、IPv4での利用を前提

としたルーティングプロトコルではなかったこともあり、IPv6拡張を規定したRFC 5308†13は

非常にシンプルな内容となっています。

OSPFや IS-ISの仕組みは、「全員のお隣さん情報がわかればネットワークの全体像がわかる

よね」という発想を背景にしています。そのため、話としては単純ですが、インターネット全

体のような規模で利用するのは現実的ではありません。ネットワークの規模が大きくなってし

まうと、「自分の周囲にある機器の一覧表」をやり取りするための通信量が膨大になるだけで

なく、どのネットワークがどのようにつながっているのかを各ルータで計算するのにかかる計

算量も膨れ上がってしまい、使い物にならないからです。したがって、インターネット全体で

使うためのルーティングの仕組みと、組織内などで使うためのルーティングプロトコルとで

は、そもそも別の発想が必要になってきます。

冒頭でも述べたように、インターネット全体は「ネットワークのネットワーク」です。その

ため、ルーティングプロトコルにも、各組織が自分のネットワーク内のルーティングに責任を

持ち、ネットワーク同士が協調して「ネットワークのネットワーク」でのルーティングを行う

仕組みが必要になります。現在のインターネットでは、各組織が責任をもってルーティングを

行うネットワークのことを ‌AS ‌(Autonomous System、自律システム)と呼んでおり、AS同

士をつなぐのに ‌BGP ‌(Border Gateway Protocol)と呼ばれる特別なルーティングプロトコル

が利用されています。BGPが、多くの機器が含まれている「ネットワーク」をASという単位

にまとめ、AS間での経路制御を実現しているといえるでしょう。

現在、AS間で IPv4の経路情報を扱っているのは、BGP4というバージョンです。このBGP4

をマルチプロトコル対応に拡張し、IPv6のルーティングも行えるようにしたものは ‌BGP4+と

呼ばれ、RFC 4760†14で定義されています。

NOTE

BGP4+により IPv6に関するルーティング情報の交換も可能になりましたが、ルータ ID ‌という識別子では IPv4アドレスが必要です。また、BGP4ルータ同士でやり取りするときに使う IPプロトコルは、BGPでやり取りする経路情報とは独立なので、IPv4と IPv6

のどちらでも使えます。

†12 RFC 5838:A. Lindem, S. Mirtorabi, A. Roy, M. Barnes, R. Aggarwal, “Support of Address Families in

OSPFv3”, 2010年4月†13 RFC 5308:C. Hopps, “Routing IPv6 with IS-IS”, 2008年10月†14 RFC 4760:T. Bates, R. Chandra, D. Katz, Y. Rekhter, “Multiprotocol Extensions for BGP-4”, 2007年1月

Page 35: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.2 層に分かれるネットワーク 21

1.2 層に分かれるネットワーク1.1節では、インターネットを支えるプロトコルである IPについて説明しました。しかし、

実際のインターネットは IPが提供する仕組みだけでは実現できません。

インターネットを理解するための常套手段は、さまざまな機能を「層に分けて考える」とい

うものです。現在のインターネットを支える機能を層に分けると、次のような4つの階層にな

ると考えられます。

アプリケーション層

トランスポート層

ネットワーク層

リンク層

▲ 図1.15 インターネット階層モデル

リンク層で扱うのは、隣の機器との接続性です。隣の機器と物理的にケーブルなどでつながっているかどうかだけでなく、論理的につながっているかどうかが問題です。たとえば、光

ファイバで2台の機器を接続しても、それだけでは通信できません。光ファイバでつながって

いる機器との通信方法を決める必要があります。そのような、隣の機器との通信方法までを含

めて扱うのがリンク層です。

リンク層の上位の層は、ネットワーク層と呼ばれます。この層では、リンク層が扱う「隣」よりさらに離れた機器との通信を実現します。図1.16のように、リンク層が実現した隣との

接続からデータを得たうえで、それをさらに隣へと渡すのがネットワーク層の仕事です。

ネットワーク層のプロトコル

リンク層のプロトコルリンク層のプロトコル

▲ 図1.16 リンク層とネットワーク層の違い

ネットワーク層では、隣の機器だけでなく、離れた地点との通信も扱います。これは、ここ

までの説明で何度も出てきたルータの仕事だといえます。つまり、IPv4と IPv6はネットワー

ク層のプロトコルです。すごく乱暴に要約すると、インターネットではルータを越えないのが

リンク層、ルータを越えるのがネットワーク層の通信だといえます。

Page 36: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22 第1章 インターネット概要

NOTE

ただし、インターネットでは、同一リンクでルータを越えずに通信を行う場合でもルータの機能が介在します(図1.17)。

ネットワーク層のプロトコル(ノード内)

ネットワーク層のプロトコル(ノード内)

リンク層のプロトコル

▲ 図1.17 同一リンクの通信におけるルータの役割

インターネットが、このような階層に分けて設計されているのには理由があります。もしイ

ンターネットに階層構造がなかったら、複数の物理回線にまたがるような遠隔地との間で通信

しようとする場合、お互いがネットワークに関するすべての情報を把握する必要があるでしょ

う。たとえば、「通信相手までの経路には、物理回線として銅線と光ファイバと無線が使われ

ている」といった情報を、通信を開始する前に末端の機器がすべて把握している必要があるか

もしれません。これではあまりにも不便です。そこで、物理回線の特性に左右されるような

「すぐ隣の機器との通信」と、「離れた地点との通信」とを分けてプロトコルを定義する、階層

構造の設計がとられているのです。

階層構造の設計のおかげで、各ルータが接続している物理的な回線の特性や、そうした特性

に左右される「すぐ隣の機器と通信」の実現方法に煩わされることなく、ネットワークを越え

た通信をするというインターネットプロトコルの仕組みが作れます。IPv4と IPv6という2つ

のインターネットプロトコルが、いずれも同じ回線の上で動作できるのは、この階層構造の設

計の恩恵だといえるでしょう。

ネットワーク層プロトコルである IPv4や IPv6で決められているのは、通信相手に IPパケッ

トを届けるまでの仕事です。宛先にどのような IPパケットをどのように届けるか、あるいは、

届いた IPパケットをどう扱うかといった仕事は、ネットワーク層の上位のトランスポート層の役割になります。パケットを届ける通信そのものと、そのパケットの扱い方が、別の層の機能

として設計されているのです。

トランスポート層を担うプロトコルとしては、どのように IPパケットを扱ってほしいかに応

じて、複数の選択肢を選べます。現在、IPパケットを運ぶトランスポート層のプロトコルとし

て広く利用されているのは、TCP(Transmission Control Protocol)とUDP(User Datagram

Protocol)です。ただし、この2つだけがトランスポート層の役割を実現するプロトコルとい

うわけではなく、ほかにもさまざまなプロトコルがあります。

Page 37: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.2 層に分かれるネットワーク 23

OSI参照モデル

層に分けるやり方としては、歴史的に7つの層に分ける ‌OSI参照モデルがよく利用されていました(図1.18)。OSI参照モデルでは、イーサネットなどのリンク層が担う役割は第2層に、IPv4と IPv6が担うネットワーク層の機能は第3層に割り当てられます。そのため、それぞれの層(レイヤー)について言及するとき、レイヤー2 ‌、レイヤー3 ‌という表現を使うことがよくあります。同様に、レイヤー2のスイッチングを行う装置を ‌L2スイッチ、ルータのことを ‌L3スイッチと呼ぶこともあります。また、それより上位のアプリケーションプロトコルのデータまで見てパケットの処理をする機器を ‌L7スイッチなどと呼ぶこともあります。

アプリケーション層

プレゼンテーション層

セッション層

トランスポート層

ネットワーク層

データリンク層

物理層▲ 図1.18 OSI参照モデル

1.2.1 階層構造とパケットプロトコルを「層」で理解することを念頭に置きながら、インターネット上でやり取りされ

るパケットの流れを見てみましょう。リンク層のプロトコルであるイーサネット上で、IPv6を

使い、Webのトラフィックを運ぶ例を考えてみます(図1.19)。このとき、物理的な回線を流

れる信号の正体は、WebのトラフィックのデータにTCPのヘッダが付き、それに IPv6のヘッ

ダが付き、それにイーサネットヘッダが付いたイーサネットフレームと呼ばれるデータです。

IPパケットのヘッダについてはすでに説明しましたが、同じように階層ごとにそれぞれヘッダ

があり、そのヘッダの直後に次の階層のプロトコルのヘッダが続いていることがわかります。

イーサネットヘッダ IPv6ヘッダ

IPv6パケット(ネットワーク層)

イーサネットフレーム(リンク層)

TCPヘッダ HTTPヘッダ Webコンテンツ

0x60 0x00 0x000x01 0x00 0x01 0x60

▲ 図1.19 IPv6でのWebトラフィックを運ぶイーサネットフレームの例

Page 38: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24 第1章 インターネット概要

ヘッダの次に別のプロトコルのヘッダが続くというのは、パケットの中に別のパケットが

入っているようなものです。たとえば、図1.19の例で IPv6パケットが運んでいるデータ部分

(ペイロード)は、TCPというトランスポート層のプロトコルのヘッダとデータです。パケッ

ト通信におけるデータは、ロシアのマトリョーシカ人形のように、入れ子構造になっているの

です。

IPv6ペイロードの先頭部分には、上位層であるトランスポート層のプロトコルのヘッダの

ほかに、IPv6拡張ヘッダや ICMPv6ヘッダが続く場合があります。IPv6パケットがペイロード

として運んでいるデータの先頭部分がどのようなヘッダであるかは、IPv6ヘッダにあるNext

Headerというフィールドで示されます。ペイロードの先頭が図1.19のようにTCPの場合、

IPv6ヘッダのNext Headerフィールドの値は、TCPを表す「6」になります。

なお、IPv4パケットの場合にはヘッダにProtocolというフィールドがあり、TCPを運ぶパ

ケットの場合は、このProtocolフィールドの値が6になります。一見すると IPv4と IPv6とで

フィールドの名前が違うだけにも思えますが、この違いは IPv4と IPv6の本質的な違いでもあ

ります。この違いに関しては、5.3節で解説します。

NOTE

IPv6ヘッダのNext Headerフィールドが「No Next Header」の場合には、ペイロードの先頭部分に別のヘッダが続きません。これについては5.3.5項で説明します。

1.2.2 イーサネットにおける違いリンク層のプロトコルで、IPv4と IPv6を区別できるようになっている場合もあります。た

とえば、リンク層のプロトコルとして一般的なイーサネットでは、IPv6と IPv4とで、イーサ

ネットフレームの中のタイプフィールドに指定する値が異なります。

イーサネットにおける IPv6パケットの扱いは、RFC 2464†15で規定されています。RFC

2464によれば、IPv6パケットを運ぶイーサネットフレームのタイプフィールドは0x86ddと

なります(図1.20)。

宛先イーサネットアドレス(6バイト)

送信元イーサネットアドレス(6バイト)

イーサネットヘッダ IPv6パケット

0xdd 0x60 0x00 0x000x860x01 0x00 0x5e 0x90 0x10 0x00 0x00 0x00 0x5e 0x00 0x53 0xff

タイプフィールド

▲ 図1.20 IPv6パケットを運ぶイーサネットフレーム

一方、IPv4パケットを運ぶイーサネットフレームのタイプフィールドは、0x0800になりま

す(図1.21)。

†15 RFC 2464:M. Crawford, “Transmission of IPv6 Packets over Ethernet Networks”, 1998年12月

Page 39: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.3 トランスポート層の役割 25

宛先イーサネットアドレス(6バイト)

送信元イーサネットアドレス(6バイト)

イーサネットヘッダ IPv4パケット

0x00 0x45 0x00 0x000x080x01 0x00 0x5e 0x90 0x10 0x00 0x00 0x00 0x5e 0x00 0x53 0xff

タイプフィールド

▲ 図1.21 IPv4パケットを運ぶイーサネットフレーム

IPv4と IPv6は、リンク層プロトコルであるイーサネットの段階で、まったく異なるパケッ

トとして扱われることがわかります。

イーサネット上でのマルチキャストで利用されるアドレスも IPv4と IPv6で異なります。

IPv4では、01:00:5e:XX:XX:XXが利用されますが、IPv6では33:33:XX:XX:XX:XXが利用

されます。IPv6マルチキャストのためのイーサネットアドレスとして先頭2オクテットが33:

33が利用されることは、RFC 2464のSection 7で示されています。

1.3 トランスポート層の役割インターネットの通信で大事なのは、送り出した IPパケットそのものではなく、IPパケット

が運んでいるデータのほうです。もし送り出したすべての IPパケットが確実に届かず、IPパ

ケットが喪失したり変質したりして相手に正しくデータが届かなかったなら、同じデータを別

の IPパケットに入れて再度送り直せばよいのです。そのためインターネットは、「パケットが

届くかどうかをネットワークそのものでは保証しない」という、いい加減ともいえる大雑把な

仕組みになっています。

もし、送信するデータをすべて確実に相手に届けたい場合は、そのための処理を末端の機器

に任せます。途中の経路ではパケットが失われるかもしれないけれど、最終的にはすべての

データが相手に届くように、末端の機器同士ががんばって失われたパケットを再度送り直すの

です。経路の途中にあるルータは個別の通信には関与せず、個別の通信を行っている当事者同

士が必要な場合には各自で通信の状況を把握するというのが、インターネットの本来の設計

です。

このような設計が可能なのは、1.2節で説明した階層構造のおかげです。IPパケットを届け

る部分はネットワーク層で担いますが、この段階ではパケットの到達は保証せず、パケットの

到達性などは上位のトランスポート層で保証します。末端の機器でがんばる仕組みを実現して

いる代表的なトランスポート層のプロトコルがTCP(Transmission Control Protocol)です。

TCPは、IPv4であっても IPv6であっても同じように使えます。ネットワーク層のプロトコ

ルが異なっても、トランスポート層のプロトコルとしてTCPを同じように使えるのは、イン

ターネットの階層構造による恩恵だといえるでしょう。

NOTE

IPパケットは送信元から送り出されて宛先までルータを転送されていくだけなので、IPv6や IPv4によって通信の双方が接続されるわけではありません。しかし、TCPを使

Page 40: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

26 第1章 インターネット概要

うことで、インターネットを介して通信する双方の間に「仮想的な接続」が存在しているかのような状態になります。TCPによって、離れた相手とあたかも直接つながっているかのような錯覚を起こさせるのです。この仮想的な接続はバーチャルサーキットと呼ばれています。

TCPには、図1.22のように、相手に正しく届かなかったと推測されるパケットを再度送信

する機能があります。TCPの処理で相手に正しく届いていないパケットがあると判明すると、

TCPは届かなかったパケットが運んでいたデータを再度別のパケットで送信し、データの到達

性を保証します†16。

TCPヘッダ データIPv6ヘッダ TCPヘッダ データIPv6ヘッダ

TCPヘッダ データIPv6ヘッダ

TCPヘッダ データ

TCPヘッダ データIPv6ヘッダ

TCPヘッダ データ

インターネット

パケット喪失するかも…パケットの順番が変わるかも…

トランスポート層の処理トランスポート層の処理

ネットワーク層の処理ネットワーク層の処理

リンク層の処理リンク層の処理

データ・パケットが喪失していたら再送要求

・順番をもとどおりに直す

▲ 図1.22 末端の機器同士がパケット到達性を確保

経路の途中で喪失したパケットがないかを検出するために、TCPでは送信側と受信側で「受

信完了パケット」をやり取りします。具体的には、受信側が送信側に対して「ここまでのパ

ケットは受け取り終わったよ」という通知を返します。この通知は ‌ACK ‌(アックと読みます)と呼ばれています。ACKは、「確認」という意味を持つ「Acknowledgement」という英単語を

略したものです。送信側では、パケットを送信したあとに受信者側からのACKが届かないと、

「受信側にパケットが届かなかった」と判断します。そして、同じデータを含むパケットを送

信し直します。

TCPには、送信側で送られたのと同じ順番でデータを受け取るための機能もあります。イン

ターネットで転送されるパケットは、途中で破棄されるだけではなく、経路上で順番が変わっ

てしまうこともあるからです。たとえば、「か」と「ば」を順番に別々のパケットで送ったと

き、送信されたときと同じ順番で受信者側に届けば「かば」ですが、パケットの順番が変わっ

たままで解釈してしまうと「ばか」になってしまいます。順番が変わってしまうとデータの意

味も変わってしまいます。インターネットを介したやり取りでデータの順番が変わってしまわ

ないようにすることも、TCPの大事な役目なのです。

†16 TCPにはさまざまな種類があり、種類によって実際の動作は異なります。

Page 41: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.3 トランスポート層の役割 27

TCPは、インターネットを構成する非常に重要な要素です。インターネットに関連するプロ

トコル群(インターネットプロトコルスイート)をまとめて語るときに ‌TCP/IP ‌と表現することからも、TCPがインターネットの根幹を成していることがわかります。実際、Webや電子

メールといったインターネットにおける通信アプリケーションの大半は、TCPを前提にして設

計されています。TCPを利用するアプリケーションは、TCPが裏でがんばることによって、あ

まり深く考えずに離れた相手と確実にデータをやり取りできるのです。

ここで重要なのは、この「あまり深く考えずに」という点です。アプリケーションを作る人

が、経路の途中でパケットが喪失したり到着順が前後したりする可能性を意識せずにプログラ

ムを書けるというのは、ネットワークの普及にとってとても大事なポイントです。インター

ネットを利用するすべての人が、ネットワークそのものの挙動を細かく知りつつ通信しなけれ

ばならないような環境では、適切に動作するアプリケーションを作れる人は限られてしまいま

す。もしTCPが存在しなかったら、インターネットはここまで広く普及しなかったかもしれま

せん。

NOTE

ネットワーク層である IPの処理に必要な情報が IPヘッダに格納されたように、トランスポート層であるTCPの処理に必要な情報はTCPヘッダに格納されます(図1.19も参照)。TCPヘッダの各フィールドや、それらの情報をどのように使ってTCPの機能が実現されているかについては、本書では説明しません。他の書籍や文献などを参考にしてください。

インターネットの設計思想に見られる分散処理

パケットの到達性などを末端の機器同士でがんばる設計の最大の特徴は、分散処理になることです。もしルータでがんばる設計だとしたら、転送するすべての通信についてルータ自身でもその詳細を把握する必要があります。末端の機器でがんばる設計なら、各機器が自分たちの通信について把握すれば十分であり、必要な処理を分散できます。このような分散処理は、インターネットの設計思想において随所で見られる重要な概念です。また、分散処理という特徴は、インターネットの運用についても当てはまります。各管理主体が自律分散的に協調しながら、インターネットという1つの巨大なネットワークを運用し続けているのです。加えて、現在のインターネットにおける組織や国境を越えた分散管理が可能になっているのは、インターネットを支えるさまざまなプロトコルの仕様がオープンであるという特徴によるところが大きいといえるでしょう。仕様がオープンである話は、1.4節で詳しく説明します。

インターネットにおける通信の大半はTCPによるものですが、音声や動画の通信のように

リアルタイム性が要求されたり、マルチキャストやブロードキャストによって同時に多数の

相手と通信したいのでTCPでは都合が悪かったり、TCPほどの機能が不要な場合もあります。

そのようなアプリケーションで使われるトランスポート層のプロトコルとして、UDP(User

Page 42: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

28 第1章 インターネット概要

Datagram Protocol)というものもあります。TCPと比べると、UDPはアプリケーションプロ

グラマが自分で必要な機能を自作するカスタム設定用の通信プロトコルであるという見方もで

きます。

また、携帯電話の規格であるLTE(Long Term Evolution)などでも使われるSCTP(Stream

Control Transmission Protocol)†17や、本書執筆時点では標準化作業中の、QUIC(Quick

UDP Internet Connections)というUDPを使った新たなトランスポート層プロトコルもあり

ます†18。QUICは、コネクション確立時のハンドシェイクや、暗号化の初期設定などにかかる

遅延を軽減するなど、さまざまな工夫によって、低遅延な通信を実現することを目指してい

ます。QUICの当初のユースケースは、現時点ではTCPの利用が前提となっているWebトラ

フィックを低遅延で扱うことですが、他の用途でも使えることが期待されています。

1.4 オープンなプロトコルとRFCここで、そもそもプロトコルとは何かについて、具体的に説明しておきましょう。プロトコルは、よく「言語」にたとえられます。たとえば、日本語と英語では話が通じませ

んが、双方が日本語を使う、もしくは双方が英語を使うなど、同じ言語でそろえれば話が通じ

ます。言い換えると、共通の言語があれば話は通じます。言語の例だと、語彙や文法をそろえ

るという観点しか説明できませんが、言語を使った実際のやり取りでは、「どちらから話しか

けるか」や「どういう手段でやり取りするか」といった点についても双方の了解が必要です。

そういった点を含めて、通信を行うための取り決め(約束事)を規定したものがプロトコル

です。

1.4.1 インターネットのプロトコルはオープンインターネットの通信仕様を規定しているプロトコルは、オープンにされています。誰もが

無料で、インターネットを構成している基本的なプロトコルの内容を知ることができます。

インターネットで利用される基本的なプロトコルの仕様が誰にでもわかるということは、ど

この国の誰でも、どんな企業でも、インターネットに接続できる機器を作れるということで

す。そして、同じプロトコルを使ってさえいれば、どんな機器でも、たとえ個人が趣味で作っ

た機器でも、つながってしまいます。「誰でも機器を作れる」ということは、世界中で分散し

てネットワークの構築や管理ができるということでもあります。

インターネットのプロトコルがオープンである、つまり誰にでも公開されていることは、当

たり前のことではありません。実際、世界はオープンでない、クローズドなプロトコルであふ

れています。

プロトコルとはちょっと違いますが、データのフォーマット形式を例にして考えてみましょ

う。日々接している映像や音声のフォーマットは、クローズドなものであふれています。よく

あるビデオカメラのテープの中に保存されている動画のフォーマットを知るには、コンソーシ

†17 SCTPはRFC 4960参照。†18 J. Iyengar, M. Thomson, “QUIC: A UDP-Based Multiplexed and Secure Transport”, 2017年12月(本書執筆

時点)

Page 43: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.4 オープンなプロトコルとRFC 29

アムに法人として加入し、仕様が記載された資料を購入する必要がある場合もあります。特定

の企業のクローズドなフォーマットでしか再生できないような映像/音声のプレイヤーさえあ

ります。

そのような世界では、個人が趣味で情報を調べることができないだけでなく、企業などで対

応する製品を作ることも簡単ではありません。結果、誰もが自由に動画や音楽を再生する機器

を作ることはできず、その機器でしか再生できない動画や音楽は、ある一定の範囲内でしか広

まらないでしょう。

インターネットを利用した通信を行うための仕様がオープンであり、それが世界中の共通認

識となっていることは、時として見落とされる点ではありますが、とても大切なことなので

す。そしてそれが、インターネットの非常に大きな特長なのです。

1.4.2 オープンな仕様としてのRFC

TCP/IPに関連する仕様は、主に ‌IETF ‌(Internet Engineering Task Force)という組織で議

論されています。IETFで議論された文書は、‌RFC‌(Request For Comments)という形で公開

されています。IPv6の仕様も、RFCとして標準化されています。インターネット上の通信仕様

を記載した文章がRFCであり、RFCを作るための公開された議論を行う場所が IETFなのです。

前項で強調したように、インターネットのプロトコルはオープンなので、IETFという場には誰

もが参加できます。

IETFの存在は、インターネット全体にとって非常に大きな意味を持っています。インター

ネットが運用的にも文化的にもいまの形のインターネットになったのは、RFCという形で誰も

が読める仕様書が存在することと、そのRFCを作成するための IETFという公開された組織の

存在が非常に大きかったといえるでしょう。

通信に関する規格を標準化している国際的な機関は、IETFだけではありません。‌ITU‌(Inter-

national Telecommunication Union、国際電気通信連合)や ‌ISO‌(International Organization

for Standardization、国際標準化機構)といった標準化団体もあり、それぞれさまざまな通信

技術の規格を標準化しています。IETFも、そうした標準化団体の一種です。

ただし、IETFには ITUや ISOとは大きく違う特徴があります。ITU や ISOによる標準化は、

de jure standard(デジュールスタンダード、de jureはラテン語で「法律上の」という意味を

持つ)と呼ばれます。これは、国家や企業を代表する決められた人々があらかじめ標準を作っ

てから、多くの人々がそれに従うという、トップダウンな手法です。一方、IETFの標準化は、

先に市場でいろいろな技術が登場し、それがde facto standard(デファクトスタンダード、de

factoは「事実上の」という意味を持つ)として認められるのです†19。現在のインターネット

で使われている中心的な通信プロトコルであるTCP/IPも、de facto standardの結果です。

IETFには、誰でも新しい提案を行えることや、誰でも議論に参加できるという特徴もありま

す。これも、最初に標準ありきな他の多くの標準化団体とは異なる点でしょう。

†19 とはいえ、現在のインターネットは世界中に影響を及ぼすので、プロトコルによっては IETFにおけるRFCの策定作業を待ってから利用が本格化するものもあります。そのため、IETFが完全に純粋なde facto standardの場といえるかどうかは、昨今では微妙だといえます。

Page 44: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

30 第1章 インターネット概要

RFCは、なぜ「意見募集」という名前なのか

インターネットの通信技術に関連する調べ物をしたことがある人であれば、RFCという単語は必ず聞いたことがあると思います。RFCは、Request For Commentsの略です。これは「意見募集」や「意見を求む」といった意味になります。インターネットに関連する通信仕様の標準を示す文書の名称が、なぜ「意見募集」なのでしょうか? それには、初期のRFCが発行された時代背景を知る必要があります。

RFCの文書番号は、新しい文書とともに増加していくので、基本的に文書番号が小さいほど昔のものになります。最初のRFCである、RFC 1は、1969年4月7日に発行されています。この最初のRFCを発行するときにはさまざまな苦労があったようです。現在のインターネットを使っていると忘れがちですが、インターネットの前身となる技術の研究は東西冷戦の真っ只中で行われていました。国防上の観点から、当時はDARPA(Defense Advanced Research Projects Agency、アメリカ国防高等研究計画局)によって進められる研究は「非公開」が前提です。しかし、ARPANET(Advanced

Research Projects Agency NETwork、高等研究計画局ネットワーク)を開発していた関係者らは、ネットワーク間接続をする技術は広く公開することが大事だと考えていました。そこで、開発に携わっていた関係者は、周囲を説得するために、RFCとして発行される文書は非公式であって公式な出版物ではない、としました。「Request For Comments」という名のとおり、「意見を求めるために公開する文章」という建前を掲げたのです。いまでこそ、いろいろな仕様や技術が公開されていることを誰もが当たり前のように甘受していますが、このような時代背景から、かつては「公式な技術情報をそのまま公開しているわけではない」とあえて表明することが重要だったことがわかります。そんな背景を持つRFCですが、実際は、RFCとして認められる前に ‌Internet Draft‌という段階があり、この段階で広く意見を求めつつ、議論を重ねています。つまり、RFC

が発行された時点というのは、「意見募集中」ではなく、すでにさまざまな意見が求められ、議論されたあとなのです†20。そのため、現在のRFCは、意見を求めるために発行されるものではありません。事実、IETFで毎回行われているNewcomers Orientation

(初参加者のための説明会)の中では、「RFCは標準文書という扱いになっているので意見募集という意味合いはなくなっており、あくまでもRFCというブランド名である」と説明されています†21。かつてのRFCはRequest For Commentsの略でしたが、いまはRFCというブランドであり、公式の出版物になっている、という説明が、IETFで行われているのです。世界中の人々が使う現在のインターネットが生まれたのは、通信に関連する仕様が

RFCとして公開され、その結果として多くの人々が相互接続できる機器を実装できたことが大きな要因のひとつだと考えられますが、「RFC」という名称からは、本来であれば非公式だったはずの仕様を公開するための、当時の開発者たちの苦労が垣間見えます。そして、新しいRFCは、現在も次々と作られています。インターネットに関連する仕様は、いまもなお新しいものが登場し、変わり続けているのです。

†20 IETFの議論を経ずにRFCが発行される場合もあります。†21 https://trac.ietf.org/trac/edu/attachment/wiki/IETF95/95-newcomers.ppt

Page 45: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.4 オープンなプロトコルとRFC 31

1.4.3 RFCには何が書かれているか一口にRFCと言っても、インターネットを運用するうえで有用であるとされる情報にはさま

ざまなものがあります。つまり、プロトコルの規格を標準化する文章だけがRFCではありませ

ん。たとえば、インターネット上での機器の運用方法に関する指針は、標準を決めるという性

格の情報ではありませんが、ネットワーク同士がインターネットとして相互接続を安定的に継

続し続けるために重要な情報であり、そのような目的のRFCも存在します。さらに、インター

ネットコミュニティが形成されていった過去の経緯など、インターネットコミュニティにとっ

て有益と思える情報を記したRFCもあります。

扱う情報の性質に応じて、RFCは次のようなタイプに分けられます。

r ‌Standards Track ‌:プロトコルとしての標準化を目指す文書r ‌Informational‌:参考情報として公開されている文書r ‌Experimental‌:実験的な試みとしての手法などが公開されている文書r ‌Historic‌:歴史的経緯を知る目的で公開されている。この分類のRFCを実際に使うことは

推奨されていないr ‌Best Current Practice ‌:「その時点における最良の方法」を示す文書。利用方法、活用方法、心得(原則)などプロトコルそのものではないが重要と思われる事柄が示されている

注意が必要なのが、「標準」が必ずしもStandards Trackに限らないという点です。実際に

使われているプロトコルなどには、InformationalやExperimentalなRFCのものもあります。

たとえば、同じ目的を持ったプロトコルが複数提案されているとき、複数のプロトコルを同時

に Standards Trackにするのではなく、それぞれを InformationalやExperimentalとして扱

うといった判断がとられることがあります。

IPv6の基本的な仕様は Standards Trackに分類されるものが大半です。ただ、IPv6の運用

方法に関連する仕様であったり、IPv6の周辺プロトコルを規定した仕様の中には、Standards

Trackではないものもあります。

もう一点注意が必要なのが、RFCに書かれていたとしても、それが現実世界で採用されてい

るとは限らないという点です。たとえば、Standards TrackのRFCに書かれていることが、す

べてそのままの形で実装されるとは限らないのです。誰も実装すらしていない場合もありま

す。本書ではRFCに書かれている内容について数多く解説していますが、本書執筆時点におい

て実装や運用が進んでいないものもあるという点には注意してください。

Joke RFC

RFCの中には、インターネットの運用には何の役に立たないものもあります。特に、4月1日に発行される ‌Joke RFC‌は、エイプリルフールRFC‌とも呼ばれています。

Joke RFCは、Informational RFCに分類されます。有名な Joke RFCとしては、1990

年4月1日に発行されたRFC 1149†22(鳥類キャリアによる IP、一般的には「IP over伝書鳩」として知られている)などが挙げられます。Joke RFCには、技術的な背景を持ちつつ、どこかしら愛せるアホらしさが求められます。

Page 46: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

32 第1章 インターネット概要

Joke RFCに実用的な利点があるとすれば、世界中の技術者に一瞬だけ心のオアシスを提供することぐらいだろうと思いますが、冗談までもが「標準」と並列して扱われる標準化団体は IETFぐらいのものでしょう。

1.4.4 IETF以外からのRFC

ここまでの説明では、RFCを議論するのは IETFであると紹介してきましたが、IETF以外で

作られた文書がRFCとして発行される場合もあります。RFCが発行されるまでの流れ(ストリーム)として、RFC 4844†23では以下の4種類が定義されています。

r IETFストリームr IABストリームr IRTFストリームr 個人による投稿からのストリームIABストリームに関してはRFC 4845†24、IRTFストリームに関してはRFC 5742†25、個人に

よる投稿からのストリームに関してはRFC 4846†26でそれぞれ具体的に紹介されています。

1.4.5 RFCの廃止や更新一度発行されたRFCは、内容が変更されず、そのままの状態で公開され続けますが、時代と

ともにRFCに書かれた内容が古くなることもあります。そのため、RFCを廃止したり更新した

りする方法も決められています。具体的には、一度発行されたRFCは内容を変更できないの

で、別のRFCによって内容を更新されたり、廃止されたりすることになっています†27。

IPv6の基本仕様が記されたRFCも、これまで何度か上書き廃止されています。RFCを調べ

るときは、RFCに記述してあることが最新であるかどうかに気をつけることも、非常に大事

です。

■ RFC 2460を廃止したRFC 8200

本書執筆時点における IPv6基本仕様のRFCは、2017年7月に発行されたRFC 8200†28です。

RFC 8200は、それまでの IPv6基本仕様を示していたRFC 2460†29を廃止して上書きするRFC

です。RFC 2460が発行されたのは1998年なので、IPv6の基本仕様を規定したRFCが廃止さ

†22 RFC 1149:D. Waitzman, “Standard for the transmission of IP datagrams on avian carriers”, 1990年4月†23 RFC 4844:L. Daigle, Internet Architecture Board, “The RFC Series and RFC Editor”, 2007年7月†24 RFC 4845:L. Daigle, Internet Architecture Board, “Process for Publication of IAB RFCs”, 2007年7月†25 RFC 5742:H. Alvestrand, R. Housley, “IESG Procedures for Handling of Independent and IRTF Stream

Submissions”, 2009年12月†26 RFC 4846:J. Klensin, D. Thaler, “Independent Submissions to the RFC Editor”, 2007年7月†27 古いRFCを廃止する新しいRFCが古いRFCと同じタイトルの場合もあれば、タイトルが微調整されるなど、異

なるものになることもあります。†28 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月†29 RFC 2460:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1998年12月

Page 47: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.4 オープンなプロトコルとRFC 33

れるのは約19年間ぶり、2回めの廃止です†30。

RFC 2460が廃止された背景として、IETFにおけるRFCの「標準」の扱いが変化したことが

挙げられます。

RFCによる標準化のプロセスは、RFC 2026†31として定義されています。RFC 2026には、

Proposed Standard(標準化に向けた提唱)、Draft Standard(標準化への草稿)、Internet

Standard(インターネット標準)という3つのレベルが定められていますが、IPv6基本仕様を

定義しているRFC 2460は、このうちのDraft Standardでした。RFC 2460は、RFC的な位置

づけとしては、「Internet Standard」(インターネット標準、単にStandardと表現されること

もあります)ではなく、「Draft Standard」だったのです。

しかし、2011年に発行されたRFC 6410†32がRFC 2026を更新することによって、RFCに

よる標準化のプロセスとしてのRFCのレベルが、RFC 2026の示している3つのレベルから、

Proposed Standardと Internet Standardの2段階へと減りました。それまで存在していた

Draft Standardが冗長だったので、提案(Proposed Standard)の次の段階が標準(Internet

Standard)へと変更されました。

RFC 6410は、Draft Standardというレベルを廃止すると同時に、既存のDraft Standardの

RFCの扱いについても定義してあります。Draft StandardのRFCは、Proposed Standardへ

と降格か、Internet Standardへの昇格ができます。

r すでに使われている仕様との不整合を起こす不具合がDraft Standardの仕様に含まれて

いないのであれば、Internet Standardへと再分類できるr RFC 6410が発行されてから2年後以降は、IESGによってDraft StandardのRFCをPro-

posed Standardへと再分類できる

RFC 6410に示された条件などを満たしつつ、IPv6仕様を「草稿」であるDraft Standardか

ら、「標準」である Internet Standardへと昇格させるための議論が、IETFの6manワーキング

グループで2015年に開始されました。その議論を経て作られたのがRFC 8200です。

RFC 8200の基本的な内容はRFC 2460と大きくは変わりません。RFC 2460からの変更点

がRFC 8200のAppendix Bに記載されていますが、主な違いとしては、RFC 2460に対して別

のRFCが更新している内容の反映、曖昧であった部分を明確な表現に修正、IPv6拡張ヘッダに

関連する仕様変更などです。細かいところでは、「IP Next Generation」という表現が削除され

たというのもあります。かつて、IPv6は「次世代インターネットプロトコル」とされていまし

たが、もう「次世代」ではないということで、その表現が削除されました。

仕様としての変更点という視点で見ると、RFC 8200は、たまった各種仕様変更を反映した

といった側面が強いといえます。以下の図のように、RFC 8200が発行される前のRFC 2460

に対しては、さまざまなRFCが更新を行っていました。

†30 本書の執筆を始めた段階ではRFC 2460をベースにしていましたが、途中からRFC 8200をベースにして書き換えました。

†31 RFC 2026:S. Bradner, “The Internet Standards Process – Revision 3”, 1996年10月†32 RFC 6410:R. Housley, D. Crocker, E. Burger, “Reducing the Standards Track to Two Maturity Levels”,

2011年10月

Page 48: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

34 第1章 インターネット概要

RFC 5095"Deprecation of Type 0 Routing Headers in IPv6"

RFC 5871"IANA Allocation Guidelines for the IPv6 Routing Header"

RFC 7045"Transmission and Processing of IPv6 Extension Headers"

RFC 6564"A Uniform Format for IPv6 Extension Headers"

RFC 7112"Implications of Oversized IPv6 Header Chains"

RFC 5722"Handling of Overlapping IPv6 Fragments"

RFC 6946"Processing of IPv6 "Atomic" Fragments"

RFC 6935"IPv6 and UDP Checksums for Tunneled Packets"

RFC 6437"IPv6 Flow Label Specification"

RFC 1883"Internet Protocol, Version 6 (IPv6) Specification"

廃止

更新

RFC 2460"Internet Protocol, Version 6 (IPv6) Specification"

RFC 8200"Internet Protocol, Version 6 (IPv6) Specification"

廃止

IPv6拡張ヘッダ関連RFC

フラグメント関連RFC

UDPチェックサム関連RFC

フローラベル関連RFC

反映

▲ 図1.23 RFC 8200が発行される前のRFC 2460

なお、RFC 2460も、別のRFCを廃止するRFCです。1995年にRFC 1883†33が最初の IPv6

基本仕様RFCとして発行され、1998年にRFC 2460が発行されることでリニューアルされて

います。

RFC 8200は、RFC 2460に対して行われていたこれらの変更を反映しています。RFC 8200

が発行されるまで、IPv6を学ぶ人は、RFC 2460を読みつつも、RFC 2460を更新するRFCを

個別に読む必要がありました。「RFC 2460には、こう書いてあるけど、RFC○○がRFC 2460

を更新しているから、その部分に関してはRFC 2460に書いてあることをそのまま覚えてはダ

メだ」という状況が続いていたのです。RFC 8200によって、そのような状況は改善されたの

です。

†33 RFC 1883:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1995年12月

Page 49: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

1.4 オープンなプロトコルとRFC 35

IETFにおける IPv4の位置付けの変化

2016年11月7日に、IETFにおける標準化において IPv4を前提とせず、IPv6を前提とするとした声明が IABから発表されました。

IAB Statement on IPv6 : https://www.iab.org/2016/11/07/iab-statement-on-

ipv6/

IPv4と IPv6のデュアルスタックや、移行技術 (共存技術)などによって、IPv4との後方互換を実現する環境の必要性がまだ続くことは認めつつも、標準化団体にとって大事なのは、IPv4から IPv6への移行の障害となったり減速させるような標準化を行わないことであるとあると声明は述べています。声明は、IETFで議論されるしいプロトコルでは、IPv4に対する互換性を要求し続けることを行わず、IPv6に対して最適化されたプロトコルの標準化を行わないともあります。このように、IETFでは IPv6を前提とした標準化が進み、IPv4に対する位置付けが昔とは変わっています。

1.4.6 番号と名前を管理する IANA

RFCは、いわばインターネットにおける「仕様」を取り決めたものです。世界中でインター

ネットを破綻なく利用するためには、仕様だけではなく、通信に必要となる特定の番号や名

前などを複数の異なる組織が重複して利用してしまわないための機能も必要です。インター

ネットで利用する番号や名前などの「資源」を統一的に管理しているのは、‌IANA ‌(Internet

Assigned Numbers Authority)と呼ばれる組織です。IANAの名称を日本語に直訳すると、

「インターネットにおいて割り当てられる番号に関する権威」という意味になります。

もともとの IANAは、組織というよりも、ARPANET(インターネットの前身であった研究

用ネットワーク)に携わっていたジョン・ポステル氏らがインターネットに必要な資源を管

理していた副産物でした。インターネットが急速に拡大するとともに、番号などのインター

ネット資源をどのように管理すべきかが議論された結果、ICANN(Internet Corporation for

Assigned Names and Numbers)という非営利団体が創設され、現在は IANAもこの ICANN

の下部組織として活動しています。

IANAが管理している主なインターネットの資源は、ドメイン名に関する情報、番号資源、

プロトコルパラメータの3つです。

rドメイン名に関する情報インターネットでは、名前と IPアドレスの対応をDNS(Domain Name System)によって

解決しています。DNSによる名前解決の仕組みで最も重要な役割を担うDNSルートサー

バに登録される情報は、IANAによって管理されています。DNSについては第17章で詳し

く説明します。

DNSルートサーバの情報のほか、特殊な用途のトップレベルドメインや、example.comな

どの例示用ドメインをはじめとする特殊なドメイン名、DNSSECのルート鍵署名鍵(Root

Key Signing Key)なども IANAが管理しています。

Page 50: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

36 第1章 インターネット概要

r番号資源インターネット全体で使う IPアドレスに重複があってはいけません。誰がどこでどのよう

な IPアドレスを使うかは、IANAを頂点として階層的に一元管理されています。本章の主題

である IPv6アドレス空間も IANAで管理しています。IANAが管理する IPv6アドレス空間に

ついては4.2節で説明します。

IPアドレスのほか、ルーティングプロトコルの BGPで利用するAS(自律システム、

Autonomous System)を一意に表すための番号も IANAが管理しています。rプロトコルパラメータIPアドレスやAS番号だけでなく、さまざまなプロトコルを表す番号や、各プロトコル内で

利用される番号や文字列の多くも IANAで管理されています。IANAが管理するプロトコル

パラメータの一覧はhttps://www.iana.org/protocolsで参照できます。

Page 51: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第2章

IPv6でインターネットはどう変わるか

本書執筆時点(2017年12月)では、まだ ‌IPv4‌がインターネットにとって重要な要素であり続けています。非常に多くのユーザや組織が IPv4を使い続けており、IPv4をまったく使わず

にインターネットを利用するユーザは少数派です。TCP/IPやインターネットの仕組みを学ぶ

ときに、IPv4を前提として学んだ人も多いでしょう。

本書で解説している ‌IPv6 ‌も、IPv4の後継として設計されているので、インターネットとい

うパケット交換網を構成するための基本的な仕組みは IPv4と同様の思想で設計されています。

大まかに考えれば、IP(Internet Protocol)としての基本的な点については、IPv6も IPv4と変

わりません。実際、IPv4と一緒に使われていた他の層のプロトコルの多くは、IPv6でも使えま

す。IPの上位の層を担うTCPやUDPなどのプロトコルは、IPv6においても IPv4と同様に利用

できます。イーサネットなど、IPの下位の層となるプロトコルも、基本的には IPv6と一緒に利

用できます。

しかし、IPv6には、IPv4によるインターネットが構築されたあとで再設計されたインター

ネットプロトコルという側面もあります。そのため、IPv6と IPv4は、一見するとよく似てい

るようで、実際には背景となる設計思想からしていろいろ異なるプロトコルなのです。異なる

プロトコルであるからには、相違点の理解が重要です。IPv6を知るには、まず IPv4との違い

を知ることが大切だといえるでしょう。

本章では、まず IPv6と IPv4の相違点を概観してから、IPv6に対応するとはどういうことな

のかを整理します。さらに、IPv4と IPv6を同じ1つのインターネット上で利用するために必

要となる技術と、IPv4と IPv6を相互に行き来するための技術について要約します。

2.1 IPv6とIPv4の違いIPv6と IPv4には、アドレスの長さだけでなく、さまざまな違いがあります。

r IPアドレス長の違いIPv4アドレスの長さは32ビットだったのに対し、IPv6アドレスの長さは128ビットです。

その表記方法も、IPv4と IPv6とでは異なります。具体的には、IPv4アドレスではドット区

Page 52: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

38 第2章 IPv6でインターネットはどう変わるか

切りの十進表記、IPv6アドレスではコロン区切りの十六進表記が用いられます。IPv6アド

レスとその表記については第4章で詳しく説明します。r IPアドレスの構成要素の違いIPv4アドレスは、ネットワーク部とホスト部によって構成されていました。これに対応する

IPv6のユニキャストアドレスは、サブネットプレフィックスとインターフェース識別子に

よって構成されます。これは単なる名称の違いではなく、IPv6アドレスによって識別するも

のが、ホストではなくネットワークインターフェースであることを意味しています。IPv6ア

ドレスの構成要素については、4.3節で詳しく説明します。rアドレスフォーマットの利用方法が多彩にIPv6アドレスでは、さまざまなプロトコルの機能を実現するためにアドレスフォーマットが

利用されています。たとえば、IPv6マルチキャストでは、スコープやマルチキャストアド

レスの構成がアドレスのフォーマットから判別できるようになっています(12.1節参照)。

IPv4/IPv6共存技術として、IPv4アドレスを埋め込んだフォーマットの IPv6アドレスなども

あります。r ICMPの役割の違い

IPv4では、IPパケットの転送を実現するうえで、別のプロトコルであるARP(Address

Resolution Protocol)や IGMP(Internet Group Management Protocol)などが重要な役割

を果たしています。IPv6では、これらの別々のプロトコルが担っていた機能が「近隣探索プ

ロトコル」へと統合されました。IPv6の近隣探索プロトコルでは、従来の IPv4ではエラー

通知などに使われている ICMP(Internet Control Message Protocol)を拡張した ICMPv6

が利用されます。そのため、ICMPの重要性が IPv4よりも増しているといえます。ICMPv6

については第6章で、近隣探索プロトコルについては第7章で説明します。r複数の IPアドレスを1つのネットワークインターフェースに

IPv4では、1つのネットワークインターフェースに設定する IPアドレスは1つだけでした。

これに対し、IPv6では、1つのネットワークインターフェースに対して複数の IPアドレス

を設定できることが仕様で明記されています。近隣探索や IPv6アドレスの自動設定の仕様

でも、複数の IPv6アドレスをネットワークインターフェースに設定可能であることが前提

にされています。また、複数の IPv6アドレスを同時に設定可能であるという特徴を使って、

サイト全体で利用されている IPv6アドレスを変更する仕組み(サイトリナンバリング)も、

大きな議題となっています。サイトリナンバリングについては14.3節で説明します。

1つのネットワークインターフェースに複数のアドレスが設定されるということは、ネット

ワークプレフィックスがまったく異なるアドレス宛に、ルータを介さずにパケットを送信

できる場合があるということです。つまり、IPv4ではネットマスクを見てon-linkかどうか

(同一のリンクに接続しているかどうか)を判定できましたが、IPv6ではネットワークプレ

フィックスを見てもon-linkかどうかがわからないということです。IPv6では、on-linkか

off-linkかを判断するための仕組みが近隣探索の仕様に関係します。そのため、IPv6におけ

Page 53: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.1 IPv6と IPv4の違い 39

るon-linkとoff-linkについては、近隣探索プロトコルについて説明する第7章の中の7.6節

で説明します。r IPアドレスの設定、運用方法の違いIPv4では、各ホストに対してアドレスを自動的に設定しようと思ったら、IPとは異なるプロ

トコルとして定義されているDHCPを利用するしかありませんでした。IPv6では、DHCPv6

というプロトコルもありますが、SLAAC(StateLess Address AutoConfiguration)と呼ば

れるアドレス自動設定のための仕組みが IPv6プロトコルの一部として定義されています。

SLAACをはじめとする IPv6アドレスの自動設定については、第8章で詳しく説明します。

IPv4では、ISPから一般ユーザに割り当てられる IPv4アドレスは1つで、それを家庭内やオ

フィス内で必要に応じてNATを使って運用するのが一般的でした。IPv6では、ISPからアド

レスが1つ割り当てられるのではなく、ネットワークプレフィックスを割り当てられるのが

一般的です。そのため IPv6には、ISPなどがネットワークプレフィックスを割り当てるため

の仕組みとして、DHCPv6-PD(9.7節参照)があります。これも IPv4との大きな違いです。rヘッダフォーマットの違いIPv4と IPv6とではヘッダの仕様が大きく異なります。特に大きいのは、ヘッダ全体の長さ

が可変だった IPv4に対し、IPv6ヘッダの長さは40バイトに固定されている点です。

IPv4ヘッダが可変長なのは、プロトコルの機能を拡張するために利用されるOptionフィー

ルドが可変長だからですが、IPv6ヘッダにはこのようなフィールドが存在しません。その代

わりに、IPv6では、IPv6拡張ヘッダという仕組みが用意されています。

IPv4ヘッダと IPv6ヘッダでは、Optionフィールドの有無以外にも異なる点がたくさんあり

ます。

IPv6ヘッダ、IPv6拡張ヘッダ、IPv4と IPv6とのヘッダとの違いについては、それぞれ、第

5章で詳しく説明します。rフラグメンテーションの違いIPv4では、IPv4ヘッダに含まれるフィールドを利用して IPパケットのフラグメンテーショ

ンを実現していました。IPv6ヘッダにはフラグメンテーションのための情報を格納する

フィールドはなく、IPv6拡張ヘッダを利用してフラグメンテーションを行います。

経路の途中でのフラグメンテーションが起きないという点も、IPv6と IPv4の大きな違いの1

つです。IPv4では、IPパケットが経路の途中で利用されるデータリンク層のプロトコルの都

合でフラグメンテーションが起きる場合がありました。

経路の途中で IPv6パケットのフラグメンテーションができないということは、IPv6では

Path MTU Discoveryが重要になります。Path MTU Discoveryについては第11章で説明し

ます。

Path MTU Discoveryが動作しない場合でも、IPプロトコルで規定されている最小MTU値で

あれば通信可能です。この最小MTUの値も、IPv4と IPv6とでは異なり、IPv4では576オク

テット(RFC 791†1)、IPv6では1280オクテットです。

†1 RFC 791:J. Postel, “Internet Protocol”, 1981年9月

Page 54: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

40 第2章 IPv6でインターネットはどう変わるか

rブロードキャストからマルチキャストへIPv6ではブロードキャストが廃止されました。IPv4ではブロードキャストで行われていた

ことがマルチキャストで行われるようになります。マルチキャストについては第12章で説

明します。

2.2 IPv6対応とはIPv6は IPv4と同じネットワーク層のプロトコルであり、ネットワークを越えてパケットを

配送するという点では、インターネットにおいて IPv4と同じ機能を担うプロトコルです。し

かし、IPv4の制約を見据えて新たに生み出された IPv6には、前節で挙げたように IPv4との違

いもたくさんあります。単純に IPv4よりアドレスが長くなっただけでなく、IPv4とは似て非

なるネットワーク層プロトコルである IPv6は、IPv4と直接的な互換性がありません。

では、長らく IPv4を中心に運用されていたインターネットで IPv6を導入するにあたり、ど

のようなことを考えなければならないでしょうか。前節に挙げたような IPv4と IPv6のさまざ

まな違いを理解することは、単にプロトコル仕様の把握という面だけでなく、ネットワークを

どのように運用するかという面でも意味があります。特に、本書執筆時点のインターネット

では既存の IPv4が使われ続けているので、IPv6のみのネットワーク運用について考えるだけ

でなく、同じインターネット上で IPv4と並行して IPv6が利用される混在環境での運用を考慮しなければなりません。たとえば、「両方のプロトコルの通信を同じように扱うのにファイア

ウォールの設定方法が異なる」といった影響が出てくるでしょう。

しかも、そのような混在環境はかなり長い期間にわたって継続することが予想されます。そ

の期間に世界中のネットワークで要求されるのは、IPv4中心のインターネットで、IPv6という

新しいネットワーク層プロトコルを利用できるようにすることです。つまり、‌IPv6への移行よりも ‌IPv6対応が求められるのです。

r ‌IPv6への移行:IPv4を捨てて IPv6に完全に移ることr ‌IPv6対応:IPv4を利用するユーザが多い状況で、それまで対応していなかった IPv6とい

う新しいプロトコルに対応すること

この節では、これら2つのうち「IPv6対応」について具体的に考えます。一言で IPv6対応と

いっても、それが意味するところは状況によってさまざまです。インターネットのどこかを調

整すれば「IPv6対応」ができるわけではなく、いろいろなところで、いろいろな形の「IPv6対

応」が必要になります。

IPv6対応として具体的に必要になるのは、利用する機器が IPv6対応になること、利用して

いるネットワークが IPv6対応になること、利用しているネットワークが IPv6インターネット

と通信可能になることです。ここでは、これらの IPv6対応について、以下の4つの視点に分け

て考えていきます。

r ネットワークの IPv6対応r ユーザの IPv6対応

Page 55: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.2 IPv6対応とは 41

r サーバの IPv6対応r アプリケーションの IPv6対応

2.2.1 ネットワークの IPv6対応IPv6による通信を行うには、ネットワークの IPv6対応が必要です。ここで注意してほしい

のは、通信プロトコルとして IPv6を利用することと、IPv6で作られたインターネット(IPv6

インターネット)を通じて世界中のサーバと通信できる環境を整えることは、一見同じように

思えて実際には互いに独立した話であるという点です。

NOTE

インターネットとの通信ができない閉域網において、ネットワーク層(レイヤー3)の通信プロトコルとして IPv6が使われることもあります。そのような場合を指して ‌IPv6

ネットワークと表現し、IPv6で作られた ‌IPv6インターネットとは区別する場合もあります。ただし、IPv6インターネットとの通信を実現することを指して「IPv6ネットワーク」と表現する場合も少なくありません。

ネットワークが IPv6対応しているだけでは、IPv6インターネットとの通信はできません。

ネットワークが IPv6インターネットと接続されていることも必要です。IPv6インターネット

に接続する方法としては、IPv6インターネットに直接接続する方法と、IPv4インターネットを

通じて IPv6インターネットに接続する方法があります。IPv4インターネットを通じて IPv6イ

ンターネットに接続する方法としては、IPv4インターネットにトンネルを構築して IPv6イン

ターネットに接続する6rdなど、さまざまなプロトコルがあります。詳細は第 IV部で解説し

ます。

これとは逆に、DS-LiteやMAPなど、IPv6インターネットを利用して IPv4インターネットへ

の接続を提供する手法もあります。IPv6インターネットをどのようにユーザに提供するのか

が、IPv4インターネットをどのようにユーザに提供するのかという話に影響を与える場合もあ

るのです。

2.2.2 ユーザの IPv6対応ユーザに対する IPv6対応における論点としては、以下のものが挙げられます。

r(1)ユーザが利用している機器が IPv6対応しているかr(2)ユーザが利用している機器で IPv6が有効になっているかr(3)ユーザが利用しているネットワーク機器が IPv6に対応しているかr(4)ユーザが契約している回線で IPv6インターネットへの接続サービスが提供されてお

り、ユーザがそのサービスを契約しているか

(1)の「ユーザが利用している機器が IPv6対応しているか」については、本書執筆時点

(2017年12月)だと、一般的なユーザが利用しているパソコンで使われるOSはすべて IPv6

対応しています。一方、モバイル機器に関しては IPv6に対応していないものがまだ残ってい

Page 56: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

42 第2章 IPv6でインターネットはどう変わるか

ます。

(2)の「ユーザが利用している機器の設定において IPv6を有効にしているかどうか」も、

ユーザの IPv6対応を考えるうえでは大きなポイントです。その際に影響として大きいのは、設

定が可能かどうかよりも、むしろ初期設定(デフォルト設定)がどうなっているかです。ユー

ザが実際に IPv6を利用するかどうかは、機器を入手した際の初期設定で IPv6が有効となって

いるか否かによってほぼ決まります。

(3)の「ユーザが利用しているネットワーク機器の IPv6に対応しているか」も重要な要素

です。一般家庭におけるインターネットへの出入り口部分や、家庭内LANが IPv6対応してい

なければ、そのユーザは IPv6を利用できません。一般家庭では、IPv6に対応していない古い

ルータが使われ続けていることも少なくありません。

最後に、(4)の「ユーザが契約している回線で IPv6インターネットへの接続サービスが提供

されており、ユーザがそのサービスを契約しているか」という点も問題になります。この部分

で IPv6対応を実現するには、IPv4と IPv6を両方とも同じネットワークで提供する方法、IPv4

を IPv6経由で提供する方法、IPv6を IPv4経由で提供する方法など、さまざまな手法がありま

す。さまざまな手法が存在するのは、インターネット接続性を提供する事業者がどういった

ネットワークを運用しているのかによって利用可能な方法が異なるからです。第 IV部で紹介

する技術のいくつかは、ユーザに対してインターネット接続性を提供するための技術だといえ

ます。

2.2.3 アプリケーションの IPv6対応ネットワークが IPv6対応しており、ユーザの IPv6対応が万全な状況であっても、使われる

アプリケーションが IPv4でのみ通信可能な状態であれば IPv6が使われることはありません。

OSが IPv6対応しているからといって、そのOS上で使われるアプリケーションがすべて IPv6

対応しているというわけではないのです。アプリケーションではアプリケーションのための

IPv6対応が必要になります。そもそも、IPv4を使って通信を行うのか、それとも IPv6を使っ

て通信を行うのかを判断するのは、個々のアプリケーションです。

アプリケーションを IPv6対応にするためのプログラミングに関しては、第16章で説明しま

す。アプリケーションにおける IPv6対応の注意点などがまとめられたRFC 4038†2では、次の

ような点について言及されています。

r 従来の IPv4に対応しつつ完全に IPv6対応バージョンを提供するのが困難な場合もあるr IPアドレスの表記方法が IPv4とは違うので、IPアドレスをパースする際には注意が必要

であるr 送信元 IPv6アドレスの選択が必要な場合もある(14.1.1項参照)r マルチキャストを使うアプリケーションは、IPv4と IPv6におけるマルチキャストの違い

に注意するr プログラミングではAPI(Application Programming Interface)などの違いに注意する

†2 RFC 4038:M-K. Shin, Y-G. Hong, J. Hagino, P. Savola, E. M. Castro, “Application Aspects of IPv6 Transi-

tion”, 2005年3月

Page 57: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.3 IPv6インターネットと IPv4インターネットを同時に使う 43

2.2.4 サーバの IPv6対応サーバの IPv6対応に関しては、コンテンツを IPv6に移行する方法がRFC 6589†3で、コ

ンテンツプロバイダやアプリケーションサービスプロバイダのための IPv6導入方法がRFC

6883†4で、それぞれ解説されています。

サーバの名前に対応する IPv6アドレスをDNSサーバに登録するときは、AAAAレコードと

いう形で登録されます(DNSやAAAAレコードについては2.3.2項と第17章で簡単に説明しま

す)。RFC 6883には、「知られている名前に対してAAAAレコードがDNSに登録されるとすぐ

に、そのAAAAレコードに対応するサーバは IPv6トラフィックを受け取り始める」†5とありま

す。IPv6で通信可能なサーバを用意することで、IPv6インターネットに接続されたユーザと

サーバとが通信できる状態になります。しかし、Webをはじめとする多くのアプリケーション

は、通常、名前解決を行ったうえで通信を行います。もちろん、IPアドレスを最初から指定し

て通信することもありえますが、一般的なサービスでは名前解決を行い、その結果得られる IP

アドレスを使って通信します。そのため、IPv6インターネットに接続されたサーバに対する

実トラフィックも、DNSにAAAAレコードが登録された段階で、初めて本格的に発生すること

になります。サーバに対する IPv6での実トラフィックが発生するのは、DNSサーバにAAAAレ

コードが登録されたあとになることが多いのです。

ここで注意が必要なのは、接続に IPv4を使うのか、それとも IPv6を使うのかは、通信を開

始するクライアント側アプリケーションが判断するという点です。サーバ運用者側は、DNSに

AAAAレコードを登録することで、その判断のための選択肢を提供することになります。

サーバ側で IPv6対応が必要なのは、実際に IPv6で通信しながらサービスを提供している

サーバアプリケーションだけでない場合もあります。たとえば、サーバアプリケーションのロ

グに IPv6アドレスが含まれており、別のプログラムがその IPv6アドレスを解釈する必要があ

ることもあります。

サーバを守るためのセキュリティに関しても注意が必要です。IPv6が関連するセキュリティ

に関しては、第15章で説明します。

2.3 IPv6インターネットと IPv4インターネットを同時に使う

IPv4は、インターネットの誕生時点から世界中に普及した現在に至るまで使われてきたプロ

トコルです。一方の IPv6は、これから普及していくプロトコルです。今後しばらくは、互い

に直接的な互換性がないプロトコルを利用する「IPv4インターネット」と「IPv6インターネッ

ト」という2種類のインターネットが、利用者から見れば1つのインターネットとして同時に

運用されている状態が続くことになります。

この節では、これら2種類のインターネットが同時に運用される状況を整理し、その状態で

†3 RFC 6589:J. Livingood, “Considerations for Transitioning Content to IPv6”, 2012年4月†4 RFC 6883:B. Carpenter, S. Jiang, “IPv6 Guidance for Internet Content Providers and Application Service

Providers”, 2013年3月†5 原文は、“It must be understood that as soon as a AAAA record for a well-known name is published in

the DNS, the corresponding server will start to receive IPv6 traffic.”

Page 58: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

44 第2章 IPv6でインターネットはどう変わるか

1つのインターネットを実現するうえで重要な要素となる名前解決について説明します。

2.3.1 IPv6と IPv4のデュアルスタックある特定のプロトコルを扱うためのソフトウェアの実装をプロトコルスタックと呼びます。

IPv4と IPv6は異なるプロトコルなので、プロトコルスタックとしても別です。まったく別々

の2つのプロトコルスタックを使える状態をデュアルスタックと呼びます。1.2節ではインターネットの機能を説明するのに階層構造を利用しましたが、プロトコルス

タックもこの階層構造で考えることができます。IPv4だけのインターネットを実現していた

プロトコルスタックは、図2.1のような階層構造として表現できます。図2.1からわかるよう

に、IPv4が位置するネットワーク層だけは単一のプロトコルで、それ以外の層にはすべて複数

のプロトコルが存在しています。IPv6が登場する前は IPv4一択だったので、インターネット

は図2.1のようなプロトコルスタックだったのです。

SSH

TCP

IPv4

ツイストペアケーブル光ファイバ携帯電話網

無線LAN

アプリケーション

トランスポート層

ネットワーク層

データリンク層

物理層

UDP

イーサネットPPP

QUICSSL/TLS

電子メールHTTP

▲ 図2.1 IPv4のみの場合のプロトコルスタック

しかし、IPv4よりアドレス空間が広い IPv6が利用されるようになった現在では、単一のプ

ロトコルが前提であったネットワーク層に2つのプロトコルが存在する状態になっています。

図2.2のようなプロトコルスタックが、ネットワーク層に IPv4と IPv6の両方が存在する、現在

のインターネットの状態です。

Page 59: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.3 IPv6インターネットと IPv4インターネットを同時に使う 45

SSH

TCP

IPv6IPv4

ツイストペアケーブル光ファイバ携帯電話網

無線LAN

アプリケーション

トランスポート層

ネットワーク層

データリンク層

物理層

UDP

イーサネットPPP

QUICSSL/TLS

電子メールHTTP

▲ 図2.2 IPv4と IPv6の両方が存在する場合

このように、IPv4と IPv6が並行して存在するデュアルスタックのインターネットでは、互

換性のない2つのネットワーク層プロトコルが利用されます。1つが前提であったネットワー

ク層が、2つの別のプロトコルが共存するデュアルスタック環境になることを意識しなければ

ならない場面は、サーバやネットワークの管理者、通信が関連するプログラムを書くプログラ

マだけでなく、一般のインターネット利用者にとっても増えていくと考えられます。

2.3.2 DNSの役割ネットワーク層が IPv4と IPv6のデュアルスタックになっても、ネットワークを利用する側

の視点で見れば、「インターネットは1つ」でなければ困ります。IPv4と IPv6を並行して利用

できる現在の状況は、ネットワーク層プロトコルで見れば2つの別のプロトコルによって実現

される2つのインターネットだが、インターネットとしてはあくまでも1つという、非常にや

やこしい状況にあるといえるでしょう。

現在のインターネットでは、この「2つであるが1つ」という状態を仮想的に実現するため

に、‌DNS‌(Domain Name System)を利用しています。DNSは、インターネットでの通信に必

要な通信相手の IPアドレスを名前から得るための名前解決に利用されている仕組みです。このDNSが IPv4と IPv6が混在するインターネットの大きなポイントなのです。2つの異なるイ

ンターネットプロトコルで「1つのインターネット」を実現するために名前空間を共有すると

いうことは、DNSで IPv4と IPv6の両方に対応する名前を扱うことを意味します。現在のインターネットは、名前に関しては IPv4と IPv6をあえて混ぜた状態で設計されているといえるで

しょう。

DNSでは、ドメイン名という名前から IPアドレスを解決するために、レコードと呼ばれる仕

組みを利用しています。レコードは、IPv4アドレス用と IPv6アドレス用とを別々に設定でき

ます。たとえば、「www.example.com」という1つの名前に対し、IPv4と IPv6の両方の IPア

ドレスを登録できるようになっています。IPv4アドレス用は ‌Aレコード、IPv6アドレス用は ‌AAAAレコード(「クアッド・エー」と読みます)と呼びます。なぜ、1つの名前に対して2つの IPアドレスを登録できることが重要なのでしょうか? Web

における通信を例に考えてみましょう。「http://www.example.com/」というURLを持つ

Page 60: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

46 第2章 IPv6でインターネットはどう変わるか

サーバと通信をするときにユーザがアクセスしたいのは、通信が IPv4によるか、それとも IPv6

によるかにかかわらず、「www.example.com」が指し示すWebページです。仮に、IPv4と IPv6

とで名前空間がまったく異なるものだったとしたら、IPv4で「example.com」というドメイ

ン名の登録を行っている組織と、IPv6で「example.com」というドメイン名の登録を行って

いる組織が違う可能性もあります。もしそうなっていたら、IPv4で通信する場合と IPv6で通

信する場合とで、同じ「http://www.example.com」というURLでアクセスできるWebペー

ジも別物になってしまいます。それではユーザが混乱してしまうでしょう。

名前空間のためのDNSの ‌Root‌(根っこ)は、「1つ」であることが重要です(RFC 2826†6)。

IPv4インターネットと IPv6インターネットがまったく異なるネットワークであるのは、あく

まで通信プロトコル上の話であり、名前空間を含めた、いわゆる「インターネット」としては

「1つ」なのです。

2.3.3 IPv4と IPv6のどちらを使うのか判断するのはユーザ側IPv4だけを利用する場合には IPv4アドレスに対する名前解決が行われ、IPv6だけを利用す

る場合には IPv6アドレスだけの名前解決が行われます。IPv4と IPv6の両方の利用を試みる場

合には、IPv4と IPv6の両方に対する名前解決が行われます。ここで重要になるのが、「IPv4と

IPv6のどちらを使って通信するのかを誰がどのように判断するか」という点です。

結論から言うと、この判断をするのはユーザ側です。そのため、ユーザは、名前に関して

IPv4と IPv6の問い合わせを別々に行う必要があります。別々の問い合わせを行うということ

は、ユーザ側が明示的に IPv4と IPv6の両方に関して名前解決をしたいとDNSサーバに問い合

わせていることになります。このときDNSサーバは、個々の問い合わせに回答しているだけ

です。DNSサーバが「あなたは IPv4を使いなさい」とか「あなたは IPv6を使いなさい」など

という指示を出しているわけではありません。

IPv4と IPv6の両方で運用されているWebサーバを例にして考えましょう。サーバ側は、た

とえ IPv4と IPv6の両方でTCPソケットを使って接続されるのを待っていたとしても、ユーザ

側が IPv6での接続を行ってくれなければユーザと IPv6による通信はできません。たとえば、

「www.example.com」というドメイン名のWebサイトが、IPv4と IPv6の両方で運用されてい

たとします。このWebサーバに対して、ユーザがWebブラウザで接続する場合には、まず

DNSで「www.example.com」の名前解決を試みる必要があります。その際には、IPv4のAレ

コードと、IPv6のAAAAレコードの両方に対して、名前解決を試みます。もし両方ともに結果

が返ってきた場合、IPv4で接続するのか、それとも IPv6で接続するのかを判断するのは、Web

ブラウザです。

このように、接続に IPv4を使うのか、それとも IPv6を使うのかを判断するのは、個々のア

プリケーションの仕事です。他の環境がすべて同じであったとしても、IPv4と IPv6のどちら

を使うべきかは、アプリケーションごとに異なる可能性もあります。アプリケーションプログ

ラマは、IPv4を使うのか、それとも IPv6を使うのかを判断するコードを、アプリケーション

ごとに書く必要があります。

†6 RFC 2826:Internet Architecture Board, “IAB Technical Comment on the Unique DNS Root”, 2000年5月

Page 61: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.4 IPv6ネットワークから IPv4インターネットに接続する 47

かつては IPv6で運用されているサーバが非常に少なかったので、IPv4と IPv6のどちらで通

信を行うのかをアプリケーションプログラマが考える必要性は、事実上、皆無でした。TCP

で通信を行うには、IPv4アドレスを名前解決で得たのちにTCPで接続するだけだったのです。

しかし、本書を執筆している2017年12月時点では、IPv4を使うのか、それとも IPv6を使う

のかを判断するプログラムを書くことが強く推奨されるようになっています。

とはいえ、IPv4と IPv6のそれぞれでTCPの接続が成功するかどうかは、実際に接続を試み

ないとわかりません。そのため、図2.3のように、IPv4と IPv6の両方を同時に接続してしま

い、先に成功したほうの接続を使うという方法もあります†7。

IPv6ヘッダ データ

IPv4ヘッダ データ

IPv6インターネット

IPv4インターネット

WebブラウザなどWebサーバなど

IPv6ソケット

IPv4ソケット

▲ 図2.3 IPv4と IPv6の両方で接続を試みる

IPv6がさらに普及し、IPv4の利用が少なくなれば、今度は IPv6だけで接続すればよくなる

ので、再び IPv4と IPv6のどちらのプロトコルを使うのかを判断する必要がなくなるかもしれ

ません。その頃には本節のような説明も不要になり、「昔は IPv4というものもありました」と

いう、軽い紹介だけで済むでしょう。

2.4 IPv6ネットワークからIPv4インターネットに接続するエンドユーザ向けのネットワークを IPv6のシングルスタックにすると、そのネットワーク

に接続したユーザは、IPv6インターネットとのみ通信が可能になります。IPv6と IPv4の間に

は直接的な互換性がないので、IPv6のシングルスタックネットワークから IPv4インターネッ

トへの通信はできません。しかし、これまでインターネットは IPv4によって発展してきたの

で、IPv4のみで提供されているサービスも数多く残っています。「IPv6インターネットに対し

てのみ通信が可能」では困る場合も多いのです。

そこで、IPv6のシングルスタックネットワークと、IPv4のシングルスタックネットワークを

共存させるための仕組みがいくつか考えられています。詳しくは第 IV部で説明しますが、IPv4

と IPv6の共存技術には大きく分けて次の3種類があります。

r トンネル技術r 変換技術†7 16.3節で説明するように、多少 IPv6のほうが有利になるようなタイミングでの接続が行われることもあります。

Page 62: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

48 第2章 IPv6でインターネットはどう変わるか

r 運用手法ここでは、これらのうち、IPv6のシングルスタックネットワークから IPv4インターネット

で提供されているサービスとの通信を実現する変換技術の事例として、NAT64+DNS64の概

要を紹介します†8。NAT64+DNS64を使うと、エンドユーザ向けのネットワークを IPv6のシ

ングルスタックにしつつ、IPv4インターネットで提供されているコンテンツの閲覧などが行え

るようになります。たとえば、スマホに対して提供されるネットワークがNAT64+DNS64を

利用して運用されている場合、そのスマホを利用するユーザは IPv6しか使わなくなりますが、

IPv4インターネットに接続されたWebサーバからコンテンツを取得できるようになります。

ユーザが利用するホストに対して IPv6のみを提供しつつ、その IPv6ネットワークから IPv4

インターネットとの通信も行えるようにするための要素技術がNAT64+DNS64だといえるで

しょう。

‌NAT64 ‌と ‌DNS64 ‌は、2つの異なる技術ですが、一般的には組み合わせて使われます。

NAT64は、IPv6ヘッダの IPv4ヘッダへの変換、IPv4ヘッダの IPv6ヘッダへの変換、IPv4 ICMP

パケットの ICMPv6への変換、必要に応じたTCPやUDPヘッダの書き換えを行います。場合

によっては、FTPなどの変換(Application Level Gateway)も行います。DNS64は、IPv4の

みで運用されている「名前」を、IPv6で通信できるように変換するための仕組みです。

以降では、NAT64とDNS64のそれぞれについて概要のみを紹介します。詳細は21.5節で解

説します。

iOSアプリの IPv6対応

エンジニアの中には、2016年6月から iOSアプリの審査基準として IPv4に依存するコードの禁止が追加され、iOSアプリで IPv6対応が義務となったことから、IPv6に関する知識が必須になったという方も多いでしょう†9。Apple社のサイトには、「IPv4アドレス在庫枯渇の発生とともに、ユーザに対して IPv6のみによるインターネット接続性を提供するNAT64とDNS64がエンタープライズ網や携帯電話網で採用されることが増えている」とあります†10。

iOSアプリ開発者は、NAT64とDNS64環境でもアプリが正しく動作することを求められています。Appleのサイトでは、NAT64とDNS64はOS X 10.11から標準搭載されるようになっているので、Macを使って iOSアプリの動作確認をすることを推奨しています。

†8 日本語では、NAT64を「なっと・ろくよん」と読みます。「なっと・ろくじゅうよん」とは読まないのでご注意ください。DNS64も「でぃーえぬえす・ろくよん」です。英語圏では、「NAT64」を「なっと・しっくす・ふぉー」、「DNS64」を「でぃーえぬえす・しっくす・ふぉー」と表現することが多いようです。

†9 Appleの発表:https://developer.apple.com/news/?id=05042016a†10 “Apple Developer: Supporting IPv6 DNS64/NAT64 Networks”

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/

Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/

UnderstandingandPreparingfortheIPv6Transition.html

Page 63: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.4 IPv6ネットワークから IPv4インターネットに接続する 49

2.4.1 NAT64とSIIT

IPv4と IPv6はまったく異なるプロトコルなので、IPv4-IPv6変換では、IPv4と IPv6プロト

コルの差異を考慮しながら IPヘッダを変換する必要があります。たとえば、IPv4と IPv6と

でフィールドの定義が異なる場合もあります。たとえば、IPv4のTotal Lengthフィールドは

IPv4ヘッダとオプションを含む長さですが、IPv6のPayload Lengthフィールドは IPv6ヘッダ

を含みません。そこでNAT64では、IPv4ヘッダや IPv6ヘッダに含まれるフィールドを解釈し

て変換するために、両者の差異を吸収しつつ変換可能な方法を定義した ‌SIIT ‌を利用しています。SIITはRFC 7915†11で定義されています。

NOTE

SIITでは、ICMPの扱いも定義されています。ただし、IPv4の ICMPと IPv6の ICMPv6は仕組みが異なるので、変換することが不可能なものもあります。また、IPv4では IGMP

であったものが IPv6では ICMPv6に含まれるなどの違いもあります。

SIITでは、IPと ICMPのフィールドを IPv4と IPv6との間でどのように対応づけるかを定義

しているだけです。そのため、IPv4におけるNATと同じ要領で IPv4-IPv6変換をしたい場合に

は、SIITの利用に加えて各セッションのステートを管理する手段が必要になります。そのため

の方法を規定しているのがNAT64です。NAT64には、ステートフルな方式(RFC 6146†12)

と、ステートレスな方式(RFC 6052†13)があります。

NAT64トランスレータ( ‌XLAT ‌と呼ぶ場合もあります)は、IPv4のネットワークインター

フェースと IPv6のネットワークインターフェースを持ちます。IPv4側から受け取ったパケッ

トは IPv6へと変換され、IPv6側から受け取ったパケットは IPv4へと変換されます。NAT64、

SIIT、DNS64を使うためのフレームワークを規定しているRFC 6144†14のシナリオ1によれば、

変換に利用する IPv4側のアドレスはグローバル IPv4アドレス、IPv6側のアドレスはNAT64ト

ランスレータ用の IPv6プレフィックスです。このNAT64トランスレータ用の IPv6プレフィッ

クスとしては、RFC 6052に記載されている64:ff9b::/96がデフォルトで利用されます(他

の IPv6プレフィックスを設定することもできます)。宛先アドレスがこのプレフィックスの

IPv6パケットはNAT64トランスレータに転送され、他の IPv6アドレス宛のパケットは通常の

IPv6ルータに転送されるようなネットワークを構築できます。

NAT64トランスレータは、IPヘッダに含まれる IPv4アドレスを IPv6アドレスに変換する

必要があります。その変換方法はRFC 6052に規定されています。NAT64トランスレータ用

の IPv6プレフィックス64:ff9b::/96が利用される場合、IPv6アドレスのインターフェース

識別子となる残りの32ビットには、通信相手の IPv4アドレスが埋め込まれます。たとえば、

192.0.2.33というグローバル IPv4アドレスを持つ相手と通信を行う場合、IPv6ネットワー

†11 RFC 7915:C. Bao, X. Li, F. Baker, T. Anderson, F. Gont, “IP/ICMP Translation Algorithm”, 2016年6月†12 RFC 6146:M. Bagnulo, P. Matthews, I. van Beijnum, “Stateful NAT64: Network Address and Protocol

Translation from IPv6 Clients to IPv4 Servers”, 2011年4月†13 RFC 6052:C. Bao, C. Huitema, M. Bagnulo, M. Boucadair, X. Li, “IPv6 Addressing of IPv4/IPv6 Translators”,

2010年10月†14 RFC 6144:F. Baker, X. Li, C. Bao, K. Yin, “Framework for IPv4/IPv6 Translation”, 2011年4月

Page 64: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

50 第2章 IPv6でインターネットはどう変わるか

ク側では192.0.2.33が埋め込まれた64:ff9b::192.0.2.33という IPv6アドレスが利用さ

れます。図2.4に、NAT64を利用した通信の例を示します。

IPv6ヘッダ データIPv4ヘッダ データ

IPv6ネットワーク

IPv4インターネット

宛先 64:ff9b::192.0.2.23宛先 192.0.2.23

NAT64

192.0.2.23

▲ 図2.4 NAT64を利用した通信の例

2.4.2 DNS64NAT64だけでは、ユーザ側の環境を変更することなく IPv6のみで IPv4機器と通信できるよ

うにはなりません。IPv6対応済みのユーザ環境では、通常は通信相手の名前を解決する作業が

行われ、その結果に応じて IPv4で通信を行うのか、それとも IPv6で通信を行うのかを、個々の

アプリケーションが判断します。たとえば、http://192.0.2.33/のように IPv4アドレスが

そのまま埋め込まれているURLでブラウザからアクセスしようとすると、そのままでは IPv4

アドレスが得られてしまうため、IPv6のみで運用されているネットワークからNAT64を経由

して IPv4インターネットと通信を行うことはできません。それを実現するためには、DNSに

対する細工も必要になります。IPv4と IPv6は名前空間を共有しているため、DNSに細工をし

つつNAT64を利用することで、IPv6のみを使いながらも IPv4と通信を行える仕組みが実現で

きるようになります。そのDNSに対する細工が、RFC 6147†15で定義されている ‌DNS64‌です。NAT64の環境で IPv6のみを利用するユーザが、IPv4インターネットに接続された機器と通信

を行うには、DNS64を経由する名前解決が必要になります。

図2.5に、DNS64を利用した通信の例を示します。

†15 RFC 6147:M. Bagnulo, A. Sullivan, P. Matthews, I. van Beijnum, “DNS64: DNS Extensions for Network

Address Translation from IPv6 Clients to IPv4 Servers”, 2011年4月

Page 65: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

2.4 IPv6ネットワークから IPv4インターネットに接続する 51

IPv6ヘッダ データIPv4ヘッダ データ

IPv6ネットワーク

IPv4インターネット

宛先 64:ff9b::192.0.2.23宛先 192.0.2.23

NAT64

DNS64

DNS権威

192.0.2.23www.example.com

www.example.comのAAAAレコードは

64:ff9b::192.0.2.23IPv6アドレスなし

Aレコードは 192.0.2.23

AAAAレコードなし

www.example.comの

▲ 図2.5 DNS64を利用した通信の例

ユーザは、IPv6のみで運用される IPv6ネットワークに接続しています。図 2.5中の

example.comは IPv4アドレス192.0.2.23のみで運用されているので、IPv6での通信は行

えません。

2.4.3 NAT64+DNS64NAT64+DNS64が利用できる場合、IPv6ネットワークのユーザは、キャッシュDNSサーバ

としてDNS64機器を設定します。DNS64機器では、ユーザからのリクエストに応じて名前

解決を行う際、IPv6アドレスを示すAAAAレコードがある場合にはその結果をそのまま返し、

IPv4アドレスを示すAレコードしか存在しない場合には、先に説明したRFC 6052で定義され

ている方法で「IPv4アドレスが埋め込まれた IPv6アドレス」を返します。ユーザがexample.

comの名前解決を行ったときにNAT64ルータを経由する IPv6アドレスをDNS64サーバが返

すことで、IPv4で運用されたサーバへとユーザを誘導するためにNAT64ルータへとユーザの

トラフィックが誘導されます。

IPv6環境のみを持つユーザは、DNS64機器がAAAAレコードを返すので、そのAAAAレコー

ドで示される IPv6アドレスに向けた通信を開始できます。その名前解決の結果を受けて、ユー

ザはNAT64ルータに向かうパケットを送信し、NAT64ルータで IPv6パケットが IPv4パケッ

トへと変換されます。NAT64ルータから送信された IPv4パケットは、example.comへと送

信され、example.comからの返信はNAT64ルータへと送信されます。IPv4パケットを受け

取ったNAT64ルータは、IPv4パケットを IPv6パケットへと変換し、ユーザへと届けます。こ

のようにして、NAT64を経由することで、IPv4のみで運用されているWebサイトを IPv6環境

でブラウズできるようになります。

NAT64+DNS64の特長は、IPv6のシングルスタックネットワーク環境から IPv4インター

ネットへの通信を可能にしつつ、IPv6インターネットとの間ではそのまま IPv6インターネッ

トで通信可能になることです。NAT64を利用して IPv4インターネットと通信できる IPv6ネッ

トワークから、IPv6インターネットとの通信を行う場合は、図2.6のようにそのまま IPv6で通

信できます。

Page 66: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

52 第2章 IPv6でインターネットはどう変わるか

IPv6ヘッダ データ

IPv6ネットワーク

名前解決

IPv4インターネット

IPv6インターネット

宛先 2001:db8::1

NAT64

DNS64

IPv6

ルータ

2001:db8::1example.net

example.netはAAAAレコードあり

▲ 図2.6 IPv6トラフィックはそのまま

WebサーバでNAT64+DNS64に対応するために必要なこと

HTMLのページ内に IPv4アドレスがハードコーディングされたリンクがあるような状況では、DNS64が使えません。Webサーバ管理者は、Webサーバに含まれるコンテンツがDNS64に対応していることを確認する必要があります。それ以外には、NAT64+DNS64を利用しているユーザとの通信を行うために、Web

サーバ側で何か特別なことをする必要はありません。NAT64+DNS64は、IPv4で運営されている機器に対して IPv6オンリーの環境から通信できるようにするための仕組みであり、IPv4で運営されているWebサーバが何もしなくても通信できるようにするための仕組みなのです。ただし、IPv4と IPv6は直接の互換性がない異なるプロトコルであり、環境や設定によってはNAT64+DNS64を利用した通信を実現できない場合もありえます。そもそもNAT64+DNS64はNATの一種なので、従来のNATが抱える問題点をそのまま抱えています。また、フラグメンテーションに関連するパケットや、IPv6ヘッダオプションが付属したパケットなど、IPv4と IPv6のプロトコルとしての差異が原因で変換できないパケットもあります。そうした問題に対する回避策として考えられるのは、Webサーバ側の IPv6対応です。

NAT64+DNS64はあくまでも IPv6で通信できない相手と通信するための手段であり、IPv6と通信できる相手との通信であれば、NAT64を経由せずに IPv6でユーザと直接通信できます。

Page 67: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第II部

IPv6プロトコルとその周辺技術

ここでは IPv6の基本仕様とともに、IPv6ノードを構成するうえで必要となったり、状況に

よっては利用することになる機能を紹介していきます。主な話題は、IPv6アドレスの表記方法

と運用方法、IPv6ヘッダのフォーマット、ICMPv6とそれを利用した近隣探索、アドレス自動

設定、フラグメンテーション、マルチキャストとエニーキャストです。

なお、実際の IPv6ノードで要求されるさまざまな機能については、InformationalなRFCと

して、2011年12月に発行されたRFC 6434“IPv6 Node Requirements”でまとめられていま

す。さらに、家庭用の IPv6対応ルータなどに求められる機能を紹介したRFCとして、2013年

11月に発行されたRFC 7084“Basic Requirements for IPv6 Customer Edge Routers”があり

ます。

Page 68: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 69: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第3章

IPv6アドレスとそのテキスト表記

IPv6と IPv4の違いとして最もわかりやすい点は、アドレス長だといえます。IPv4のアドレ

ス長は32ビット、IPv6のアドレス長は128ビットです。

32ビット

128ビット

IPv4のアドレス長

IPv6のアドレス長

▲ 図3.1 IPv4アドレスと IPv6アドレスのビット長

この章では、128ビット長の IPv6アドレスによってもたらされるアドレス空間について説明

したあと、この128ビットの IPv6アドレスを人間が認識できる形でどのように表記するかに

ついて整理します。

3.1 IPv6アドレス空間IPv4アドレスと IPv6アドレスを比べると、32ビットと128ビットなので、長さとしては4

倍です。「何だ、たったの4倍か」と思うかもしれませんが、あくまでも長さが4倍になるので

あり、アドレス空間の大きさ、つまり利用できる IPアドレスの総数は4倍どころではありませ

ん。32ビットのアドレス空間を4倍にするだけならば、アドレスの長さは128ビットも必要

なく、34ビットで十分です。

アドレス空間は、アドレスの長さを1ビット増やすたびに、2倍ずつ膨らみます。32ビット

と128ビットでは、アドレスの長さは96ビット増えたことになります。したがって、アドレ

ス空間が32ビットから128ビットに増えるということは、IPv6アドレスで表現可能なアドレ

Page 70: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

56 第3章 IPv6アドレスとそのテキスト表記

スの総数が IPv4アドレスのときに比べて2の96乗倍になるということなのです。

3.1.1 実際に使える IPv6アドレス空間2の96乗倍は、天文学的な数字です。そのため、よく「IPv6には事実上無限ともいえるアド

レス空間がある」と表現されることがあります。実際、128ビットというアドレス長の数字だ

けで考えると、確かに IPv6には128ビット分のアドレス空間があり、それだけの数の IPアド

レスを表現可能です。

とはいえ、その広大なアドレス空間から好き勝手にアドレスを使えるわけではありません。

IPv6アドレスは IPv4アドレスとは比較にならないぐらいジャブジャブと運用されていること

もあり、実際に使える IPv6アドレスの数は限られています。

まず、後述するように、IPv6のアドレスのうち上位64ビットはネットワークアドレスとし

て利用されます。したがって、各ネットワーク内で表現可能な IPアドレスの数が、残りの64

ビットで表現可能な個数になります。IPv4インターネットで表現可能なアドレスの総数と比

べると、その約43億倍が個々のネットワーク内で利用可能です。

これは、たとえば各家庭内のネットワークで利用可能な IPv6アドレスのパターンが、いま

の IPv4インターネットで利用可能なアドレスの総数の約43億倍もあるということを意味しま

す。筆者には、1つの家庭内でそれだけの IPv6アドレスが必要になるユースケースをすぐには

思いつきません(外部からの単純なポートスキャンは多少やりにくくなりそうですね)。つま

り、実際の運用上は使われないままになる IPv6アドレスがかなり多くなると考えられます。

各事業者に割り振りされる IPv6アドレスブロックのサイズも、IPv4とは比べものにならな

いほど巨大です。たとえば、1つの事業者に/20の IPv6アドレスブロックが割り振られること

もあります。

こう考えると、IPv6のアドレス空間は無限にあるように見えて、実際の運用で利用される

アドレスはかなり少ないと推測できます。IPv6が IPv4のように枯渇するという状況は、いま

のところは想像しにくいといえますが、かといって事実上無限のアドレスがあるかというと、

「それは言いすぎではないか?」というのが現在の筆者の考えです。

3.2 IPv6アドレスのテキスト表記IPv6アドレスをコンピュータの中で扱うときには、単に128ビットの情報として処理すれ

ばよいのですが、その128ビットを人間が理解しやすい文字列で表記するには少し工夫が必要

です。

IPv4の場合は、「192.0.2.100」のように、8ビットごとに「.」(ドット)で区切るドット

付き十進表記(dotted decimal notation)が一般的でした。

Page 71: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

3.2 IPv6アドレスのテキスト表記 57

11000000000000000000001000000001

32ビット

8ビット 8ビット 8ビット 8ビット

192 . . .0 2 1

IPv4アドレス

IPv4アドレスの表記

▲ 図3.2 IPv4アドレスのテキスト表現(ドット付き十進表記)の例

IPv6の場合は、IPv4と同じ方法で表現しようとすると長くなりすぎてしまうので、「2001:

db8:11aa:22bb:33cc:44dd:55ee:66ff」のように、16ビットごとに「:」(コロン)で区

切って十六進表記することになっています。

0010000000000001…

128ビット

16ビット

2001:0db8:11aa:22bb:33cc:44ee:55ff:0006

IPv6アドレス

IPv6アドレスの表記

▲ 図3.3 IPv6アドレスのテキスト表現の例

さらに、十六進表記でも全部書くと長くなりがちなので、IPv6アドレスには省略を行うこと

を前提とした表記ルールがあります。128ビットであるということそのものが IPv4との表記

上の違いを生み出しているのです。IPv6アドレスのテキスト表記における省略ルールについ

ては3.3節で紹介します。

3.2.1 IPv6のアドレス体系を規定したRFC

IPv6のアドレス体系を規定したRFCは、これまで何度も改訂されています。細かいところ

でいろいろな違いが発生している部分なので、2000年代前半に勉強した知識のままである場

合には注意が必要です。下記に、IPv6アドレス体系に関するRFCの変遷をまとめます。

r RFC 1884†1: IP Version 6 Addressing Architecture(1995年)r RFC 2373†2: IP Version 6 Addressing Architecture(1998年)

†1 RFC 1884:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 1995年12月†2 RFC 2373:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 1998年7月

Page 72: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

58 第3章 IPv6アドレスとそのテキスト表記

r RFC 3513†3: Internet Protocol Version 6 (IPv6) Addressing Architecture(2003年)r RFC 4291†4: IP Version 6 Addressing Architecture(2006年)

いまのところ、2006年に制定されたRFC 4291が廃止されるような動きはありません。RFC

4291は、それ以前の3つのRFCよりは安定しています。

3.3 IPv6アドレスの省略表記

3.3.1 RFC 4291の表記ルール注意が必要なのが、2006年に発行されたRFC 4291にて定義されている同じ IPv6アドレス

に対し、複数の表記方法が存在する場合がある点です。それらの表記方法を統一して単純化す

る方法として、2010年にRFC 5952†5が発行されています。

ここでは、まず、IPv6アドレス体系を規定したRFC 4291で定義されている IPv6アドレステ

キスト表記ルールを説明します。

r IPv6アドレスは、16ビットごとに区切った十六進表記で表されるが、それぞれの16ビッ

トのフィールドの先頭で連続する0は省略できる

2001:0db8:11aa:22bb:33cc:44ee:55ff:0006

2001: db8 :11aa:22bb:33cc:44ee:55ff: 6

ゼロを省略可能 ゼロを省略可能

▲ 図3.4 IPv6アドレスのテキスト表現

r 複数の16ビットフィールドにわたって0が続く場合、「::」という表記で省略してもよい

2001:0db8:0000:0000:0000:0000:55ff:0001

2001: db8 :: 55ff:1

連続するゼロを::で省略可能

▲ 図3.5 IPv6アドレスのテキスト表現

†3 RFC 3513:R. Hinden, S. Deering, “Internet Protocol Version 6 (IPv6) Addressing Architecture”, 2003年4

月†4 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月†5 RFC 5952:S. Kawamura, M. Kawashima, “A Recommendation for IPv6 Address Text Representation”,

2010年8月

Page 73: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

3.3 IPv6アドレスの省略表記 59

r ただし、「::」が適用可能な16ビットフィールドが複数存在するときは、「::」を利用し

て省略できるのは1箇所のみ

2001:0db8:0000:0000:0000:0002:0000:0001

2001: db8 :: 2 : 0 : 1

連続するゼロを::で省略可能なのは1箇所だけ

▲ 図3.6 IPv6アドレスのテキスト表現

さらに、RFC 4291では、IPv4アドレスを IPv6アドレス内に含む特殊な IPv6アドレスの表

記も示されています。以下は、RFC 4291で実際に示されている例です。

r 0:0:0:0:0:0:13.1.68.3r 0:0:0:0:0:FFFF:129.144.52.38このアドレス表記も圧縮が可能です。

r ::13.1.68.3r ::FFFF:129.144.52.383.3.2 RFC 5952のルール

RFC 4291の IPv6アドレス表記ルールでは、同じ IPv6アドレスに対して複数の表記方法が

可能となる場合があります。たとえば、RFC 4291のルールで同じ IPv6アドレスに複数の表記

が可能になる例として、RFC 5952では以下のような IPv6アドレスが例示されています。一見

するとそれぞれ異なるものに見えますが、すべて同じ IPv6アドレスに対するRFC 4291のルー

ルに従った表記です。

r 2001:db8:0:0:1:0:0:1r 2001:0db8:0:0:1:0:0:1r 2001:db8::1:0:0:1r 2001:db8::0:1:0:0:1r 2001:0db8::1:0:0:1r 2001:db8:0:0:1::1r 2001:db8:0000:0:1::1r 2001:DB8:0:0:1::1このような曖昧さを排除し、IPv6アドレスの統一されたテキスト表現を規定しているのが、

2010年8月に発行されたRFC 5952です。RFC 5952では以下のルールが規定されています。

Page 74: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

60 第3章 IPv6アドレスとそのテキスト表記

r「::」による短縮時には可能な限り短くする

「16ビットの0」が連続していて「::」による短縮が可能な場合には、最も短縮できる表現

を利用しなくてはなりません。たとえば、2001:db8:0:0:0:0:2:1という IPv6アドレスは

2001:db8::2:1と表現すべきであり、2001:db8::0:2:1などと表現してはいけません。r「16ビットの0」が1つだけの場合は「::」を利用してはならない

「::」による短縮は、「16ビットの0」が連続して出現する場合にしか使えません。たとえ

ば、2001:db8:0:1:1:1:1:1を2001:db8::1:1:1:1:1とは表記できません。r最も短縮できる箇所で「::」を利用する

たとえば、2001:0:0:1:0:0:0:1という IPv6アドレスには、「16ビットの0」が2つ連続

する箇所と、3つ連続する箇所があります。最も短縮できるのは3つ連続した「16ビット0」

なので、2001:0:0:1::1と表記します。r同じ長さの「16ビットの0」が複数ある場合は、最初の箇所で「::」を利用する

たとえば、2001:db8:0:0:1:0:0:1という IPv6アドレスには、「16ビット0」が2つ連続

する箇所が2つあります。最初に登場する16ビットの0を「::」で短縮して、2001:db8::

1:0:0:1と表記します。rアルファベットは大文字ではなく小文字を利用する十進表記における10~15は、十六進表記ではアルファベット1文字で表しますが、このと

き大文字ではなく小文字を利用します。つまり、abcdefを利用し、ABCDEFを利用しない

ようにしてください。r特殊な IPv6アドレスでの利用

4.10節で説明する IPv4-Mapped IPv6アドレスでは、::ffff:192.0.2.1のようなテキス

ト表現を利用します。つまり、先頭にある0が続く部分に関しては「::」で省略し、「0:0:

0:0:0:ffff:192.0.2.1」のようには表現しないことが求められます。rポート番号との表記IPv4では、アドレスのテキスト表現に続けて「:」区切りでポート番号を併記する方法があ

ります。IPv6でもアドレスにポート番号を併記することができて、RFC 5952には下記のよ

うな例が紹介されています。r [2001:db8::1]:80r 2001:db8::1:80(この方法は推奨されません)r 2001:db8::1.80r 2001:db8::1 port 80r 2001:db8::1p80r 2001:db8::1#80上記のうち、推奨されているのは、IPv6アドレス部分を「[]」(角括弧)で囲んだ一番上の

例です。逆に、IPv6アドレスとポート番号を「:」で区切る上から2つめの表現は非推奨と

されています。

Page 75: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

3.3 IPv6アドレスの省略表記 61

[]で IPv6アドレス部分を囲んだ表現はRFC 3986†6でも利用されています。Webブラウザ

など、多くのアプリケーションでは、この[]を利用した表記を採用しています。

3.3.3 RFC 5952のルールは人間向けRFC 5952のルールは、人間が混乱しないための表記方法を提案するものであり、データ

ベース内などで利用することを前提としたものではありません。テキストとして IPv6アドレ

ス情報を表現するときに読みやすい方法にしましょうという話であって、文字列をパースする

ときの条件を示したものではないのです。

そのため、文字列で表現された IPv6アドレスをパースするアプリケーションを作る場合に

は、RFC 4291に従った表記を正しく処理できるようにする必要があります。

†6 RFC 3986:T. Berners-Lee, R. Fielding, L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax”,

2005年1月

Page 76: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 77: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第4章

IPv6アドレス体系

IPアドレスの長さが32ビットから128ビットになることの意味は、利用可能な IPアドレス

の総数が増えるというだけではありません。アドレスのビット数が IPv4より増えること自体

にも、ビットの並び方に意味を持たせる方法が IPv4より多彩になるという意味があります。

この章では、IPv6アドレスが実際のネットワークでどのように使われるかについて説明し

ます。

4.1 IPv6アドレスの種類RFC 4291†1では、IPv6アドレスの基本的な分類を下記のように定義しています。

アドレスの種類 IPv6アドレス

未定義アドレス ::/128

ループバックアドレス ::1/128

マルチキャストアドレス ff00::/8

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

グローバルユニキャストアドレス 上記以外のすべてのアドレス

r未定義アドレス(::/128)

RFC 4291では、128ビットすべてが0となる IPv6アドレスを未定義アドレス(Unspecified

Address)としています。未定義アドレスは、IPv6アドレスが存在しないことを示すために

予約された値です。

この IPv6アドレスをノードに対して割り当てることはできません。また、宛先 IPv6アドレ

スとして利用することもできません。

未定義アドレスは、たとえば IPv6アドレスの割り当てを受ける前段階のノードが送信元

IPv6アドレスとして利用します。ただし、送信元 IPv6アドレスが「::/128」のパケットを

ルータが転送することは禁止されています。

†1 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月

Page 78: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

64 第4章 IPv6アドレス体系

NOTE

ルーティングプロトコルでデフォルト経路を表現するために利用されるのは、IPv6では「::/0」、IPv4では「0.0.0.0/0」です。それぞれプレフィックス長が0です。

rループバックアドレス(::1/128)

ループバックアドレスは、自分自身を示す IPアドレスです。IPv4における127.0.0.1に相

当するアドレスです。

ループバックアドレスは、ノード内のみで利用可能です。ループバックアドレスを送信元も

しくは宛先アドレスとしてノード外に送信することは禁止されています。ループバックアド

レスを宛先アドレスとしたパケットを物理インターフェースから受け取った場合、そのパ

ケットは破棄されます。rマルチキャストアドレス(ff00::/8)

いくつかのノード宛にまとめてパケットを送信するときに使えるアドレスです。先頭8ビッ

トが1の IPv6アドレスは、すべてマルチキャスト用として確保されています。IPv6では、プ

ロトコルのさまざまな機能を実現するために、マルチキャストが非常に効果的に利用されて

います。

ユニキャスト IPv6同様に、IANAによって予約済みのマルチキャスト IPv6アドレスもありま

す。よく使われるマルチキャスト IPv6アドレスとして、以下の2種類が挙げられます(RFC

4291に記載)。

r同一リンク内の全ノードff02::1(全ノードマルチキャストアドレス)r同一リンク内の全ルータff02::2(全ルータマルチキャストアドレス)マルチキャストアドレスについては、12.1節で詳しく説明します。rリンクローカルユニキャストアドレス(fe80::/10)

同一のリンク内でのみ利用可能なアドレスです。詳しくは4.6節で説明します。rグローバルユニキャストアドレス上記以外のすべてのアドレスが、グローバルユニキャストアドレスです。

上記のほかにも、さまざまな特殊用途の IPv6アドレスがあります。特殊用途の IPv6アドレ

スは、RFC 6890†2(BCP 153)としてまとめられています。

4.2 IPv6アドレス空間の使い方はIANAが管理しているIPv6アドレスの使い方は、IPv4同様に IANAが管理しており、下記のURLで参照できます†3。

†2 RFC 6890:M. Cotton, L. Vegoda, R. Bonica, B. Haberman, “Special-Purpose IP Address Registries”, 2013

年4月†3 IANAに関しては1.4.6項を参照。

Page 79: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.3 IPv6におけるユニキャストアドレスの構成要素 65

r https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml

本書執筆時点で IPv6グローバルユニキャストアドレスとして IANAで予約されているのは、

2000::/3です。IPv6グローバルユニキャストアドレスのRIRに対する割り振りは、上記とは

別の下記のURLでまとめられています。

r https://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xhtml

4.3 IPv6におけるユニキャストアドレスの構成要素1.1.4項で説明したように、IPv6アドレスは、ネットワークを示す部分とインターフェース

を示す部分とに分けられます。この区分は、IPv4と IPv6とで異なります(図4.1)。

ネットワーク部

サブネットプレフィックス

ホスト部

インターフェース識別子

128ビット

32ビット

IPv4アドレス

IPv6アドレス

▲ 図4.1 IPv4と IPv6での IPアドレス構成要素の違い

IPv4では、IPアドレスはネットワーク部とホスト部によって構成されます。一方、IPv6

では、IPアドレスはサブネットプレフィックスとインターフェース識別子(IID、Interface

Identifier)によって構成されます。この違いは、一見すると名称の問題だけのようにも思え

ますが、IPv4と IPv6の大きな違いを示しています。

1989年に発行されたRFC 1122†4では、IPv4アドレスの構成要素を「Network-number」と

「Host-number」としています。つまり、IPv4アドレスは、機器である「ホスト」そのものを

示しているのです。ルータ以外の末端ノードは基本的に1つのネットワークインターフェース

だけを持ち、そこで必要な IPv4アドレスも1つだけ、という前提が垣間見えます。

一方、IPv6では、1つのネットワークインターフェースに対して複数の IPv6アドレスが付く

場合が最初から想定されています。IPv6アドレスのインターフェース識別子は、文字どおり、

ホストではなくインターフェースを識別するものなのです。インターフェース識別子という名

称からは、IPv6アドレスは、あくまでもネットワークインターフェースを識別するものであ

†4 RFC 1122:R. Braden, “Requirements for Internet Hosts - Communication Layers”, 1989年10月

Page 80: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

66 第4章 IPv6アドレス体系

り、必ずしも機器を識別するものではない、という前提が垣間見えます。実際、IPv6では、同

じ1つのネットワークインターフェースに対して、「サブネットプレフィックスは異なるがイ

ンターフェース識別子は同じ」という IPv6アドレスを複数設定できます。

4.4 IPv6アドレスのスコープIPv6には、IPv6アドレスの有効範囲を示すスコープという概念があります。IPv6アドレス

のスコープはRFC 4007†5で定義されており、ユニキャストおよびエニーキャストアドレスに

はリンクローカルスコープとグローバルスコープの2種類があります。

サイトローカルアドレスが廃止される前は、サイトローカルアドレスもユニキャストおよび

エニーキャストのスコープを構成していました。しかし、サイトローカルアドレスが廃止され

たため、ユニキャストおよびエニーキャストでのスコープは2種類だけになっています。4.9

節で紹介するULA(Unique Local IPv6 Unicast Address)のスコープはグローバルです。

スコープには、スコープに対するゾーンという考え方があります。スコープとゾーンは IPv6

を構成する非常に重要な要素ですが、本書では、まずはユニキャストとエニーキャストにおい

て存在しているリンクローカルスコープについて紹介したうえで、ゾーンについては4.7節で

解説します。

リンクローカルスコープの IPv6アドレスは、対象となるネットワークインターフェースが同

一リンク内でのみ一意な IPv6アドレスです。グローバルスコープは、ネットワークインターフェースをインターネット全体の中で一意に識別できる IPv6アドレスです。

リンクローカルスコープの IPv6アドレスとしては、リンクローカルユニキャストアドレス

が挙げられます。RFC 4007では、自分自身を示すループバックアドレスも、リンクローカル

スコープに分類されると書かれています。ループバックアドレスは、想像上のリンクに接続さ

れた仮想的なループバックインターフェースのものとして扱われています。

4.5 IPv6ノードに要求されるIPv6アドレスIPv4では、1つのネットワークインターフェースに対して設定される IPv4アドレスは基本

的に1つだけですが、IPv6ではリンクローカルアドレスを要求するプロトコルがあるので、グ

ローバル IPv6アドレスと同時にリンクローカル IPv6アドレスも設定が必要です。

IPv6ノードに要求される IPv6アドレスについては、RFC 4291の2.8節でまとめられていま

す。RFC 4291では、ホストに要求されるものと、ルータに要求されるものが示されています。

IPv6対応しているホストに設定が必要、もしくは対応が求められる IPv6アドレスには以下

のような種類があります。

r 各ネットワークインターフェースごとにリンクローカルアドレス(4.6節参照)が必要r ネットワークインターフェースに対するユニキャストまたはエニーキャストアドレスr ループバックアドレス(::1/128)

†5 RFC 4007:S. Deering, B. Haberman, T. Jinmei, E. Nordmark, B. Zill, “IPv6 Scoped Address Architecture”,

2005年3月

Page 81: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.5 IPv6ノードに要求される IPv6アドレス 67

r 全ノードマルチキャストアドレス(ff02::1)r 各ユニキャストおよびエニーキャストアドレスに対応するSolicited-Nodeマルチキャスト

アドレス(12.3節参照)r そのノードが参加する、その他マルチキャストアドレス(第12章参照)

IPv6対応しているルータでは、上記の IPv6アドレスに加えて、以下の IPv6アドレスにも対

応が必要です。

r ルータとしての機能を提供しているネットワークインターフェースに対するサブネットルータエニーキャストアドレス(13.3節参照)r ルータに対して設定されるその他のエニーキャストアドレス(第13章参照)r 全ルータマルチキャストアドレス(ff02::2)

4.5.1 ルータ同士を/127で接続する際の注意IPv6アドレスの長さは128ビットなので、サブネットプレフィックスを/127とすると、IPv6

アドレスがネットワークで2つのみ存在できる状態になります。このような運用には、自分の

IPアドレスがわかれば自動的に相手の IPアドレスもわかるという利便性があるほか、リンク層

アドレスがないPoint-to-Pointなリンク上でのパケットのピンポン状態を防げるというメリッ

トがあります。たとえば、PPPや IPv6 over IPv4トンネルなどではリンク層のアドレスがあり

ません。そのため、受け取ったパケットが自分宛ではないかどうかをリンク層アドレスで判断

できません。/127よりも短いプレフィックス長を利用すると、Point-to-Pointリンクの両端に

接続された機器の IPアドレスではない IPアドレスを宛先とするパケットが、ピンポンのよう

にリンク上を行き来してしまう可能性があるのです。

イーサネットのようにリンク層アドレスがあれば、リンク層において自分宛ではないパケッ

トを判別可能であり、そのようなパケットをネットワーク層へと渡す前に破棄できます。イー

サネットでは、同一リンク上に存在する可能性がある他の機器宛のパケットを拾ってルータが

転送してしまうことは、通常はありません。図4.2に、リンク層がイーサネットの場合の例を

示します。ルータに対して他の機器宛のパケットが到着したとき、イーサネットヘッダに記載

されている宛先イーサネットアドレスと、ルータのネットワークインターフェースのイーサ

ネットアドレスが一致しない場合には、リンク層でパケットが破棄されネットワーク層へとパ

ケットは到達しません。

Page 82: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

68 第4章 IPv6アドレス体系

ルータ

IPv6ヘッダ イーサネットヘッダデータ

宛先アドレス00:00:6c:aa:bb:cc

宛先アドレス2001:db8::9

リンク層のアドレスが一致しないので破棄

ネットワーク層

リンク層

IPv6アドレス2001:db8::1IPv6アドレス2001:db8::1

イーサネットアドレス24:33:6c:00:00:01

▲ 図4.2 イーサネットの場合

これに対し、リンク層アドレスが存在しないPPPなどでは、ルータに到達した他の機器宛の

パケットがそのままネットワーク層へと渡されることになります。そのため、/127よりも短

いプレフィックス長で運用されているPoint-to-Pointリンクで接続している2つの機器が自分

の IPv6アドレス宛でないパケットを受け取ってしまうと、それを相手に転送しようとしてし

まいます。

図4.3に、リンク層アドレスがないプロトコルで、宛先 IPv6アドレスがルータのネットワー

クインターフェースとは異なり、かつ、同じネットワークプレフィックスに属する宛先 IPv6

アドレスに対するパケットを受け取った状況の例を示します。このとき、プレフィックス長

は/64だったとします。

ルータ

IPv6ヘッダ PPPヘッダデータ

「宛先アドレス」という概念なし

宛先アドレス2001:db8::9

リンク層では自分宛かどうか確認できない。ネットワーク層で、自分宛でないと判断し、最適なネットワークインターフェースに転送。受け取ったネットワークインターフェースと同じネットワークインターフェースから送出。

ネットワーク層

リンク層

IPv6アドレス2001:db8::1IPv6アドレス2001:db8::1

▲ 図4.3 リンク層にアドレスが存在しない場合

図4.3では、受信したデータが自分宛かどうかをリンク層では確認できないので、パケット

がそのままネットワーク層へと渡されます。ネットワーク層では、そのパケットの宛先が自分

ではないので、ルータとして転送を試みます。そのパケットの宛先 IPv6アドレスは、パケット

を受け取ったネットワークインターフェースが属するセグメントのものなので、パケットを受

け取ったネットワークインターフェースへとパケットを転送します。

パケットの宛先が、リンクの両端に付いている IPv6アドレスのいずれでもない場合、リン

クの両端にあるルータがまったく同じ挙動を示す可能性があります。その結果、IPv6ヘッダ

のホップリミットが0になるまでパケットがPoint-to-Pointリンク上を転送され続けてしまう

Page 83: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.5 IPv6ノードに要求される IPv6アドレス 69

「ピンポン状態」が発生してしまいます。

プレフィックス長が/127であれば、このようなピンポン状態は発生しません。ピンポン状

態が発生する条件として、IPv6パケットの宛先アドレスがリンクの両端となっているネット

ワークインターフェースとは異なるものである必要がありますが、プレフィックス長が/127

であれば、そのリンク上で存在可能な IPv6アドレスは2種類に限定されるからです。

この問題は、IPv6に限定して発生する状況ではありません。IPv4でも、環境が整えば同

様の問題が発生します。しかし、IPv4では IPアドレスを節約する必要性があることもあり、

Point-to-Pointなリンクでは/31というサブネットを利用するのが一般的です。IPv4アドレス

の長さは32ビットなので、31ビットをネットワーク部とし、最後の1ビットだけでホスト部

を示すわけです。こうすると同一セグメント内に IPアドレスが2つだけになるので、この問題

が表面化しませんでした。

IPv4では/31がよく利用されている一方で、IPv6では、ルータ同士の接続で/127を利用

するのは避けるべきであるというRFC 3627†6が 2003年に発行されました。RFC 3627は

InformationalなRFCであり標準ではありませんが、RFC化されていることもありそれなりに

大きな影響力を持っていました。

RFC 3627において、ルータ同士の接続で/127を利用すべきでないとされている理由は、2

つしかない IPv6アドレスを両方とも片方のルータが利用してしまう可能性があるからです。

この状況が起きる背景には、第8章で説明する IPv6アドレス自動生成の仕組みと、サブネッ

トに接続されたルータのネットワークインターフェースに設定されるサブネットルータエニー

キャストアドレス(13.3節参照)の存在があります。ここでは簡単に問題が起こる状況を説明

しておきます。

たとえば、/127のセグメントで片方のルータが通常のユニキャスト IPv6アドレスを自動生

成し、2つある IPv6アドレスのうちの片方を利用することにしたとします。いま、もう片方の

ルータでは IPv6アドレスが設定されていないとすると、最初のルータにおける重複アドレスの

検知(8.5節で説明するDAD)は成功し、ネットワークインターフェースにそのアドレスが設

定されます。このルータで、さらにサブネットルータエニーキャストアドレスを設定すると、

2つある IPv6アドレスのうちの両方が片方のルータに利用されることになります。この状況

で、もう片方のルータにおいて IPv6アドレス自動生成を実行すると、DADに失敗することに

なります。結果として、そのルータでは、/127のセグメントのネットワークインターフェー

スに IPv6アドレスが付きません。

このような問題を避けつつ、ルータ同士が/127を利用できるようにするため、2011年に

RFC 6164†7が発行されました。RFC 6164では、ルータ同士の接続において/127を利用する

際にサブネットルータエニーキャストアドレスを利用することを禁止しています。また、/127

を利用する際に後半64ビットがすべて0となる IPv6アドレスを利用することや、後半64ビッ

トの上位128個の範囲(ffff:ffff:ffff:ff7f~ffff:ffff:ffff:ffff)を利用すること

†6 RFC 3627:P. Savola, “Use of /127 Prefix Length Between Routers Considered Harmful”, 2003年9月†7 RFC 6164:M. Kohno, B. Nitzan, R. Bush, Y. Matsuzaki, L. Colitti, T. Narten, “Using 127-Bit IPv6 Prefixes

on Inter-Router Links”, 2011年4月

Page 84: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

70 第4章 IPv6アドレス体系

も禁止しています。

RFC 3627は InformationalなRFCでしたが、RFC 6164は Standards TrackのRFCです。

RFC 6164のほうが重要視される分類ですが、それをより明確にするために、2012年にRFC

3627を廃止(Historic Status)するRFC 6547†8が発行されました。したがって、現在では、

ルータ同士の接続において/127というプレフィックス長を使うことを妨げるRFCは存在しな

いことになります。

4.6 リンクローカルユニキャストアドレスリンクローカルユニキャストアドレスは、同一リンク内でのみ利用可能なリンクローカルスコープの IPv6アドレスです。IPv6アドレスを自動設定する機能(第8章)でも利用され、IPv6

を構成する重要な要素の1つといえます。すべてのネットワークインターフェースには、リン

クローカルユニキャストアドレスを設定する必要があります。

RFC 4862†9の5.3節では、図4.5のような、先頭10ビットが1111 1110 10、それ以降の

サブネットプレフィックスが0の IPv6アドレス(fe80::/10)として、リンクローカルアドレ

スを生成するとあります。

0 1 2 3 4 5 6 7 8 9 128− 10−nビット︷ ︸︸ ︷1111111010 すべて0 →

nビット︷ ︸︸ ︷インターフェース識別子→

▲ 図4.4 リンクローカルアドレス

このときのインターフェース識別子の長さは、RFC 4862では任意とされています。した

がって、インターフェース識別子の長さをnとすると、上位10ビットに続く128 − 10 − nビットがすべて0です。

ただし、RFC 4862が定義しているのはリンクローカルアドレスの生成方法であって、リン

クローカルアドレスそのものの定義ではありません。リンクローカルアドレスそのものを定義

しているRFC 4291の2.5.6項によると、リンクローカルアドレスのうちサブネットプレフィッ

クスが64ビット(つまり上位64ビットのうち後半54ビットがすべて0)で、下位64ビット

がインターフェース識別子となる IPv6アドレス(fe80::0/64)を、リンクローカルユニキャ

ストアドレスとしています。このため、リンクローカルユニキャストアドレスの場合は、RFC

4862においてインターフェース識別子の長さを示すnが64より大きな値になることはありま

せん。

†8 RFC 6547:W. George, “RFC 3627 to Historic Status”, 2012年2月†9 RFC 4862:S. Thomson, T. Narten, T. Jinmei, “IPv6 Stateless Address Autoconfiguration”, 2007年9月

Page 85: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.7 スコープのゾーン 71

0 1 2 3 4 5 6 7 8 910 63

1111111010 すべて0 →

64 127

インターフェース識別子→

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

NOTE

本書では、fe80::0/64のリンクローカルユニキャストアドレスを「リンクローカルアドレス」と表現することがあります。ff02::1などのリンクローカルスコープのマルチキャストアドレスに関しては、「リンクローカルマルチキャストアドレス」と表現します。

IPv6では、ネットワークインターフェースの初期化時に、リンクローカルユニキャストアド

レスが自動的に設定されます。単一のネットワークインターフェースに複数の IPv6アドレス

を設定可能であるという仕様のもと、自動的にリンクローカルユニキャストアドレスが設定さ

れるシステムも少なくありません。IPv6の基本的な機能であるNDP(近隣探索)や、ルーティ

ングプロトコルであるOSPFv3のプロトコル設計でも、リンクローカルユニキャストアドレス

の存在が前提となっています。リンクローカルユニキャストアドレスは、IPv6において重要な

要素なのです。

IPv4におけるリンクローカルアドレス

リンクローカルユニキャストアドレスは、IPv6固有のものではありません。RFC

3927†10では、169.254.0.0/16がリンクローカル IPv4アドレスとして定義されています。

RFC 3927が発行されたのは2005年なので、IPv6が当初議論された時点では、リンクローカル IPv4アドレスは正式には存在していませんでした。169.254.0.0/16というアドレスは、主にWindowsにおいて、DHCPで IPv4アドレスを取得する前に独自にネットワークインターフェースに付ける IPv4アドレスとして知られていたものです。Windowsでは、DHCPのパケットを送出するときに送信元 IPv4アドレスとして0.0.0.

0を設定できないことから、このアドレスが利用されていました。これが後になって他のシステムでも利用されるようになり、2005年に正式な IPv4用のリンクローカルアドレスとしてRFC化されたのです。

4.7 スコープのゾーンあるスコープを持つ特定のトポロジ的な範囲のことを、RFC 4007ではゾーンと呼んでいま

す。スコープがアドレス体系から決まるのに対し、ゾーンは個々のリンクを構成するインター

†10 RFC 3927:S. Cheshire, B. Aboba, E. Guttman, “Dynamic Configuration of IPv4 Link-Local Addresses”,

2005年5月

Page 86: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

72 第4章 IPv6アドレス体系

フェースなどで決まります。どのようにしてゾーンが決まるかは、スコープごとに次のように

整理できます。

r インターフェースローカルスコープに対しては、ノード内の各インターフェースによって、1つのゾーンが形成される(ただしマルチキャストの場合のみ)r リンクローカルスコープに対しては、あるリンクとそのリンクに接続されたインターフェースによって、1つのゾーンが形成される(ユニキャスト、エニーキャスト、マルチ

キャストの場合)r グローバルスコープに対しては、インターネットに接続されたすべてのリンクとネットワークインターフェースによって、1つのゾーンが形成されるr 上記以外のスコープについては、ネットワーク管理者によってゾーンが定義され、設定される

同じスコープに対応するゾーンがオーバーラップすることはありません。あるインター

フェースが属するゾーンは、同じスコープに対するものであれば、必ず1つだけです。スコー

プが異なれば、複数のゾーンに同じインターフェースが属することはあります。たとえば、す

べてのインターフェースはリンクローカルなゾーンに属すると同時にグローバルなゾーンにも

属しています。実際、小さいスコープに対応するゾーンは、より大きなスコープに対応する

ゾーンに完全に内包されます。もちろん、その場合でも、小さいスコープに対応するゾーンが

より大きなスコープに対応する複数のゾーンにまたがることはありません。

IPv6では、ゾーン内のパケットがゾーン外に転送されることが禁止されています。ゾーン

が示す宛先に向かうパケットは、そのゾーンから抜け出すことができません。このことは、ト

ンネルを利用しているパケットがトンネルを通じて遠隔に対して転送されているように見える

ことに矛盾するように思えるかもしれません。しかし、トンネル内部ではゾーン内の転送であ

り、どこかでトンネルが構成するゾーンから外に向けて転送されない限りは、ゾーン外に転送

されているわけではありません。

ユニキャストとエニーキャストに必要なゾーンは、リンクローカルスコープに対応するもの

と、グローバルスコープに対応するものの、2つだけです。一方、マルチキャストでは多様な

ゾーンが必要になります。マルチキャストにおけるゾーンに関しては、12.4節で解説します。

4.7.1 ゾーンインデックスゾーンとゾーンの境界は、リンク上には存在せず、必ずノード内に存在します。したがっ

て、ノード内の各インターフェースがゾーンとゾーンの境界になります。そのため、ノード内

の各インターフェースは、同じ IPv6アドレスを持ちながら、複数の異なるゾーンで利用される

場合もあります。

IPv6では、あるインターフェースにおけるグローバルスコープ以外のアドレスがどのゾーン

に属するものかをノード内で識別するために、ゾーンインデックス(ゾーン ID)という仕組み

が使われます。

IPv6では、このゾーンインデックスをシステムの運用などで使うこともあります。たとえ

Page 87: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.7 スコープのゾーン 73

ば、システム内で3番めのネットワークインターフェースにfe80::1というリンクローカル

ユニキャストアドレスが設定されていた場合、fe80::1%3のように IPv6アドレスに%記号で

リンクに対するインデックスを示す番号を付記し、これをゾーンインデックスとして利用し

ます。

ただし、ゾーンインデックスをどのように表現するかはRFC 4007では規定されておらず、

実装により異なっています。BSDの実装ではリンクとインターフェースが1対1だと仮定して

おり、結局のところ一意性も保証されることから、実装の都合上の簡易記法としてインター

フェースの番号をリンクにおけるゾーンインデックスとして使う実装がしばしば見られます。

ここで挙げたリンクもしくはインターフェースを示す番号による方法のほか、eth0、le0、

sl1ppp2といったネットワークインターフェースの「名前」をゾーンインデックスに利用する

実装もあります。その場合、いまの例はfe80::1%eth0のように表現されます。

NOTE

RFC 4007では、ゾーンインデックスをlink index 2のように表現しています。このような表現は「読みやすさのため」とされており、ノード内でゾーンインデックスをどのように表現するかは実装によって異なります。

■ URIにゾーンインデックスが含まれる場合の表記ゾーンインデックスと組み合わせて IPv6アドレスが表現されたものがURIに含まれる場合

に関して定義したRFC 6874が2013年に発行されています。

RFC 4007では、ゾーン IDと IPv6アドレスを組み合わせて表現する際のフォーマットを

「<address>%<zone_id>」としています。しかし、URIの構文(Generic Syntax)を定義して

いるRFC 3986では、「この構文は IPv6 scoped addressingのゾーン識別子はサポートしてい

ません(This syntax does not support IPv6 scoped addressing zone identifiers.)」と明確

に示してあり、ゾーンインデックスと IPv6アドレスを組み合わせた表記をサポートしていま

せん。

RFC 3986で定義されているURI構文では、「%」という文字がエスケープ対象であるため、

IPv6アドレスのゾーンインデックスを示すためにURI中に「%」をそのまま使うことがURI

構文の仕様と競合します。RFC 6874では、ゾーン IDと IPv6アドレスの間にある%に対して

Percent-Encodingを行った値ですが%25を利用することを定義しています。これにより、た

とえば、fe80::a%eth0を含むURLの表現は、以下のようになります。

http://[fe80::a%25eth0]/

NOTE

RFC 6874では、URI中では「%25」を使うことを必須としていますが、過去の実装では「%」を扱っていたものもあり、すべての実装が「%25」ではない可能性もあります。他のRFC同様に、RFCで標準仕様とされていることが必ずしもすべて仕様どおりに実装されているとは限らないという点に注意が必要です。

Page 88: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

74 第4章 IPv6アドレス体系

4.8 グローバルユニキャストアドレスRFC 4291に記載されている IPv6グローバルユニキャストアドレスは、図4.6のようなフォー

マットになっています。

nビット︷ ︸︸ ︷ mビット︷ ︸︸ ︷グローバルルーティングプレフィックス サブネット ID →

128− (n+m)ビット︷ ︸︸ ︷インターフェース識別子→

▲ 図4.6 IPv6グローバルユニキャストアドレス

nビット分のグローバルルーティングプレフィックスがあり、次にmビット分のサブネッ

ト IDが続きます。nおよびmは可変長です。IPv6アドレスは128ビットなので、nとmを足

した値を128から引いた値がインターフェース識別子となります。

RFC 4291の2.5.1項では、最初の3ビットが000で開始するものを除く IPv6ユニキャスト

アドレスは、インターフェース識別子を64ビット長にすることが要求されています。そのた

め、たとえばグローバルルーティングプレフィックスが32ビットであった場合、各家庭への

サブネット IDとして残りの32ビットを利用し、家庭内での個別機器識別のためのインター

フェース識別子用に残りの64ビットを利用するという運用が一般的です。

4.8.1 IPv6アドレスの/64境界についてIPv6の基本仕様は IPv6アドレスの 128ビットをサブネットプレフィックスとインター

フェース識別子に分ける際の境界について明記していません。しかし、IPv6アドレス体系の

仕様であるRFC 4291では、先頭3ビットが000で開始するものを除くすべてのユニキャス

ト IPv6アドレスのインターフェース識別子は64ビット長であるとしています。ただし、IPv6

アドレスのサブネットプレフィックス境界を/64としないRFCでの唯一の例外として、RFC

6164にある/127を使う場合があります(4.5.1項参照)。

この64ビット境界に関しては、RFC 7421†11としてまとめられています。RFC 7421は、64

ビット境界が広く採用されるようになった経緯や、関連するRFC、インターフェース識別子部

分を可変長にした場合に発生し得る課題などをまとめた InformationalなRFCです。

RFC 7421によると、/64境界は、IPv6の初期デザインの時点で議論されていたとあります。

その後、/80を境界とするという案があったものの、48ビット長のMACアドレスを置き換え

る形でEUI-64のMACアドレスの利用が普及するだろうと当時は予想されていたこともあり、

/64境界でのインターフェース識別子がデファクトになりました。

IPv6の基本仕様は/64に限定されていないので、/64以外のプレフィックス長も利用は可能

です。その一方で、/64を強く意識していたり、ある一定のプレフィックス長以上になると対

応できないプロトコルなども存在するので、注意が必要です。

†11 RFC 7421:B. Carpenter, T. Chown, F. Gont, S. Jiang, A. Petrescu, A. Yourtchenko, “Analysis of the 64-bit

Boundary in IPv6 Addressing”, 2015年1月

Page 89: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.9 ULA(Unique Local IPv6 Unicast Addresses) 75

実装上の問題もあります。RFC 7421では、/80や/96などのプレフィックス長で動作でき

る転送機器が存在すると述べられています。しかし、プレフィックス長が64を超えると性能

が劣化するルータが存在することも紹介されています。このような性能劣化は、ルータの設計

によるものです。メモリや消費電力の有効利用、索引の速度上昇などを目指すために、64ビッ

ト境界を前提とした設計を採用するチップもあるのです。

まとめると、/64以外のサブネットプレフィックスも可能ではあるものの、デファクトとし

ては/64が採用されているのが現状であり、基本的には/64を利用しておくことが無難といえ

ます。

4.9 ULA(Unique Local IPv6 Unicast Addresses)IPv6には、サイト内でのローカルな通信で利用するために、‌ULA‌(Unique Local IPv6 Unicast

Address)というユニキャスト IPv6アドレスが用意されています。ULAは、RFC 4193†12で定

義されています。

2000年代前半以前に IPv6を勉強された方は、サイトローカルアドレスと呼ばれる IPv6アド

レスの存在を記憶されているかもしれません。サイトローカルアドレスは、2004年に、RFC

3879†13で廃止されました。

サイトローカルアドレスが廃止された主な理由は、「サイト」という概念で表される範囲が

曖昧だったことでした。範囲が曖昧であったことから、運用管理者にとってデメリットが多

く、アプリケーション開発者による実装でも利用しにくかったのです。

ULAは、サイト内でのローカルな通信だけでなく、限定された数のサイト間でのルーティン

グでの利用も想定されています。そのため、ULAのスコープ(4.4節)は、グローバル IPv6ア

ドレス同様にグローバルスコープです。ただし、グローバルな IPv6インターネットでULAの

経路が広告されることは想定されていません(禁止されているわけでもないので注意してくだ

さい)。なお、サイトローカルスコープというスコープもありますが、これはマルチキャスト

用に規定されているスコープです(12.2節参照)。

ULAのフォーマットを図4.7に示します。

0 6 7 8 4748 63

プレフィックスL グローバル ID サブネット ID →64 127

インターフェース識別子→

▲ 図4.7 ULAフォーマット

ULAの先頭7ビットはプレフィックスで、fc00::/7です。8ビットめは、ローカルであるか

どうかを示すLビットで、1の場合がローカル、0の場合は未定義(「将来定義される」)となっ

ています。このようにRFCに記載されたプロトコルには「将来定義される」とされたフィール

ドが多くあり、いつまでも定義されずにそのままになっていることも少なくありません。本書

†12 RFC 4193:R. Hinden, B. Haberman, “Unique Local IPv6 Unicast Addresses”, 2005年10月†13 RFC 3879:C. Huitema, B. Carpenter, “Deprecating Site Local Addresses”, 2004年9月

Page 90: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

76 第4章 IPv6アドレス体系

執筆時点でULAとして利用される IPv6アドレスは、事実上はfd00::/8のみとなります。

IPv6アドレスにおけるサブネットプレフィックス(図4.1参照)にランダムな値が含まれる

ことも、ULAの大きな特徴です。図4.7で「グローバル ID」となっている40ビットが、疑似

的なランダム値となります。このフィールドでは、既知の数値などを利用して一意性を確保す

ることは禁止されており、RFC 4086†14に基づくランダムな値を生成して利用することが求め

られています。この部分がランダムであることから、ULAに関連する経路、DNS、あるいはパ

ケットが外に漏れたとしても、他のアドレスとの競合が発生しにくいとされています。

ランダムな40ビットのグローバル IDの後ろには、16ビットのサブネット IDフィールドが

続きます。したがって、IPv6アドレスとしてのインターフェース識別子は64ビットとなって

います。

4.9.1 グローバル IDのランダム値の生成例RFC 4193では、ULAのグローバル IDフィールドの値を、RFC 4086に準拠した疑似ランダ

ムな方式で生成することを求めています。そのうえで、疑似ランダムなグローバル IDの生成

アルゴリズムの例が次のように紹介されています。

1. 現在時刻を64ビットのNTPフォーマットで取得

2. EUI-64識別子をシステムから取得。EUI-64識別子が存在しないシステムであれば、48

ビットのMACアドレスからEUI-64を生成。もし、いずれも作成できない場合には、シ

ステムと関連があり適度な一意性がある識別子を利用する

3. 鍵を生成するために現在時刻とシステムに関連する一意性のある識別子を結合する

4. 鍵に対して、結果が160ビットとなるSHA-1ダイジェストを計算する

5. 160ビットのうちの下位40ビットをグローバル IDとして利用する

6. プレフィックス(fc00::/7)、Lビット(1)、上記で用意したグローバル IDの40ビッ

トをつなぎ合わせ、ULAの IPv6アドレスプレフィックスとする

4.10 IPv4­Mapped IPv6アドレスIPv6アプリケーションが、IPv4で容易に通信するためのアドレスとして、‌IPv4-Mapped

IPv6アドレス(IPv4射影 IPv6 Address)があります。IPv4との互換性のために標準化されて

いる IPv4-Mapped IPv6アドレスは、IPv4アドレスを表現する手段としても利用されます。た

とえば、デフォルト IPv6アドレス選択のためのポリシーテーブルでは、IPv4-Mapped IPv6ア

ドレスによって IPv4を表現します(14.1.3項参照)。

IPv4-Mapped IPv6アドレスは、IPv6パケットの送信元や宛先アドレスとして利用するため

のアドレスではないので、意図せず使ってしまわないように注意が必要です。

†14 RFC 4086:D. Eastlake 3rd, J. Schiller, S. Crocker, “Randomness Requirements for Security”, 2005年6月

Page 91: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.10 IPv4-Mapped IPv6アドレス 77

NOTE

紛らわしいかもしれませんが、RFC 4659†15やRFC 4798†16では、BGP-MPLS利用時に、BGP Next Hopフィールドとして IPv4-Mapped IPv6アドレスが活用される場合もあると紹介されています。また、現在は廃止されているものの、RFC 2765†17にて規定されていたSIIT(Stateless

IP/ICMP Translation Algorithm)の仕様では、IPv4-Mapped IPv6アドレスを設定したIPv6パケットの送受信が前提とされていました。

IPv4-Mapped IPv6アドレスでは、IPv6アドレスの上位80ビットをすべて0、それに続く

16ビットを1、最後の32ビットを IPv4アドレスとします。したがって、IPv6アドレスとして

は::ffff:0:0/96というフォーマットをしています。図4.8に IPv4-Mapped IPv6アドレスの

フォーマットを示します。

0 63

0 →64 80 96 127

0 FFFF IPv4アドレス→

▲ 図4.8 IPv4-Mapped IPv6アドレス

IPv4-Mapped IPv6アドレスは、::ffff:[IPv4アドレス]のように表記されることもありま

す。たとえば、192.0.2.201という IPv4アドレスの相手と通信するときに使う IPv4-Mapped

IPv6アドレスであれば、::ffff:192.0.2.201のように表現されます。

4.10.1 ノード内での IPv4­Mapped IPv6アドレスの扱いIPv6のための基本的なソケット拡張APIを記したRFC 3493†18と、アプリケーションが IPv6

対応するときに考慮するべき内容をまとめたRFC 4038†19では、ノード内部での IPv4-Mapped

IPv6アドレスの扱いが説明されています。IPv6アプリケーションでは、IPv4-Mapped IPv6ア

ドレスを利用することで、図4.9のように IPv4からと IPv6からの両方の通信を単一のソケッ

トで扱えるようになります。

†15 RFC 4659:J. De Clercq, D. Ooms, M. Carugi, F. Le Faucheur, “BGP-MPLS IP Virtual Private Network (VPN)

Extension for IPv6 VPN”, 2006年9月†16 RFC 4798:J. De Clercq, D. Ooms, S. Prevost, F. Le Faucheur, “Connecting IPv6 Islands over IPv4 MPLS

Using IPv6 Provider Edge Routers (6PE)”, 2007年2月†17 RFC 2765:E. Nordmark, “Stateless IP/ICMP Translation Algorithm (SIIT)”, 2000年2月†18 RFC 3493:R. Gilligan, S. Thomson, J. Bound, J. McCann, W. Stevens, “Basic Socket Interface Extensions

for IPv6”, 2003年2月†19 RFC 4038:M-K. Shin, Y-G. Hong, J. Hagino, P. Savola, E. M. Castro, “Application Aspects of IPv6 Transi-

tion”, 2005年3月

Page 92: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

78 第4章 IPv6アドレス体系

IPv4ヘッダデータ IPv6ヘッダ データ

IPv4

TCP、UDPなど

IPv6対応アプリケーション(IPv4対応なし)

IPv6

IPv4-Mapped IPv6アドレス

IPv4アドレス IPv6アドレス

IPv6アドレス

▲ 図4.9 単一のソケットで IPv4-Mapped IPv6アドレスを利用する場合

IPv6アプリケーションがパケットを送信する場合には、IPv4-Mapped IPv6アドレスを指

定することで、IPv4アドレス宛に送信できます。逆に、IPv4から受け取るパケットの送信元

や宛先は、IPv4-Mapped IPv6アドレスによって表現できます。アプリケーション内部で利

用する IPアドレスを IPv6のみに限定する一方で、機器から送出されるパケットについては、

IPv4-Mapped IPv6アドレスを使うことで IPv4パケットとして送出できるというわけです。

IPv6ソケットで IPv4パケットも受け取れるので、IPv6のみの通信を行っているつもりで

も、実は IPv4での通信を行っている場合もあります。たとえばRFC 3493では、IPv4-Mapped

IPv6アドレスを、IPv6ソケットの初期値として利用することが許可されています。明示的に指

定しない限りは、IPv6だけで通信をしているつもりが IPv4での通信も受け付けるようになっ

ている場合があるのです。しかも、RFC 3493の5.3節によれば、IPV6_ONLYのソケットオプ

ションを利用して明示的に IPv6のみを受け取れるようにしたとしても、IPv6パケットとして

受け取る IPv4-Mapped IPv6アドレスでの通信は受け付けてしまいます。そのため、IPv6対応

のアプリケーションでは、IPv4-Mapped IPv6アドレスの扱いに注意が必要です。

4.10.2 IPv4­Mapped IPv6アドレスが抱えるセキュリティ上の懸念IPv4-Mapped IPv6アドレスが抱えるセキュリティ上の懸念が、RFC 4942†20の2.2節で紹介

されています。RFC 4942では、当初はノード内での利用のみが想定されていた IPv4-Mapped

IPv6アドレスがRFC 2765のSIITによってネットワークに送出されるパケットで利用される状

況になったことにより、以下の3種類の攻撃が可能になったとしています。

r ::ffff:127.0.0.1という送信元 IPv6アドレスのパケットを受信させることで、アプリ

ケーションに対してローカルホストからのパケットであると誤認させ、アクセス制限を回

避できる可能性があるr IPv4-Mapped IPv6アドレスを宛先とする IPv6パケットを送信することで、IPv4でのパ

†20 RFC 4942:E. Davies, S. Krishnan, P. Savola, “IPv6 Transition/Co-existence Security Considerations”, 2007

年9月

Page 93: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.11 例示用 IPv6アドレス 79

ケットフィルタルールを回避できる可能性があるr IPv4-Mapped IPv6アドレスを IPv4アドレスへと変換したうえで、IPv4パケットを生成す

るようなプロトコルを踏み台とした攻撃が考えられる

このようなセキュリティ上の問題があることから、IPv4-Mapped IPv6アドレスが利用でき

ない環境もあります。たとえば、OpenBSDにはセキュリティ上の理由で IPv4-Mapped IPv6ア

ドレスが実装されていません。

4.11 例示用IPv6アドレス本書では、IPv4アドレス、IPv6アドレス、AS番号など、いくつかの「値」を例示していま

すが、そうした値はできるだけ実在しないものとしています。インターネット上の通信で利用

できる「値」は限られた範囲内のものなので、下手な「値」を使ってしまうと、実際に使われ

ている場合に問題が発生する可能性があるからです。

例示のための値が、実在する値と競合するのを避けるために、サンプルとして使う値には一

定の作法があります。特殊な用途の IPアドレスについてまとめたRFC 6890によると、ドキュ

メンテーションで使うために予約されている IPv6アドレスの値は、RFC 3849†21で下記のよう

に定められています。

r 2001:db8::/32なお、RFC 5737†22で定義されている例示用 IPv4アドレスは、以下の3ブロックです。

r 192.0.2.0/24: TEST-NET-1r 198.51.100.0/24: TEST-NET-2r 203.0.113.0/24: TEST-NET-3

RFC 7042†23では、例示用MACアドレスが以下の範囲として定義されています。

r ユニキャスト: 00-00-5E-00-53-00~ 00-00-5E-00-53-FFr マルチキャスト: 01-00-5E-90-10-00~ 01-00-5E-90-10-FF

本書でも、これらのRFCに従ったものを例示では主に利用しています†24。皆さんも何らか

の IPアドレスなどを例示するときは、これらの値を利用することをお勧めします。

例示用の値に関するRFCを下記にまとめます。

†21 RFC 3849:G. Huston, A. Lord, P. Smith, “IPv6 Address Prefix Reserved for Documentation”, 2004年7月†22 RFC 5737:J. Arkko, M. Cotton, L. Vegoda, “IPv4 Address Blocks Reserved for Documentation”, 2010年

1月†23 RFC 7042:D. Eastlake 3rd, J. Abley, “IANA Considerations and IETF Protocol and Documentation Usage

for IEEE 802 Parameters”, 2013年10月†24 ただし、BGPの解説を行うには例示用 IPv4アドレスブロックが/24と小さすぎる場合があったり、例示用AS番

号が極度にわかりにくいという理由から、BGPの解説を行うときにはRFCに従わない場合もあります。また、MACアドレスが複数必要となる場合にも、IANAに割り当てられたEUI-48の番号以外を使うこともあります。また、141ページの「NOTE」で触れているように、IANAに返却されたアドレスを例示用に利用する場合もあります。

Page 94: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

80 第4章 IPv6アドレス体系

r RFC 2606†25 : Reserved Top Level DNS Namesr RFC 3849 : IPv6 Address Prefix Reserved for Documentationr RFC 5398†26 : Autonomous System (AS) Number Reservation for Documentation User RFC 5737 : IPv4 Address Blocks Reserved for Documentationr RFC 6761†27 : Special-Use Domain Namesr RFC 6890 : Special-Purpose IP Address Registries†28r RFC 7042 : IANA Considerations and IETF Protocol and Documentation Usage for

IEEE 802 Parameters

4.12 ユーザへのIPv6アドレス割り当てIPv4では、ISPからユーザに割り当てられる IPv4アドレスが1つという手法が一般的でし

た。IPv6では、ユーザへの IPv6アドレス割り当てとして、IPアドレスではなくネットワーク

プレフィックスを利用するのが一般的です。これは、IPv6アドレス空間が IPv4アドレス空間

と比べて広大であるためです。

ISPから、どれぐらいの大きさの IPv6ネットワークプレフィックスをユーザに割り当てるの

かに関しては、さまざまな議論があります。

IAB(Internet Architecture Board)によって2001年に定義されたRFC 3177†29では、一般

的には/48、必要なサブネットが1つだけであるとわかっている場合は/64、接続デバイスが1

つだけであると明確にわかっている場合には/128を割り当てるとありました。

しかし、このRFC 3177は、2011年に定義されたRFC 6177†30によって上書きされていま

す。そのため、現在ではユーザへの一般的な割り当てサイズという概念はなくなりました。

4.12.1 IPv6でのNATに関する議論IPv4では、ISPから各家庭に割り当てられる IPv4アドレスが1つだけなので、NATを利用し

て複数機器がインターネットに接続できるようにする必要がありました。IPv6で単一の IPア

ドレスではなくネットワークプレフィックスが割り当てされるようになれば、そうした当初の

NATの必要性は消えます。たとえば、RFC 5902†31では、IPv6 NATに対する IABの考え方が

示されています。そこでは、サイトマルチホーミングなどにおける IPv6 NATの有用性を認め

つつも、インターネットにおけるEnd-to-Endでの接続性を維持するために IPv6 NATを推奨し

ないと明記されています。一方、IPv6でのマルチホーム環境やマルチプレフィックス環境の運

†25 RFC 2606:D. Eastlake 3rd, A. Panitz, “Reserved Top Level DNS Names”, 1999年6月†26 RFC 5398:G. Huston, “Autonomous System (AS) Number Reservation for Documentation Use”, 2008年

12月†27 RFC 6761:S. Cheshire, M. Krochmal, “Special-Use Domain Names”, 2013年2月†28 RFC 5156(M. Blanchet, “Special-Use IPv6 Addresses”, 2008年4月)とRFC 5735(M. Cotton, L. Vegoda,

“Special Use IPv4 Addresses”, 2010年1月)は、RFC 6890によって廃止されています。†29 RFC 3177:IAB, IESG, “IAB/IESG Recommendations on IPv6 Address Allocations to Sites”, 2001年9月†30 RFC 6177:T. Narten, G. Huston, L. Roberts, “IPv6 Address Assignment to End Sites”, 2011年3月†31 RFC 5902:D. Thaler, L. Zhang, G. Lebovitz, “IAB Thoughts on IPv6 Network Address Translation”, 2010

年7月

Page 95: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

4.12 ユーザへの IPv6アドレス割り当て 81

用方法などをまとめたRFC 7157†32では、IPv6におけるNATを中間期の解決策となりうると

しています(14.2節参照)。

現在のNATには、外部からの侵入難易度が若干高くなるというセキュリティ機器としての

側面もあります。セキュリティを確保するために開発されたのではないNATにより、外部か

らの接続の難易度が高くなるのは、接続性を確立する前に外部から内部へのパケットが転送で

きない仕組みに起因します。そこで、RFC 4864†33では、NATを利用せずにNATと同等のセ

キュリティレベルを確保する方法として、LNP(Local Network Protection)と呼ばれるもの

が紹介されています。

IPv6においてNATがまったく存在しないわけではありません。IPv6環境同士を結ぶNAT

は、NAT66と呼ばれます。実験的な位置づけのRFCではありますが、ステートレスにNAT66

を行うNPTv6(IPv6-to-IPv6 Network Prefix Translation)と呼ばれる仕組みがRFC 6296†34と

して発行されています。日本国内でも、NTTのフレッツ光ネクストにおいて、IPv6インター

ネットへの接続性のために IPv6 PPPoE(A.3節参照)でNAT66が利用されています。

IPv6においてもNATは必要であるという主張がある一方で、IETFでは IPv6におけるNAT

の利用に反対する声が大きいのが現状です。実際、NTTフレッツ網におけるNAT66を嫌う意

見を IETF界隈でも見かけることもあります。IPv6でNATが必要かどうかに関してはいまでも

議論が続いている状態です。

IPサービスにおける前提は時代によって変わる

IABによる RFC 6250†35では、IPサービスにおける前提が時間とともにどのように変化したのかを述べるために、「よくある勘違い」がいろいろ紹介されています。InformationalなRFCであり、読み物のような扱いではありますが、通信の対称性を期待してはならない話や、エラーメッセージが必ずしも受け取れない場合もあること、アドレスが時間とともに変化することがあること、ブロードキャストやマルチキャストがリンク内で使えない場合があることなど、NATについて考えるときにも考慮が必要なさまざまな注意点が記載されています。

4.12.2 プライバシーの問題IPv4では IPアドレスの数が限られていたので、複数ユーザ間で IPv4アドレスを使い回す運

用が行われていました。ISPを利用してインターネットに接続するユーザにとっては、接続し

直すたびに IPv4アドレスが変化する環境が一般的だったといえます。

IPv6では、ユーザが ISPへの接続を切断してから再接続しても、前の接続時と同じ IPv6ネッ

トワークプレフィックスが割り当てられる場合が多くありえます。毎回同じ IPv6ネットワー

†32 RFC 7157:O. Troan, D. Miles, S. Matsushima, T. Okimoto, D. Wing, “IPv6 Multihoming without Network

Address Translation”, 2014年3月†33 RFC 4864:G. Van de Velde, T. Hain, R. Droms, B. Carpenter, E. Klein, “Local Network Protection for IPv6”,

2007年5月†34 RFC 6296:M. Wasserman, F. Baker, “IPv6-to-IPv6 Network Prefix Translation”, 2011年6月†35 RFC 6250:D. Thaler, “Evolution of the IP Model”, 2011年5月

Page 96: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

82 第4章 IPv6アドレス体系

クプレフィックスが利用されることで、事実上匿名性が薄れ、プライバシー情報を収集されや

すくなる可能性があります。

IPv6ネットワークプレフィックスが毎回変化したとしても、下位64ビットの部分が同一に

なることで、個人を特定可能になる場合もあるでしょう。特に IPv6アドレスについては、後述

する IPv6アドレスの自動設定(SLAAC)を利用することから、IPアドレス自身が個人を特定

し得る識別子となります。SLAACでは、ネットワークインターフェースカードに設定された

世界で一意の IEEE識別子から IPv6アドレスの下位64ビット部分を生成するので、ネットワー

クを移動するなどしてネットワークのプレフィックスが変わっても、ユーザの識別および追跡

が可能となってしまうからです。IPアドレスはインターネットにおける通信の根本であり、通

信中に隠すことが難しいので、IPアドレスが個人を特定し得る識別子となることにはプライバ

シー情報漏洩の危険が伴います。

IPアドレスそのものを利用した追跡は、IPv6でSLAACを利用することにより発生する問題

です†36。そのため、SLAACを使わずにDHCPv6を利用すれば、この問題によるプライバシー

情報漏洩は回避可能です。また、SLAACを利用しつつプライバシーを確保する手法として、

SLAACによる IPv6アドレス自動生成に対するプライバシー拡張がRFC 4941†37で定義されて

います†38。

RFC 4941では、通常のSLAACを拡張した一時的な IPv6アドレス(匿名 IPv6アドレス)が

定義されています。これは、疑似乱数値を持ち、時間とともに変化する IPv6アドレスです。一

時的な IPv6アドレスの値は定期的に変更することが推奨されていて、上位層のアプリケーショ

ンなどが利用していない古い一時的な IPv6アドレスは新しい一時的な IPv6アドレス生成後に

削除することも可能です。

RFC 4941では、一時的な IPv6アドレスにおける疑似ランダム値の生成方法として、履歴情

報を保存可能な記憶領域が存在している場合とそうでない場合の2通りの手法が解説されてい

ます。どちらの手法でも、ハッシュ関数としてMD5を利用します。

†36 HTTPメッセージを解析するなどの手法による追跡は IPv4でも可能です。†37 RFC 4941:T. Narten, R. Draves, S. Krishnan, “Privacy Extensions for Stateless Address Autoconfiguration

in IPv6”, 2007年9月†38 RFC 4941は、RFC 3041(T. Narten, R. Draves, “Privacy Extensions for Stateless Address Autoconfiguration

in IPv6”, 2001年1月)が改訂されたものです。

Page 97: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第5章

IPv6パケットの構成

さまざまなルータが相互接続をするためには、IPv6パケットがどのようなフォーマットで送

受信されるのかについての取り決めが重要になります。相互接続を実現するために、IPv6パ

ケットの先頭に付いているヘッダのフォーマットに関して世界中のルータの共通認識が必要な

のです。IPv6の基本仕様を示しているRFC 8200†1でも、IPv6ヘッダのフォーマットが主要な

内容になっています。IPv6の挙動を知るには、IPv6ヘッダのフォーマットと、各フィールドの

意味を知る必要があります。

5.1 IPv6ヘッダの各フィールドでは、実際の IPv6ヘッダフォーマットを見てみましょう。IPv6ヘッダのフォーマットはRFC

8200で図5.1のように定義されています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Version Traffic Class Flow Label

Payload Length Next Header Hop Limit

Source Address

Destination Address

▲ 図5.1 IPv6ヘッダフォーマット

†1 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月

Page 98: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

84 第5章 IPv6パケットの構成

IPv6ヘッダの各フィールドは以下のような意味を持ちます。

rVersion(4ビット)

インターネットプロトコルのバージョン番号を示しています。IPv6は6です。rTraffic Class(8ビット)

上位 6ビットがDiffservで利用するDSCP(Differentiated Services Code Point)を格

納するDS Fieldで利用され(RFC 2474†2)、下位 2ビットが ECN(Explicit Congestion

Notification)で利用されます(RFC 3168†3)。なお、RFC 2474には「IPv4の ToSおよ

び IPv6のTraffic Classという名称をDS fieldへと変更する」とありますが、これはRFC

3260†4で「DS fieldはTraffic Classの上位6ビットとする」と訂正されています。r Flow Label(20ビット)

通信のフローを識別するのに使うフローラベルを設定するフィールドです。フローラベルに

ついては5.1.3項を参照してください。r Payload Length(16ビット)

IPv6ヘッダに続くペイロード長を示します。IPv6ヘッダそのものは含みませんが、IPv6

ヘッダに続く IPv6拡張ヘッダが存在する場合には IPv6拡張ヘッダを含む長さになります。rNext Header(8ビット)

IPv6ヘッダの直後に続くヘッダを示します。このフィールドで利用されるプロトコル番号

は IANAによって割り当てられており、IPv4のProtocol Typeフィールドで利用される値と

同一です。たとえば、次がTCPであれば6、UDPであれば17、ICMPv6であれば58となり

ます(RFC 5237†5)。

IPv6拡張ヘッダが IPv6ヘッダの直後に続く場合もあります。IPv6拡張ヘッダに関しては

5.3節で説明します。rHop Limit(8ビット)

IPv6パケットが転送される上限を示します。IPv6パケットが転送されるたびに1減算され、

0になると IPv6パケットが破棄されます。r Source Address(128ビット)

IPv6パケットが生成された送信元を示します。rDestination Address(128ビット)

IPv6パケットの宛先を示します。

IPv6パケットのヘッダは、最初の4ビットが6を示す0110になります。IPv4では、この部

分が4を示す0100でした。

†2 RFC 2474:K. Nichols, S. Blake, F. Baker, D. Black, “Definition of the Differentiated Services Field (DS

Field) in the IPv4 and IPv6 Headers”, 1998年12月†3 RFC 3168:K. Ramakrishnan, S. Floyd, D. Black, “The Addition of Explicit Congestion Notification (ECN)

to IP”, 2001年9月†4 RFC 3260:D. Grossman, “New Terminology and Clarifications for Diffserv”, 2002年4月†5 RFC 5237:J. Arkko, S. Bradner, “IANA Allocation Guidelines for the Protocol Field”, 2008年2月

Page 99: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.1 IPv6ヘッダの各フィールド 85

パケットを受け取ったルータが処理を行う際に、そのパケットの長さがどれだけあるのか

を知ることができるのが、Payload Lengthフィールドです。ペイロードというのは、ヘッダ

に続く部分の呼び方です(1.1.1項参照)。IPv6パケットのヘッダ部分に続くペイロードの長

さを示しているのが、その名のとおり、Payload Lengthなのです。Payload Lengthフィール

ドの値には IPv6ヘッダの長さは含まれません。IPv6ヘッダは40オクテットの固定長なので、

Payload Lengthフィールドの値に IPv6ヘッダの長さである40を足した値が、IPv6パケット全

体の長さになります。

Hop Limitフィールドは、IPv6パケットにとっての安全装置のようなものです。Hop Limit

フィールドの初期値は、IPv6パケットを送信する機器が設定しますが、ルータによって IPv6パ

ケットが転送されるたびに、Hop Limitの値が1ずつ減らされます。Hop Limitフィールドの

値が0になった IPv6パケットは破棄され、それによって IPv6パケットが永遠にインターネッ

ト上を転送され続けながら彷徨い続けることが回避されます。Hop Limitフィールドのような

仕組みが存在しない場合、たとえば、経路上にループが発生して、同じ経路上をぐるぐると転

送され続けるパケットが存在したとしても、各ルータは単純に受け取ったパケットを転送し続

けるだけなので、パケットが永遠に破棄されない状態ができてしまうおそれがあります。Hop

Limitフィールドは、そのような状況が発生しないようにするための仕組みです。

Source AddressフィールドとDestination Addressフィールドには、IPv6パケットの送信

元と宛先を記されています。IPv6アドレスのためのフィールドなので、それぞれのサイズは

128ビットです。Source AddressフィールドとDestination Addressフィールドの長さを足

すと32オクテットになります。サイズだけに着目すると、IPv6ヘッダの大部分は、IPv6アド

レスを示すフィールドであるともいえます。

Payload Lengthフィールドと IPv6 Jumbogram

Payload Lengthフィールドの長さが16ビットなので、IPv6におけるペイロード長の最大値は、16ビットで示せる最大の長さの65,535オクテットになります。しかし、IPv6には Jumbogramという仕組みがあり、5.3節で後述する IPv6拡張ヘッダのHop-by-Hopオプションを利用することで、65,536オクテット以上のペイロードを持つ IPパケットも利用可能です。IPv6 JumbogramはRFC 2675†6で定義されています。

IPv6 Jumbogramを利用するには、ノードが接続しているリンクで、一度に巨大なネットワーク層のデータを転送できる必要があります。具体的には、リンクで送信できるネットワーク層のデータの最大値のことをMTU(Maximum Transmission Unit)と呼ぶので、MTUが65,575オクテットよりも大きなリンクが必要です。インターネットでリンク層として採用されていることが多いイーサネットのMTUが通常は1500オクテットであることを考えると、IPv6 Jumbogramが広範なインターネットで使われることはあまりなさそうです。さらに、UDPヘッダには16ビット長の Lengthフィールドがあることや、TCPの

MSSオプションと緊急フィールドが16ビットに制限されていることを考えると、IPv6

Jumbogramを実際のネットワークで利用可能にするためにはTCPやUDPへの変更も必要です。

Page 100: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

86 第5章 IPv6パケットの構成

5.1.1 イーサネットのEthernet Typeフィールドイーサネットにおける IPv6パケットの扱いはRFC 2464†7で規定されています。IPv6パケッ

トは、イーサネット上では図5.2のようにカプセル化されます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Destination Ethernet Address

Source Ethernet Address

1 0 0 0 0 1 1 0 1 1 0 1 1 1 0 1

IPv6ヘッダとペイロードhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図5.2 IPv6パケットを含むイーサネットフレーム

1000011011011101の部分は、イーサネットフレームの Ethernet Typeフィールドで

す。IPv6パケットを運ぶイーサネットフレームの場合、Ethernet Typeは0x86ddなので、

1000011011011101となります。

5.1.2 IPv4ヘッダとの違いIPv6ヘッダのフォーマットは、IPv4ヘッダのフォーマットから大幅に変更されています。ど

んな点が変更されているかを知ることで、IPv6の設計思想の一部を垣間見ることができます。

比較のために、図5.3に IPv4ヘッダのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Version IHL Type of Service Total Length

Identification Flags Fragment Offset

Time to Live Protocol Header Checksum

Source Address

Destination Address

Options(可変長。32ビットの整数倍でない場合は末尾にパディング)

▲ 図5.3 IPv4ヘッダフォーマット

†6 RFC 2675:D. Borman, S. Deering, R. Hinden, “IPv6 Jumbograms”, 1999年8月†7 RFC 2464:M. Crawford, “Transmission of IPv6 Packets over Ethernet Networks”, 1998年12月

Page 101: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.1 IPv6ヘッダの各フィールド 87

まずは変更されていない点を把握しておきましょう。ヘッダの各フィールドのうち、IPv4か

らまったく変更されていないのは、インターネットプロトコルのバージョン番号を示す4ビッ

トのVersionフィールドのみです。フィールドの値としては、IPv4では4、IPv6では6という

違いはありますが、フィールド名称および用途は変更されていません。また、TTLフィールド

がHop Limitフィールドになったり、ToSフィールドがTraffic Classフィールドになったりし

ているのは、フィールドの名称は変更されたものの事実上は変更されていない部分だといえる

でしょう。

IPv4ヘッダから IPv6ヘッダへの変更で特に大きいのは、ヘッダの長さが固定長になった

ことです。IPv4には IPヘッダオプションという仕組みがあり、IPv4ヘッダは可変長でした。

これに対し、IPv6ヘッダは40オクテットの固定長です。IPv6ヘッダが固定長になったため、

IPv4のように IPヘッダそのものの長さを表現する必要がなくなったことから、IPv6では IHL

(Internet Header Length)フィールドは削除されました。

IPヘッダオプションを含まない IPv4ヘッダは、IPv4アドレス以外の部分が12オクテットで

した。一方、IPv6ヘッダでは、IPv6アドレス以外の部分が8オクテットです。IPv6では、IPア

ドレスを含まないヘッダ領域は削減されています。

Next Headerフィールドは、IPv4ヘッダにおけるProtocol Typeフィールドの名称が変更さ

れただけのように思われがちですが、実際には役割も大きく変わっています。たとえば、IPv6

でのフラグメントでもNext Headerフィールドが利用されています。また、IPv4における IP

ヘッダオプションの役割を担う IPv6拡張ヘッダでもNext Headerを利用します。Next Header

フィールドは、IPv4のProtocol Typeフィールドが担っていた役割だけではなく、それに加え

て、さまざまなものを扱うためのフィールドに変わったといえます。

Next Headerフィールドは、文字どおり、「次のヘッダ」を表します。たとえば、IPv6ヘッ

ダの直後にTCPヘッダが続く場合、Next HeaderフィールドはTCPを示す6になります。IPv6

ヘッダの直後にくるのは、IPv6パケットのペイロードに含まれるTCPヘッダであり、TCPヘッ

ダも「ヘッダ」なので、「Next Header」でそれを示します。IPv6拡張ヘッダが IPv6ヘッダの

後に続く場合には、IPv6拡張ヘッダを示す値がNext Headerフィールドに入ります。たとえ

ば、IPv6ヘッダの後にルーティングヘッダという IPv6拡張ヘッダが続く場合、Next Header

フィールドの値は43になります。

IPv4ヘッダにあったHeader Checksumフィールドも IPv6ヘッダでは削除されています。

これは、IPv4の開発当時と比べて回線の品質が向上したことに加え、TCPやUDPなどの上位

層でチェックサムによる誤り検出を行うべきであるという考えが採用されたからです。上位層

でのチェックサム計算については、5.2節で説明します。また、IPv4ではパケットの転送ごと

にTTLを減らしてチェックサムを再計算する仕組みだったので、そのためのオーバーヘッドが

ありましたが、IPv6ではその必要がなくなり、そのぶんだけ転送処理の際にかかる計算を減ら

せるようになっています。

さらに、IPv6では経路途中でのフラグメンテーションが廃止され、送信元ノードのみがフラ

グメント化を行うようになりました。それに伴い、IPv4ヘッダに存在していた Identification、

Flags、Fragment Offsetの各フィールドも削除されています。フラグメンテーションに関連す

Page 102: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

88 第5章 IPv6パケットの構成

るフィールドが IPv6ヘッダにはありませんが、IPv6でフラグメンテーションがなくなったわ

けではありません。IPv6でフラグメンテーションが行われるとき、フラグメンテーションに関

する情報は IPv6拡張ヘッダに格納されます。

パケットの長さを示すフィールドの性格も、IPv4と IPv6とでは少し異なっています。IPv4

ヘッダでTotal Lengthフィールドが果たしていた役割は、IPv6ヘッダでは Payload Length

フィールドが果たしていますが、IPv4のTotal Lengthフィールドが IPヘッダを含む長さで

あったのに対し、IPv6のPayload Lengthフィールドは IPv6ヘッダを含まない長さとなってい

ます。

TTLからHop Limitへ

TTLからHop Limitへのフィールドの名称変更は、一見単なる名称変更のようにも見えますが、実質は実状に沿わない定義を正しくし直した結果です。IPv4が定義されたRFC 791は1981年に発行されています。そこでは、TTLフィールドに指定される単位を「秒」であるとしています。TTLは、Time To Liveという名前のとおり、そのパケットが生存し続けられる「時間」を秒単位で示します。しかし、RFC 791には、パケットを転送するたびに最低でも1はTTLの値を減算することを求めています。そのため、実際は秒数ではなく、ホップ数としての実装になっていました。そういった実態もあり、IPv4のTTLフィールドは、IPv6ではHop Limitフィールドとして定義され直したのです。

5.1.3 フローラベルIPv6ヘッダにはFlow Labelというフィールドがあります。これは、それまで送信元 IPアド

レスと宛先 IPアドレス、送信元ポート番号と宛先ポート番号、それにトランスポートプロト

コルの種類という5つの情報をもとに識別されていた通信のフローを明示的に識別するためのラベルです。従来の5つの情報では暗号化された通信においてフローを識別できないことがあ

り、それに代わって利用できる識別子として、このフィールドでフローラベルを用いるようなことが想定されていました†8。

IPv6でフローラベルをどのように利用するかについては、IPv6の最初のRFCが発行される

前の仕様策定の頃から議論が続いていました。RFC 2460†9では、フローラベルを実験的なも

のであるとしつつ、「フローラベルによってフロー識別を可能とし、IPv6ルータによる特別

な処理を実現可能にする」ものであるとしています。しかし、RFC 2460を上書きして廃止

するRFC 8200†10では、「複数のパケットを単一のフローとして識別するための20ビットの

Flow Labelフィールド」というシンプルな説明になり、フローラベルそのものに関してはRFC

6437†11を参照する形に変わっています。

†8 ただし、IPsecなどで暗号化された通信に対してフローラベルを使ってしまうと、攻撃者が通信内容を解析するためのヒントを与えてしまう可能性もあります。

†9 RFC 2460:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1998年12月†10 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月†11 RFC 6437:S. Amante, B. Carpenter, S. Jiang, J. Rajahalme, “IPv6 Flow Label Specification”, 2011年11月

Page 103: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.2 上位層でのチェックサム計算に使う仮想ヘッダ 89

フローラベルの仕様そのものも変化しています。IPv6フローラベルの仕様は、2004年に

RFC 3697†12として発行されましたが、これは2011年に先述のRFC 6437によって廃止され

ています。RFC 3697とRFC 6437の違いとしては、たとえば、フローラベルの値を設定でき

るノードの変化が挙げられます。RFC 3697では、フローラベルの値を設定できるのは送信元

ノードだけであり、途中経路においてフローラベルの値を変更することは禁止されていまし

た。しかし、それではフローラベルをルーティングなどと組み合わせて使うことが難しくなっ

てしまうので、その要件が緩和され、どのノードであってもフローラベルの値を変更できるよ

うになりました。その他、RFC 3697とRFC 6437の違いについてはRFC 6436†13でまとめら

れています。

IPv6の仕様が議論されていた1990年代と今では、ネットワークをめぐる環境が大きく変

わってしまっています。現在では、TCPやUDPのポート番号だけではなく、それらが運ぶペイ

ロードの中身まで解析して制御を行うDPI(Deep Packet Inspection)が珍しいものではなく

なりました。もしフローラベルを有効活用できれば、そうした IPv6よりも上位にある層の情

報を調べることなくさまざまな処理が可能になり、途中ノードにおける処理の負荷を大幅に軽

減することが期待されます。

しかし、実際の現場に対する導入が現実的かどうかはまったく別の話です。今後、IPv6にお

いてフローラベルおよびFlow Labelフィールドがどのように利用されていくのか、本書執筆

時点ではよくわかっていません。IPv6フローラベルの用途については、RFC 6294†14にもこれ

までの提案などがまとめられているので、参考にしてください。

5.2 上位層でのチェックサム計算に使う仮想ヘッダチェックサム(checksum)は、誤り検出符号の一種です。インターネットでは、パケットの

伝送時にエラーが発生した場合にそれを検出することを目的として、さまざまな場面でチェッ

クサムが利用されています。

インターネットで使われるチェックサムは、ヘッダなどのチェックサム用フィールドに初期

設定(0をセットするなど)を施した状態で、チェックサムとして計算する範囲を16ビット単

位で加算し、その加算した結果を16ビットにしたうえで、その1の補数を求めるという方法で

計算します。チェックサム計算としては簡易な方式なので、伝送時のエラーを検出できないこ

ともありえます。この計算方法については、RFC 1071†15で具体的に解説されています。

前述したように IPv6自体のヘッダにはチェックサム用のフィールドがありませんが、上位

層であるTCPやUDPのヘッダにはチェックサム用フィールドがあります。これらの上位層プ

ロトコルの基本仕様を示したRFC 793†16およびRFC 768†17では、IPヘッダにしか含まれない

†12 RFC 3697:J. Rajahalme, A. Conta, B. Carpenter, S. Deering, “IPv6 Flow Label Specification”, 2004年3月†13 RFC 6436:S. Amante, B. Carpenter, S. Jiang, “Rationale for Update to the IPv6 Flow Label Specification”,

2011年11月†14 RFC 6294:Q. Hu, B. Carpenter, “Survey of Proposed Use Cases for the IPv6 Flow Label”, 2011年6月†15 RFC 1071:R.T. Braden, D.A. Borman, C. Partridge, “Computing the Internet checksum”, 1988年9月†16 RFC 793:J. Postel, “Transmission Control Protocol”, 1981年9月†17 RFC 768:J. Postel, “User Datagram Protocol”, 1980年8月

Page 104: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

90 第5章 IPv6パケットの構成

送信元アドレス情報や宛先アドレス情報で発生したエラーを検出するため、TCPおよびUDP

における16ビットのチェックサム計算において図5.4のような疑似ヘッダ(pseudo header)

を含めることとされています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Source Address

Destination Address

0 0 0 0 0 0 0 0 プロトコル番号(TCP:6、UDP:17) TCP/UDPパケット(ヘッダ+データ)の長さ

▲ 図5.4 RFC 768およびRFC 793における疑似ヘッダフォーマット

図5.4からわかるように、TCPとUDPの仕様で定義されている疑似データは IPアドレスが

32ビットであることを前提としています。そのため、IPv6でTCPやUDPを使う場合には、こ

の方法で疑似ヘッダを使うことができません。そこで、RFC 8200では、IPv6にとって上位層

にあたるTCPやUDPなどのプロトコルでのチェックサム計算で使うための疑似 IPv6ヘッダが定義されています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Source Address

Destination Address

Upper-Layer Packet Length

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Next Header

▲ 図5.5 疑似 IPv6ヘッダフォーマット

IPv6では、ICMPv6でもこの疑似ヘッダが使われます。IPv4の ICMPでは、ICMPヘッダのみ

でチェックサムの計算が行われましたが、IPv6ヘッダにチェックサムフィールドがないことも

あり、ICMPv6ではTCPとUDP同様に疑似 IPv6ヘッダと ICMPv6ヘッダを対象としたチェック

サム計算が行われるのです。

5.2.1 IPv6でのUDPチェックサムについてUDPヘッダには、16ビットのChecksumフィールドがあります。UDPの仕様を記載してい

るRFC 768†18では、UDPヘッダのChecksumフィールドにゼロを入れること(ゼロチェック

†18 RFC 768:J. Postel, “User Datagram Protocol”, 1980年8月

Page 105: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.2 上位層でのチェックサム計算に使う仮想ヘッダ 91

サム)が許可されていました。Checksumフィールドがゼロの場合には、送信側でチェックサ

ムを生成しなかったと解釈するように明記されています。チェックサムが生成されない例とし

ては、デバッグ目的の場合や、UDPを利用する上位層のプロトコルでチェックサムを必要とし

ない場合が挙げられています。

実際、IPv4では、UDPを使ってトンネリングを行うアプリケーションや機器で、Checksum

フィールドをゼロにするという運用が行われています。トンネリングを行うとき、UDPパケッ

トのペイロード部分に IPヘッダやTCPヘッダなどが含まれることも多く、トンネルを実現して

いるUDPパケットでチェックサムの計算を行うことが必ずしも必要ではないからです。UDP

では、IPヘッダに含まれる IPアドレスなどを計算に利用するための疑似ヘッダ、UDPヘッダ、

そしてペイロード部分に対してチェックサム計算を実施します。ヘッダだけではなく、パケッ

トのペイロード部分を含めて計算するので、チェックサムの計算ではパケット全体を解析する

必要があります。UDPチェックサムの計算を行うと、パケットのサイズが大きくなったとき、

メモリやCPUなどの計算機資源をどうしても消費してしまいます。トンネリングのためのア

プリケーションや機器では、UDPチェックサムの計算をしないようにすることで効率化を図っ

ているのです。

ただし、UDPヘッダのChecksumフィールドでゼロが許可されるのは、IPv4の話です。IPv6

では IPv6ヘッダにおけるチェックサムが廃止されたことに伴い、TCPとUDPでチェックサム

を計算することが必須となりました。1995年に発行された IPv6の最初の基本仕様であるRFC

1883†19と、RFC 1883を上書き廃止するRFC 2460†20でも、IPv4とは異なり IPv6ではUDP

チェックサムの計算が必須であることが明記されています。

IPv6においてUDPヘッダのChecksumフィールドにゼロを使えないと、UDPを使ってトン

ネリングを行うアプリケーションや機器の動作効率が悪くなってしまいます。そのため、IPv6

でも IPv4と同様にUDPのゼロチェックサムを求める声が根強くありました。

UDPのゼロチェックサム禁止は、2013年にRFC 6935†21とRFC 6936†22によって条件付き

で緩和されています。RFC 2460を上書き廃止した IPv6の基本仕様であるRFC 8200†23も、こ

れらのRFC 6935とRFC 6936の内容を反映したものになっているので、UDPでのチェックサ

ムは基本的に必要ですが、ゼロチェックサムの例外が認められています。

本書執筆時点における最新仕様では、UDPにおけるチェックサム計算の例外として、UDPを

使ったカプセル化によるトンネルを行う場合にはゼロチェックサムを使ってもよいとしていま

す。ただし、デフォルト機能としてはUDPヘッダのChecksumフィールドがゼロのパケット

を破棄しつつ、特定のポートではゼロチェックサムを例外的に扱えるような仕組みになってい

ることなどが条件とされています。IPv4とは異なり、IPv6では基本的にはUDPでのチェック

サムは必須であり、トンネリングを行う場合のみという条件付きでゼロチェックサムが許容さ

†19 RFC 1883:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1995年12月†20 RFC 2460:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1998年12月†21 RFC 6935:M. Eubanks, P. Chimento, M. Westerlund, “IPv6 and UDP Checksums for Tunneled Packets”,

2013年4月†22 RFC 6936:G. Fairhurst, M. Westerlund, “Applicability Statement for the Use of IPv6 UDP Datagrams with

Zero Checksums”, 2013年4月†23 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月

Page 106: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

92 第5章 IPv6パケットの構成

れている点に注意が必要です。

5.3 IPv6拡張ヘッダ‌IPv6拡張ヘッダは、IPv6ヘッダの機能を拡張できるようにするための仕組みであり、IPv6

の大きな特徴になっています。IPv6で拡張ヘッダのような仕組みが必要になるのは、IPv6ヘッ

ダが固定長であり、IPv4ヘッダにあるような可変長のオプションフィールドがないためです。

IPv6ヘッダを固定長にしつつも、さまざまな機能を持たせることを実現しているのが、IPv6拡

張ヘッダなのです。

IPv6パケットは0個もしくは複数個の IPv6拡張ヘッダを持てます。つまり、IPv6拡張ヘッ

ダは IPv6パケットに必須の要素ではなく、設定する場合は1つの IPv6パケットに対して複数

の IPv6拡張ヘッダを追加できます。

図5.6に、IPv6拡張ヘッダを利用しない場合の IPv6パケットの例を示します。この場合は、

IPv6ヘッダの次にTCPヘッダが直接付属し、IPv6ヘッダのNext HeaderフィールドにはTCP

を示すプロトコル番号の「6」という数値が入ります。TCPヘッダの後ろにはTCPペイロード

が続きます。

TCPヘッダ

Next Headerフィールド:6

(TCP)

IPv6ヘッダ ペイロード

▲ 図5.6 IPv6拡張ヘッダなし

次は、IPv6拡張ヘッダを含む IPv6パケットの例です。図5.7は、IPv6拡張ヘッダの1つであ

るルーティングヘッダを含むTCPパケットの例です。この場合、IPv6ヘッダのNext Header

フィールドには、IPv6ルーティングヘッダを示すプロトコル番号の「43」という数値が入りま

す。さらに、IPv6ルーティングヘッダの中にあるNext Headerフィールドには、TCPを示すプ

ロトコル番号の「6」という数値が入ります。

ルーティングヘッダ(IPv6拡張ヘッダ)

Next Headerフィールド:6

(TCP)

Next Headerフィールド:43(ルーティングヘッダ)

IPv6ヘッダ TCPヘッダ ペイロード

▲ 図5.7 IPv6拡張ヘッダ例(ルーティングヘッダ)

このように、IPv6ヘッダには、次に IPv6拡張ヘッダが続くこともあれば、TCPのような上

位層のプロトコルヘッダが続くこともあります。IPv6拡張ヘッダは複数指定できるので、IPv6

Page 107: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.3 IPv6拡張ヘッダ 93

ヘッダの次に IPv6拡張ヘッダが続く場合には、その IPv6拡張ヘッダの次にさらに別の IPv6拡

張ヘッダが続くこともあります。IPv6では、このような仕組みを実現するために、IPv4におけ

る「Protocol」フィールドが「Next Header」とされています。文字どおり「次のヘッダ」と

いうわけです。

Next Headerフィールドに指定するプロトコル番号は IANAが管理しており、IANAのサイ

ト†24で一覧を参照できます。そのうち IPv6拡張ヘッダを示す番号を表5.1にまとめます。

▲ 表5.1 IPv6拡張ヘッダのプロトコル番号

番号 プロトコル 参照

0 Hop-by-Hopオプションヘッダ RFC 8200

43 ルーティングヘッダ RFC 8200、RFC 5095†25

44 フラグメントヘッダ RFC 8200

50 Encapsulating Security Payloadヘッダ RFC 4303†26

51 認証ヘッダ RFC 4302†27

60 宛先オプションヘッダ RFC 8200

135 モビリティヘッダ RFC 6275†28

139 Host Identity Protocol RFC 7401†29

140 Shim6 Protocol RFC 5533†30

253 実験やテスト用 RFC 3692†31、RFC 4727†32

254 実験やテスト用 RFC 3692、RFC 4727

IPv6拡張ヘッダを解釈するのは、基本的に IPv6ヘッダの宛先フィールドに記載されている

ノードのみです。途中の経路上にあるノードでは、IPv6拡張ヘッダを処理しません。それどこ

ろか、途中の経路上にあるルータが転送する IPv6パケットに対して IPv6拡張ヘッダを新たに

追加したり、IPv6パケットに含まれている IPv6拡張ヘッダを削除したりすることは禁止され

ています。ただし、途中の経路上の各ホップに存在するノードでも、Hop-by-Hopオプション

だけは処理します。

†24 “Protocol Numbers”:https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

†25 RFC 5095:J. Abley, P. Savola, G. Neville-Neil, “Deprecation of Type 0 Routing Headers in IPv6”, 2007年12月

†26 RFC 4303:S. Kent, “IP Encapsulating Security Payload (ESP)”, 2005年12月†27 RFC 4302:S. Kent, “IP Authentication Header”, 2005年12月†28 RFC 6275:C. Perkins, D. Johnson, J. Arkko, “Mobility Support in IPv6”, 2011年7月†29 RFC 7401:R. Moskowitz, T. Heer, P. Jokela, T. Henderson, “Host Identity Protocol Version 2 (HIPv2)”,

2015年4月†30 RFC 5533:E. Nordmark, M. Bagnulo, “Shim6: Level 3 Multihoming Shim Protocol for IPv6”, 2009年6月†31 RFC 3692:T. Narten, “Assigning Experimental and Testing Numbers Considered Useful”, 2004年1月†32 RFC 4727:B. Fenner, “Experimental Values In IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers”, 2006

年11月

Page 108: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

94 第5章 IPv6パケットの構成

NOTE

経路の途中のノードでは IPv6拡張ヘッダを解釈しないとはいえ、TCPなどの上位プロトコルを経路の途中で参照して処理するDPI(Deep Packet Inspection)機器などでは、IPv6拡張ヘッダが多いパケットについては処理が遅くなる可能性はあります。IPv6拡張ヘッダの削除はRFC 8200で禁止されていますが、実験的なRFCであるRFC

4782†33には、Hop-by-Hopオプションを削除するという記述が含まれています。ただし、RFC 4782で示されているQuick-Start for TCP and IPは、普及している仕様ではありません。その他、ファイアウォールにおける IPv6拡張ヘッダの扱いについてはRFC 7045†34を参照してください。

IPv6パケットを受信する側では、IPv6拡張ヘッダを、先頭にあるものから順次処理すること

になっています。すべての IPv6拡張ヘッダを一通りスキャンしてから任意の順番で処理する

ことは禁止されています。そのため、IPv6拡張ヘッダの順番には大きな意味があります。RFC

8200では、1つの IPv6パケットに複数の IPv6拡張ヘッダを含める場合の順番を次のように推

奨しています。

1. IPv6ヘッダ

2. Hop-by-Hopオプションヘッダ

3. 宛先オプションヘッダ(IPv6ヘッダの宛先フィールドに記載された最初の宛先と、ルー

ティングヘッダに記載されているその他の宛先で処理されるべきもの)

4. ルーティングヘッダ

5. フラグメントヘッダ

6. 認証ヘッダ

7. Encapsulating Security Payloadヘッダ

8. 宛先オプションヘッダ(宛先ノードのみで処理されるべきもの)

9. 上位層のヘッダ

なお、宛先オプションヘッダを除き、同じ種類の IPv6拡張ヘッダが1つの IPv6パケットに

複数含まれることはありません。

以降では、RFC 8200で示されている IPv6拡張ヘッダのフォーマットをいくつか紹介します。

フラグメントヘッダについては10.2節で、IPsecで使う認証ヘッダとEncapsulating Security

Payloadヘッダに関しては15.8節で、それぞれ紹介します。

5.3.1 Hop­by­Hopオプションヘッダ‌Hop-by-Hopオプションヘッダは、パケットを転送する各ルータで何らかの処理をするときに必要となる情報を格納する拡張ヘッダです。

Hop-by-Hopオプションヘッダのプロトコル番号は「0」です。IPv6拡張ヘッダが付く場合

†33 RFC 4782:S. Floyd, M. Allman, A. Jain, P. Sarolahti, “Quick-Start for TCP and IP”, 2007年1月†34 RFC 7045:B. Carpenter, S. Jiang, “Transmission and Processing of IPv6 Extension Headers”, 2013年12

Page 109: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.3 IPv6拡張ヘッダ 95

には、Hop-by-Hopオプションヘッダを IPv6ヘッダの直後に続けることが推奨されているの

で、IPv6拡張ヘッダのNext Headerフィールドで「0」が使われることはありません。

以前は、Hop-by-Hopオプションはすべてのルータによって処理されることが前提でした。

IPv6の旧基本仕様であるRFC 2460†35(RFC 8200によって廃止)では、Hop-by-Hopオプショ

ンは、そのパケットが転送されていく経路上のすべてのルータによって処理される必要がある

としています。しかし、最新の基本仕様であるRFC 8200では、Hop-by-Hopオプションを処

理するように設定されたルータのみがそれを処理するという内容に変わっています。これは、

RFC 7045で行われたRFC 2460に対するアップデートをRFC 8200に反映させた結果です。

Hop-by-Hopオプションヘッダのフォーマットを図5.9に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Next Header Hdr Ext Length

(複数の)オプションhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図5.8 Hop-by-Hopオプションヘッダフォーマット

格納できるオプションについては5.3.3項で説明します。1つのHop-by-Hopオプション

ヘッダに、複数のオプションが含まれている場合もありますが、それら複数のオプション全体

をノードであらかじめスキャンしてから処理することは禁止されています。複数のオプション

を格納する場合には、ノードで処理される順番に並べる必要があります。

5.3.2 宛先オプションヘッダ宛先オプションヘッダは、パケットの宛先(終点)のみで処理される内容を記述するため

の IPv6拡張ヘッダです。宛先オプションヘッダは、IPv6ヘッダおよび IPv6拡張ヘッダのNext

Headerフィールドでは「60」という値で表現されます。

宛先オプションヘッダは、他の IPv6拡張ヘッダとは異なり、1つの IPv6パケットに最大2個

含まれることがあります。

宛先オプションヘッダのフォーマットを図5.9に示します。

†35 RFC 2460:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1998年12月

Page 110: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

96 第5章 IPv6パケットの構成

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Next Header Hdr Ext Length

(複数の)オプションhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図5.9 宛先オプションヘッダフォーマット

格納できるオプションについては5.3.3項で説明します。1つの宛先オプションヘッダに複

数のオプションが含まれている場合もありますが、それら複数のオプション全体をノードであ

らかじめスキャンしてから処理することは禁止されています。複数のオプションを格納する場

合には、ノードで処理される順番に並べる必要があります。

宛先オプションヘッダは、IPv6ヘッダに示された宛先へパケットが到達した際に行われて

ほしい処理を指定するのに使います。そのような処理であっても、フラグメントヘッダと認証

ヘッダの2種類については、宛先オプションヘッダとは別の IPv6拡張ヘッダとして定義されて

います。

5.3.3 Hop­by­Hopオプションヘッダと宛先オプションヘッダで使われるTLV形式

Hop-by-Hopオプションヘッダと宛先オプションヘッダには、オプションとしていくつかの

付加的な情報を格納できるようになっています。これらの付加的な情報は、‌TLV形式で格納します。

NOTE

TLV形式は、Hop-by-Hopオプションヘッダと宛先オプションヘッダに限らず、さまざまな通信プロトコルでデータの格納に利用される一般的なデータ形式です。省略可能なデータの種類(Type)、そのデータの長さ(Length)、実際のデータの値(Value)がセットになった構造であることから、頭文字をとって「TLV形式」と総称されています。

RFC 8200では、これらのオプションヘッダ内に格納するオプションのTLV形式について、

図5.10のように定義しています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Option Type Opt Data Len Option Data · · ·

▲ 図5.10 Hop-by-Hopオプションヘッダと宛先オプションヘッダで使われるTLV形式

Page 111: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.3 IPv6拡張ヘッダ 97

rOption Type

オプションの種類を表すフィールドです。IANAのサイト†36で一覧を確認できます。

このフィールドの内部は、さらに以下のように区分されています。

0 1 2 3 4 5 6 7 8

act chg rest · · ·

先頭の2ビット(図中のact)は、ノードがOption Typeに未対応のときのアクションを表

しています。

r 00:このオプションを無視するr 01:このパケットを破棄するr 10:このパケットを破棄し、ICMPv6のParameter Problemメッセージ(6.2.4項参照)

を送信元に返す。その際、Codeフィールドには、未知のオプションに遭遇したことを

示す2を設定するr 11:このパケットを破棄し、宛先アドレスがマルチキャストでない場合のみ、ICMPv6の

Parameter Problemメッセージ(6.2.4項参照)を送信元に返す。その際、Codeフィー

ルドには、未知のオプションに遭遇したことを示す2を設定する

3ビットめの chgは、宛先までの途中経路上でOption Dataの内容変更が発生するかどうか

を示します。0なら変更を伴わないことを表し、1なら伴うことを表します。

restの部分は、オプションの種類ごとに定義されています。先頭3ビットに上記のような意

味があるので、この部分のみでOption Typeが決まっているように思えるかもしれません

が、あくまでも8ビット全体でOption Typeとして定義されています。rOpt Data Len

Option Dataに格納するデータの長さを表します。rOption Data

オプションごとに異なる可変長のフィールドです。

■ パディングのために使うオプションデータRFC 8200では、Hop-by-Hopオプションヘッダと宛先オプションヘッダ用のオプションと

して、パディングを行うためのPad1およびPadNというオプションを定義しています。それ

ぞれのフォーマットを図5.11および図5.12に示します。

†36 “Destination Options and Hop-by-Hop Options”:https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xml#

ipv6-parameters-2

Page 112: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

98 第5章 IPv6パケットの構成

0 1 2 3 4 5 6 7

0 0 0 0 0 0 0 0

▲ 図5.11 Pad1オプション

0 1 2 3 4 5 6 7 8 15 16

1 1 1 1 1 1 1 1 Opt Data Len Option Data· · ·

▲ 図5.12 PadNオプション

5.3.4 ルーティングヘッダルーティングヘッダは、IPv6ヘッダに示された宛先 IPv6アドレスに到達する間に通過すべ

きノードを示すためのものです。ルーティングヘッダは、IPv6ヘッダおよび IPv6拡張ヘッダ

のNext Headerフィールドで「43」という値で表現されます。

ルーティングヘッダのフォーマットを図5.13に示します。ルーティングヘッダにも、Hop-

by-Hopオプションヘッダと宛先オプションヘッダで利用されるようなTLV形式のオプション

を含められます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Next Header Hdr Ext Length Routing Type Segments Left

ルーティングタイプごとに異なるデータhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図5.13 ルーティングヘッダフォーマット

ルーティングヘッダは、Mobile IPv6について規定したRFC 6275†37と、低電力ネットワー

クでの IPv6の利用について規定したRFC 6554†38などでも利用されています。

IANAでは、ルーティングヘッダ内に含まれるRouting Typeフィールドを新たに割り当て

する場合のガイドラインを、RFC 5871†39として示しています。研究などで実験的にルーティ

ングヘッダを使う場合には、実験的な目的でルーティングヘッダを使う場合のために割り当て

られている253および254をRouting Typeフィールドの値として利用可能です。

†37 RFC 6275:C. Perkins, D. Johnson, J. Arkko, “Mobility Support in IPv6”, 2011年7月†38 RFC 6554:J. Hui, JP. Vasseur, D. Culler, V. Manral, “An IPv6 Routing Header for Source Routes with the

Routing Protocol for Low-Power and Lossy Networks (RPL)”, 2012年3月†39 RFC 5871:J. Arkko, S. Bradner, “IANA Allocation Guidelines for the IPv6 Routing Header”, 2010年5月

Page 113: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

5.3 IPv6拡張ヘッダ 99

5.3.5 続くヘッダが存在しない場合Next Headerフィールドに「59」という値が入っているときは、‌No Next Header‌を意味し、次に続くヘッダは存在しないものとして扱われます。Next Headerフィールドの値が「59」で

あるにもかかわらず、IPv6ヘッダのPayload Lengthフィールドの値が「パケットのペイロー

ドにデータが存在している」ことを示している場合、ルータはそのままの状態で IPv6パケット

を転送することが求められています。

5.3.6 IPv6拡張ヘッダ仕様の変更IPv6プロトコルの大きな特徴のひとつである拡張ヘッダですが、現在では IPv6が設計され

た当初とは異なる仕様も含まれています。

■ Type 0のルーティングヘッダの廃止RFC 2460で規定されているType 0の IPv6ルーティングヘッダは、セキュリティ上の理由

から、2007年に発行されたRFC 5095によって廃止されています。IPv6ノードが実装すべき

機能について規定したRFC 4294†40でも、Type 0の IPv6ルーティングヘッダが必須条件の1

つに含まれていましたが、2007年以降は対応不要となっています。そのRFC 4294も、2011

年に発行されたRFC 6434†41によって廃止されています。それらを反映し、RFC 2460を廃止

して上書きするRFC 8200(2017年発行)にもType 0の IPv6ルーティングヘッダは含まれて

いません。

NOTE

IPv6ルーティングヘッダそのものがRFC 5095で廃止されたわけではありません。RFC

5095が廃止しているのはType 0だけであり、Mobile IPv6が依存するType 2の IPv6

ルーティングヘッダなどは引き続き利用可能です。

■ 拡張ヘッダの先頭16ビットに対する追加要求2012年に発行されたRFC 6564†42では、すべての IPv6拡張ヘッダが以下のフォーマットを

満たすように要求しています。IPv6拡張ヘッダの先頭8ビットがNext Headerを示し、次の8

ビットで IPv6拡張ヘッダの長さを示すようにするという要求です。

†40 RFC 4294:J. Loughney, “IPv6 Node Requirements”, 2006年4月†41 RFC 6434:E. Jankiewicz, J. Loughney, T. Narten, “IPv6 Node Requirements”, 2011年12月†42 RFC 6564:S. Krishnan, J. Woodyatt, E. Kline, J. Hoagland, M. Bhatia, “A Uniform Format for IPv6 Extension

Headers”, 2012年4月

Page 114: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

100 第5章 IPv6パケットの構成

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Next Header Hdr Ext Length

Header Specific Datahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図5.14 RFC 6564が求める IPv6拡張ヘッダフォーマット

rNext Header(8ビット)

この拡張ヘッダの直後にくるプロトコルの種類を示します。IPv6ヘッダにおけるNext

Headerフィールドと同じく、IANAによって割り当てられている値(IPv4のProtocol Type

フィールドで利用される値と同じ値)を指定します。rHdr Ext Len(8ビット)

先頭の8ビットを除いた拡張ヘッダの全長を、8ビット単位で数えた値を指定します。rHeader Specific Data(可変長)

拡張ヘッダの種類によって異なるフィールドです。

ここで問題になるのが、フラグメントヘッダは上記のフォーマットを満たしていないことで

す。過去に標準化されたすべての IPv6拡張ヘッダが図5.14を満たしているわけでないので、

RFC 6564は「将来定義される IPv6拡張ヘッダは」という前提つきになっています。

5.3.7 IPv6拡張ヘッダが付いたパケットを破棄するルータの存在2016年に発行されたRFC 7872†43は、2014年と2015年に行われた調査を紹介する Infor-

mationalなRFCです。RFC 7872は、IPv6拡張ヘッダが含まれるパケットを破棄するルータが

インターネット上で実運用されていることを紹介しています。

RFC 7872には、IPv6拡張ヘッダが追加されたパケットのうち平均して50%以上が破棄され

たという調査も含まれています。また、このようなパケットの破棄が、トランジットを行って

いるASにおいて発生している可能性も示唆されています。IPv6では、フラグメンテーション

にも IPv6拡張ヘッダを利用しているため、フラグメンテーションされる IPv6パケットもこの

問題の影響を受ける可能性があります。

RFC 7872では、このような状況は時間とともに改善されると期待しているものの、本書執

筆時点では IPv6拡張ヘッダを付けることによってパケットが途中経路で破棄される可能性が

依然として考えられるでしょう。

†43 RFC 7872:F. Gont, J. Linkova, T. Chown, W. Liu, “Observations on the Dropping of Packets with IPv6

Extension Headers in the Real World”, 2016年6月

Page 115: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第6章

ICMPv6

IPv4と IPv6の大きな違いの1つに、ICMP(Internet Control Message Protocol)の役割の変

化が挙げられます。もともと ICMPは、プロトコル番号が1であることからわかるように、IPv4

の設計当初からインターネットを構築・運用するうえで重要視されていたプロトコルです。

IPv6で使われる ‌ICMPv6‌では、その役割がさらに大きくなり、もはや IPv4で使われる ICMPと

似て非なるプロトコルだと考えたほうがいいでしょう。バージョン番号が4から6に変わった

だけでなく、ICMPと ICMPv6はまったく異なるプロトコルなのです。実際、ICMPv6には58

番という、ICMPとはまったく違うプロトコル番号が割り当てられています。

ICMPの正式名称である Internet Control Message Protocolは、そのまま日本語にすれば、

「インターネットをコントロールするメッセージについてのプロトコル」となります。この名

称からは、インターネットプロトコルの動作を制御するためのプロトコルという印象を強く受

けるかもしれません。確かに ICMPには、通信エラーの伝達のほか、Path MTU discoveryのよ

うなインターネットプロトコルを制御するための用途があります。ただ、ネットワークの疎通

確認のために利用されるpingコマンドや、目的地までの経路確認に利用されるtraceroute

コマンドなど、インターネットプロトコルを運用するエンジニアが状況把握のために使うとい

うのが ICMPの実際の主な用途だったといえます。

これに対し、ICMPv6は、文字どおり「インターネットをコントロールするメッセージ」につ

いて規定したプロトコルという色が強くなっています。たとえば、リンク層であるイーサネッ

トアドレスを IPv4アドレスから取得するという、インターネットプロトコルの動作に不可欠

な機能は、IPv4ではARP(Address Resolution Protocol)という別のプロトコルとして定義

されていましたが、IPv6では ICMPv6に統合されました。具体的には、IPv6では ICMPv6メッ

セージを利用した近隣探索プロトコル(Neighbor Discovery Protocol)でリンク層アドレス

を解決します。近隣探索プロトコルについては第7章で解説します。

また、マルチキャストを利用するための機能も、やはり IPv4では別のプロトコルだった

IGMP(Internet Group Management Protocol)から ICMPv6へと統合されています。ICMPv6

メッセージを利用したMLD(Multicast Listener Discovery)については第12章で解説します。

表6.1に、ICMPv6で実現するインターネットプロトコルの制御機能と、その IPv4における

Page 116: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

102 第6章 ICMPv6

実現手段とを対比します。

▲ 表6.1 さまざまな機能の ICMPv6への統合

機能 IPv4における手段 IPv6における手段

エラーメッセージ、情報メッセージなど ICMP ICMPv6

IPアドレスからリンク層アドレスの解決 ARP 近隣探索(ICMPv6)

リンク層アドレスから IPアドレスの解決 RARP 近隣探索(ICMPv6)

マルチキャストの機能 IGMP MLD(ICMPv6)

6.1 ICMPv6フォーマットICMPv6ではさまざまなメッセージが定義されており、それを IPv6パケットに格納してやり

取りすることで、インターネットの制御に必要なさまざまな機能を実現します。この節では、

まず各種 ICMPv6メッセージの概要と、それらのフォーマットについて説明します。ICMPv6

メッセージを活用する方法については、以降の各節で、さまざまな機能ごとに説明していき

ます。

ICMPv6は、RFC 4443†1で定義されています。RFC 4443では、さまざまな ICMPv6メッセー

ジの基本的なフォーマットが図6.1のように示されています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type Code Checksum

ICMPv6メッセージ本体

▲ 図6.1 ICMPv6ヘッダの基本的なフォーマット

rType(8ビット)

ICMPv6メッセージの種類(ICMPv6タイプ)を示しています。rCode(8ビット)

ICMPv6タイプごとに定義されている値です。各 ICMPv6タイプをさらに細かく分類するた

めに用いられます。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。

†1 RFC 4443:A. Conta, S. Deering, M. Gupta, “Internet Control Message Protocol (ICMPv6) for the Internet

Protocol Version 6 (IPv6) Specification”, 2006年3月

Page 117: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6.1 ICMPv6フォーマット 103

r ICMPv6メッセージ本体

ICMPv6メッセージごとに異なる内容のデータです。ICMPv6タイプに応じてフォーマット

も異なります。

6.1.1 ICMPv6でのチェックサムICMPv6では、‌チェックサム ‌の計算方法が IPv4における ICMPとは異なります。IPv4におけ

る ICMPでは、ICMPのみを対象としてチェックサムを計算しますが、ICMPv6では IPv6ヘッ

ダの一部を疑似 IPv6ヘッダ(pseudo-header、図5.5参照)という形で含め、ICMPv6ヘッダ

とともにチェックサムを計算します。なぜ疑似 IPv6ヘッダを含めた形でチェックサムを計算

するかというと、IPv6ヘッダ自体にチェックサムのためのフィールドが存在しないからです。

IPv4では、IPv4ヘッダ自体にチェックサムのためのフィールドがあったので、ICMPのチェッ

クサム計算で IPv4ヘッダの情報を気にする必要はありませんでした。

疑似 IPv6ヘッダを含めた ICMPv6のチェックサム計算では、RFC 8200†2の8.1節に記載され

た方法が使われます。これは、5.2節で説明している、IPv6に対する上位層(TCPやUDP)での

チェックサム計算の方法と同じです。チェックサム計算の際、疑似 IPv6ヘッダのNext Header

の値としては、ICMPv6を示す58が使われます。

6.1.2 2種類の ICMPv6メッセージとメッセージタイプICMPv6メッセージは、エラーメッセージと情報メッセージの2種類に大きく区別されてい

ます。各メッセージには、タイプを示す値が IANAによって割り当てられています†3。

タイプ値の最上位ビットが0、すなわち0から127までのタイプ値はエラーメッセージに割

り当てられています。表6.2に、ICMPv6の主なエラーメッセージをまとめます。

▲ 表6.2 ICMPv6のエラーメッセージ

タイプ 名前 定義されているRFC

0 Reserved -

1 Destination Unreachable RFC 4443

2 Packet Too Big RFC 4443

3 Time Exceeded RFC 4443

4 Parameter Problem RFC 4443

100 Private Experimentation(実験用)RFC 4443

101 Private Experimentation(実験用)RFC 4443

タイプ値の最上位ビットが1、すなわち128から255までのタイプ値は情報メッセージに割

り当てられています。表6.3に、ICMPv6の主な情報メッセージをまとめます。

†2 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月†3 “Internet Control Message Protocol version 6 (ICMPv6) Parameters”: https://www.iana.org/

assignments/icmpv6-parameters/icmpv6-parameters.xhtml

Page 118: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

104 第6章 ICMPv6

▲ 表6.3 ICMPv6の情報メッセージ

タイプ 名前 定義されているRFC

128 Echo Request RFC 4443

129 Echo Reply RFC 4443

130 Multicast Listener Query RFC 2710†4

131 Multicast Listener Report RFC 2710

132 Multicast Listener Done RFC 2710

133 Router Solicitation RFC 4861†5

134 Router Advertisement RFC 4861

135 Neighbor Solicitation RFC 4861

136 Neighbor Advertisement RFC 4861

137 Redirect RFC 4861

143 Version 2 Multicast Listener Report RFC 3810†6

151 Multicast Router Advertisement RFC 4286†7

152 Multicast Router Solicitation RFC 4286

153 Multicast Router Termination RFC 4286

200 Private experimentation RFC 4443

201 Private experimentation RFC 4443

6.2 ICMPv6エラーメッセージ2018年現在、IANAによって割り当てられている ICMPv6エラーメッセージのタイプは表

6.2の7項目のみです。ICMPv6エラーメッセージは、ICMPv6情報メッセージと比べると種類

は少ないといえます。

ICMPv6のエラーメッセージは、そのエラーを発生させたパケット本体を、ICMPv6エラー

メッセージのパケットが IPv6の最小MTUである1280オクテットを超えない範囲でデータ部

分に含みます。ICMPv6エラーメッセージに含まれるデータ部分から、そのメッセージが渡さ

れる上位プロトコルが判断されます。たとえば、ICMPv6エラーメッセージのデータ部分の先

頭がTCPヘッダであれば、その ICMPv6メッセージはTCPを処理するプロトコルスタックに手

渡されます。

ICMPv6エラーメッセージが発生させるトラフィックが他のトラフィックを圧迫してしまう

ことを防ぐために、IPv6対応しているノードは、ICMPv6エラーメッセージを送信するレー

トに制限をかけることが求められています。たとえば、tracerouteコマンドはDestination

UnreachableやTime Exceededを利用していますが、必ずしも IPv6ノードが ICMPv6エラー

メッセージを返してくれるとは限りません。

†4 RFC 2710:S. Deering, W. Fenner, B. Haberman, “Multicast Listener Discovery (MLD) for IPv6”, 1999年10

月†5 RFC 4861:T. Narten, E. Nordmark, W. Simpson, H. Soliman, “Neighbor Discovery for IP version 6 (IPv6)”,

2007年9月†6 RFC 3810:R. Vida, L. Costa, “Multicast Listener Discovery Version 2 (MLDv2) for IPv6”, 2004年6月†7 RFC 4286:B. Haberman, J. Martin, “Multicast Router Discovery”, 2005年12月

Page 119: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6.2 ICMPv6エラーメッセージ 105

ICMPv6エラーメッセージに対して ICMPv6エラーメッセージを返すことは禁止されてい

ます。

IPv6マルチキャストアドレスを宛先とするパケットに対して、ICMPv6エラーメッセージを

送信することも禁止されています。ただし、IPv6マルチキャストでPath MTU discoveryを行

うためのPacket Too Bigと、Parameter ProblemメッセージのCode 2かつOption Typeの上

位2ビットが10の2つが例外としてRFC 4443に記載されています。

以下、RFC 4443で定義されている ICMPv6エラーメッセージをそれぞれ解説します。

6.2.1 Destination Unreachableメッセージ宛先までパケットを送信できない場合に使われるのがDestination Unreachableメッセー

ジです。Destination Unreachableメッセージを送信するのは、ルータもしくはパケット生成

ノードのネットワーク層(IPv6のレイヤー)です。ただし、輻輳によって破棄されたパケット

を原因とした ICMPv6メッセージの生成は禁止されています。

図6.2にDestination Unreachableメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(1) Code Checksum

Unused

この ICMPv6パケットの長さが IPv6の最小MTUを超えない範囲で、問題があるパケットをすべて格納する

▲ 図6.2 Destination Unreachableメッセージフォーマット

rType(8ビット)

Destination Unreachableメッセージの ICMPv6タイプを示す1が入ります。rCode(8ビット)

宛先までパケットを送信できなかった原因を表す数値です。以下のような値が定義されてい

ます。

値 意味 説明

0 No route to destination 宛先までの経路が存在しなかった

1Communication with destinationadministratively prohibited

宛先との通信が設定によって禁止されている

2 Beyond scope of source address 送信元アドレスのスコープ外の宛先である

3 Address unreachable アドレスが到達不能である

4 Port unreachable ポートが到達不能である

5Source address failed ingress/egresspolicy

内部向けもしくは外部向けのポリシーによって許可されない送信元アドレスだった

6 Reject route to destination 宛先に対する経路が却下された

Page 120: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

106 第6章 ICMPv6

ノードのルーティングテーブル内に適合する経路が存在しないことが原因でパケットが送信

できなかった場合、Codeフィールドの値には0を設定します。この値は、ノード内にデフォ

ルトルートが存在しない場合にのみ発生します。なぜなら、デフォルトルートが存在する場

合や、ルーティングテーブル内に明示的な経路が存在しない場合には、デフォルトルートが

選択されるためです。

ファイアウォールの設定など、運用上の理由でパケットが送信できなかった場合、Code

フィールドの値には1を設定します。

宛先が送信元アドレスのスコープ外である場合には、Codeフィールドの値を2に設定しま

す。この状況が発生するのは、送信元アドレスのスコープが宛先アドレスのスコープよりも

小さい場合だけです。たとえば、送信元アドレスとしてリンクローカルアドレスが使用され

たパケットで、宛先として指定されたアドレスのスコープがグローバルであり、かつ、その

グローバルな宛先へのインターフェースと受信インターフェースが異なるリンクに属してい

る場合、この値を指定します†8。

該当する他のCodeが存在しない場合には、Codeフィールドの値を3に設定します。たとえ

ば、パケットを送出するリンク層で発生する問題などが挙げられます。

宛先アドレスで、トランスポート層プロトコルが該当するポート番号で待ち受けを行ってい

ない場合には、Codeフィールドの値を4に設定します。たとえば、UDPやTCPで該当する

ポート番号でリスンしているプロセスが存在しないといった状況では、このコード番号を使

います。

内部向けもしくは外部向けのフィルタリングポリシーによって許可されないソースアドレス

だった場合には、Codeフィールドの値を5に設定します。1よりもさらに詳細な情報を伝え

るときに使う値です。

宛先に対する経路が却下されるときには、Codeフィールドの値を6に設定します。たとえ

ば、ルータにおいて特定のプレフィックス向けのトラフィックをすべて拒否するように設定

されている場合に、このコードを利用します。1よりもさらに詳細な情報を伝えるときに使

う値です。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。rUnused(32ビット)

未使用のフィールドです。ここには0が入り、受信側では無視されます。

ICMPv6メッセージを受け取った IPv6の層では、上位層にそれを通知する必要があります。

たとえば、TCPやUDPのようなトンランスポート層プロトコルでは、Destination Unreachable

メッセージを利用しています。

†8 同一リンク内であればリンクローカルアドレスからグローバルアドレスへの通信も可能です。同一リンク内で異なるプレフィックス同士が通信する場合に関しては7.6節を参照してください。

Page 121: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6.2 ICMPv6エラーメッセージ 107

NOTE

Destination Unreachableメッセージは、セキュリティ上の理由で無効化されることもあります。

6.2.2 Packet Too BigメッセージPacket Too Bigメッセージは、ルータが送信します。Packet Too Bigメッセージは、ルータ

が転送するパケットサイズが、そのルータの出力側ネットワークインターフェースのMTUよ

りも大きいためにパケットが転送できないことを、ルータが送信者に知らせるときに利用され

ます。

Packet Too Bigメッセージは、他の ICMPv6エラーメッセージとは異なり、IPv6マルチキャ

ストを宛先とするパケットに対する応答として送られることもあります。リンク層においてブ

ロードキャストアドレスおよびマルチキャストアドレスで送信されているパケットに対する応

答として ICMPv6 Packet Too Bigメッセージが送られることもあります。これらは、IPv6マル

チキャストにおけるPath MTU discoveryを実現するためです。Path MTU discoveryについて

は第11章で解説します。

図6.3にPacket Too Bigメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(2) Code(0) Checksum

MTU

この ICMPv6パケットの長さが IPv6の最小MTUを超えない範囲で、問題があるパケットをすべて格納する

▲ 図6.3 Packet Too Bigメッセージフォーマット

rType(8ビット)

Packet Too Bigメッセージの ICMPv6タイプを示す2が入ります。rCode(8ビット)

0が入ります。受信側で無視されます。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。rMTU(32ビット)

Packet Too Bigメッセージを発生させる原因となった次ホップについて、リンク層のMTU

の値を含めるフィールドです。

Page 122: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

108 第6章 ICMPv6

6.2.3 Time ExceededメッセージTime Exceededメッセージは、その名のとおり、有効期間が過ぎてしまったことを示すため

の ICMPv6メッセージです。

図6.4にTime Exceededメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(3) Code Checksum

Unused

この ICMPv6パケットの長さが IPv6の最小MTUを超えない範囲で、問題があるパケットをすべて格納する

▲ 図6.4 Time Exceededメッセージフォーマット

rType(8ビット)

Time Exceededメッセージの ICMPv6タイプを示す3が入ります。rCode(8ビット)

どのような状況で有効期間が切れたのかを示します。以下の2つの値が定義されています。

値 意味 説明

0 Hop limit exceeded in transit 転送の際にホップリミットを超えた

1 Fragment reassembly time exceeded フラグメントの再構成時間を過ぎた

ルータは、受け取ったパケットのHop Limitが0であるか、転送に際して1減算した結果と

してHop Limitの値が0になった場合は、そのパケットを破棄すると同時に、Codeフィー

ルドの値を0に設定したTime Exceededメッセージをパケットに記載された送信元アドレ

ス宛に送信します。通信経路を調べるときなどに使われるtracerouteコマンドでは、この

仕様を利用しています。

ノードは、最初のフラグメントを受け取ってから60秒以内にパケットの再構成に必要なす

べてのフラグメントを受け取れない場合には、Codeフィールドの値を1に設定したTime

Exceededメッセージをパケットに記載された送信元アドレス宛に送信します。これは、RFC

8200のsection 4.5で規定されている仕様です。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。rUnused(32ビット)

未使用のフィールドです。ここには0が入り、受信側では無視されます。

Page 123: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6.2 ICMPv6エラーメッセージ 109

6.2.4 Parameter ProblemメッセージIPv6ノードがパケットを処理中に IPv6ヘッダもしくは IPv6拡張ヘッダに問題を発見した場

合、そのパケットを破棄する必要があります。同時に、Parameter Problemメッセージをパ

ケット送信者に送ることが推奨されています。Parameter Problemメッセージは、問題が発生

したこと伝えると同時に、問題を発生させた箇所を伝えるためのメッセージだといえます。

図6.5にParameter Problemメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(4) Code Checksum

Pointer

この ICMPv6パケットの長さが IPv6の最小MTUを超えない範囲で、問題があるパケットをすべて格納する

▲ 図6.5 Parameter Problemメッセージフォーマット

rType(8ビット)

Parameter Problemメッセージの ICMPv6タイプを示す4が入ります。rCode(8ビット)

どのような問題が起きたのかを示します。以下の3つの値が定義されています。

値 意味 説明

0 Erroneous header field encountered 誤ったヘッダフィールドに遭遇した

1Unrecognized Next Header typeencountered

未知のNext Headerタイプに遭遇した

2 Unrecognized IPv6 option encountered 未知の IPv6オプションに遭遇した

Code 1とCode 2は、Code 0をさらに詳細に分類したものです。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。r Pointer(32ビット)

Pointerフィールドでは、問題が発生した箇所を、IPv6ヘッダの先頭からのオフセットとし

て示します。たとえば、Codeフィールドの値が1で、Pointerフィールドの値が40の場合、

IPv6ヘッダ(40オクテット)の直後に続く IPv6拡張ヘッダのNext Headerの値に問題があ

ることがわかります。

エラーを発生させたパケット本体が ICMPv6メッセージの最大値を超え、ICMPv6メッセー

ジのデータ部分に収まりきらない大きさだった場合、Pointerフィールドの示す値が ICMPv6

パケットの末尾を超える場合もあります。

Page 124: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

110 第6章 ICMPv6

6.3 ICMPv6情報メッセージICMPv6情報メッセージのタイプは、ICMPv6エラーメッセージタイプと比べると、たくさん

の種類が定義されています。ただし、ICMPv6エラーメッセージについては IANAで割り当て

られているものがすべてRFC 4443で定義されているのに対し、ICMPv6情報メッセージの多

くは他のさまざまなRFCで定義されているものです。

ここでは、RFC 4443で定義されている2つの ICMPv6情報メッセージである ICMPv6 Echo

RequestメッセージとEcho Replyメッセージについてだけフォーマットを紹介します。マル

チキャストに関連する ICMPv6情報メッセージは12.5.1項で、近隣探索プロトコルに関連する

ICMPv6情報メッセージについては第7章で解説します。

NOTE

受信側ノードは、未知のタイプの ICMPv6情報メッセージを受け取った場合、そのICMPv6情報メッセージを破棄します。

6.3.1 ICMPv6 Echo RequestメッセージとEcho ReplyメッセージIPv4の ICMPと同様に、ICMPv6にもEcho RequestメッセージとEcho Replyメッセージが

あります。Echo RequestメッセージとEcho Replyメッセージは、ノードの生存確認やネット

ワークの疎通確認などで利用されます。

Echo Requestメッセージは、Echo Replyメッセージを送信することを要求するメッセージ

です。Echo Requestメッセージに対する応答としてEcho Replyメッセージが返信されます。

これらのメッセージを利用する代表的なコマンドとしてpingコマンドが挙げられます。

すべてのノードは、IPv6対応にあたり、Echo RequestメッセージとEcho Replyメッセージ

を処理するための機能を実装する必要があります。それと同時に、Echo Requestメッセージ

を送信してEcho Replyメッセージを受信する、アプリケーション層のインターフェースを実

装することが推奨されています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(128) Code(0) Checksum

Identifier Sequence Number

Data · · ·

▲ 図6.6 Echo Requestメッセージ

Page 125: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

6.3 ICMPv6情報メッセージ 111

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(129) Code(0) Checksum

Identifier Sequence Number

Data · · ·

▲ 図6.7 Echo Replyメッセージ

rType(8ビット)

Echo Requestメッセージの場合は128、Echo Replyメッセージの場合は129を指定します。rCode(8ビット)

Codeフィールドの値は、Echo RequestメッセージもEcho Replyメッセージも常に0であ

り、受信側では無視されます。rChecksum(16ビット)

ICMPv6ヘッダのTypeフィールドから始まる ICMPv6メッセージ全体と、その先頭に疑似

IPv6ヘッダを追加したデータに対して計算したチェックサムです。6.1.1項を参照してくだ

さい。r Identifier(16ビット)

Echo ReplyメッセージとEcho Requestメッセージの対応関係を明示するために使う識別子

です。0でもかまいません。r Sequence Number(16ビット)

Echo ReplyメッセージとEcho Requestメッセージの対応関係を明示するために使うシーケ

ンス番号です。0でもかまいません。rData(可変長)

Echo Requestメッセージには任意のデータを含めることができます。対応するEcho Reply

メッセージでは、そのデータをそのままコピーして返します。

Echo Replyメッセージでは、Echo Requestメッセージに記載されている識別子、シーケン

ス番号、データをそのまま返します。Echo Requestメッセージの送信側は、受け取ったEcho

Replyメッセージに記載されている情報を確認することで、どのEcho Requestメッセージが

宛先ノードに到達したのかを確認できるという仕組みです。

Page 126: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 127: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第7章

近隣探索プロトコル

ICMPv6を用いて実現される近隣探索プロトコル(Neighbor Discovery Protocol)は、IPv6

の根幹となる非常に大きな特徴であり、IPv4でのARP(Address Resolution Protocol)、ICMP

Router Discovery、ICMP Redirectで実現されていた内容が含まれています。また、IPv4には

存在しなかった機能として、近隣ノードが到達不能であることを検知できる近隣不到達性検知

(Neighbor Unreachability Detection、NUD)もあります。さらに、ICMPv6メッセージを組み

合わせて自動的に IPv6アドレスを生成する SLAAC(Stateless Address Autoconfiguration)

も用意されています。

IPv6の近隣探索プロトコルは、IPv4でリンク層アドレス解決に使われるARPを引き合い

に出して説明されることがありますが、ARPと比べると以下のような点が改善されています

(RFC 4861の3.1節も参照してください)。

r アドレス解決と同時にルーティングに必要な情報も解決できるr リンク層アドレス解決のためのマルチキャストを分散できるr Redirectメッセージが近隣探索プロトコルに含まれているので、別途アドレス解決をする

必要がないr 近隣不到達性検知r サイトリナンバリングが容易になる可能性r リンクの外部からリダイレクトの情報やルータの情報がくることがない(Hop limit 255

の効能)r ARPに依存せず、ネットワーク層の認証やセキュリティ機能を使えるようになる

近隣探索プロトコルそのものは、RFC 4861†1で定義されています。RFC 4861で示されてい

るのは、近隣探索プロトコルで利用される ICMPv6メッセージのフォーマットや、各メッセー

ジの送受信に伴う処理が中心です。SLAACについては、別のRFC 4862†2でまとめられてい

†1 RFC 4861:T. Narten, E. Nordmark, W. Simpson, H. Soliman, “Neighbor Discovery for IP version 6 (IPv6)”,

2007年9月†2 RFC 4862:S. Thomson, T. Narten, T. Jinmei, “IPv6 Stateless Address Autoconfiguration”, 2007年9月

Page 128: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

114 第7章 近隣探索プロトコル

ます。

本章では、RFC 4861の内容を中心に、近隣探索プロトコルについて基本的な内容をまとめ

ます。SLAACについては第8章で扱います。

7.1 近隣探索プロトコルの機能と利用するメッセージRFC 4861では、近隣探索プロトコルが提供する機能を以下のように要約しています。

r リンク上のルータを探す機能(Router Discovery)r ルータを経由せずに到達できる IPv6アドレスの範囲を知る機能(Prefix Discovery)r リンクのMTUなどの情報を知る機能(Parameter Discovery)r インターフェースに対してステートレスにアドレスを振る機能(Address Autoconfigura-

tion)r IPv6アドレスからリンク層のアドレスを解決する機能(Address Resolution)r 宛先アドレスをもとに、次にパケットを送出すべき IPv6アドレスを知る機能(Next-hop

Determination)r 近隣ノードに到達できなくなったことを知る近隣不到達性検知(Neighbor Unreachability

Detection)r 利用するアドレスが他のノードで使われていないかを確認する機能(Duplicate Address

Detection)r ルータからホスト†3へ、より適切な送出先を伝える方法(Redirect)

上記の機能を実現するために、近隣探索プロトコルでは、次の5つの ICMPv6メッセージを

組み合わせて利用します。それぞれの ICMPv6メッセージが運ぶオプションデータによって、

さまざまな機能を実現しているのです。これらの ICMPv6メッセージは近隣探索メッセージと

呼ばれ、RFC 4861で定義されています。

r Router Advertisementメッセージ(7.2.1項)r Router Solicitationメッセージ(7.2.2項)r Neighbor Solicitationメッセージ(7.3.1項)r Neighbor Advertisementメッセージ(7.3.2項)r Redirectメッセージ(7.4節)

Router AdvertisementのAdvertisementは、「広告」という意味を持つ英単語です。Router

Advertisementメッセージは、ルータの存在をサブネット内に広告すると同時に、ルータと通

信する際に必要となる各種情報を伝える役割があります。ルータは、Router Advertisement

メッセージを定期的にリンク内にマルチキャストすることによって、サブネット内のノードに

存在を通知できます。また、後述するRouter Solicitationに対する返答として送信することも

可能です。

Router SolicitationのSolicitationは、「懇願」や「懇請」といった意味を持つ英単語です。

†3 IPv6の基本仕様を示したRFC 8200での定義では、「ホスト」はルータではないノード、と定義されています。

Page 129: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.2 ルータとプレフィックス情報の発見 115

Router Solicitationメッセージは、Router Advertisementメッセージの送信をただちに行う

ように要求するためのメッセージです。

Neighbor Solicitationメッセージは、同一サブネット内に接続している近隣ノードのリンク

層アドレスを得るために送信されるメッセージです。近隣ノードとの通信が不可能になってい

ないかどうか(近隣不到達性)を検知したり、同一の IPv6アドレスを利用している他ノードが

存在しているかどうかを確認するDAD(Duplicate Address Detection、重複アドレス検知)

で使われたりします。

Neighbor Advertisementメッセージは、Neighbor Solicitationメッセージに対する返答と

して送信できるメッセージです。自分のリンク層アドレスが変わったことを通知するために、

Neighbor Advertisementメッセージを自発的に送信することも可能です。

Redirectメッセージはルータがホストに対して、宛先に対するより最適な次ホップノードを

伝えるためのメッセージです。

これらの近隣探索メッセージを送信するときは、IPv6ヘッダのHop Limitフィールドに255

という値を設定します。これにより受信側では、Hop Limitが255ではないものを受け取った

とき、その ICMPv6メッセージがルータを越えたことを検出できます。

7.2 ルータとプレフィックス情報の発見近隣探索プロトコルでホストがルータを発見したり、ルーティング設定に必要なプレフィッ

クス情報をホストが知るためには、ICMPv6のRouter Advertisementメッセージを利用しま

す。「Router Advertisement」を日本語に直訳すると「ルータの広報」という意味になること

からわかるように、Router Advertisementメッセージはルータからホストに対して送信され

ます。

ルータでは、ホストにおけるネットワーク設定に必要な情報を含むRouter Advertisement

を、定期的にマルチキャストで送信します。これにより、そのルータのサブネットに接続して

いる機器は、そのサブネットを利用した通信を行うために必要な情報を得られます(図7.1)。

ルータ

ICMPv6ヘッダ

Source link-layer addressオプションMTUオプションPrefix informationオプション

Type 134(Router Advertisement)

宛先 ff02::1

Next header 58(ICMPv6)Hop Limit 255

Routet AdvertisementメッセージをもとにノードでIPアドレスを

自動生成

定期的にマルチキャスト

IPv6ヘッダ

Router Advertisementメッセージ

▲ 図7.1 Router Advertisementメッセージをマルチキャスト

Page 130: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

116 第7章 近隣探索プロトコル

ルータから定期的にRouter Advertisementメッセージをマルチキャストするだけでなく、

ネットワークに接続された各機器の側からルータに対してRouter Advertisementメッセージ

の送信を要求することも可能です。このときに使われるのがRouter Solicitationメッセージで

す(図7.2)。

ルータ

ICMPv6ヘッダ

Source link-layer addressオプション

MACアドレス

Type 133(Router Solicitation)

00:00:5E:00:53:01

MACアドレス 00:00:5E:00:53:01

宛先 ff02::2

Next header 58(ICMPv6)

送信元 fe80::2

Routet Advertisementメッセージをもとに

ノードでグローバルユニキャストIPv6アドレスを自動生成

IPv6ヘッダ

Router Solicitationメッセージ

ICMPv6ヘッダ

Source link-layer addressオプションMTUオプション

Prefix informationオプション

Type 134(Router Advertisement)

宛先 fe80::2送信元 fe80::1

Next header 58(ICMPv6)Hop Limit 255

Hop Limit 255

IPv6ヘッダ

Router Advertisementメッセージ

リンクローカルIPv6アドレスfe80::1 リンクローカルIPv6アドレス fe80::2

グローバルユニキャストIPアドレスはまだない

▲ 図7.2 Router Solicitationメッセージへの返答としてのRouter Advertisementメッセージ

Router Advertisementメッセージを受け取った各機器では、そこに含まれているプレフィッ

クス情報にインターフェース識別子を加えることで、各自の IPv6アドレスを自動生成します。

この IPv6アドレスの自動設定(SLAAC)に関しては、第8章を参照してください。

以下、ICMPv6のRouter AdvertisementメッセージとRouter Solicitationメッセージの

フォーマットを説明します。さらに、近隣探索プロトコルにおけるルータとプレフィックス情

報の発見ではルータとホストの役割や挙動が異なるので、ルータ側で行う処理とホスト側で行

う処理についてそれぞれ解説します。

7.2.1 Router AdvertisementメッセージRouter Advertisementは、タイプ134の ICMPv6メッセージです。Router Advertisement

メッセージのフォーマットはRFC 4861に記載されています。Router Advertisementは

ICMPv6の一部ですが、ICMPv6の基本仕様であるRFC 4443†4ではなく、近隣探索の仕様を示

したRFC 4861という別のRFCで定義されているのです。

†4 RFC 4443:A. Conta, S. Deering, M. Gupta, “Internet Control Message Protocol (ICMPv6) for the Internet

Protocol Version 6 (IPv6) Specification”, 2006年3月

Page 131: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.2 ルータとプレフィックス情報の発見 117

Router Advertisementメッセージを運ぶ IPv6パケットの IPv6ヘッダでは、送信元 IPv6ア

ドレスに、送信に使われるネットワークインターフェースに設定されたリンクローカル IPv6

アドレスを指定する必要があります。

Router Advertisementメッセージを運ぶ IPv6パケットでは、IPv6ヘッダの宛先 IPv6アド

レスとして、通常は全ノードマルチキャストアドレス(ff02::1)を指定します。Router

Solicitationメッセージに対する返答の場合は、Router Solicitationメッセージに記載された

送信元 IPv6アドレスを指定します。

前述したように、Router Advertisementメッセージを運ぶ IPv6パケットでは、IPv6ヘッ

ダのHop Limitの値を255にします。これにより、他のリンクに接続された機器から誤って

Router Advertisementメッセージが転送されてきても、その内容に影響されないようにでき

ます。

図7.3にRouter Advertisementメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(134) Code(0) Checksum

Cur Hop Limit M O H Prf P 予約 Router Lifetime

Reachable Time

Retrans Timer

Options · · ·

▲ 図7.3 Router Advertisementメッセージフォーマット

rType(8ビット)

Router Advertisementメッセージであることを示す134が入ります。rCode(8ビット)

0が入ります。rChecksum(16ビット)

ICMPチェックサムを設定します。rCur Hop Limit(8ビット)

そのルータを通じて転送されていく IPv6パケットのHop Limitフィールドについて、ルー

タが推奨する値を示します。値は8ビットの符号なし整数(unsigned integer)で指定しま

す。ルータによって特に推奨値を指定しない場合は、0にします。rM(1ビット)

「Managed address configuration」を意味するフラグです。DHCPv6による IPv6アドレス

設定が利用可能であることを示すためのフラグです。DHCPv6による IPv6アドレス設定が

利用可能である場合に、このフラグが1に設定されます。このフラグは、あくまでDHCPv6

が利用可能であることを示すだけであり、このフラグが0である場合にDHCPv6を利用する

ことが禁止されているわけではありません。

Page 132: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

118 第7章 近隣探索プロトコル

rO(1ビット)

「Other configuration」を示すフラグです。IPv6アドレス以外の情報をDHCPv6で取得する

ことが可能である場合は、このフラグを1に設定します。たとえば、DNSに関連する情報が

DHCPv6で提供されている場合には、このフラグを設定します。OフラグもMフラグ同様

に、利用可能であることを示すものであり、このフラグが0という状況においてステートレ

スなDHCPv6の利用が禁止されているわけではありません。rH(1ビット)

「Mobile IPv6 Home Agent」を示すフラグです。RFC 3775†5で定義されています。r Prf(2ビット)

「Default Router Preference」を示すフラグです。RFC 4191†6で定義されています。r P(1ビット)

「Neighbor Discovery Proxy」を示すフラグです。RFC 4389†7で定義されています。r予約(2ビット)

未使用領域です。このフィールドの値は0であることが求められます。rRouter Lifetime(16ビット)

自分がデフォルトルータとして有効な期間をホストに伝えるためのフィールドです。16

ビットの符号なしの整数により、秒単位で指定します。このフィールドの値が0である場

合は、自身をデフォルトルータとして利用してはならないことをホストに対して示します。

16ビットの符号なしの整数なので、フィールドとしては65535までの値を表現可能ですが、

RFC 4861ではこのフィールドで利用可能な最大値を9000秒にするという制約があります。

ただし、RFC 4861を更新するRFC 8319で9000秒という制約は撤廃され、最大値が65535

となっています。rReachable Time(32ビット)

近隣不到達性検知アルゴリズムで使われるフィールドです。32ビットの符号なしの整数で

す。単位はミリ秒です。0は、このルータでは未定義という意味を持ちます。rRetrans Timer(32ビット)

ホストに対してNeighbor Solicitationメッセージの再送信まで待つべき時間を指定する

フィールドです。ミリ秒単位で32ビットの符号なしの整数を指定します。0は、そのルー

タでは未定義という意味を持ちます。rOptions(可変長)

近隣探索メッセージのためのオプション(7.5節で説明します)を含めるフィールドです。

Router Advertisementメッセージに含められるのは、RFC 4861で定義されているSource

Link-layer Addressオプション(7.5.2項)、MTUオプション(7.5.5項)、Prefix Information

†5 RFC 3775:D. Johnson, C. Perkins, J. Arkko, “Mobility Support in IPv6”, 2004年6月†6 RFC 4191:R. Draves, D. Thaler, “Default Router Preferences and More-Specific Routes”, 2005年11月†7 RFC 4389:D. Thaler, M. Talwar, C. Patel, “Neighbor Discovery Proxies (ND Proxy)”, 2006年4月

Page 133: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.2 ルータとプレフィックス情報の発見 119

オプション(7.5.3項)のほか、RFC 8106†8で定義されているRDNSSオプション(7.5.6

項)、DNSSLオプション(7.5.7項)などです。

RFC 4861では、Router Advertisementメッセージに含まれるフラグはMとOのみであり、

残りの6ビットが予約(Reserved)と定義されています。そして、その予約フィールド内の

値として0を設定するように求めています。しかし、RFC 3775でHフラグが定義され、また

RFC 4191でPrfとして2ビットが使われることになっており、さらにRFC 4389ではPフラグ

が定義されています。そのため、実際は残り6ビットではなく2ビットだけが予約フィールド

となります。

Router Advertisementメッセージに含まれるフラグについては、上記の状況を整理し、さ

らに必要な場合にフラグを拡張できるように、Flags Expansionというオプションを定義した

RFC 5175†9が発行されています。

7.2.2 Router SolicitationメッセージRouter Solicitationは、タイプ133の ICMPv6メッセージです。ルータからのRouter Ad-

vertisementはマルチキャストで定期的に送信されますが、IPv6ノード側からルータに対して

Router Advertisementをただちに送信するように要求するためには、このRouter Solicitation

メッセージを使います。

Router Solicitationメッセージを運ぶ IPv6パケットの IPv6ヘッダでは、送信元 IPv6アドレ

スとして、送信に使われるネットワークインターフェースに設定された IPv6アドレスが使われ

ます。ただし、IPv6アドレスの自動設定を行うときなど、まだ IPv6アドレスが設定されてい

ない場合には、ネットワークインターフェースに IPv6アドレスが設定されていません。その場

合には、送信元 IPv6アドレスとして、未定義アドレス(::/128)を使うことになっています。

Router Solicitationメッセージを運ぶ IPv6パケットでは、IPv6ヘッダの宛先 IPv6アドレス

として、通常は全ルータマルチキャストアドレス(ff02::2)が使われます。

Router Solicitationメッセージを運ぶ IPv6パケットでは、Router Advertisementメッセー

ジと同様に、IPv6ヘッダのHop Limitの値を255とします。

図7.4にRouter Solicitationメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(133) Code(0) Checksum

予約

Options · · ·

▲ 図7.4 Router Solicitationメッセージフォーマット

†8 RFC 8106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2017年3月†9 RFC 5175:B. Haberman, R. Hinden, “IPv6 Router Advertisement Flags Option”, 2008年3月

Page 134: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

120 第7章 近隣探索プロトコル

rType(8ビット)

Router Solicitationメッセージであることを示す133が入ります。rCode(8ビット)

0が入ります。rChecksum(16ビット)

ICMPチェックサムです。r予約(32ビット)

未使用領域です。このフィールドの値は0であることが求められます。受信側は、この

フィールドの内容を無視する必要があります。rOptions(可変長)

近隣探索メッセージのためのオプション(7.5節で説明します)を含めるフィールドです。

Router Solicitationメッセージに含められるのは、RFC 4861で定義されている Source

Link-layer Addressオプション(7.5.2項)です。なお、送信元アドレスが未定義アドレス

の場合は、オプションを含めることが禁止されています。

7.2.3 ルータ側の処理ルータは、ホスト側からのRouter Solicitationメッセージによる要求に応える形で、Router

Advertisementメッセージを送信します。また、それ以外に、定期的にRouter Advertisement

メッセージをマルチキャストで送信します。

ルータがRouter Advertisementメッセージで送信するのは、リンク上のホストが自身のア

ドレスを設定するのに必要な情報です。たとえば、ルータとしてパケットを転送するネット

ワークプレフィックス情報や、デフォルトルータであるかどうかといった情報などをホストに

対して送信します。

ネットワークプレフィックス情報については、Prefix Informationオプション(7.5.3項)で

指定します。ルータは、自身が接続しているすべての外部リンクについて、ネットワークプレ

フィックス情報を含めるべきとされています。

デフォルトルータであるかどうかは、Router AdvertisementメッセージのRouter Lifetime

フィールドを使って示します。Router Lifetimeフィールドの値を0に設定することで、自分

自身をデフォルトルータとせずにRouter Advertisementメッセージを送れます。たとえば、

ホストがSLAACで IPv6アドレスを自動設定できるように必要な情報を送信しつつ、ルータと

してパケットの転送はしないという場合、このような方法が使えます。

ルータでは、Router Advertisementメッセージを送信するかどうかを、各ネットワークイン

ターフェースごとに設定できます。Router Advertisementメッセージを送信するネットワー

クインターフェースについては、IPv6の全ルータマルチキャストグループに参加する必要があ

ります。Router Advertisementメッセージを送信しているインターフェースで、システムの

シャットダウンするなどの理由により送信をやめる場合は、Router Lifetimeをゼロに設定し

たRouter Advertisementメッセージを送信すべきとされています。

Page 135: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.2 ルータとプレフィックス情報の発見 121

Router Advertisementメッセージに必要なオプションは、すべて1つのRouter Advertise-

mentメッセージに含めることが推奨されています。しかし、リンクのMTUを超えてしまう

場合には、オプションを部分的に含んだ複数のRouter Advertisementメッセージに分けて送

信することも可能です。ただし、一番最初にRouter Advertisementメッセージを送信すると

きや、Router Solicitationメッセージへの応答として送信する場合には、必要なすべてのオプ

ションを含むことが推奨されています。

■ 定期的なRouter Advertisementメッセージの送信間隔定期的なRouter Advertisementメッセージは、厳密に同じ時間間隔で送信されるわけでは

ありません。送信間隔を厳密に一定にしてしまうと、複数のルータが同じタイミングでリンク

上にRouter Advertisementメッセージを送信した場合に、輻輳が発生するおそれがあります。

そのためRFC 4861では、Router Advertisementメッセージの送信間隔を、ルータで設定さ

れた最小時間と最大時間の間のランダムな値としています†10。

■ ルータのリンクローカルアドレスが変わる場合近隣探索プロトコルでは、ルータのリンクローカルアドレスを利用して、そのリンク内で

ルータを識別します。そのため、ルータのリンクローカルアドレスを変更すべきではありま

せん。

ただし、リンクローカルアドレスの変更が禁止されているわけではありません。RFC 4861

では、非推奨としつつも、変更を行う場合に推奨される挙動が示されています。ルータのリ

ンクローカルアドレスが変わる場合には、ただちにその変更を通知するために、古いリンク

ローカルアドレスでRouter Lifetimeをゼロに設定したRouter Advertisementメッセージを

いくつか送信し、そのうえで、新しいリンクローカルアドレスを使ったRouter Advertisement

メッセージを送信することが推奨されています。

7.2.4 ホスト側の処理ホスト側の処理は、主に自分自身のアドレスに関する設定を行うためにルータから情報を受

け取ることです。ルータに対して情報を要求するRouter Solicitationメッセージを送信するこ

とも可能です。

一方、ルータではないホストがRouter Advertisementメッセージを送信することは禁止さ

れています。また、ホストがRouter Solicitationメッセージを受け取った場合には、何もせず

に破棄すべきであるとRFC 4861に書かれています。

ホストが受け取るRouter Advertisementメッセージには、そのメッセージを送信した

ルータがデフォルトルータとして振る舞う期間がRouter Lifetimeフィールドで示されてい

ます。ホストは、ルータがデフォルトルータとしての有効期限が過ぎる前に新たなRouter

Advertisementメッセージによって有効期限を更新しない場合、自身のDefault Router List

からそのルータに関するエントリを削除する必要があります。

†10 それぞれRFC 4861ではMinRtrAdvIntervalおよびMaxRtrAdvIntervalとして導出方法が説明されていますが、実装によってこれらのパラメータの名前は異なります。

Page 136: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

122 第7章 近隣探索プロトコル

ホストは、近隣探索プロトコルを使うために、マルチキャストが利用可能なすべてのイン

ターフェースで全ノードマルチキャストアドレスに参加する必要があります。

7.3 リンク層アドレスの解決と近隣不到達性の検知IPv6では、IPv4でARP(Address Resolution Protocol)によって実現していたリンク層の

アドレス解決を、ICMPv6を使った近隣探索プロトコルが実現しています。さらに、リンク層

アドレスの解決だけではなく、ノードに到達できないこと(近隣不到達性)を検知するため

の仕組みも定義されています。これら、リンク層アドレスの解決と近隣不到達性の検知には、

Neighbor SolicitationメッセージとNeighbor Advertisementメッセージを利用します。

以下、Neighbor SolicitationメッセージとNeighbor Advertisementメッセージのフォー

マットを説明します。さらに、両メッセージの送受信に関して説明します。最後に近隣不到達

性検知について解説します。

NOTE

Neighbor SolicitationメッセージとNeighbor Advertisementメッセージは、SLAACで定義されているDAD(Duplicate Address Detection、重複アドレス検知)でも利用されます。DADに関しては、8.5節で説明します。

7.3.1 Neighbor SolicitationメッセージIPv6ノードは、ICMPv6のNeighbor Solicitationメッセージを利用して、他の IPv6ノードの

リンク層のアドレスを要求すると同時に、自分のリンク層アドレスを伝えます。

Neighbor Solicitationメッセージを送信する IPv6パケットのヘッダに記載される送信元

IPv6アドレスは、ネットワークインターフェースに設定されている IPv6アドレスです。ただ

し、8.5節で説明するDADの間は、送信元 IPv6アドレスを未定義 IPv6アドレス(::/128)と

します。

Neighbor Solicitationメッセージは、リンク層アドレスの解決を行う場合にはマルチキャ

ストで送信されます。その際、IPv6ヘッダの宛先 IPv6アドレスとしては、Target Address

フィールドに指定する値に対応したSolicited-Nodeマルチキャストアドレス(12.3節参照)を

指定することになります。

近隣不到達性検知の場合は、対象となる IPv6ノードを宛先とするユニキャストで送信され

ます。

図7.5にNeighbor Solicitationメッセージのフォーマットを示します。

Page 137: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.3 リンク層アドレスの解決と近隣不到達性の検知 123

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(135) Code(0) Checksum

予約

Target Address

Options · · ·

▲ 図7.5 Neighbor Solicitationメッセージフォーマット

rType(8ビット)

Neighbor Solicitationメッセージであることを示す135が入ります。rCode(8ビット)

0が入ります。rChecksum(16ビット)

ICMPチェックサムです。r予約(32ビット)

未使用の領域です。このフィールドの値は0であることが求められます。受信側は、この

フィールドの内容を無視する必要があります。rTarget Address(128ビット)

対象となる IPv6アドレスです。このフィールドにマルチキャストアドレスを記載すること

は禁止されています。rOptions(可変長)

近隣探索メッセージのためのオプション(7.5節で説明します)を含めるフィールドです。

Neighbor Solicitationメッセージには、Source Link-layer Addressオプションを使って、

送信者のリンク層アドレスを含めることができます。

7.3.2 Neighbor AdvertisementメッセージNeighbor Advertisementメッセージは、Neighbor Solicitationへの返答として送信され

ます。設定情報を更新したときに、それを即座に伝搬させるため、IPv6ノードが自発的に

Neighbor Advertisementメッセージを送信することもあります。

Neighbor Advertisementメッセージを送信する IPv6パケットのヘッダに指定する宛先 IPv6

アドレスは、Neighbor Solicitationメッセージへの返答か、自発的な送信かによって異なり

ます。

Neighbor Solicitationメッセージへの返答としてのNeighbor Advertisementメッセージの

場合は、Neighbor Solicitationメッセージの送信元アドレスによって、返答のためのNeighbor

Advertisementメッセージの宛先が変わります。Neighbor Solicitationメッセージの送信

Page 138: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

124 第7章 近隣探索プロトコル

元 IPv6アドレスが未定義アドレスではない場合、Neighbor Solicitationメッセージの送信

元アドレスを宛先とするNeighbor Advertisementメッセージが送信されます。Neighbor

Solicitationメッセージの送信元アドレスが未定義アドレスである場合は、全ノードマルチ

キャスト宛に返答のためのNeighbor Advertisementメッセージが送信されます。

自発的にNeighbor Advertisementメッセージを送信する場合は、全ノードマルチキャスト

IPv6アドレス(ff02::1)宛に送信します。

Neighbor Advertisementメッセージを送信する IPv6パケットの送信元 IPv6アドレスとし

ては、メッセージを送信するネットワークインターフェースに設定された IPv6アドレスを指

定します。

図7.6にNeighbor Advertisementメッセージのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(136) Code(0) Checksum

R S O 予約

Target Address

Options · · ·

▲ 図7.6 Neighbor Advertisementメッセージフォーマット

rType(8ビット)

Neighbor Advertisementメッセージであることを示す136が入ります。rCode(8ビット)

0が入ります。rChecksum(16ビット)

ICMPチェックサムです。rR(1ビット)

ルータであることを示すためのフラグです。このフラグが1であるとき、送信元がルータで

あることを示します。r S(1ビット)

Solicitedを意味するフラグで、Neighbor Solicitationメッセージに対する返答であることを

示します。近隣不到達性検知では、このフラグを使います。Neighbor Advertisementメッ

セージの宛先がマルチキャストの場合や、自発的なユニキャスト送信の場合は、Sフラグを

1にすることが禁止されています。rO(1ビット)

Overrideを意味するフラグで、近隣キャッシュに登録されているリンク層アドレス情報の

Page 139: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.3 リンク層アドレスの解決と近隣不到達性の検知 125

上書きを推奨する場合には1に設定します。このフラグが設定されていない場合には、リン

ク層アドレスが近隣キャッシュに登録済みのエントリがNeighbor Advertisementメッセー

ジの情報で更新されることはありません。エニーキャストでは、このフラグを1にしないこ

とが推奨されています。r予約(29ビット)

未使用の領域です。このフィールドの値は0であることが求められます。受信側は、この

フィールドの内容を無視する必要があります。rTarget Address(128ビット)

Neighbor Solicitationメッセージに対する返答の場合、Neighbor Solicitationメッセージ

のTarget Addressフィールドに記載されている IPv6アドレスになります。リンク層アドレ

スの変更を伝える自発的なNeighbor Advertisementメッセージの場合は、このフィールド

に、変更のあったリンク層アドレスに対応する IPv6アドレスが入ります。Target Address

フィールドをマルチキャスト IPv6アドレスにすることは禁止されています。rOptions(可変長)

近隣探索メッセージのためのオプション(7.5節で説明します)を含めるフィールドです。

7.3.3 Solicited­Nodeマルチキャストグループへの参加近隣探索プロトコルでは、マルチキャストが利用可能なリンクにおいて、アドレス解決や近

隣不到達性検知のためにマルチキャストを利用します。マルチキャストが利用可能なネット

ワークインターフェースが有効になった時点で、ノードは、全ノードマルチキャストグループ

に参加するとともに、Solicited-Nodeマルチキャストグループに参加する必要があります。

ネットワークインターフェースに設定された IPv6アドレスが変更される場合には、新しい

IPv6アドレスに対応するSolicited-Nodeマルチキャストグループに参加し、古い IPv6アドレ

スに対応するSolicited-Nodeマルチキャストグループから離脱する必要があります。ただし、

1つのSolicited-Nodeマルチキャストアドレスが複数の IPv6アドレスに対応することもあるた

め、対応する IPv6アドレスが1つでも残っている場合には、そのSolicited-Nodeマルチキャス

トアドレスから離脱しません。

Solicited-Nodeマルチキャストアドレスに関しては12.3節を参照してください。

7.3.4 Neighbor SolicitationメッセージとNeighbor Advertise­mentメッセージの送受信

あるノードが、IPv6アドレスを知っている近隣のノードに対してユニキャストで IPv6パケッ

トを送信しようとしたら、送信先の IPv6アドレスに対応するリンク層アドレスが必要になり

ます。IPv6アドレスからリンク層アドレスへの対応は、近隣キャッシュ(Neighbor Cache)

として、各ノードで管理しています。

もし近隣キャッシュに対応する IPv6アドレスのリンク層アドレスがなければ、ノードは

Neighbor Solicitationメッセージを送信します。このNeighbor Solicitationメッセージを送

信する IPパケットの宛先 IPv6アドレスは、ネットワークインターフェースがマルチキャスト

Page 140: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

126 第7章 近隣探索プロトコル

利用可能なものであれば、Solicited-Nodeマルチキャストアドレスになります。

Neighbor Solicitationメッセージによる問い合わせがあると、該当する IPv6アドレスが設

定されているネットワークインターフェースを持つノードは、Neighbor Solicitationメッセー

ジを送信したノードに対してユニキャストでNeighbor Advertisementメッセージを返信しま

す。このNeighbor Advertisementメッセージが、Neighbor Solicitationメッセージを送信し

たノードに届くことで、そのノードはリンク層アドレスを解決できるようになります。

あるノードがNeighbor Solicitationメッセージを送信し、それに対するNeighbor Adver-

tisementメッセージを受け取るまでの流れを、そのノードにおける処理として見てみましょ

う。ノードでは、リンク層アドレスがわからない IPv6パケットの送信をトリガーとして、

Neighbor Solicitationメッセージを送信します。トリガーとなった IPv6パケット自体は、リ

ンク層アドレスが解決されるまでキューに保存します。そして、Neighbor Solicitationメッ

セージを送信すると同時に、該当する IPv6アドレスのためのエントリを近隣キャッシュに生

成します。もちろん、まだ IPv6アドレスに対応するリンク層アドレスはわからない状態なの

で、このエントリは「INCOMPLETE(不完全)」というステートであるとされます(近隣キャッ

シュのステートについては、7.3.6項で改めて説明します)。

この状態で、ユニキャストのNeighbor Advertisementメッセージを受け取ったら、その

メッセージの情報に対応するエントリが近隣キャッシュにあるかどうか調べます。エント

リがあれば、受け取った情報で近隣キャッシュを更新します。もし近隣キャッシュにエン

トリが存在しなかったら、受け取ったNeighbor Advertisementメッセージは先に送った

Neighbor Solicitationメッセージに対応するものではないとわかります。そのため、受け取っ

たNeighbor Advertisementメッセージを破棄します。Neighbor Advertisementメッセージ

を受け取ったからといって、近隣キャッシュに新たなエントリを生成するわけではありま

せん。

ホストごとに設定された時間だけ待ってもNeighbor Solicitationメッセージに対して応答

がなかったら、Neighbor Solicitationメッセージを再送します。一定の回数だけ再送しても

Neighbor Advertisementメッセージを受け取れない場合は、キューに保存していた IPv6パ

ケットに対して ICMP Destination UnreachableメッセージをCode 3(Address Unreachable)

で返します。

7.3.5 近隣不到達性検知ネットワークでは、さまざまな理由で、通信相手まで IPv6パケットが届かない状態になっ

てしまうことがあります。宛先ノードそのものが通信不能な状況もあれば、途中経路の障害を

回避することで通信できる可能性が残されている場合もあるでしょう。ホストとホスト間、ホ

ストとルータ間、ルータとルータ間など、通信経路上のあらゆる箇所で近隣ノードに到達でき

るかどうかを調べるための方法が、RFC 4861に定義されている近隣不到達性検知(Neighbor

Unreachability Detection、NUD)です。

Page 141: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.3 リンク層アドレスの解決と近隣不到達性の検知 127

NOTE

ルータとルータ間の経路に関しては、ルーティングプロトコルなどによって到達可能性の検知が代替可能なら、ここで説明する近隣不到達性検知を使う必要はありません。

近隣不到達性検知では、自ノードから送った IPv6パケットを受け取ったことを知らせる何

らかの通知を相手ノードから受け取ったときに、その相手ノードへは到達可能であると判断し

ます。この判断に利用できる通知としては、次の2種類があります。

r 上位層のプロトコルにおける応答r Neighbor Solicitationメッセージに対するNeighbor Advertisementメッセージの応答

1つめの上位層のプロトコルにおける応答としては、たとえばTCPで通信相手のノードから

ACKを受け取った場合が挙げられます。TCP接続を行っている相手からの応答が受け取れて

いるのであれば、その宛先に到達するために経由する近隣ノードが次ホップとして機能するこ

とを示しています。

もう1つが、Neighbor Solicitationメッセージに対する応答としてNeighbor Advertisement

メッセージを受け取ったときです。上位層プロトコルで相手への到達可能性が判断できない

場合には、自発的に送信したNeighbor Solicitationメッセージへの応答となるNeighbor

Advertisementメッセージを受け取ることで、近隣ノードが次ホップとして機能するかどうか

を検知します。

Neighbor AdvertisementメッセージのSフラグが1に設定されていれば、こちらから送った

Neighbor Solicitationメッセージが相手に届いたことに対する応答だとわかるので、近隣ノー

ドへの到達性があると確認できます。Sフラグが0に設定されているNeighbor Advertisement

メッセージを受け取ったり、Router Advertisementメッセージを受け取ったりしても、それ

らの近隣探索メッセージの送信元ノードへの到達性を確認するものとみなされません。そのよ

うなメッセージは、近隣ノードから自ノードへの到達性を示すものではありますが、自ノード

から近隣ノードに対するパケットが到達していることを示しているわけではないためです。近

隣不到達性にとって問題になるのは、あくまでも自ノードから次ホップとなる近隣ノードへ到

達できなくなっていないかどうかなのです。

NOTE

近隣不到達性検知は、ユニキャストで IPv6パケットを送信するときに同時に実施されるものです。宛先がマルチキャストアドレスの場合には実施されません。

7.3.6 近隣キャッシュのステート近隣キャッシュには、近隣不到達性検知の仕組みを通じて管理される情報も含まれていま

す。それは、近隣への到達可能性を示す以下の5種類の「ステート(state)」です。

r INCOMPLETE

INCOMPLETEは、不完全という意味を持つ英単語です。該当するエントリに対してアドレ

Page 142: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

128 第7章 近隣探索プロトコル

ス解決が進行中であることを示しています。Solicited-nodeマルチキャストアドレスに対し

てNeighbor Solicitationメッセージが送信され、Neighbor Advertisementメッセージの応

答が受け取れていないときに、このステートになります。rREACHABLE

REACHABLEは、到達可能という意味を持つ英単語です。該当するエントリに対応する近隣

ノードへの経路が正常であることを示しています。決められた時間内に、近隣ノードへの到

達性が肯定的に確認できる通知を受け取れているとき、そのノードに対応するエントリのス

テートはREACHABLEになります。ステートがREACHABLEのときは、IPv6パケットを送

信するときに近隣探索プロトコルの処理は発生しません。r STALE

STALEは、新鮮ではない、腐りかけている、古い、などの意味を持つ英単語です。該当する

エントリに対応する近隣ノードは到達可能とはいえないことを示しています。近隣ノード

への到達性を肯定的に確認できる通知を受け取ってから所定の時間(ReachableTime)が

経過すると、そのノードに対応するエントリのステートはSTALEになります。ステートが

STALEになっても、次にパケットが送信されるまでは、近隣探索プロトコルとしての処理は

特に何も起きません。

自発的に送信したNeighbor Solicitationメッセージに対する応答ではない近隣探索メッ

セージを受け取ったとしも、そのメッセージを送信したノードへの到達性を確認したとはみ

なされません。そのようなメッセージは、相手ノードから自ノードへの到達性は示します

が、自ノードから送信されたパケットに対する反応でなければ到達性の確認にはならないか

らです。rDELAY

DELAYは、遅延という意味を持つ英単語です。近隣ノードへの到達性を肯定的に確認でき

る通知を受け取ってから所定の時間(ReachableTime)が経過してしまったが、送信済みの

パケットがあるので、それを待機している期間であることを示しています。該当するエント

リに対応する近隣ノードは到達可能とはいえないが、送出済みのパケットがあるので、上位

層を通じて肯定的な確認が得られる可能性を考慮して待っている状態です。

送信済みパケットの通知を待機する期間(通知を待つ時間とは別に決められています)に近

隣ノードへの到達性を示す肯定的な確認が得られたら、REACHABLEに移行します。得られ

ない場合は、Neighbor Solicitationメッセージを送信したうえでPROBEへと移行します。r PROBE

PROBEは、調べる、探査する、探る、などの意味を持つ英単語です。到達性を確認する応答

を待っている状態です。ノードに設定されているNeighbor Solicitationメッセージの再送

タイマーごとにNeighbor Solicitationメッセージが再送信されます。

前述したように、IPv6パケットの送信時にリンク層アドレスがわからない場合は、リンク層

アドレスの解決を行いつつ、近隣キャッシュに INCOMPLETEステートのエントリを生成しま

す。このエントリは、リンク層アドレスの解決に成功すればステートがREACHABLEに変わり

Page 143: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.4 Redirectメッセージ 129

ます。リンク層アドレスの解決に失敗した場合はエントリごと削除します。INCOMPLETEか

らREACHABLEへの遷移は、Neighbor Solicitationへの応答としてNeighbor Advertisement

を受け取った場合のみです。

エントリがSTALE、DELAY、PROBEの各ステートのときに、近隣ノードへの到達性が確認

された場合には、ステートがREACHABLEに変わります。STALE、DELAY、PROBEの各ステー

トからREACHABLEへの遷移では、INCOMPLETEからの場合とは違い、上位層での確認によ

る場合があります。

NOTE

INCOMPLETEは、該当するリンク層アドレスを解決するためのNeighbor Advertise-

mentを一度も受け取っていない状態です。そのため、上位層での確認ではREACHABLE

になりません。

近隣不到達性検知におけるReachableTime

近隣不到達性検知では、近隣ノードへの到達性を肯定的に確認できる通知を受け取ってから、ある所定の期間だけ、そのノードが到達可能である(Reachable)であるとみなします。この期間は、RFC 4861では「ReachableTime」というミリ秒単位の値で示されています。

ReachableTimeとしては、Router AdvertisementメッセージのReachable Timeフィールドの値をもとに算出することが推奨されています。具体的には、このフィールドの値が0でない場合、その値に対してノード内で生成されたランダムな数値をかけたものをReachableTimeとして利用することが推奨されています(Router Advertisement

メッセージが0の場合などに使うデフォルト値も規定されています)。ReachableTimeは、新しく受け取ったRouter AdvertisementメッセージでReachable

Timeフィールドが変化した場合には再計算されます。Router AdvertisementメッセージのReachable Timeフィールドに変化がない場合でも、数時間おきにノード内のReachableTimeの再計算を行うことが推奨されています。

7.4 Redirectメッセージ近隣探索プロトコルのRedirectメッセージは、他のルータが特定の経路としてより良い次

ホップであることをルータからホストに対して伝えるときや、特定の宛先が実際には同一リン

ク上に接続された近隣ノードであることを伝えるときに使われます。

Redirectメッセージの IPv6ヘッダに記載される送信元 IPv6アドレスは、Redirectメッセー

ジが送信されるネットワークインターフェースのリンクローカル IPv6アドレスである必要が

あります。

Redirectメッセージの IPv6ヘッダに記載される宛先 IPv6アドレスは、ルータがRedirect

メッセージを送信するきっかけとなったパケットの送信元 IPv6アドレスです。

図7.7にRedirectメッセージのフォーマットを示します。

Page 144: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

130 第7章 近隣探索プロトコル

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(137) Code(0) Checksum

予約

Target Address

Destination Address

Options · · ·

▲ 図7.7 Redirectメッセージフォーマット

rType(8ビット)

Redirectメッセージであることを示す137が入ります。rCode(8ビット)

0が入ります。rChecksum(16ビット)

ICMPチェックサムです。r予約(32ビット)

未使用の領域です。このフィールドの値は0であることが求められます。受信側は、この

フィールドの内容を無視する必要があります。rTarget Address(128ビット)

より良い次ホップの IPv6アドレスです。Redirectメッセージを送信するきっかけとなっ

た宛先 IPv6アドレスが近隣ノードである場合、Target AddressフィールドとDestination

Addressフィールドの内容が同じになります。より良い次ホップとしてルータを示す場合に

は、Target Addressをリダイレクト先となるルータのリンクローカル IPv6アドレスにする

必要があります。rDestination Address(128ビット)

リダイレクト先を通じて転送されるべき宛先 IPv6アドレスです。

NOTE

Target AddressとDestination Addressの両方の IPv6アドレスを同じものにすることで、特定の宛先が実際には同一リンク上に接続された近隣ノードであることを示せます。

Page 145: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.5 近隣探索メッセージのオプション 131

rOptions(可変長)

オプションを含むためのフィールドです。

7.4.1 無効なRedirectメッセージ以下の要素を満たさないRedirectメッセージは無効なものとして破棄されます。

r ICMPv6メッセージの IPv6ヘッダに記載された送信元 IPv6アドレスがリンクローカルア

ドレスであることr ICMPv6メッセージの IPv6ヘッダのHop Limitの値が255であること(ルータによって転

送されたRedirectメッセージは255よりも小さな値になってしまう)r ICMPチェックサムが正しいことr ICMP Codeが0であることr そのメッセージを受け取ったノード内の経路表において、宛先と次ホップが ICMPv6

Redirectメッセージにある内容と整合性が取れていることr ICMP Destination Addressフィールドにマルチキャストアドレスが含まれていないことr ICMP Target Addressがリンクローカルアドレス、もしくは、ICMP Destination Address

の内容と同じものであることr ICMPv6メッセージに含まれるすべてのオプションが0よりも大きなサイズであること

7.5 近隣探索メッセージのオプションRFC 4861で定義されている近隣探索に関するメッセージ(Router Solicitationメッセージ、

Router Advertisementメッセージ、Neighbor Solicitationメッセージ、Neighbor Advertise-

mentメッセージ、Redirectメッセージ)には、0個以上のオプションを含めることができま

す。本書執筆時点で定義されているオプションの一覧を表7.1に示します。

表7.1に示したオプションのうち、本書では、RFC 4861で定義されているSource Link-layer

Addressオプション(タイプ1)、Target Link-layer Addressオプション(タイプ2)、Prefix

Informationオプション(タイプ3)、Redirected Headerオプション(タイプ4)、MTUオプ

ション(タイプ5)の5つと、RFC 8106で定義されているRDNSSオプション(タイプ25)、

DNSSLオプション(タイプ31)の2つについて説明します。

Page 146: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

132 第7章 近隣探索プロトコル

▲ 表7.1 近隣探索メッセージのオプション

Type オプション名 RFC

1 Source Link-layer Address RFC 4861

2 Target Link-layer Address RFC 4861

3 Prefix Information RFC 4861

4 Redirected Header RFC 4861

5 MTU RFC 4861

6 NBMA Shortcut Limit Option RFC 2491†11

7 Advertisement Interval Option RFC 6275†12

8 Home Agent Information Option RFC 6275

9 Source Address List RFC 3122†13

10 Target Address List RFC 3122

11 CGA option RFC 3971†14

12 RSA Signature option RFC 3971

13 Timestamp option RFC 3971

14 Nonce option RFC 3971

15 Trust Anchor option RFC 3971

16 Certificate option RFC 3971

17 IP Address/Prefix Option RFC 5568†15

18 New Router Prefix Information Option RFC 4068†16

19 Link-layer Address Option RFC 5568

20 Neighbor Advertisement Acknowledgment Option RFC 5568

21-22 Unassigned

23 MAP Option RFC 4140†17

24 Route Information Option RFC 4191

25 RDNSS RFC 8106

26 Router Advertisement Flags Extension Option RFC 5175

27 Handover Key Request Option RFC 5269†18

28 Handover Key Reply Option RFC 5269

29 Handover Assist Information Option RFC 5271†19

30 Mobile Node Identifier Option RFC 5271

31 DNSSL RFC 8106

32 Proxy Signature (PS) RFC 6496†20

33 Address Registration Option RFC 6775†21

34 6LoWPAN Context Option RFC 6775

35 Authoritative Border Router Option RFC 6775

36 6LoWPAN Capability Indication Option (6CIO) RFC 7400†22

37 DHCP Captive-Portal RFC 7710†23

38-137 Unassigned

138 CARD Request option RFC 4065†24

139 CARD Reply option RFC 4065

140-252 Unassigned

253 RFC 3692†25-style Experiment 1 RFC 4727†26

254 RFC 3692-style Experiment 2 RFC 4727

Page 147: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.5 近隣探索メッセージのオプション 133

7.5.1 近隣探索メッセージのオプションの基本フォーマット近隣探索に関するオプションは、いずれも図7.8に示す基本的なTLV構造をしています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type Length · · ·

Options · · ·

▲ 図7.8 オプションの基本フォーマット

rType(8ビット)

オプションのタイプを指定するフィールドです。指定できる値については表7.1を参照して

ください。r Length(8ビット)

TypeフィールドとLengthフィールドを含めたオプション全体の長さを8ビットの符合なし

整数で示します。8オクテット単位で示すので、たとえばLengthの値が2であれば、オプ

ション全体の長さは16オクテットということになります。このフィールドに0を指定する

ことは禁止されており、Lengthフィールドが0になっているオプションを受け取ったノー

ドはパケット全体を破棄する必要があります。

RFC 4861では、オプションが64ビット境界で終端するように、必要に応じてパディングす

ることが推奨されています。

†11 RFC 2491:G. Armitage, P. Schulter, M. Jork, G. Harter, “IPv6 over Non-Broadcast Multiple Access (NBMA)

networks”, 1999年1月†12 RFC 6275:C. Perkins, D. Johnson, J. Arkko, “Mobility Support in IPv6”, 2011年7月†13 RFC 3122:A. Conta, “Extensions to IPv6 Neighbor Discovery for Inverse Discovery Specification”, 2001

年6月†14 RFC 3971:J. Arkko, J. Kempf, B. Zill, P. Nikander, “SEcure Neighbor Discovery (SEND)”, 2005年3月†15 RFC 5568:R. Koodli, “Mobile IPv6 Fast Handovers”, 2009年7月†16 RFC 4068:R. Koodli, “Fast Handovers for Mobile IPv6”, 2005年7月†17 RFC 4140:H. Soliman, C. Castelluccia, K. El Malki, L. Bellier, “Hierarchical Mobile IPv6 Mobility Manage-

ment (HMIPv6)”, 2005年8月†18 RFC 5269:J. Kempf, R. Koodli, “Distributing a Symmetric Fast Mobile IPv6 (FMIPv6) Handover Key Using

SEcure Neighbor Discovery (SEND)”, 2008年6月†19 RFC 5271:H. Yokota, G. Dommety, “Mobile IPv6 Fast Handovers for 3G CDMA Networks”, 2008年6月†20 RFC 6496:S. Krishnan, J. Laganier, M. Bonola, A. Garcia-Martinez, “Secure Proxy ND Support for SEcure

Neighbor Discovery (SEND)”, 2012年2月†21 RFC 6775:Z. Shelby, S. Chakrabarti, E. Nordmark, C. Bormann, “Neighbor Discovery Optimization for

IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)”, 2012年11月†22 RFC 7400:C. Bormann, “6LoWPAN-GHC: Generic Header Compression for IPv6 over Low-Power Wireless

Personal Area Networks (6LoWPANs)”, 2014年11月†23 RFC 7710:W. Kumari, O. Gudmundsson, P. Ebersman, S. Sheng, “Captive-Portal Identification Using

DHCP or Router Advertisements (RAs)”, 2015年12月†24 RFC 4065:J. Kempf, “Instructions for Seamoby and Experimental Mobility Protocol IANA Allocations”,

2005年7月†25 RFC 3692:T. Narten, “Assigning Experimental and Testing Numbers Considered Useful”, 2004年1月†26 RFC 4727:B. Fenner, “Experimental Values In IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers”, 2006

年11月

Page 148: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

134 第7章 近隣探索プロトコル

7.5.2 Source Link­layer AddressオプションとTarget Link­layerAddressオプション

Source Link-layer Addressオプションには、パケット送信者のリンク層アドレスを含めま

す。Neighbor Solicitationメッセージ、Router Solicitationメッセージ、Router Advertise-

mentメッセージで利用されるオプションです。

Target Link-layer Addressオプションには、メッセージの対象となるノードのリンク層ア

ドレスを含めます。Neighbor AdvertisementメッセージとRedirectメッセージで利用される

オプションです。

Source Link-layer AddressオプションとTarget Link-layer Addressオプションは、いずれ

も同じ図7.9に示すフォーマットをしています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(1または2) Length Link-layer Address

Options · · ·

▲ 図7.9 Target Link-layer Addressオプション

rType(8ビット)

Source Link-layer Addressオプションの場合は1、Target Link-layer Addressオプション

の場合は2です。r Length(8ビット)

オプション全体の長さを8オクテット単位で示します。リンク層がイーサネットの場合、こ

のフィールドの値は1になります。r Link-layer Address(可変長)

リンク層アドレスを格納するためのフィールドです。このフィールドの長さはリンク層の種

類によって変わります。

RFC 2464†27に、リンク層がイーサネットである場合のTarget Link-layer Addressオプショ

ンの例が紹介されています。図7.10のように、48ビット(6オクテット)の IEEE 802アドレ

スがTypeとLengthフィールドの直後に続きます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2 1 イーサネットアドレス

イーサネットアドレス(つづき)

▲ 図7.10 Target Link-layer Addressオプション(リンク層がイーサネットの場合)

†27 RFC 2464:M. Crawford, “Transmission of IPv6 Packets over Ethernet Networks”, 1998年12月

Page 149: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.5 近隣探索メッセージのオプション 135

7.5.3 Prefix InformationオプションPrefix Informationオプションは、on-linkプレフィックスを広告するためのものです。

Prefix InformationオプションはRouter Advertisementメッセージのみで利用されます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(3) Length(4) Prefix Length L A 予約1

Valid Lifetime

Preferred Lifetime

予約2

Prefix

▲ 図7.11 Prefix Informationオプション

rType(8ビット)

Prefix Informationオプションを表す3を指定します。r Length(8ビット)

オプション全体の長さを8オクテット単位で示します。Prefix Informationオプションの長

さは、TypeフィールドとLengthフィールドを含めて32オクテットなので、このフィール

ドの値は4になります。r Prefix Length(8ビット)

プレフィックス長を示す8ビットの符合なし整数です。0から128の値をとります。r L(1ビット)

on-linkのアドレスであることを示すフラグです(7.6.1項参照)。rA(1ビット)

ホストに対し、グローバルユニキャストアドレスをSLAACによって設定するように伝える

ためのフラグです。ホストは、このフラグが1に設定されているとき、このオプションを含

むRouter Advertisementメッセージによって示すプレフィックスの値と、ホストが生成す

るインターフェース識別子を組み合わせて、グローバルユニキャストアドレスを生成でき

ます。r予約1(6ビット)

未使用領域です。このフィールドの値は0であることが求められます。rValid Lifetime(32ビット)

このプレフィックスがリンク上で有効となる時間を秒単位で示す、32ビットの符合なし整

数です。32ビットすべてが1である場合、無期限であるであることを示します。

Page 150: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

136 第7章 近隣探索プロトコル

r Preferred Lifetime(32ビット)

SLAACによって生成されたアドレスが推奨される時間を秒単位で示す、32ビットの符合な

し整数です。Valid Lifetimeを超えない値であることが求められます。r予約2(32ビット)

32ビットの未使用領域です。このフィールドの値は0であることが求められます。r Prefix(128ビット)

IPアドレスもしくは IPアドレスのプレフィックスです。

7.5.4 Redirected HeaderオプションRedirected Headerオプションは、Redirectメッセージを誘発する原因となったパケットの

全部もしくは一部を示すために利用されます。このオプションは、Redirectメッセージでのみ

利用されます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(4) Length 予約

予約

IP header + data

▲ 図7.12 Redirected Headerオプション

rType(8ビット)

Redirected Headerオプションを表す4を指定します。r Length(8ビット)

オプション全体の長さを8オクテット単位で示します。r予約(48ビット)

未使用領域です。このフィールドの値は0であることが求められます。r IP header + data(可変長)

Redirectメッセージを誘発する原因となったパケットの全部もしくは一部です。Redirect

メッセージの全長が IPv6の最小MTU(1280オクテット)を超えない範囲で、原因となった

パケットを切り詰めて格納します。

7.5.5 MTUオプション同一リンク上のすべてのノードが同じMTUを使うようにするためにRouter Advertisement

メッセージに追加できるオプションです。Router Advertisementメッセージ以外でこのオプ

ションが使われることはありません。

Page 151: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.5 近隣探索メッセージのオプション 137

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(5) Length(1) 予約

MTU

▲ 図7.13 MTUオプション

rType(8ビット)

MTUオプションを表す5を指定します。r Length(8ビット)

オプション全体の長さを8オクテット単位で示します。MTUオプションの長さは、Type

フィールドとLengthフィールドを含めて8オクテットなので、このフィールドの値は1に

なります。r予約(16ビット)

未使用の領域です。このフィールドの値は0であることが求められます。rMTU

リンクで推奨されるMTUです。32ビットの符合なし整数で指定します。

7.5.6 RDNSS(Recursive DNS Server)オプションIPv6が開発された当初は、Router Advertisementメッセージはあくまでも IPv6アドレスそ

のものに関する情報を扱うものであり、名前解決のための情報は ICMPv6では扱わないものと

されていました。IPv6アドレスの設定と名前解決は異なる層の問題であり、IPv6と同じ層の情

報を扱うべき ICMPv6で名前解決に関する設定を行うのはレイヤーバイオレーションである、

というのが主な理由です。当時プロトコル設計にかかわった人々の美意識による決断だったと

いえるでしょう。

しかし、実際の運用では名前解決も重要であることから、Router Advertisementメッセー

ジに名前解決に関連する情報を扱う機能を入れたいという要望が相次ぎ、ついにはRFC化され

ました。本書執筆段階では、名前解決に関連するRouter Advertisementメッセージの機能は

RFC 8106で定義されています。

IPv6ヘッダのNext Headerフィールドは ICMPv6を示す58になります。Router Advertise-

mentメッセージは ICMPv6メッセージの一種ですが、タイプが134でコードが0になります。

RFC 6106†28のRDNSSオプションとDNSSLオプションは、Router Advertisementメッセー

ジの後半はオプションフィールドに含められます。

RDNSSオプションは、図7.14のように、1つ以上のキャッシュDNSサーバの IPv6アドレス

とその有効時間というシンプルな構造になっています。

†28 RFC 6106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2010年11月

Page 152: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

138 第7章 近隣探索プロトコル

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(25) Length 予約

Lifetime

Address of IPv6 Recursive DNS Servers

▲ 図7.14 RFC 8106 RDNSS

rType(8ビット)

RDNSSオプションであることを示す25を指定します。r Length(8ビット)

オプション全体の長さを8オクテット単位で指定します。キャッシュDNSサーバの IPv6ア

ドレスが1つであれば、TypeフィールドとLengthフィールドを含めたRDNSSオプション

の長さは24オクテットなので、Lengthフィールドの値は3になります。キャッシュDNS

サーバの IPv6アドレスが1つ増えるごとに、このフィールドの値は2ずつ大きくなります。r予約(16ビット)

未使用の領域です。このフィールドの値は0であることが求められます。r Lifetime(32ビット)

このオプションが示すDNSサーバを使ってもよい期間を秒単位で示す、32ビットの符合な

し整数です。すべてのビットが1(0xffffffff)であれば、無期限であることを示します。

0は記載されたキャッシュDNSサーバをそれ以降使用してはならないことを示します。rAddress of IPv6 Recursive DNS Servers(可変長)

DNSサーバの IPv6アドレスです。このフィールドに含まれる IPv6アドレスの数は、Length

フィールドの値から求めます。

1つのRDNSSオプションで、複数のキャッシュDNSサーバ IPv6アドレスに対する個別の

Lifetimeを表現することはできません。しかし、1つのRouter Advertisementメッセージに、

それぞれLifetimeが異なる複数のRDNSSオプションを添付することは可能です。

7.5.7 DNSSL(DNS Search List)オプションDNSSLは、DNS suffix search listを提供するためのオプションです。たとえば http:

//www/としたときに、DNSSLオプションに example.comが設定されていれば、自動的に

http://www.example.com/であると解釈されたうえで処理されます。「検索ドメイン」「デ

フォルトのドメイン名」「DNSサフィックス」などの名称で呼ばれることもあります。

実験的なRFCとして発行されたRFC 5006†29にはDNSSLオプションは含まれていません

†29 RFC 5006:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Option for DNS Con-

figuration”, 2007年9月

Page 153: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.5 近隣探索メッセージのオプション 139

でした。DNSSLオプションが最初に追加されたのはRFC 6106です。RFC 6106そのものは、

2017年3月に発行されたRFC 8106によって上書き廃止されましたが、RFC 8106にもオプ

ションが含まれています。

RFC 8106では、DNSSLオプションは図7.15のようなフォーマットになっています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(31) Length 予約

Lifetime

Domain Names of DNS Search List

▲ 図7.15 RFC 8106 DNSSL

rType(8ビット)

DNSSLオプションであることを示す31を指定します。r Length(8ビット)

オプション全体の長さを8オクテット単位で示します。このフィールドの値は、Domain

Names of DNS Search Listフィールドの長さに応じて変わります。最小値は2です。r予約(16ビット)

未使用の領域です。このフィールドの値は0であることが求められます。r Lifetime(32ビット)

このオプションが示すDNSサーバを使ってもよい期間を秒単位で示します。値の意味は

RDNSSオプションと同様です。rDomain Names of DNS Search List(可変長)

1つ以上のドメイン名を含めます。各ドメイン名は、RFC 1035†30のSection 3.1に記載され

たフォーマットです。17.3.2項で解説しているフォーマットと同じです。

DNS suffix search listが抱えるセキュリティ上の問題

DNS suffix search listには、まったく異なるFQDN(Fully Qualified Domain Name)へ誘導されるというセキュリティ上の問題があります。この攻撃によって、たとえばパスワードや電子メールのような情報が盗まれる可能性が考えられます。この問題は、IPv4におけるDHCPにも同様に存在します。IPv4のDHCPにおける

DNS suffix search listのオプションを規定したRFC 3397†31では、このような攻撃はDNSSECでも防げないと明記されています。これは、suffixが追加されるのがDNS問い合わせの時点であるため、DNSSECの保護の対象外となるためです。

†30 RFC 1035:P.V. Mockapetris, “Domain names - implementation and specification”, 1987年11月

Page 154: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

140 第7章 近隣探索プロトコル

なお、不正なRouter Advertisementメッセージによるセキュリティ上の問題は、DNSSLに限りません。Router Advertisementメッセージに関連するセキュリティに関しては、15.4節をご覧ください。

7.6 IPv6におけるon­linkとoff­link同一リンクに接続されていることを ‌on-link‌、同一リンクに接続されていないことを ‌off-link‌と表現することがあります。IPv6と IPv4では、サブネットに対するon-linkとoff-linkのモデ

ルが異なります。

IPv4では、IPv4アドレスとネットマスクを用いて、同一サブネットに属する IPv4アドレスが

on-linkであるかどうかを判定できます。しかし、IPv6では、IPv6アドレスとネットワークプ

レフィックスによりon-linkかどうかを決定することはできません。IPv6で自動的にon-link

であると判定可能なのは、リンクローカルアドレスのみなのです。

IPv6でアドレスとネットワークプレフィックスだけでon-linkを判断できないのは、IPv4と

異なり、1つのネットワークインターフェースに複数の IPv6アドレスが設定できるからです。

たとえば、図7.16のような、2つのルータと2つのホストからなるネットワークがあるとし

ます。ホストAとホストBが2台の機器が接続されているリンクは、それぞれ別々のネット

ワークプレフィックス2001:db8::/64と3ffe::/64をRouter Advertisementメッセージ

によって広告しているルータ1とルータ2によって同時に運用されています。

ルータ

ルータ

ホストA

ホストB

2001:db8::a

2001:db8::/64

3ffe::/64

3ffe::b

▲ 図7.16 2つのルータと2つのホストからなるネットワーク

ホストAのネットワークインターフェースには2001:db8::aという IPv6アドレス、ホス

トBのネットワークインターフェースには3ffe::bという IPv6アドレスが設定されていると

しても、ホストAから3ffe::bという IPv6アドレスに対する通信でルータを経由する必要は

特にありません。2001:db8::aと3ffe::bは同一のリンクに接続しているからです。この場

合、ホストAにとって、ホストBのネットワークインターフェースに設定されている3ffe::

bはon-linkであり、on-linkのノードに対してはルータを経由させずにパケットを届けること

ができるはずです。IPアドレスのネットワークプレフィックスが違うというだけでホストB

がoff-linkであると自動的に判定してしまうと、リンク層ではルータにパケットを転送しても

†31 RFC 3397:B. Aboba, S. Cheshire, “Dynamic Host Configuration Protocol (DHCP) Domain Search Option”,

2002年11月

Page 155: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.6 IPv6におけるon-linkとoff-link 141

らうような送信方法を採用してしまうでしょう。on-linkであるノードに対して直接パケット

を送信するには、宛先となる IPv6アドレスがon-linkなのかoff-linkなのかを判断することが

IPv6では重要な問題になるのです。

NOTE

図7.16では、2つの異なるネットワークプレフィックスを表現するために、例示用の IPv6アドレス2001:db::/32だけではなく3ffe::/16を利用しています。3ffe::

/16は、かつて6boneと呼ばれていた仕組みのために割り当てられていた IPv6アドレスです。しかし、すでにRFC 3701によって IANAに返却されており、シスコシステムズ社の各種マニュアルなどでも、3ffe::/16が例示用のアドレスとして利用されています。そこで、本書でも3ffe::/16を例示用として採用することにしました。本書では利用していませんが、5f00::/8もRFC 3701によって IANAに返却されており、例示用に使われる場合があります。

7.6.1 Prefix InformationオプションのLフラグon-linkかどうかの判定材料として、Router Advertisementメッセージに含まれる Prefix

Informationオプション(7.5.3項参照)があります。ルータは、Router Advertisementメッ

セージにPrefix Informationオプションを含めることで、on-linkとみなすプレフィックスを

リンク上に広告できます。このRouter Advertisementメッセージを受け取ったルータとノー

ドは、ルーティングテーブルにon-linkの経路を保持することになります(RFC 4903の4.2

参照)。

Prefix Informationオプションには、そこに含まれる情報をon-linkであることの判断に

利用してもよいことを示す Lフラグが含まれます。Lフラグが 1になっていれば、Prefix

Informationオプションが示すプレフィックスをon-linkの判定に利用してよいということで

す。Lフラグが0の場合は、そのRouter Advertisementメッセージはon-linkやoff-linkに関

して何も示さないことを意味します。通常の状態では、Lフラグは1にセットされます。なお、

近隣探索プロトコルを定義しているRFC 4861では、Lフラグが0であることをもってPrefix

Informationオプションにより受け取ったプレフィックスがoff-linkであると判定してはなら

ないとあります。

NOTE

RFC 3756では、偽のRouter Advertisementメッセージによってoff-linkであるネットワークプレフィックスをon-linkであると誤認させるという攻撃の可能性が紹介されています。

7.6.2 Redirectメッセージ近隣探索プロトコルのRedirectメッセージは、宛先がon-linkであることを示すために使わ

れることがあります。Redirectメッセージが示すTarget Addressがリンクローカルアドレス

ではなく、かつDestination AddressがTarget Addressと同じものであるとき、そのメッセー

Page 156: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

142 第7章 近隣探索プロトコル

ジはTarget Addressで示される宛先がon-linkであることを示します。

on-linkであるにもかかわらず、宛先に対してリンク上で直接パケットを送信するのではな

く、ルータに対してパケットを送信した場合、ルータはパケット送信元に対してRedirectメッ

セージを送信します。Redirectメッセージは、宛先がon-linkであるため、ルータではなく直

接宛先に対してリンク上でパケットを送信できることを示します。

7.6.3 off­linkであることは明示できないRFC 5942は、RFC 4861でも示されているリンクとサブネットの関係について、より明確に

解説したものです。IPv6のサブネットモデルとして、on-linkやoff-linkを判定する際のホス

トの挙動、正しく IPv6が実装されたホストが従うべきルール、間違った実装例などが紹介され

ています。

RFC 5942によれば、IPv6の近隣探索プロトコルにおいて、ある特定の宛先がoff-linkであ

ることを明確に示すための仕組みは存在しません。on-linkであることが明示された場合のみ、

宛先をon-linkとして扱えます。Redirectメッセージでも、off-linkであることを示すようなシ

グナリングは行いません。Redirectメッセージは、あくまでも次ホップとしてより最適なノー

ドを示すものなのです。

7.6.4 Neighbor Advertisementメッセージと近隣探索メッセージRFC 5942は、IPv6サブネットモデルを解説しているだけではなく、近隣探索プロトコルを

定義しているRFC 4861を更新するStandards TrackのRFCでもあります。RFC 4861では次

の2点がon-linkの定義とされいましたが、これらはRFC 5942により削除されています。

r そのアドレスからNeighbor Advertisementメッセージを受け取ったことr そのアドレスから何らかの近隣探索メッセージを受け取ったことこれらが削除されたのは、Neighbor Advertisementメッセージに、本来は遠隔に存在して

いる宛先をon-linkであると誤認させるように偽造することで、パケットの送信先を同一リン

ク上のノードへと変えられてしまうという脆弱性がありうるからです(15.2節参照)。

7.6.5 on­link assumptionに関する仕様変更本書執筆段階における近隣探索プロトコルは、RFC 4861によって定義されています。RFC

4861は、それ以前の近隣探索プロトコルを定義していたRFC 2461を上書き廃止するもの

です。

RFC 2461には、「ホストにおけるデフォルトルータのリストが空である場合には、すべての

経路をon-linkであると想定する」という仕様があります。この仕様は ‌on-link assumption

‌と呼ばれます。on-link assumptionには、本来であれば経路が存在しないはずのネットワー

クプレフィックスがon-linkであるとの誤認を招き、AAAAレコードとAレコードの両方がDNS

に登録された通信相手に対して IPv4ではなく IPv6を優先しようとすることで通信開始が遅

れるなどの問題があることがRFC 4943で指摘されています。そのような問題を回避するた

Page 157: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

7.6 IPv6におけるon-linkとoff-link 143

め、RFC 4861では、RFC 2461に含まれていたon-link assumptionの仕様が含まれなくなり

ました。

NOTE

RFC 3756では、デフォルトルータを「殺す」ことによって意図的にデフォルトルータのリストが空の状態を発生させることで、リンク内のホストに対しすべてのネットワークプレフィックスがon-linkであると誤認させるように誘導する手法が解説されています。

7.6.6 マルチリンクサブネットの問題マルチリンクサブネットは、同一リンクではなく、off-linkでありながらも、ネットワーク

プレフィックスは同じになるという仕組みです。マルチリンクサブネットでは、複数のリンク

を1つのサブネットとして扱います。IPv6でマルチリンクサブネットを可能にするための提案

が IETFで行われたことがあります。

しかし、本書執筆時点では、IPv6で複数のリンクにまたがるマルチリンクサブネットは採

用されていません。IPv6アドレス体系を定義しているRFC 4291†32の2.1節では、IPv6のサブ

ネットプレフィックスに関して以下のように記述しています。

Currently, IPv6 continues the IPv4 model in that a subnet prefix is associated with

one link. Multiple subnet prefixes may be assigned to the same link.

現在、IPv6では、サブネットプレフィックスは1つのリンクであるという IPv4のモデル

を引き続き採用している。複数のサブネットプレフィックスを同一のリンクに対して割

り当てることは可能である。

マルチリンクサブネットに関連する問題点はRFC 4903でまとめられています。そこでは、

近隣探索プロトコルのような同一リンク内での利用を想定しているプロトコルが採用してい

るTTLやHop Limitが想定している挙動にならないおそれがあること、リンクスコープマルチ

キャストが想定どおりに動作しない可能性があること、リンクスコープマルチキャストの利用

を前提としているDADが正しく動作しない可能性があることなどが紹介されています。また、

SENDを例として、サブネットが単一のリンクによって構成されることを想定しているセキュ

リティプロトコルが正しく動作しない可能性も紹介されています。

†32 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月

Page 158: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 159: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第8章

IPv6アドレスの自動設定

IPで通信するには、利用するネットワークインターフェースに IPアドレスを設定する必要が

あります。IPv4では、当初は手動設定のみを前提としていましたが、あとから作られたDHCP

(Dynamic Host Configuration Protocol)を使うことで、IPv4アドレスを動的に自動設定でき

るようになりました。

これに対し、IPv6では最初から IPv6アドレスを自動的に設定する方法が議論されており、そ

のための機能がプロトコルそのものに組み込まれています。この IPv6に組み込まれた機能は ‌SLAAC ‌(StateLess Address AutoConfiguration、ステートレスアドレス自動設定)と呼ばれます。

ただし、IPv6でDHCPによる動的なアドレス設定をまったく使わないわけではありません。

IPv6で利用できる ‌DHCPv6 ‌という規格も同時に存在しています。したがって、IPv6アドレス

を自動設定する手法としては、SLAACを利用する手法と、DHCPv6を利用する手法の2種類が

あります。

さらに、一般にインターネットを利用するには IPアドレスの設定だけではなく、名前解決

を行うためのDNSキャッシュサーバの IPアドレスも必要です。DHCPで IPアドレスとDNS

キャッシュサーバの両方を同時に設定すればよかった IPv4と違い、IPv6ではDNSキャッシュ

サーバの自動設定もステートレスな方法とDHCPv6によるステートフルな方法の2種類があり

ます。

IPv6アドレスの自動設定方法と、DNSキャッシュサーバの設定方法について整理すると、以

下の3種類になります。

IPv6アドレスの自動設定 DNSキャッシュサーバの設定

SLAAC ステートレスDHCPv6

SLAAC Router Advertisementメッセージ

DHCPv6 ステートフルDHCPv6

Page 160: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

146 第8章 IPv6アドレスの自動設定

NOTE

普通は、上記3種類のうちのどれか1つの組み合わせが使われますが、仕様上は複数の組み合わせが同時に1つのセグメント上で稼働する可能性があります。そのようなとき、たとえばRouter AdvertisementメッセージとDHCPv6とで異なるMTU情報が広告された場合など、設定情報の競合が発生する可能性もあります。また、偽サーバによる設定情報の広告も考えられます。本書執筆時点では、IPv6における IPアドレス自動設定に関連する議論は完全に収束しているとはいえず、少しややこしい状態です。

自動設定される IPv6アドレスは、ネットワークインターフェースに対し、あらかじめ決めら

れた期間だけ貸し出されている(leased)ものです(貸し出し時間が無限の場合もあります)。

自動設定された IPv6アドレスには、そのアドレスが設定されてからの経過時間が記録されてお

り、有効期間が切れると他のネットワークインターフェースがそのアドレスを利用する可能性があります。自動設定される IPv6アドレスが利用可能であるときの状態には、‌preferred‌(推奨)と ‌deprecated‌(非推奨)の2つがあります。「deprecated」という英単語は、完全に廃止

されたという意味で使われることが多い「obsolete」よりも、多少ゆるい表現といえます。実

際、自動設定された IPv6アドレスの有効期間が切れてdeprecatedの状態にある IPv6アドレス

も、使うことが禁止されているわけではありません。RFC 4862でもそのように明示されてお

り、あくまでもそのまま使うことが「推奨されない」という状態の IPv6アドレスなのです。

NOTE

deprecatedの状態にある IPv6アドレスを新規のTCP接続などで使う場合には、pre-

ferredの状態にある IPv6アドレスを使うべきです。RFC 4862では、すでに継続しているTCP接続などではdeprecatedの状態にあるアドレスを使い続けてもよいとしています。

自動設定される IPv6アドレスには、 ‌Preferred-Lifetime ‌と ‌Valid-Lifetime ‌の2種類の有効

期間があります。図8.1のように、自動設定の最中の IPv6アドレスの最初の状態は ‌tentative

‌(仮)です。IPv6アドレスが確定すると、Router AdvertisementメッセージやDHCPv6メッ

セージに含まれるパラメータであるPreferred-Lifetimeの間は、preferredの状態になります。

Preferred-Lifetimeを超えたけれどもValid-Lifetimeを超えない間は、deprecated(非推奨)

の状態です。Valid-Lifetimeを超えてしまうと、完全に利用が禁止された ‌invalid‌(無効)という状態になります。

本章では、まずSLAACによる IPv6アドレスの自動設定について解説します。それに続き、

RFC 8106†1(旧RFC 6106†2)で追加された、Router AdvertisementメッセージによるDNS

キャッシュサーバの設定機能について解説します。DHCPv6については第9章で説明します。

†1 RFC 8106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2017年3月†2 RFC 6106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2010年11月

Page 161: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.1 SLAACの流れ 147

Valid-Lifetime

Preferred-Lifetime

利用可重複アドレス検知中 利用不可

時間

tentative deprecated invalidpreferred

▲ 図8.1 自動設定されるアドレスの有効期間とステート

8.1 SLAACの流れ‌SLAAC ‌(StateLess Address AutoConfiguration)は、RFC 4862†3で定義されている IPv6

アドレスの自動生成方法です。RFC 4862では、RFC 4861†4で定義されている近隣探索プロト

コルなど、他のRFCで定義されている仕組みを組み合わせてSLAACを実現する方法が解説さ

れています。RFC 4862によると、IPv6アドレス自動生成の流れは以下のようになります。

rリンクローカル IPv6アドレスの自動生成

MACアドレスなどをもとに各機器でインターフェース識別子を生成し、それにリンクロー

カル IPv6アドレスのプレフィックスを付けます。r重複アドレスの検知(DAD、Duplicate Address Detection)

自動生成したアドレスが有効かどうかを確認します。rグローバル IPv6アドレスの自動生成

MACアドレスなどをもとに各機器でインターフェース識別子を生成し、それにルータから

教えてもらったサブネットのプレフィックスを付けます。

このように、SLAACでは、まずはリンク内での通信を行うためのリンクローカル IPv6アド

レスを生成し、生成したリンクローカル IPv6アドレスが他のノードと衝突していないかを調

べたうえで、グローバル IPv6アドレスを得るための通信を行います。

NOTE

SLAACは IPv6で通信するホストのために設計された仕組みであり、ルータは対象外です。実際、RFC 4862には、「ホストの IPアドレス自動生成がルータからの情報に依存しているため、ルータは別の方法で設定を行う必要がある」と記されています。ただし、リンクローカル IPv6アドレスの生成方法と、DADによる重複 IPv6アドレスの検知に関しては、ルータについてもRFC 4862の方法を使うとされています。

†3 RFC 4862:S. Thomson, T. Narten, T. Jinmei, “IPv6 Stateless Address Autoconfiguration”, 2007年9月†4 RFC 4861:T. Narten, E. Nordmark, W. Simpson, H. Soliman, “Neighbor Discovery for IP version 6 (IPv6)”,

2007年9月

Page 162: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

148 第8章 IPv6アドレスの自動設定

8.2 小規模ネットワークにおけるSLAACの利用例IPv6アドレス自動設定について大まかなイメージを把握するために、小規模なネットワーク

におけるSLAACの利用例を紹介します。IPv6で運用されているルータとホストが同一リンク

に1台ずつ接続されている図8.2のようなネットワークで、ホストが起動と同時に IPv6アドレ

スの自動設定を行う場合を考えます。

NOTE

ここで紹介するのは、あくまでも考えられる利用例のひとつです。SLAACに関連する各RFCには、具体的な手順やオプションの組み合わせ例などは記載されておらず、開発者や運用者が柔軟に実装できるようになっています。本書では、あくまでもSLAACの全体像を説明することを目的に、考えられる手順とオプションの組み合わせ例を紹介しています。また、DHCPv6を利用する場合の例については、9.3節で紹介します。

ルータ

ホスト

▲ 図8.2 小規模なネットワーク例

ホストは、このリンクに接続すると、そのインターフェースに対してリンクローカルアドレ

スを自動生成します。この、ホストが自動生成したリンクローカルアドレスは、この段階では

まだ仮のものという扱いです(tentative)。Neighbor AdvertisementメッセージとNeighbor

Solicitationメッセージを利用したDADにより、同じアドレスを利用している他のインター

フェースが同一リンクに存在しないことを確認できたら、正式なリンクローカルアドレスとな

ります。正式なリンクローカルアドレスが確定後、この例のホストでは、自発的なNeighbor

Advertisementメッセージをリンクに送信しています。

次にホストは、このインターフェースに対するグローバルアドレスを設定するために、

Router Solicitationメッセージを全ルータマルチキャストアドレスに向けて送信します。これ

を受け取ったルータでは、このホストに対してRouter Advertisementメッセージを返答しま

す。このRouter Advertisementメッセージには、このリンクで利用可能なプレフィックス情

報がオプションとして含まれています。ホストは、この情報を使って、インターフェースにグ

ローバルアドレスを設定します。こうして自動生成されたグローバルアドレスは、リンクロー

カルアドレスのときと同様に、DAD後に正式なものとなります。

図8.3に、上記の流れを示します。

Page 163: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.2 小規模ネットワークにおけるSLAACの利用例 149

ICMPv6ヘッダ

IPv6ヘッダ

Target AddressType

fe80::1234

135

Type 136

送信元 ::/128

宛先 ff02::1:ff00:0:0:1234(Solicited-Node マルチキャストアドレス)

仮のリンクローカルIPv6アドレスを生成

DAD

リンクローカルIPv6アドレスを確定

on-linkプレフィックスを通知

例 64

ルータ

Neighbor Solicitationメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Target Address fe80::1234

送信元 fe80::1234

宛先 ff02::1(全ノードマルチキャスト)

Type 133ICMPv6ヘッダ

IPv6ヘッダ

送信元 fe80::1234

Hop Limit 255

宛先 ff02::2(全ルータマルチキャスト)

Neighbor Advertisementメッセージ

Router Solicitationメッセージ

Type 134

Prefix Length 64

ICMPv6ヘッダPrefix Informationオプション

IPv6ヘッダ

送信元 ルータのインターフェース

Hop Limit 255宛先 fe80::1234

Router Advertisementメッセージ

例 fe80::1234

仮のグローバルIPv6アドレスを生成

例 2001:DB8::1234/64

Neighbor Advertisementメッセージを受け取らない

ことを確認

ICMPv6ヘッダ

IPv6ヘッダ

Target AddressType

2001:DB8::1234

135

Type 136

送信元 ::/128

宛先 ff02::1:ff00:0:0:1234(Solicited-Node マルチキャストアドレス)

Neighbor Solicitationメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Target Address 2001:DB8::1234

送信元 2001:DB8::1234

宛先 ff02::1(全ノードマルチキャスト)

Neighbor Advertisementメッセージ

グローバルIPv6アドレスを確定

Neighbor Advertisementメッセージを受け取らない

ことを確認

DAD

▲ 図8.3 小規模なネットワーク例におけるSLAACの一例

NOTE

エニーキャストアドレスに対してはDADは行われません。また、ホストの設定によってグローバルアドレスに対するDADが無効になる場合もありますが、RFC 4862では推奨されていません。

Page 164: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

150 第8章 IPv6アドレスの自動設定

8.3 リンクローカルIPv6アドレスの生成リンクローカル IPv6アドレスは同一セグメント内でのみ通信が可能な IPv6アドレスであり、

近隣探索プロトコルなどでも利用される重要な IPv6アドレスです(4.6節参照)。リンクロー

カル IPv6アドレスの有効期間は無限であり、タイムアウトによって再生成されるといったこ

とはありません。

IPv6ノードは、ネットワークインターフェースが有効になると、まずはこのリンクローカル

IPv6アドレスの生成を試みます。RFC 4862では、ネットワークインターフェースが有効にな

るタイミングとして、以下のような状況が想定されています。

r システムが起動する段階でネットワークインターフェースが初期化される場合r 何らかの理由でネットワークインターフェースに障害が発生し、再度初期化される場合r システム管理者によってネットワークインターフェースが再度初期化される場合r ネットワークインターフェースが最初にリンクに接続する場合。たとえば無線ネットワークのアクセスポイントが変化した場合などr システム管理者によって一時的にネットワークインターフェースが無効化され、再度有効化された場合

リンクローカル IPv6アドレスを定義するRFC 4291†5では、リンクローカル IPv6アドレス

のプレフィックスをfe80::/64としていますが、インターフェース識別子のビット数はリン

クの種類と生成方法によって異なるので、SLAACを定義するRFC 4862ではリンクローカル

IPv6アドレスの構成方法について以下のように定めています。

1. IPv6アドレスの左側にある「プレフィックス長」分のビットを、リンクローカルプレ

フィックスとする

2. リンクローカルプレフィックスの右側部分のビットをすべて0にする

3. インターフェース識別子がnビットなら、IPv6アドレスの右側nビットをインター

フェース識別子とする(ただしプレフィックス長とnの合計が IPv6アドレスのビット

数である128よりも大きくなってはならない)

上記の3で利用するインターフェース識別子については、いくつか生成方法が考えられます。

8.4 SLAACにおけるインターフェース識別子の生成方法RFC 4291の Section 2.5.1では、プレフィックス長64ビットで下位64ビットをインター

フェース識別子とするとき、下位64ビットの一意性を確保する手段として、拡張EUI-64形式を使うことが要求されています。そのうえで、RFC 4291のAppendix Aでは、イーサネット

におけるMACアドレスを使って拡張EUI-64形式のインターフェース識別子を生成する方法が

解説されています。

しかし、MACアドレスを利用する拡張EUI-64形式には、プライバシーに対する懸念もあり

ます。そのため、乱数に基づくインターフェース識別子からプライバシーを考慮した一時的な

†5 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月

Page 165: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.4 SLAACにおけるインターフェース識別子の生成方法 151

IPv6アドレスを生成する方法もRFC 4941†6で規定されています。さらに、2014年に発行さ

れたRFC 7217†7では、SLAACで拡張EUI-64形式を使わない方法が示されました。

2017年に発行されたRFC 8064†8では、SLAAC以外の仕様においても、固定されたインター

フェース識別子の扱いが SHOULD NOT(非推奨)とされました。ただし、RFC 8064は拡張

EUI-64形式そのものを非推奨としているわけではなく、固定されたインターフェース識別子を

生成する方法としてRFC 2464で定義されている方法を利用しないことを推奨しているため、

たとえばMACアドレス自体が定期的にランダムに変化するような固定ではなくなる場合にお

いて拡張EUI-64形式を利用することが非推奨とされているわけではありません。また、MUST

NOT(禁止)ではないので拡張EUI-64形式による固定されたインターフェース識別子が完全

に消えるわけではなく、実際の運用でも広く利用されていることから、本書でもイーサネット

のMACアドレスから拡張EUI-64形式のインターフェース識別子を生成する手法を説明してお

きます。

8.4.1 拡張EUI­64形式による IPv6アドレス生成IEEE 802で規定されている48ビット長のMACアドレス(EUI-48形式)から、64ビット長

のEUI-64形式のアドレスを生成する手法は、IEEEで規定されています。IPv6で利用する拡張

EUI-64形式と、IEEEで規定されているEUI-64形式との違いは、元のEUI-48に含まれるuビッ

トを反転させる点です。

EUI-48形式では先頭オクテットのうち0x02のビットをuビットと呼び、このビットが0の

場合は IEEEによって管理されたユニバーサルなアドレスであることを意味します。逆に、そ

のビットが1である場合はローカルな管理者によって独自に付けられたアドレスであることを

意味します。また、EUI-48形式では先頭オクテットのうち0x01のビットをgビットと呼び、

このビットが1であればそのMACアドレスはリンク層におけるマルチキャストアドレスにな

ります。

EUI-48形式のユニバーサルなMACアドレスでは、上位24ビット(3オクテット)がOUI

(Organizationally Unique Identifier)と呼ばれる製造者識別子を表します。OUIは、製造者

が IEEEに1650米ドルを支払って登録するものであり、一意性が確保されています。EUI-48ア

ドレスの下位24ビットは、各製造者が独自に割り当てられる機器識別子です。

EUI-48形式のアドレスから、IPv6アドレスで利用する拡張EUI-64形式のインターフェース

識別子を生成するには、図8.4のようにOUI部分のuniversal/localビットを反転させたうえ

で、OUI部分と機器識別子部分の間に0xfffeという16ビットを挿入します。

OUIのuniversal/localビットは、0がセットされた場合にグローバルに一意な値である

ことを示し、1がセットされた場合にはローカルな値であることを示しています。この

†6 RFC 4941:T. Narten, R. Draves, S. Krishnan, “Privacy Extensions for Stateless Address Autoconfiguration

in IPv6”, 2007年9月†7 RFC 7217:F. Gont, “A Method for Generating Semantically Opaque Interface Identifiers with IPv6 State-

less Address Autoconfiguration (SLAAC)”, 2014年4月†8 RFC 8064:F. Gont, A. Cooper, D. Thaler, W. Liu, “Recommendation on Stable IPv6 Interface Identifiers”,

2017年2月

Page 166: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

152 第8章 IPv6アドレスの自動設定

universal/localビットを反転させる理由として、RFC 4291の Section 2.5.1では、「ハード

ウェアが存在しないネットワークインターフェースに対して、ネットワーク運用者がインター

フェース識別子を付けやすいように」という説明が書かれています。OUIでは、グローバルに

一意な値である場合にはuniversal/localビットが0なので、0:0:0:1のような値はグローバ

ルに一意です。IPv6でグローバルに一意ではないものを示すために0200:0:0:1というイン

ターフェース識別子を使うより、IPv6ではuniversal/localビットの示す値の内容を反転させ

ることで、たとえば0:0:0:1というインターフェース識別子がグローバルに一意ではないも

のを示すようにしたわけです。RFC 4291では、拡張EUI-64形式のuniversal/localビットで

示される一意性に関して、IPv6ノードが検証することを要求しておらず、その存在理由につ

いても「将来それを利用するテクノロジで活用できるようにするため」とされています。しか

し、拡張EUI-64形式は、universal/localビットが実際に使われることがないままRFC 8064で

非推奨となりました。

universal/localビットを反転させるのは IPv6用の拡張ですが、0xfffeの挿入は IEEEによっ

て規定されたEUI-64の生成方法です。この0xfffeは、EUI-48形式をカプセル化してEUI-64

形式のアドレスを生成するために予約された値であり、他のEUI-64形式のアドレスと被らな

いようになっています。

0xac 0xde 0x48

0xac 0xde 0x48

0x11

0xff 0xff

0x22 0x33

0x11 0x22 0x33

0xae 0xde 0x48 0xff 0xfe 0x11 0x22 0x33

製造者識別子(OUI-24)(24ビット)

拡張ビット(16ビット)

機器識別子(24ビット)

MACアドレス(EUI-48)

EUI-64形式

拡張EUI-64形式

1010 1100

1010 1110

universal/localビット

▲ 図8.4 EUI-48形式から拡張EUI-64形式の生成

■ RFC 7136での変更RFC 4291では以下のように規定されているので、通常のユニキャスト IPv6アドレスはすべ

て拡張EUI-64形式になっている必要がありました。

IPv6アドレスの先頭3ビットが000でないすべてのユニキャスト IPv6アドレスのイン

ターフェース識別子は64ビット長であり、その部分は拡張EUI-64形式によって構成さ

れる必要がある。

Page 167: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.5 DAD(Duplicate Address Detection) 153

しかし、2014年に発行されたRFC 7136†9では、この部分が次のように修正されています。

IPv6アドレスの先頭3ビットが000ではないすべてのユニキャスト IPv6アドレスのイ

ンターフェース識別子は64ビット長である必要がある。もしインターフェース識別子

が IEEE MAC層のアドレスから生成されているのであれば、その部分は拡張EUI-64形式

によって構成されなければならない。

この変更により、プライバシーを考慮したインターフェース識別子や、ISATAP用のイン

ターフェース識別子、4rd用のインターフェース識別子などの IEEE MAC層アドレスとは関係

がないインターフェース識別子で、uビットとgビットを扱う必要がなくなりました。

8.5 DAD(Duplicate Address Detection)‌DAD ‌(Duplicate Address Detection)は、IPv6アドレスをネットワークインターフェース

に設定する前に、リンク内で重複するアドレスが利用されていないかを調べるための手順で

す。SLAACを定義しているRFC 4862でDADも定義されています。

ネットワークインターフェースに対して新たに IPv6アドレスを追加する前には、その IPv6

アドレスが同一リンク内で他のノードによって使われていないか確かめるため、必ずDADを

実行する必要があります。ただし例外として、以下の状況ではDADを実行しなくてよい場合

もあります。

r DupAddrDetectTransmitsという変数が 0に設定されているネットワークインター

フェースに対しては、DADは実行されないr エニーキャストでは同じ IPv6アドレスで示される宛先がリンク内に同時に複数存在する

可能性があるので、エニーキャストアドレスに対してDADを行うことは禁止されている

(エニーキャストに関しては第13章参照)r 実装によってはDADを意図的に実行しないこともある(RFC 4862では推奨されてい

ない)

DADによって、同一リンク内の他ノードが同じ IPv6アドレスを使っていないと判断された

ら、ネットワークインターフェースに対して IPv6アドレスが設定されます。DADの実行と並

行してネットワークインターフェースに IPv6アドレスを設定することは禁止されています。

並行して新しい IPv6アドレスを設定してしまうと、衝突が発生した際、同じ IPv6アドレスで

先に運用されていた他ノードのTCPコネクションをリセットしてしまうといった影響がある

からです。

DADが失敗した場合、その IPv6アドレスをネットワークインターフェースに設定すること

は禁止されています。RFC 4862には、もし当該の IPv6アドレスがイーサネットのMACアド

レスなどのハードウェアアドレスから生成したEUI-64形式の値であり、リンク上で一意の値

であるはずという場合には、そのネットワークインターフェースで IPv6を利用した通信を控

†9 RFC 7136:B. Carpenter, S. Jiang, “Significance of IPv6 Interface Identifiers”, 2014年2月

Page 168: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

154 第8章 IPv6アドレスの自動設定

えるべきとあります†10。IPv6アドレスの重複がハードウェアアドレスの重複を示している場

合、他の重複していない IPv6アドレスを設定したとしても下位層での通信に失敗する可能性

が高いためです。

なお、DADは完全ではないため、同一リンク内に同じ IPv6アドレスが複数登場してしまう

可能性もある点に注意が必要です。また、自分自身が送信したNeighbor Solicitationメッセー

ジを自分で受け取ってしまう可能性もあります。

8.5.1 DADにおけるNeighbor SolicitationメッセージとNeighborAdvertisementメッセージの送受信

DADでは、ネットワークインターフェースに設定しようとしている IPv6アドレスが他の

ノードによって利用されていないことを確認するために、これから設定しようとしている IPv6

アドレスをTarget Addressフィールドに設定したNeighbor Solicitationメッセージを送信

し、その応答が他ノードからこないことを確認します。Neighbor Solicitationメッセージに対

する応答としてNeighbor Advertisementメッセージが届いた場合には、すでに他のノードが

その IPv6アドレスを利用していることがわかります。

DADで送信されるNeighbor Solicitationメッセージでは、Target Addressフィールドには

確認したい IPv6アドレスを、IPv6ヘッダに記載される送信元 IPv6アドレスには未定義アドレ

ス(::/128)を、IPv6ヘッダに記載される宛先 IPv6アドレスには確認したい IPv6アドレスに

対応するSolicited-Nodeマルチキャストアドレス(12.3節参照)を含めます。

ノードは、Neighbor Solicitationメッセージを送信する前に、全ノードマルチキャストと、

確認したい IPv6アドレスに対応するSolicited-Nodeマルチキャストグループに参加しておく

必要があります。全ノードマルチキャストに参加することで、すでにその IPv6アドレスを利用

しているNeighbor Advertisementメッセージを受け取れるようになります。Solicited-Node

マルチキャストグループに参加することによって、他のノードが同じ IPv6アドレスを利用し

ていることを検知できます。

NOTE

実は、このDADの段階では、マルチキャストにかかわる ICMPv6メッセージ(MLDメッセージ)を送信する際の送信元 IPv6アドレスとして利用可能な IPv6アドレスが存在しないという問題があります。DADとMLDに関する課題については12.5.5項で扱います。

DADでは、Neighbor Solicitationメッセージを一定の回数だけ送信したあと、あらかじめ

設定したミリ秒が経過したことをもって、競合する IPv6アドレスが同一リンク上に存在しな

いと判断します。

送信回数を管理する変数は、DupAddrDetectTransmitsと呼ばれます。この変数はノード

で設定が可能です。DupAddrDetectTransmitsに0を設定すれば、DADを実行しないこと

を示します。RFC 4862では、DupAddrDetectTransmitsのデフォルト値を1としています。

†10 ただし、8.4節で述べたように、ハードウェアアドレスを利用した IPv6アドレスの生成は推奨されていません。

Page 169: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.5 DAD(Duplicate Address Detection) 155

待ち時間は、RetransTimerという変数で管理します。近隣探索プロトコルを定義している

RFC 4861では、RetransTimer変数の値として、Router Advertisementメッセージに含ま

れるRetrans Timerフィールドの値をコピーして使うことを推奨しています。RFC 4861に記

載されているRetrans Timerフィールドで使われるデフォルト値は1000ミリ秒です。

8.5.2 Enhanced DADIPv4マルチキャストの仕様を示したRFC 1112では、「自分自身がマルチキャストグループ

に対して送信しているパケットを自分自身に対して送信する方法」を提供することを推奨して

います。これは、同じマルチキャストグループに参加している他のアプリケーションが同一ホ

スト内に存在する可能性があるため、同一ホスト内でのループバックが存在しなければ、同一

ホストから送信されるマルチキャストパケットを受け取れなくなってしまうからです。

IPv6でも、IPv4と同様に、マルチキャストで送信されるパケットがループバックされる

ことがあります。Neighbor Solicitationメッセージもマルチキャストで送信され、DADの実

行時にはそのマルチキャストグループに参加します。そのため、自分自身が送信したDAD

のためのNeighbor Solicitationがループバックで戻ってきてしまい、それを他ノードからの

Neighbor Solicitationと誤検知してしまうという問題があります。この問題についてはRFC

4862のAppendix Aで解説されています。

この問題に対する緩和策として、‌Enhanced DAD ‌という方式がRFC 7527で定義されてい

ます。Enhancedは、改善された、という意味を持つ英単語です。

RFC 7527では、DADでループバックを検知する必要性があるとしています。それを示すた

めに、ループバックによるDADの誤検知が発生する環境として、RFC 4862よりも具体的な状

況が2つ紹介されています。

1つめの事例は、トラブルシューティング用にループバックする回路がネットワーク上に用

意されていて、ルータが送出したNeighbor Solicitationメッセージがループバックされること

でDADに失敗してしまい、ルータのネットワークインターフェースに IPv6アドレスが割り当

てられなくなってしまうという状況です。IPv4ではループバックしている回路を停止すれば

通常の動作に戻りますが、IPv6ではDADが失敗した状態から復帰するために手動での介入が

必要になってしまうという問題があります。

2つめの事例は、2つのブロードバンドモデムが同じサービスプロバイダに接続しつつ、物

理的に1台のルータに収容されており、さらに2つのモデムのイーサネットインターフェー

スが同じコリジョンドメインとなるローカルネットワークに接続されているという状況です。

ルータから送信されたNeighbor Solicitationメッセージが片方のモデムに届くと、そのモデ

ムからもう片方のモデムに対してローカルネットワーク経由でメッセージが転送され、それが

そのままサービスプロバイダのルータへと送信されてしまいます。こうして送信されてきた

Neighbor Solicitationメッセージにより、ルータがDADに失敗した状態になってしまいます

が、この例では当該のルータが数千台のモデムを収容することもあり、それらすべてで IPv6

ネットワークの障害を発生させてしまいます。さらにRFC 7527では、このような環境ではど

こでループバックが発生しているかをルータ側で把握するのが困難な場合もあると書かれてい

ます。

Page 170: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

156 第8章 IPv6アドレスの自動設定

RFC 7527では、Neighbor Solicitationメッセージのループバックに対する緩和策として、

DADを実行しないという方法が紹介されています。また、リンク層プロトコルがループバッ

クを検出した際にDADを無効化するという手法も紹介されています。

さらに、Neighbor SolicitationメッセージにランダムなNonceを追加することによって、自

分自身が送信したNeighbor Solicitationメッセージかどうかを判別する方法も定義されてい

ます。もし同時に複数のノードがまったく同じTarget Addressを生成し、さらにNonceの値

も同じNeighbor Solicitationメッセージが送信されれば、本来検出すべきであった IPv6アド

レスの競合を見逃してしまうことになりますが、RFC 7527ではランダムな数字の生成の品質

が高ければその可能性は低いとしています。Nonceを指定するためのNonceオプションにつ

いては15.3節を参照してください。

RFC 7527で定義されているNonceを利用する手法は、近隣探索による任意のSolicitation

やAdvertisementにおけるループバックを検出可能です。しかし、すべての近隣探索メッセー

ジに対するNonceや関連するステートを保持することによって実装が複雑になることや、消

費メモリを上昇させる可能性もあるため、DAD以外での利用は推奨されないとあります。

8.6 グローバルIPv6アドレスの生成グローバル IPv6アドレスは、ICMPv6を利用した近隣探索プロトコルによるRouter Adver-

tisementメッセージによって得られたプレフィックスに、インターフェース識別子を追加す

ることで生成されます。Router Advertisementメッセージはルータから定期的に送信されま

すが、グローバル IPv6アドレスを生成したいノードがRouter Advertisementメッセージの送

信を要求するRouter Solicitationメッセージを送信して即座に受け取ることも可能です。

Router Advertisementメッセージを利用せず、DHCPv6でグローバル IPv6アドレスを生成

することも可能です。DHCPv6については第9章で説明します。

SLAACとSLAC

SLAACを規定するRFC 4862のタイトルは “IPv6 Stateless Address Autoconfigura-

tion”です。RFC 4862が上書き廃止したRFC 2462†11も、タイトルはこれと同じです。これらのRFCが定義する IPv6アドレスの自動生成手法には、本書執筆時点では「SLAAC」という略称が使われています。これは、これらのRFCのタイトルにある “StateLess Ad-

dress AutoConfiguration”に由来するものです。RFC 4862そのものには「SLAAC」という略称は登場しません。興味深いのは、2005年に発行されたRFC 4192†12では「SLAC」という略称が使われている点です。昔はAが1つだけだったのです。面白いことに、その後のRFCを追っていくと、いつの間にか略称にAが1つ増えているように見えます。2006年に発行されたRFC 4429†13では、「SLAAC」という、Aが2

つ続く略称が使われています。RFC 4429以降のRFCでも同様です。

Page 171: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

8.7 Router AdvertisementメッセージによるDNS情報の配送 157

8.7 Router AdvertisementメッセージによるDNS情報の配送

Router Advertisementメッセージでは、2000年頃まで、DNS情報を送れない仕様になって

いました。IPv6が設計された当初は、Router AdvertisementメッセージにDNS情報を付加で

きず、DNS情報はDHCPv6を利用して別途配布することになっていました。そのような設計

になっていたのは、ネットワーク層の機能であるRouter Advertisementメッセージを利用し

て上位層で利用するDNS情報を配送することはレイヤーバイオレーションであり、プロトコ

ルとして美しくないという理由によるものです。

Router AdvertisementメッセージのオプションとしてDNS情報を付加する仕様は、2007年

に、RFC 5006†14として発行されました。RFC 5006は実験的(Experimental)とされていまし

たが、2010年にはRFC 5006を上書き廃止する形で、RFC 6106が標準(Proposed Standard)

として発行されました。RFC 5006で定義されていたのはキャッシュDNSサーバを示すRDNSS

(Recursive DNS Server)オプションのみですが、RFC 6106ではDNS suffix search listを示

すDNSSL(DNS Search List)オプションも定義されています。

さらに 2017年 3月には、RFC 6106の後継となるRFC 8106が発行されています。RFC

8106は、DNSに関連する情報をRouter Advertisementメッセージで自動設定できるように

するDNS RAオプションについて示した仕様です。DNS RAオプションで利用するRouter

Advertisementメッセージのオプション(RDNSSオプションとDNSSLオプション)について

は、7.5.6項と7.5.7項で詳しく解説します。

RFC 8106とRFC 6106の違いとしては、下記のような点が挙げられます。

r DNS RAオプションのLifetimeの最大値としてRFC 6106よりも大きな値が使われるよう

になったr Neighbor Solicitationメッセージを送信してDNS RAオプションで示された内容を確認す

ることへの言及が削除されたr RDNSSとしてリンクローカルアドレスを利用可能になったr RDNSSやDNS search domainとしてホスト側が採用する値を3つとする推奨が削除さ

れたr 実装上の注意点が一部削除された

†11 RFC 2462:S. Thomson, T. Narten, “IPv6 Stateless Address Autoconfiguration”, 1998年12月†12 RFC 4192:F. Baker, E. Lear, R. Droms, “Procedures for Renumbering an IPv6 Network without a Flag

Day”, 2005年9月†13 RFC 4429:N. Moore, “Optimistic Duplicate Address Detection (DAD) for IPv6”, 2006年4月†14 RFC 5006:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Option for DNS Con-

figuration”, 2007年9月

Page 172: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 173: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第9章

DHCPv6

IPv6では、IPv4におけるDHCPと似た ‌DHCPv6‌というプロトコルが利用されます。DHCPv6

はRFC 3315†1で定義されています。

DHCPv6には、大きく分けて次の3種類の利用形態があります。

r ステートレスDHCPv6r ステートフルDHCPv6r DHCPv6-PD

上記のうち、IPv4におけるDHCPの利用形態に近いのは、2つめに挙げたステートフルDHCPv6‌です。一方、ステートレスDHCPv6‌では、IPv6アドレス以外のパラメータについてはDHCPv6サー

バから受け取り、IPv6アドレス設定に関しては別の方法で行われます。たとえば、SLAAC(第

8章参照)を利用した IPv6アドレスの自動設定を行います†2。

このように、クライアントの IPv6アドレスをDHCPv6サーバによって管理するのがステー

トフルDHCPv6、管理しないのがステートレスDHCPv6といえるでしょう。

3つめの ‌DHCPv6-PD ‌は、ネットワークプレフィックスをクライアントに対して委任するための仕組みです。ISPなどが運用するDHCPv6-PDルータが、顧客側のブロードバンドルー

タ†3などで運用されているDHCPv6-PDルータに対して、IPv6プレフィックスを委任します。

DHCPv6-PDは、ルータがルータに対して設定情報を提供するというのが大きな特徴です。

IPv4では、DHCPを規定しているRFC 2131のSection 1.3に、“DHCP is not intended for use

in configuring routers.”という表現があります。つまり、IPv4のDHCPでは、ルータをクラ

イアントとすることが想定されていないのです。ルータをクライアントとすることを想定して

いるDHCPv6-PDの存在は、DHCPv6が IPv4のDHCPと大きく異なる点のひとつであるといえ

ます。

†1 RFC 3315:R. Droms, J. Bound, B. Volz, T. Lemon, C. Perkins, M. Carney, “Dynamic Host Configuration

Protocol for IPv6 (DHCPv6)”, 2003年7月†2 ステートレスDHCPv6で IPv6アドレス以外のパラメータを受け取りつつ、手動設定で行うこともできます。†3 こうした機器を ‌CPE‌(Customer Premises Equipment)と呼ぶことがあります。

Page 174: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

160 第9章 DHCPv6

DNSサーバをRouter Advertisementメッセージで取得すべきか、DHCPv6で取得すべきか

DNSサーバに関する情報は、Router AdvertisementメッセージのRDNSSオプションを使っても取得できます。これに対し、ステートレスDHCPv6では、IPv6ホストに対してDNSサーバの情報をDHCPv6サーバから取得させます。

DNSサーバの情報をホストに提供するという点だけ見ると、SLAACの際に利用するRouter Advertisementメッセージで取得できるわけですが、DHCPv6を使うことにも利点はあります。たとえば、ステートレスDHCPv6であれば、NTP(RFC 5908†4)、SIP

(RFC 3319†5)、NIS(RFC 3898†6)などの情報も配信可能になります。ホストにおけるDNSサーバに関する情報の取得のためにDHCPv6を使うかどうかについては、RFC 4339†7で考察されています。RFC 4339が発行されたのは2006年なので、情報が少し古い部分もありますが、DHCPv6を使う場合とSLAACのみ(DHCPv6を使わない)で行う場合の違いがわかりやすくまとめられています。

9.1 IPv4のDHCPとDHCPv6の違いDHCPとDHCPv6は、設計思想や歴史的経緯からしてまったく異なるプロトコルであり、そ

れぞれの仕様には前提となる IPv4と IPv6の違いが明確に現れています。IPv4用のDHCPと、

IPv6用のDHCPv6の主な違いとして、以下のような点が挙げられます。

r DHCPクライアントは 255.255.255.255というブロードキャストアドレスに対して

discoverメッセージを送信しますが、DHCPv6クライアントはff02::1:2というマル

チキャストアドレスに対してsolicitメッセージを送信するr DHCPはBOOTPを拡張したものであり、BOOTPのために割り当てられたUDPポート番号

67と68を利用する。DHCPv6は、DHCPv6のために割り当てられたUDPポート番号546

と547を利用するr DHCPv6を利用して IPv4アドレスを割り当てることもできるr DHCPv6にはステートレスとステートフルの2通りの使い方があるr クライアントが IPアドレスの割り当てをサーバに対して要求する際、DHCPでは IPv4ア

ドレスが決定していないので、クライアントからの IPv4パケットでは送信元アドレスと

して0.0.0.0を設定する。DHCPv6では、送信元アドレスとしてリンクローカル IPv6ア

ドレスを使うr DHCPでは、サーバからクライアントへの応答に、255.255.255.255というブロード

キャストアドレスを使う。DHCPv6では、サーバからクライアントへの応答を、クライア

†4 RFC 5908:R. Gayraud, B. Lourdelet, “Network Time Protocol (NTP) Server Option for DHCPv6”, 2010年6月

†5 RFC 3319:H. Schulzrinne, B. Volz, “Dynamic Host Configuration Protocol (DHCPv6) Options for Session

Initiation Protocol (SIP) Servers”, 2003年7月†6 RFC 3898:V. Kalusivalingam, “Network Information Service (NIS) Configuration Options for Dynamic

Host Configuration Protocol for IPv6 (DHCPv6)”, 2004年10月†7 RFC 4339:J. Jeong, “IPv6 Host Configuration of DNS Server Information Approaches”, 2006年2月

Page 175: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.2 IPv4のDHCP 161

ントのリンクローカル IPv6アドレスへのユニキャストとして送信するr DHCPは、ホストに対して IPアドレスしか設定できない。DHCPv6では、ネットワークプ

レフィックスを割り当てるためのDHCPv6-PDがある

9.2 IPv4のDHCPDHCPv6の説明をする前に、IPv4のDHCPについて紹介しておきます。DHCPが登場する以

前は、ユーザが各自で通信に必要な情報を取得し、自分で値を設定していました。設定する値

はネットワークごとに異なるので、一概には決められません。もし IPアドレスが重複するよう

なことがあれば、ネットワークに障害が発生するおそれもあります。そのため、利用可能な空

いている IPアドレスを、個々のユーザが常に把握できるようにしておかなくてはなりませんで

した。

DHCPで自動的に IPアドレスその他を割り当てることにより、インターネットに接続するた

めの負荷が大幅に軽減されました。DHCPを利用して自動的に設定できる主な情報としては、

以下のようなものが挙げられます(これで全部ではありません)。

r IPv4アドレスr ネットマスクr ブロードキャストアドレスr デフォルトルータr DNSキャッシュサーバ

NOTE

IPv6で使われるDHCPv6を知るために、IPv4のDHCPを必ずしも理解している必要はありませんが、IPv4と IPv6のデュアルスタック環境を運用する際に IPv4のDHCPに関する知識も必要になるので、ここでは概略を説明しています。詳細についてはRFC

2131†8を参照してください。

9.2.1 DHCPでの IPv4アドレス取得時の動作DHCPを使ってDHCPクライアントがネットワーク接続に必要な情報を取得して設定するま

での流れを図9.1に示します。DHCPサーバは、あるセグメントで利用可能な IPアドレスや接

続に必要な各種情報を知っているサーバです。DHCPクライアントは、そのネットワークの

ことは何も知りませんが、インターネットに接続したいので、DHCPプロトコルを利用して

DHCPサーバから各種情報を得ようとします。

†8 RFC 2131:R. Droms, “Dynamic Host Configuration Protocol”, 1997年3月

Page 176: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

162 第9章 DHCPv6

DHCPサーバ

DHCPクライアント

IPv4アドレスを設定

IPv4アドレスを利用

……

DHCP Discoverメッセージ

DHCP Offerメッセージ

DHCP Requestメッセージ

DHCP ACKメッセージ

▲ 図9.1 DHCPクライアントがDHCPサーバからネットワーク接続に必要な情報を取得する流れ

DHCPクライアントは何もわからないので、「DHCPサーバがいるのであれば情報をくださ

い」という意味のメッセージ(DHCP Discoverメッセージ)をネットワークに送付します。こ

のときの宛先アドレスは、同一セグメント上のすべてのノードを示すブロードキャストアドレ

ス255.255.255.255です。

DHCPクライアントからのDHCP Discoverメッセージを受け取ったDHCPサーバは、「こん

な設定が可能です」という意味のメッセージ(DHCP Offerメッセージ)を、DHCPクライアン

ト宛のユニキャストで送信します。DHCP Offerを受けたDHCPクライアントは、DHCPサー

バから受け取った設定情報が気に入れば「これを使わせてください」という意味のメッセージ

(DHCP Requestメッセージ)をDHCPサーバに送信します。

DHCPサーバは、DHCPクライアントからのDHCP Requestを了承し、DHCP ACKを返し

ます。DHCPクライアントがDHCP Offerを受け取ってすぐに設定しないのは、複数のDHCP

サーバが存在している状態で1つのDHCP Discoverに対して2つ以上のDHCP Offerがあった

ときに、DHCPクライアントがどれか1つを選んでDHCP Requestを送付できるようにするた

めです。

9.2.2 IPv4アドレス解放時の動作DHCPサーバは、そのセグメントで現在空いている IPアドレスを管理してDHCPクライアン

トに配っているので、あるDHCPクライアントが IPv4アドレスを使わなくなったときには、そ

のことを教えてもらったほうが効率良く IPv4アドレスを活用できます。そのため、電源が切

られるなどの理由で IPv4アドレスが不要になったDHCPクライアントは、DHCPサーバから与

えられた IPv4アドレスを解放するためにDHCP Releaseメッセージを送付します。DHCPサー

バは、DHCP Releaseメッセージを受け取ると、その IPv4アドレスが解放されたものとして扱

い、別の要求を受けたときに使えるようにします。

もし、DHCPクライアントがDHCP Releaseメッセージを送付せずにネットワークから離脱

した場合には、DHCPサーバ側でタイムアウトします。とはいえ、たとえばサスペンド状態で

長時間ダウンしていたノートPCが、タイムアウト後に急にネットワークに再接続された結果、

古い IPv4アドレスを使ってしまって IPv4アドレスが衝突してしまう、ということも割と頻繁

Page 177: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.3 DHCPv6の概要 163

に発生します。

9.3 DHCPv6の概要DHCPv6について大まかなイメージを把握するために、小規模なネットワークにおけるス

テートレスおよびステートフルのDHCPv6での動作例を紹介します。IPv6で運用されている

ルータとホストが同一リンクに1台ずつ接続されている図9.2のようなネットワーク(8.2節で

紹介したSLAACでの動作例と同じ)で、ホストが起動と同時に IPv6アドレスの自動設定を行

う場合を考えます。ルータにはDHCPv6サーバの機能が実装されており、ホストではDHCPv6

クライアントが稼働しているものとします。

NOTE

ここで紹介するのは、あくまでも考えられる利用例のひとつです。アドレス自動設定に関連する各RFCには、具体的な手順やオプションの組み合わせ例などは記載されておらず、開発者や運用者が柔軟に実装できるようになっています。本書では、あくまでもDHCPv6の全体像を説明することを目的に、考えられる手順とオプションの組み合わせ例を紹介しています。

ルータ

ホスト

▲ 図9.2 小規模なネットワーク例

IPv4におけるDHCPとDHCPv6の大きな違いとして、最初にルータが IPアドレスの自動設

定に関与するという点が挙げられます。具体的には、DHCPv6が使われることを示すために、

ルータからのRouter Advertisementメッセージに含まれるOフラグ(Other configuration)

やMフラグ(Managed address configuration)のビットを1にすることが可能です。ただし、

OフラグやMフラグはDHCPv6が利用可能であることを示すものであり、DHCPv6を運用する

うえで必須というわけではありません。これらのフラグが0という状況であっても、DHCPv6

の利用が禁止されているわけではないのです。

Page 178: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

164 第9章 DHCPv6

9.3.1 ステートレスDHCPv6利用の流れステートレスDHCPv6でホストの IPv6アドレスを設定するまでの流れを図9.3に示します。

ICMPv6ヘッダ

IPv6ヘッダ

Target AddressType

fe80::1234

135

Type 136

送信元 ::/128

宛先 ff02::1:ff00:0:0:1234(Solicited-Node マルチキャストアドレス)

仮のリンクローカルIPv6アドレスを生成

DAD

リンクローカルIPv6アドレスを確定

ルータ

Neighbor Solicitationメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Target Address fe80::1234

送信元 fe80::1234

宛先 ff02::1(全ノードマルチキャスト)

Type 133ICMPv6ヘッダ

IPv6ヘッダ

送信元 fe80::1234

Hop Limit 255

宛先 ff02::2(全ルータマルチキャスト)

Neighbor Advertisementメッセージ

Router Solicitationメッセージ

Type 134

Oフラグ ON

ICMPv6ヘッダ

IPv6ヘッダ

送信元 ルータのインターフェース

Hop Limit 255宛先 fe80::1234

Router Advertisementメッセージ

例 fe80::1234

Replyメッセージの情報でIPv6アドレスを設定

例 2001:DB8::1234/64

Neighbor Advertisementメッセージを受け取らない

ことを確認

ICMPv6ヘッダ

IPv6ヘッダ

Target AddressType

2001:DB8::1234

135

Type 136

送信元 ::/128

宛先 ff02::1:ff00:0:0:1234(Solicited-Node マルチキャストアドレス)

Neighbor Solicitationメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Target Address 2001:DB8::1234

送信元 2001:DB8::1234

宛先 ff02::1(全ノードマルチキャスト)

Neighbor Advertisementメッセージ

IPv6アドレスを確定

Neighbor Advertisementメッセージを受け取らない

ことを確認

DAD

msg-type 11DHCPv6メッセージ

DHCPv6 Information-requestメッセージ

オプション要求オプション

宛先 ff02::1:2IPv6ヘッダ

msg-type 7DHCPv6メッセージ

DHCPv6 Replyメッセージ

クライアントから要求された設定に関するDHCPv6オプション

宛先 fe80::1234IPv6ヘッダ

ここまではSLAACの例と同じ

▲ 図9.3 小規模なネットワーク例におけるステートレスDHCPv6の一例

Page 179: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.3 DHCPv6の概要 165

ステートレスDHCPv6が使われるとき、ルータからのRouter Advertisementメッセージの

Oフラグを1に設定することができます。このとき、ホストはDHCPv6 Information-request

メッセージをリンクに送信します。DHCPv6 Information-requestメッセージには、DHCPv6

クライアントが要求する設定情報を伝えるためのオプションが含まれています。DHCPv6サー

バは、Information-requestメッセージへの返答として、必要な設定情報を含むDHCPv6 Reply

メッセージを送信します。DHCPv6クライアントは、DHCPv6 Replyメッセージに含まれる情

報をもとに設定を行います。

ステートレスDHCPv6では、IPアドレスの設定はDHCPv6で行わず、Router Advertisement

メッセージに含まれる情報をもとにホストが自動生成します。ステートレスDHCPv6につい

ては9.5節で改めて解説します。

9.3.2 ステートフルDHCPv6利用の流れステートフルDHCPv6でDNSサーバに関する情報をホストで設定するまでの流れを図9.4

に示します。

ステートフルDHCPv6が使われるとき、ルータからのRouter Advertisementメッセージの

Mフラグを1に設定することができます。このとき、ホストはDHCPv6 Solicitメッセージを

リンクに送信してDHCPv6サーバを探します。DHCPv6サーバがAdvertiseメッセージをユニ

キャストでDHCPv6クライアントへと返答し、DHCPv6クライアントはDHCPv6サーバに対

してRequestメッセージを使って IPv6アドレスやネットワークに付随する情報を要求します。

DHCPv6サーバは、Replyメッセージによって各種設定情報をDHCPv6クライアントへと伝

え、DHCPv6クライアントはDHCPv6サーバからの情報をもとに設定を行います。

ステートフルDHCPv6については9.6節で改めて解説します。

9.3.3 DHCPv6プロトコルDHCPv6クライアントは、UDPポート番号546で待ち受けます。DHCPv6サーバは、UDP

ポート番号547で待ち受けます。

以下の2種類のマルチキャストアドレスが、DHCPv6で利用するために IANAで予約されて

います。

rAll_DHCP_Relay_Agents_and_Serversアドレス(ff02::1:2)

クライアントがサーバもしくはリレーエージェントと通信するために利用するリンクスコー

プマルチキャストアドレスです。DHCPv6サーバとリレーエージェントは、このマルチキャ

ストアドレスに参加します。rAll_DHCP_Serversアドレス(ff05::1:3)

リレーエージェントがサーバと通信するために利用するサイトスコープマルチキャストアド

レスです。DHCPv6サーバは、このマルチキャストアドレスに参加します。

Page 180: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

166 第9章 DHCPv6

ICMPv6ヘッダ

IPv6ヘッダ

Target AddressType

fe80::1234

135

Type 136

送信元 ::/128

宛先 ff02::1:ff00:0:0:1234(Solicited-Node マルチキャストアドレス)

仮のリンクローカルIPv6アドレスを生成

DAD

リンクローカルIPv6アドレスを確定

ルータ

Neighbor Solicitationメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Target Address fe80::1234

送信元 fe80::1234

宛先 ff02::1(全ノードマルチキャスト)

Type 133ICMPv6ヘッダ

IPv6ヘッダ

送信元 fe80::1234

Hop Limit 255

宛先 ff02::2(全ルータマルチキャスト)

Neighbor Advertisementメッセージ

Router Solicitationメッセージ

Type 134

Mフラグ ON

ICMPv6ヘッダ

IPv6ヘッダ Hop Limit 255

宛先 fe80::1234

Router Advertisementメッセージ

例 fe80::1234

Neighbor Advertisementメッセージを受け取らない

ことを確認

DAD(略)

ここまではSLAACの例と同じ

msg-type 1DHCPv6メッセージ

DHCPv6 Solicitメッセージ

DUID 01Client Identifierオプション

宛先 ff02::1:2IPv6ヘッダ

msg-type 1DHCPv6メッセージ

DHCPv6 Requestメッセージ

DUID 01Client Identifierオプション

宛先 ルータのインターフェースIPv6ヘッダ

msg-type 2DHCPv6メッセージ

DHCPv6 Replyメッセージ

宛先 fe80::1234IPv6ヘッダ

DUID 0AServer Identifierオプション

DUID 0AServer Identifierオプションオプション要求オプション

msg-type 7DHCPv6メッセージ

DHCPv6 Replyメッセージ

クライアントから要求された設定に関するDHCPv6オプション

宛先 fe80::1234IPv6ヘッダ

▲ 図9.4 小規模なネットワーク例におけるステートフルDHCPv6の一例

Page 181: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.3 DHCPv6の概要 167

9.3.4 DHCPv6のメッセージタイプRFC 3315で定義されているDHCPv6メッセージを表9.1に示します。

DHCPv6のメッセージタイプは、RFC 3315以外のRFCでも定義されています。DHCPv6

▲ 表9.1 DHCPv6メッセージのタイプ

番号 メッセージ名 内容

0 Reserved 未定義

1 Solicitサーバを探索するためにクライアントが送信するメッセージ

2 AdvertiseクライアントからのSolicitメッセージに対してDHCPサービスが可能であることを伝えるために、サーバから送信されるメッセージ

3 Requestクライアントからサーバに対し、IPv6アドレスを含む設定情報を特定のサーバから受け取るために送信するメッセージ

4 Confirm過去に割り当てされた IPv6アドレスが利用可能であるかをクライアントが確認するためのメッセージ

5 Renewクライアントからサーバに対し、すでに割り当てられた設定パラメータの有効期間を延ばすために送信されるメッセージ

6 Rebind

クライアントが、すでに割り当てが行われている設定パラメータの有効期間を延ばすために、任意のサーバに対して送信するメッセージ。Renewメッセージに対する応答を受け取れない場合に送信される

7 Reply

クライアントからのSolicit、Request、Renew、Rebindの各メッセージに対し、サーバが割り当てたIPv6アドレスと設定情報を返信するためのメッセージ。クライアントからの Information-requestメッセージへの返答としても、設定情報を含むReplyメッセージを送信する。Confirmメッセージへの返答としても、Replyメッセージを送信する。ReleaseもしくはDeclineメッセージへの受信確認としてもReplyメッセージを送信する

8 Releaseクライアントが、サーバから割り当てられた IPv6アドレスを利用しなくなったことをサーバに伝えるために送信するメッセージ

9 Declineサーバから割り当てられた IPv6アドレスがすでに使われていることをクライアントからサーバに伝えるためのメッセージ

10 Reconfigure新しい設定情報をサーバからクライアントに対して伝えるために利用されるメッセージ

11 Information-requestIPv6アドレスを設定せずに設定情報のみをクライアントが要求するために利用されるメッセージ。ステートレスDHCPv6で利用される

12 Relay-Forwardサーバに対してリレーエージェントがメッセージを伝えるために使われるメッセージ

13 Relay-Replyリレーエージェントを通じてサーバがクライアントに対してメッセージを伝えるために使われるメッセージ

Page 182: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

168 第9章 DHCPv6

メッセージタイプの一覧は、IANAのサイトで公開されています†9。

9.3.5 DHCPv6メッセージの基本フォーマットすべてのDHCPv6メッセージは、図9.5に示す基本フォーマットを持ちます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

タイプ トランザクション ID

オプション

タイプとオプションに応じて異なる長さだけ続く

▲ 図9.5 DHCPv6メッセージの基本フォーマット

先頭1オクテットがメッセージのタイプ(表9.1参照)を示します。続く3オクテットが、要

求と応答の対応を示すトランザクション IDです。

トランザクション IDの後には、いくつかのオプションが連続して続きます。各オプション

の境界を2オクテットや4オクテットにそろえるためのパディングは必要ありません。

含まれるオプションの種類は、DHCPv6メッセージのタイプによって異なります。DHCPv6

のオプション一覧は、IANAのサイトにまとめられています†10。以降では、DHCPv6メッセー

ジの代表的なオプションを中心に説明します。

9.3.6 DHCPv6メッセージのオプションDHCPv6メッセージのオプションは、図9.6のような基本フォーマットを持ちます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

option-code option-len

option-data

(option-lenで指定された長さだけ続く)

▲ 図9.6 DHCPv6メッセージオプションの基本フォーマット

DHCPv6メッセージオプションは、5.3.3項で説明したTLV形式として定義されています。

具体的には、オプションの先頭16ビットがオプションの種類を示すoption-code、続く16

ビットがoption-dataフィールドの長さを示すoption-len、その後ろが、オプションによって

異なる形式のデータoption-dataです。以下、いくつかのDHCPv6メッセージオプションにつ

†9 DHCPv6パラメータ一覧:https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml

†10 DHCPv6オプション一覧:https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#

dhcpv6-parameters-2

Page 183: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.3 DHCPv6の概要 169

いて、option-codeとoption-dataの内容をまとめます。

9.3.7 ステータスコードオプション(OPTION_STATUS_CODE)DHCPv6メッセージのステータスを示すためのオプションです。他のオプションの内部に含

まれることもあります。RFC 3315では、以下の6種類のステータスが定義されています。

ステータス コード 内容

Success 0 成功を表す

UnspecFail 1詳細は明示せずに失敗を表す。他のステータスコードが当てはまらない場合に、クライアントもしくはサーバから送信される

NoAddrsAvail 2IA(9.6.1項参照)に対して提供できるアドレスがサーバに存在しないことを示す

NoBinding 3クライアントに関する記録がサーバに存在しないことを示す

NotOnLink 4アドレスに使われているプレフィックスが、接続されたリンクに対して適切ではないことを示す

UseMulticast 5サーバがクライアントに対して、All_DHCP_Relay_Agents_and_Serversを使うことを促すために使われる

DHCPv6のためのステータスコードは、他のRFCでも定義されています。IANAのサイ

ト†11で一覧を参照できます。

図9.7に、ステータスコードオプションのフォーマットを示します。ステータスコードオプ

ションのoption-codeはOPTION_STATUS_CODE(13)です。2オクテットのステータスコー

ドに続いて、ステータスに関するメッセージをUTF-8で記述できます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_STATUS_CODE(13) option-len

ステータスコード

メッセージ

▲ 図9.7 ステータスコードオプション

9.3.8 経過時間オプション(OPTION_ELAPSED_TIME)クライアントからのメッセージには、必ず、クライアントがDHCPトランザクションを開

始してからの経過時間を伝えるオプションを含める必要があります。RFC 3315では、この

フィールドの値が大きい場合に正規のサーバが応答していないとみなして予備のサーバが応答

†11 DHCPv6ステータスコード一覧:https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#

dhcpv6-parameters-5

Page 184: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

170 第9章 DHCPv6

する例が紹介されています。

図9.8に、経過時間オプションのフォーマットを示します。経過時間オプションのoption-

codeはOPTION_ELAPSED_TIME(8)です。経過時間は1/100秒単位で示されます。elapsed-

timeフィールドの値は16ビットの符号なし整数(0および正の整数)として表現されます

(65535を超える値はすべて0xffffとします)。したがって、option-lenの値は2です。なお、

最初のメッセージでは経過時間を0に設定します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_ELAPSED_TIME(8) option-len(2)

elapsed-time

▲ 図9.8 経過時間オプション

9.3.9 オプション要求オプション(OPTION_ORO)必要な情報を相手に対して要求するメッセージで、相手に要求するDHCPv6オプションを個

別に指定したい場合には、オプション要求オプションが利用できます。たとえば、ステートレ

スDHCPv6でクライアントがDNSサーバに関する情報を取得するため、DNS Recursive Name

ServersオプションとDNS Search Listオプションを指定したオプション要求オプションを含め

て Information-requestメッセージを送信する、といった使い方をします。また、サーバのほ

うからクライアントが要求すべき項目を示すため、サーバからクライアントへのReconfigure

メッセージにオプション要求オプションを含めることもあります。

図9.9に、オプション要求オプションのフォーマットを示します。オプション要求オプショ

ンのoption-codeはOPTION_ORO(6)です。要求するオプションは、オプションコードの配

列として表現します。オプションコードは2オクテットで表されるので、option-lenフィール

ドは、含まれるオプションコードの数に2をかけた値となります。たとえば、DNS Recursive

Name Serversオプション(オプションコード23)とDNS Search Listオプション(オプショ

ンコード24)を指定する場合、option-lenは4で、それに続くオプションコードの配列は23

(0x0017)と24(0x0018)となります。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_ORO(6) option-len(オプション数×2)

1つめのオプション 2つめのオプション

▲ 図9.9 オプション要求オプション

9.3.10 Client Identifierオプション(OPTION_CLIENTID)とServerIdentifierオプション(OPTION_SERVERID)

DHCPv6では、クライアントとサーバを識別するためのオプションとして、Client Identifier

オプションとServer Identifierオプションがあります。それぞれ、DHCPv6で通信相手を識別

Page 185: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.4 DUID 171

するために利用するDUIDという値を1つ含むフォーマットです。DUIDについては9.4節で説

明します。

クライアントを識別するClient Identifierオプションのフォーマットを図9.10に示します。

Client Identifierオプションのoption-codeはOPTION_CLIENTID(1)です。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_CLIENTID(1) option-len

DUID

▲ 図9.10 Client Identifierオプション

サーバを識別するServer Identifierオプションのフォーマットを図9.11に示します。Server

Identifierオプションのoption-codeはOPTION_SERVERID(2)です。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_SERVERID(2) option-len

DUID

▲ 図9.11 Server Identifierオプション

9.4 DUIDDHCPv6では、DHCPクライアントとDHCPサーバが、それぞれ個別の識別子としてDUID

(DHCP Unique Identifier)を持ちます。DUIDは、クライアントやサーバが通信相手を識別す

るために利用し、Client IdentifierオプションとServer Identifierオプションの中に含まれる

データとして使われます。

たとえばDHCPサーバでは、DHCPクライアントから渡されたDUIDを利用して、そのDHCP

クライアントに送付する設定パラメータを選択します。DHCPサーバのDUIDは、DHCPクラ

イアント側でDHCPサーバを識別する必要がある場合に利用されます。

DUIDには、サーバやクライアントの識別に利用する値によって、いくつかタイプがありま

す。本書執筆時点では、DUIDにはRFC 3315で定義されているDUID-LLT、DUID-EN、DUID-LL

と、RFC 6355†12で定義されているDUID-UUIDの、計4種類が利用できます。

9.4.1 DUID­LLTDUID-LLTは、DUID Based on Link-layer Address Plus Timeを意味し、リンク層アドレス

と時刻を組み合わせたDUIDです。時刻は、2000年1月1日0時0分0秒(UTC)からの秒数

を32ビットで表したものです。

†12 RFC 6355:T. Narten, J. Johnson, “Definition of the UUID-Based DHCPv6 Unique Identifier (DUID-UUID)”,

2011年8月

Page 186: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

172 第9章 DHCPv6

RFC 3315では、複数のネットワークインターフェースが存在する場合であっても、同一機

器ではどれか1つのネットワークインターフェースを選択して1つのDUID-LLTを利用するこ

とを推奨しています。また、一度生成されたDUID-LLTは保持し続けることが推奨されていま

す。具体的には、DUID-LLTを生成するためにリンク層アドレスを利用したネットワークイン

ターフェースが取り除かれたとしても、同一の機器ではいままでと同じDUID-LLTを使い続け

ることが推奨されています。DUID-LLTはネットワークインターフェースのリンク層アドレス

だけで決まらず、時刻を組み合わせているので、ネットワークインターフェースが別の機器に

移されたとしてもDUID-LLTとしては衝突が発生しにくい設計になっています。

DUID-LLTのフォーマットを図9.12に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

1(DUID-LLTを表すコード) ハードウェア種別(RFC 826で定義されるもの)

時刻

リンク層アドレス…

▲ 図9.12 DUID-LLT

9.4.2 DUID­ENDUID-ENは、DUID Assigned by Vendor Based on Enterprise Numberを意味し、ベンダー

を表す32ビットのエンタープライズ番号と、デバイスごとに一意な識別子を組み合わせた

DUIDです。

32ビットのエンタープライズ番号は、IANAによって割り当てられたエンタープライズ番

号†13を利用します。

デバイスごとに一意な識別子は、ベンダーが機器を出荷する段階で消去不可能なストレージ

に対して設定した値を使うことが想定されています。

DUID-ENのフォーマットを図9.13に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2(DUID-ENを表すコード) エンタープライズ番号

エンタープライズ番号(つづき)

デバイスごとに一意な識別子

▲ 図9.13 DUID-EN

†13 PRIVATE ENTERPRISE NUMBERS: https://www.iana.org/assignments/enterprise-numbers/

enterprise-numbers

Page 187: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.5 ステートレスDHCPv6 173

9.4.3 DUID­LLDUID-LLは、DUID Based on Link-layer Addressを意味し、リンク層アドレスを利用した

識別子です。

DUID-LLは、ネットワークインターフェースが取り外しできないネットワークインター

フェースが付いている機器での利用を想定しています。ネットワークインターフェースが変わ

る可能性がある機器がDUID-LLを利用することは禁止されています。

DUID-LLのフォーマットを図9.14に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

3(DUID-LLを表すコード) ハードウェア種別(RFC 826で定義されるもの)

リンク層アドレス

▲ 図9.14 DUID-LL

9.4.4 DUID­UUIDDUID-UUIDでは、RFC 4122†14で定義されている128ビットのUUIDを利用します。たとえ

ば、x86系のCPUを搭載した機器では内蔵されたUUIDを利用できます。

DUID-UUIDのフォーマットを図9.15に示します。DUID-UUIDであることを示す4に続い

て、128ビットのUUIDが続きます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

4(DUID-UUIDを表すコード)

UUID

▲ 図9.15 DUID-UUID

9.5 ステートレスDHCPv6IPv6アドレス設定を必要とせず、DNSなどの情報のみが必要なクライアントのために、ク

ライアントサーバ間の2通のメッセージで完結するステートレスなDHCPv6の方式がRFC

3736†15で定義されています。

ステートレスDHCPv6の流れは非常にシンプルです。図9.16のように、まずDHCPv6クラ

イアントが Information-requestメッセージをマルチキャストでAll_DHCP_Relay_Agents_

and_Servers(ff02::1:2)へと送信します。この Information-requestメッセージには、オ

†14 RFC 4122:P. Leach, M. Mealling, R. Salz, “A Universally Unique IDentifier (UUID) URN Namespace”, 2005

年7月†15 RFC 3736:R. Droms, “Stateless Dynamic Host Configuration Protocol (DHCP) Service for IPv6”, 2004年

4月

Page 188: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

174 第9章 DHCPv6

プション要求オプションが含まれています。サーバでは、このオプションで要求された情報を

Replyメッセージに含めて、クライアント宛のユニキャストで応答します。これを受け取った

クライアントは、Replyメッセージに記載された情報を自身のネットワーク接続に利用します。

DHCPv6サーバ

DHCPv6クライアント

DNSサーバのアドレスを設定

Information-requestメッセージ

All_DHCP_Relay_Agents_and_Servers宛マルチキャスト

23(DNS Recursive Name Serverオプション)など

オプション要求オプション

宛先 ff02::1:2IPv6ヘッダ

Replyメッセージ

DNS Recursive Name Serversオプション

宛先 クライアントのユニキャストアドレス

IPv6ヘッダ

▲ 図9.16 ステートレスDHCPv6

ステートレスDHCPv6の実行に最低限必要なDHCPv6メッセージのオプションは、以下の3

種類です。

rオプション要求オプションクライアントからの Information-requestメッセージに含まれます。rステータスコードオプションサーバからの応答に含まれます。r Server Identifierオプション

クライアントに対する応答を行っているサーバに関する識別情報を伝えるために利用され

ます。

さらにRFC 3736では、Information-requestメッセージで要求可能な設定情報のためのオ

プションとして、DNS Recursive Name Servers、DNS Search List、SIP Serversの3種類を紹

介しています。

9.5.1 DNS Recursive Name ServersオプションDHCPv6でDNSサーバの IPv6アドレスを示すために利用されるDNS Recursive Name

Serversオプションは、RFC 3646†16で定義されています。

図9.17にDNS Recursive Name Serversオプションのフォーマットを示します。DNS Re-

cursive Name Serversオプションのoption-codeは23です。このオプションのデータ部分に

†16 RFC 3646:R. Droms, “DNS Configuration options for Dynamic Host Configuration Protocol for IPv6

(DHCPv6)”, 2003年12月

Page 189: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.5 ステートレスDHCPv6 175

は、DNSサーバの IPv6アドレスを必要な数だけ含めます。したがって、オプションのデータ

部分の長さを示すoption-lenは、16オクテット(128ビット)の倍数になります。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_DNS_SERVERS(23) option-len

DNSサーバの IPv6アドレス

DNSサーバの IPv6アドレス

▲ 図9.17 DNS Recursive Name Serversオプション

9.5.2 DNS Search ListオプションDNS Search Listオプションは、ユーザがDNSを利用して名前解決を行うときに利用できる

サーチリストを含めるためのオプションです。

図9.18にDNS Search Listオプションのフォーマットを示します。DNS Search Listオプ

ションのoption-codeは24です。オプションのデータ部分には、RFC 1035†17のSection 3.1

に示されている方法(17.3.2項を参照)でサーチリストをエンコードします。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_DOMAIN_LIST(24) option-len

サーチリスト

▲ 図9.18 DNS Search Listオプション

9.5.3 DNS設定のステートレスDHCPv6による方法と近隣探索メッセージによる方法との違い

RFC 8106†18で定義されているRouter Advertisementメッセージを利用したDNS情報の

設定方法と、ステートレスDHCPv6によるDNS情報の設定方法とを比べると、ステートレス

DHCPv6による方法のほうがより多くの情報を配布できるという利点があります。RFC 8106

†17 RFC 1035:P.V. Mockapetris, “Domain names - implementation and specification”, 1987年11月†18 RFC 8106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2017年3月

Page 190: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

176 第9章 DHCPv6

で定義されているのはDNSサーバ情報とDNSサーチリストを伝える方法だけであり、たとえ

ばNTPサーバやSIPサーバに関する情報をRouter Advertisementメッセージで配布すること

はできません。DHCPv6であれば、SIPに関する情報についてはRFC 3319†19で定義されたオ

プションを利用して設定できます。したがって、DNSの設定についてはRFC 8106の方法を使

う場合でも、同時にステートレスDHCPv6サーバが必要になることもありえます。もちろん、

今後さらに新しいRouter Advertisementメッセージ用のオプションを定義するRFCが発行さ

れることで、ステートレスDHCPv6とRAの違いが少なくなる可能性も考えられます。Router

AdvertisementメッセージとDHCPv6の使い分けに関しては、本書執筆時点でも議論は続いて

おり、今後さらに状況が変わる可能性があります。

実装に依存する部分もあります。モバイル端末などで使われているAndroidは、本書執筆

時点ではDHCPv6に未対応です。したがって、たとえば「ステートレスDHCPv6とRouter

Advertisementメッセージで IPv6アドレスを自動設定できるようにしよう」というネット

ワーク環境だと、Androidに対してキャッシュDNSサーバに関する情報を提供できません。

Androidユーザに対して IPv6アドレスの自動設定環境を整えるには、RFC 6106†20†21による

キャッシュDNSサーバ情報の通知が必要になります。

一方で、RFC 6106に対応していない機器もあります。そのため、より多くの機器が IPv6環

境で快適に通信できるように、DHCPv6とRFC 6106の両方を同時に運用することが IPv6ネッ

トワークの運用者に求められることもあります。3種類ある IPv6アドレス自動設定手段のうち

の1つだけを選んで準備すればすべてのケースに対応できるというわけではないのが現状で

す。ただし、たとえばOS X 10.11以降でRFC 6106がサポートされるようになるなど、RFC

6106準拠の実装も増えているので、数年後に状況が多少変わっている可能性もあります。

9.6 ステートフルDHCPv6DHCPv6でも、IPv4用のDHCPと同じように、DHCPサーバ側で IPv6アドレスのリース期間

を制御可能な方式もあります。この方式をステートフルDHCPv6と呼びます。ステートフル

DHCPv6では、図9.19のように、4つのメッセージによってホストの IPv6アドレスを設定し

ます。

†19 RFC 3319:H. Schulzrinne, B. Volz, “Dynamic Host Configuration Protocol (DHCPv6) Options for Session

Initiation Protocol (SIP) Servers”, 2003年7月†20 RFC 6106:J. Jeong, S. Park, L. Beloeil, S. Madanapalli, “IPv6 Router Advertisement Options for DNS

Configuration”, 2010年11月†21 RFC 6106はRFC 8106で上書きされていますが、実装は旧RFC 6106をベースにしているので、あえてRFC

6106と書いています。

Page 191: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.6 ステートフルDHCPv6 177

DHCPv6サーバ1

DHCPv6クライアント

DHCPv6サーバ2

DHCPv6サーバ1を選択

Solicitメッセージ

Client Identifier オプション

宛先 ff02::1:2IPv6ヘッダ

Solicitメッセージ

Client Identifier オプション

宛先 ff02::1:2IPv6ヘッダ

Requestメッセージ

Client Identifier オプション

宛先IPv6ヘッダ

Advertiseメッセージ

Server Identifier オプション

Server Identifier オプションオプション要求オプション

宛先 クライアントのユニキャストアドレス

サーバ1のユニキャストアドレス

IPv6ヘッダ

Advertiseメッセージ

Server Identifier オプション

宛先 クライアントのユニキャストアドレス

IPv6ヘッダ

Replyメッセージ

Server Identifier オプション

クライアントから要求された設定に関するオプション

宛先 クライアントのユニキャストアドレス

IPv6ヘッダ

All_DHCP_Relay_Agents_and_Servers宛マルチキャスト

▲ 図9.19 ステートフルDHCPv6

DHCPv6クライアントは、DHCPv6サーバを探すために、まずAll_DHCP_Relay_Agents_

and_Servers(ff02::1:2)マルチキャスト宛のSolicitメッセージを送信します。クライア

ントからのSolicitメッセージには、クライアントが生成したトランザクション IDと、Client

Identifierオプションが含まれます。クライアントが利用を希望する IPv6アドレスがある場合

には、9.6.1項で説明する Identity Associationに関するオプションを利用して、その希望を

サーバに伝えることもできます。

Solicitメッセージを受け取ったDHCPv6サーバは、Advertiseメッセージをユニキャストで

DHCPv6クライアントに送信します。Advertiseメッセージには、Server Identifierオプショ

ンが含まれます。クライアントからの Solicitメッセージに Identity Associationが含まれる

場合には、サーバからのAdvertiseメッセージにも Identity Associationを含めます。クライ

アントに対してそのサーバでは IPアドレスの割り当てを行わない場合には、サーバからの

Advertiseメッセージに含めるステータスコードオプションをNoAddrsAvailに設定します。

Advertiseメッセージを受け取ったDHCPv6クライアントは、IPv6アドレスの割り当てを依

頼するDHCPv6サーバを選択し、そのサーバに対してユニキャストでRequestメッセージを送

信します。このRequestメッセージには、クライアントが選択したサーバのServer Identifier

オプション、クライアントのClient Identifierオプション、それにオプション要求オプション

を必ず含めます。

Page 192: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

178 第9章 DHCPv6

Requestメッセージを受け取ったDHCPv6サーバは、IPv6アドレスなどの必要な情報が記

載されたReplyメッセージをDHCPv6クライアント宛に送信します。このReplyメッセージに

は、Server Identifierオプションが必ず含まれます。また、Identity Associationやクライアン

トが要求した設定情報に関連するオブジェクトも含まれます。

Replyメッセージには、DHCPv6サーバによって指定された IPv6アドレスの利用可能時間が

記載されています。DHCPv6クライアントは、IPv6アドレスのリース期間を延長したい場合、

DHCPv6サーバに対してRenewメッセージを送信する必要があります。

9.6.1 Identity Association

DHCPv6には、 ‌Identity Association ‌という仕組みがあります。Identityは、識別という意

味を持つ英単語です。Associationは、群集やつながり、関連という意味を持つ英単語です。

それらを組み合わせた Identity Associationは、クライアントに対して割り当てられた IPv6ア

ドレスの集合として定義されています(RFC 3315)。IPv6ではインターフェースとアドレスが

1対1に対応するとは限らないので、DHCPv6では Identity Associationという概念を利用し

てクライアントに割り当てるアドレスを集合として管理できるようにしているのです。

DHCPv6のクライアントでは、各ネットワークインターフェースを最低でも1つの Identity

Associationに関連づける必要があります。ある Identity Associationを複数のネットワーク

インターフェースと関連づけることはできません。ネットワークインターフェースに対して

IPv6アドレスなどの情報を設定する際には、Identity Associationに対してサーバから情報が

割り当てられます。

各 Identity Associationは、クライアント内で一意の識別子により区別されます。この識別

子は IAIDと呼ばれ、クライアントが定義します。IAIDには、DHCPv6クライアントが再起動

したとしても同じ値が使われ続けることが求められます。そのためRFC 3315では、毎回同じ

IAIDを自動的に生成する手法や、IAIDを保存する方法についても言及されています。

Identity Associationには、大きく分けて2つの種類があります。一時的な IPv6アドレスを

扱う IA_TA(Identity Association for Temporary Address)と、一時的ではない通常の IPv6

アドレスを扱う IA_NA(Identity Association for Non-temporary Address)です。これらは

RFC 3315で定義されている Identity Associationです。

IPv6アドレスではなく、IPv6プレフィックスを委任する IA_PD(Identity Association for

Prefix Delegation)という Identity Associationもあります。IA_PDはRFC 3633†22で定義さ

れています。

9.6.2 IAアドレスオプションIAアドレスオプションは、後述する IA_NAオプションと IA_TAオプションの中でのみ利用

されるオプションです。IA_NAオプションもしくは IA_TAオプションで IPv6アドレスを指定

するのに使います。

†22 RFC 3633:O. Troan, R. Droms, “IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP)

version 6”, 2003年12月

Page 193: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.6 ステートフルDHCPv6 179

図 9.20に IAアドレスオプションのフォーマットを示します。IAアドレスオプションの

option-codeはOPTION_IAADDR(5)です。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_IAADDR(5) option-len

IPv6アドレス

preferred-lifetime

valid-lifetime

IAaddr-options

▲ 図9.20 IAアドレスオプション

IAアドレスオプションには IPv6アドレスを含めるフィールドがあります。それに続く

preferred-lifetimeフィールドおよび valid-lifetimeフィールドは、それぞれ当該の IPv6アド

レスの推奨期間と有効期間を表します。これらの期間の意味は、SLAACに使われる近隣探索プ

ロトコルのプレフィックス情報オプションにおけるPreferred LifetimeおよびValid Lifetime

と同様です(7.5.3項参照)。

IAaddr-optionsフィールドには、この IAアドレスオプションに含まれる IPv6アドレスに関

するオプションを含めます。たとえば、当該の IPv6アドレスに関して何らかのステータスを

伝える場合には、IAaddr-optionsフィールドにステータスコードオプションを含めます。

9.6.3 IA_NAオプションIA_NAオプションは、Identity Associationに対して一時的ではない IPv6アドレスを設定す

るときに使うオプションです。

図9.21に IA_NAオプションのフォーマットを示します。IA_NAオプションのoption-code

はOPTION_IA_NA(3)です。

Page 194: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

180 第9章 DHCPv6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_IA_NA(3) option-len

IAID

T1

T2

IA_NA-options

▲ 図9.21 IA_NAオプション

IA_NAには、IAアドレスオプションで指定されている有効期間(valid-lifetime)を超えて

しまう前にクライアントからサーバに対して IPv6アドレスの有効期限の延長を要求するタイ

ミングをサーバ側で指定できる仕組みがあり、そのために使うT1およびT2という値を秒単位

で設定するためのフィールドが用意されています。クライアントは、IPv6アドレスが割り当て

られてからT1秒が経過した時点で、割り当てを行ったサーバに対してRenewメッセージを送

ります。割り当てを行ったサーバがRenewメッセージに応答せずにT2秒が経過した場合、ク

ライアントは別のサーバに対してRebindメッセージを送ります。これにより、最初に割り当

てを受けたサーバとは別のサーバに対し、利用中の IPv6アドレスを関連づけたうえで利用の

継続を要求できます。

T1フィールドとT2フィールドの値が0の場合は、これらの値を特に設定しないことを意味

します。0xffffffffの場合は「無限」を示し、その場合にはクライアントからのRenewメッ

セージとRebindメッセージは発行されません。

T1の値として、RFC 3315では、Identity Associationに含まれるアドレスの推奨期間

(preferred-lifetime)のうちで最も短い値の50%が推奨されています。T2の値としては80%

が推奨されています。

IAアドレスオプションなど、IA_NAオプションのために必要なオプションは、IA_NA-

optionsフィールドに含めます。1つのDHCPv6メッセージに複数の IA_NAオプションを含め

ることも可能です。

9.6.4 IA_TAオプションDHCPv6には、クライアントが一時的な IPv6アドレスの割り当てを要求するための仕組み

もあります。ただし、DHCPv6では、一時的な IPv6アドレスの有効期限や、どのように一時的

な IPv6アドレスを使うべきであるかは定義していません。単にクライアントが一時的な IPv6

アドレスを要求し、サーバが割り当てを行うだけです。

NOTE

IAIDの識別子空間は、IA_TAと IA_NAで互いに独立しています。

図9.22に IA_TAオプションのフォーマットを示します。IA_TAオプションのoption-code

はOPTION_IA_TA(4)です。

Page 195: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.7 DHCPv6-PD 181

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_IA_TA(4) option-len

IAID

IA_TA-options

▲ 図9.22 IA_TAオプション

IA_TAオプションには、IA_NAオプションと違い、T1フィールドとT2フィールドがありま

せん。有効期間を超えて IPv6アドレスを使い続ける場合、クライアントは任意のタイミング

でRenewを送れます。

IAアドレスオプションなど、IA_TAのために必要なオプションは、IA_TA-optionsフィール

ドに含めます。

RFC 3315では、一時的な IPv6アドレスの取得にDHCPv6を利用したい理由として、SLAAC

に対するプライバシー拡張を定義しているRFC 3041†23を参照しています(IPv6アドレスのプ

ライバシーについては15.6節を参照)。ただし、RFC 3041はRFC 4941†24によって上書き廃

止されています。

9.7 DHCPv6­PDIPv6用のDHCPv6には、DHCPv6サーバがDHCPv6クライアントに対して IPv6プレフィッ

クスを委任(delegate)する ‌DHCPv6-PD ‌(DHCPv6-Prefix Delegation)という仕組みがあり

ます。DHCPv6-PDは、DHCPv6サーバとDHCPv6クライアントの両方がルータであることが

想定されていることも大きな特徴です。

DHCPv6-PDは、ブロードバンドルータなどのCPEに対して IPv6アドレスプレフィックスを

割り当てる用途に使われます。IPv4では ISPと契約を行っているユーザに対して1つの IPv4ア

ドレスを割り当てる方式が一般的ですが、IPアドレス空間が大きい IPv6では単一の IPv6アド

レスではなく IPv6プレフィックスごとユーザに割り当てる運用が一般的です。

家庭やオフィスに設置されたルータに対するDHCPv6-PDの利用イメージは図9.23のように

なります。ルータのWAN側インターフェースでは、DHCPv6-PDクライアントとして、ISPか

ら IPv6プレフィックスとそのプレフィックスを利用可能な期間についての情報を受け取りま

す。ISPから IPv6プレフィックスをDHCPv6-PDで受け取るときは、ステートフルDHCPv6と

同様に、クライアントからのSolicitメッセージ、サーバからのAdvertiseメッセージ、クライ

アントからのRequestメッセージ、サーバからのReplyメッセージという流れになります。

†23 RFC 3041:T. Narten, R. Draves, “Privacy Extensions for Stateless Address Autoconfiguration in IPv6”,

2001年1月†24 RFC 4941:T. Narten, R. Draves, S. Krishnan, “Privacy Extensions for Stateless Address Autoconfiguration

in IPv6”, 2007年9月

Page 196: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

182 第9章 DHCPv6

家庭やオフィスのIPv6対応マシン

ISPのネットワーク

委任する

ルータIPv6プレフィックスを割り当て(DHCPv6-PD)

ステートフルDHCPv6などでIPv6アドレスを割り当て

家庭やオフィスの

ルータ

▲ 図9.23 DHCPv6-PDの利用例

NOTE

図9.23では、ルータがLAN側インターフェースでステートフルDHCPv6サーバとしてユーザに IPv6アドレスを割り当てていますが、DHCPv6-PDを利用するときにLAN側でステートフルDHCPv6もしくはステートレスDHCPv6が必須というわけではありません。LANにおける IPv6アドレス自動設定とWAN側でのDHCPv6-PDは独立であり、ISP

から家庭に対するプレフィックス割り当てにDHCPv6-PDを活用しつつ、宅内LAN側をRouter Advertisementによる IPv6アドレス自動設定で運用することも可能です。

9.7.1 IA_PDオプションDHCPv6-PDを実現するための IA_PDオプションは、RFC 3633で定義されています。

NOTE

IAIDの識別子空間は、IA_PD、IA_TA、IA_NAで互いに独立しています。

図9.24に IA_PDオプションのフォーマットを示します。IA_PDオプションのoption-code

はOPTION_IA_PD(25)です。

Page 197: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

9.7 DHCPv6-PD 183

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_IA_PD(25) option-len

IAID

T1

T2

IA_PD-options

▲ 図9.24 IA_PDオプション

IA_PDオプションのフォーマットは IA_NAオプションに似ており、IAID、T1、T2の用途

は IA_NAオプションと同様です。IA_NAオプションとの大きな違いは、T2フィールドに続く

フィールドで運ぶオプションの中身です。IA_NAオプションには IPv6アドレス情報を含む IA

アドレスオプションが含まれますが、IA_PDオプションには、IPv6プレフィックス情報を含む

IA_PDプレフィックスオプション(後述)が含まれます。

9.7.2 IA_PDプレフィックスオプションIA_PDプレフィックスオプションは、IA_PDオプションの IA_PD-optionsフィールドで使わ

れます。

図9.25に IA_PDプレフィックスオプションのフォーマットを示します。IA_PDプレフィッ

クスオプションのoption-codeはOPTION_IAPREFIX(26)です。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_IAPREFIX(26) option-len

preferred-lifetime

valid-lifetime

プレフィックス長

IPv6プレフィックス

IAprefix-options

▲ 図9.25 IA_PDプレフィックスオプション

IA_PDプレフィックスオプションの大きな特徴として、1オクテットのプレフィックス長

フィールドが含まれる点が挙げられます。このオプションが運んでいるものが IPv6アドレス

ではなく IPv6プレフィックスであるという点も大きな違いです。

IAprefix-optionsフィールドには、IPv6プレフィックスに関連する設定情報を含められます。

Page 198: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

184 第9章 DHCPv6

■ DHCPv6 Prefix-Length Hintが抱える課題IA_PDプレフィックスオプションは、IA_PDオプションに含まれる形で利用されます。しか

しRFC 3633では、クライアント側がサーバに対して提供する情報として、DHCPv6-PDにお

けるSolicitメッセージに IA_PDプレフィックスオプションを含めることも可能であるとして

います。とはいえ、サーバ側の事情によってはクライアントから要求されたプレフィックスの

割り当てが必ずしも可能とは限りません。サーバは、クライアントが提供したプレフィックス

長に関するヒントを無視することもできます。

そのような不整合が発生したときの挙動は、RFC 3633には明記されていません。そこで、

RFC 3633を補う形でRFC 8168†25が発行されました。RFC 8168では、クライアントからの

メッセージに含まれる IA_PDプレフィックスオプションが示すプレフィックス長が合わない

場合の仕様が示されています。

9.7.3 DHCPv6­PDプレフィックス除外オプションRFC 3633の12.1節に規定されているDHCPv6-PDの仕様では、委任元ルータ(delegating

router)は、要求側ルータ(requesting router)に対して委任されたプレフィックスを委任元

ルータが利用できないという制約があります。そのため、委任元ルータには1つの顧客に対し

て、委任元ルータと要求側ルータをつなぐリンクと要求側ルータの向こう側にある顧客サイ

ト、という集約不能な2つの経路を持つことになります。

モバイルルータなど要求側ルータとしてDHCPv6-PDクライアントが/64プレフィックスを

1つしか使わない環境において、経路を集約(aggregate)可能であるほうが望ましい場合もあ

ります。

RFC 6603†26では、DHCPv6-PDで特定の IPv6プレフィックスを除外できるオプションが

規定することで、経路の集約ができるようにしてあります。RFC 6603のPrefix Excludeオプ

ションによって、委任元ルータから要求側ルータに伝えられる委任プレフィックスのうち、要

求側ルータの下流で使ってはならないプレフィックスを指定できます。使ってはならないプレ

フィックスとして指定されるのは、委任元と要求側の間でDHCPv6-PDのやり取りが行われる

リンクで使われるプレフィックスです。

このプレフィックス除外オプションを受け取ったDHCPv6-PDクライアントは、下流のサブ

ネットに除外された IPv6プレフィックスを広告しないことが求められます。

†25 RFC 8168:T. Li, C. Liu, Y. Cui, “DHCPv6 Prefix-Length Hint Issues”, 2017年5月†26 RFC 6603:J. Korhonen, T. Savolainen, S. Krishnan, O. Troan, “Prefix Exclude Option for DHCPv6-based

Prefix Delegation”, 2012年5月

Page 199: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第10章

IPフラグメンテーション

リンク層で一度に転送できる上位層のデータの最大長のことを ‌MTU‌(Maximum Transmis-

sion Unit)と呼びます。たとえば、通常のイーサネットで単一のイーサネットフレームが運べ

るペイロードの最大長は1500オクテットなので、イーサネットのMTUは1500オクテットで

す。また、かつてよく利用されていたX.25パケット交換網のMTUは576オクテットです(昨

今はこうした小さなMTUで運用されているリンクはほとんど存在していないと思われます)。

インターネットプロトコルでパケットを転送するとき、パケットの長さが下位のリンク層

プロトコルのMTUより大きければ、パケットを分割するしかありません。このようなMTUの

制限による IPパケットの分割を ‌IPフラグメンテーションと呼んでいます。IPフラグメンテー

ションが発生すると、元の大きな IPパケットが、複数の小さな IPパケットに分割して転送され

ます。この個々の小さな IPパケットのことをフラグメントと呼ぶことがあります。

IPv4では、経路途中のリンクにMTUが小さいものがあると、経路途中のルータにおいて IP

フラグメンテーションが行われる場合があります。一方、IPv6では経路途中での IPフラグメ

ンテーションが廃止され、送信元ノードでのみ IPフラグメンテーションが行われます。ここで

は、まず IPv4における IPフラグメンテーションの基本と課題について解説してから、IPv6に

おける仕様を見ていきます。

10.1 IPv4におけるフラグメンテーション1981年に発行されたRFC 791†1には、以下のようにあり、IPv4が作られた当初はフラグメ

ンテーションがインターネットの根幹を成す機能のひとつであったことがわかります。

The internet protocol implements two basic functions: addressing and fragmenta-

tion.

(参考訳)インターネットプロトコルでは2つの基本的な機能を実装する。すなわち、ア

ドレス設定とフラグメンテーションである。

†1 RFC 791:J. Postel, “Internet Protocol”, 1981年9月

Page 200: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

186 第10章 IPフラグメンテーション

実際、IPv4では、リンク層に合わせて経路の途中でもフラグメンテーションを行います。図

10.1の例ではMTUが1500のリンクと576のリンクが混在していますが、ここを1200オク

テットの IPv4パケットが転送される場合、このパケットはMTUが1500のリンクではそのまま

転送されますが、MTUが576のリンクではフラグメンテーションが発生する場合があります。

MTUが1500のリンク MTUが576のリンク

ルータ

1200オクテット

▲ 図10.1 IPv4でのフラグメンテーション例

図10.1の例で、1200オクテットの IPv4パケットが3つのフラグメントに分割されると、図

10.2のような状況になります(各フラグメントを表す模式図の比率は厳密ではありません)。

図10.2では、MTUが576のリンクを通じてパケットを送信するために、経路途中のルータが

1200オクテットのパケットを572オクテットのパケット2つと96オクテットのパケット1つ

に分割しています。このとき、各フラグメントには個別に IPv4ヘッダが付加されます。IPv4

ヘッダ全体の長さは、この例では各 IPv4ヘッダにはオプションが付いていないので、20オク

テットです。IPv4ではフラグメントの境界は8オクテット単位とされているので(RFC 791の

3.2節)、この場合の IPヘッダを含めたフラグメンテーション後のパケットの大きさはMTUと

同値の576オクテットではなく、20+ 552 = 572オクテットとなります。

●フラグメンテーション前

IPv4ヘッダ ペイロード

︸ ︷︷ ︸1200オクテット

●フラグメンテーション後

IPv4ヘッダ 1つめのフラグメント

︸ ︷︷ ︸572オクテット

IPv4ヘッダ 2つめのフラグメント

︸ ︷︷ ︸572オクテット

IPv4ヘッダ 3つめのフラグメント

︸ ︷︷ ︸96オクテット

▲ 図10.2 IPv4のフラグメンテーションのようす

Page 201: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10.1 IPv4におけるフラグメンテーション 187

10.1.1 IPv4のフラグメンテーションで利用される IPv4ヘッダのフィールド

IPv4は経路途中でのフラグメンテーションを前提としたプロトコルなので、IPv4ヘッダに

そのためのフィールドが存在します。具体的には、Identificationフィールド、Flagsフィール

ド、Fragment Offsetフィールドの3つです(図10.3)。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Version IHL Type of Service Total Length

Identification Flags Fragment Offset

Time to Live Protocol Header Checksum

Source Address

Destination Address

Options(可変長。32ビットの整数倍でない場合は末尾にパディング)

▲ 図10.3 IPv4でのフラグメンテーションで利用される IPv4ヘッダフィールド

IPv4ヘッダの Identificationフィールドには、IPパケットがフラグメントに分割されるとき

に、各フラグメントが同じ IPパケットであったことを識別するための値が設定されます。各フ

ラグメントの Identificationフィールドが同じ値になるので、それらを受け取った側で分割さ

れたフラグメントを再構築するのに利用できます。なお、IPv4の Identificationフィールドの

仕様はRFC 6864†2によって更新されています。

Fragment Offsetフィールドは、各フラグメントが元の IPパケットのどの部分かを示すため

のものです。IPv4では8オクテット単位でパケットをフラグメンテーションすることになって

いるので、このフィールドの値も8オクテット(64ビット)単位で指定します。先頭のフラグ

メントについてはFragment Offsetフィールドをゼロに設定します。

Flagsフィールドは図10.4のように区分されており、2ビットめがフラグメンテーションを

許可するかどうかを示すフラグです。このフラグはDon’t Fragmentビット(DFビット)と呼

ばれ、このビットが1となっているパケットについてはフラグメンテーションが禁止されます。

Flagsフィールドの3ビットめは、最後のフラグメントでないかどうかを示すフラグで、More

Fragmentsビット(MFビット)と呼ばれます。このビットが0のパケットは、一連のフラグメ

ントのうち最後のパケットであるか、そもそもフラグメンテーションが行われていないパケッ

トであることを示します。このビットが1のパケットは、フラグメンテーションされたパケッ

トの一部であり、さらにフラグメントが続くことを示します。

†2 RFC 6864:J. Touch, “Updated Specification of the IPv4 ID Field”, 2013年2月

Page 202: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

188 第10章 IPフラグメンテーション

Rese

rved

Don’t

Frag

men

t

Mor

eFr

agm

ent

· · · Identification 0 DF MF Fragment Offset · · ·

▲ 図10.4 IPv4ヘッダのフラグフィールド

10.1.2 IPフラグメンテーションとTCP MSS

本書執筆時点における IPv4インターネットを流れるパケットの大部分がTCPによるもので

あると言われています。TCPでは、データをセグメントと呼ばれる小さな単位に分割して送信します。そして、セグメントの最大サイズ(‌MSS‌、Maximum Segment Size)を設定する仕組

みがあります(RFC 879†3およびRFC 1191†4)。

MSSは、TCPオプションとして、TCPコネクション確立時に「自分が受信可能なセグメント

サイズ」として送信されます。オプションなので利用が必須ではありませんが、現在はほとん

どの実装でMSSが利用されています。その情報をもとに、送信データを事前分割してからTCP

でパケットを送信します。

TCPが送信するMSSオプションに含まれる情報は、基本的にその機器に設定されたMTUか

ら算出されるので、途中経路上にMSSよりもMTUが小さい箇所があればフラグメンテーショ

ンが発生する可能性があります。しかし現在のインターネットは、サーバが接続されている部

分、インターネットのコア部分、家庭内ネットワークの部分など、その大半が1500オクテッ

トのMTUで運用されています。つまり、TCPを利用したときにフラグメンテーションが発生

しがちな箇所は、ある程度限定されています。

ユーザに気づかれずにフラグメンテーションが頻繁に発生する状況としては、PPPoEや IPト

ンネルなどが運用されることによってMTUが1500オクテットよりも多少小さくなる環境で、

かつ、ユーザがNATルータの裏側でインターネットを利用している場合が考えられます。図

10.5のように、NATルータがPPPoEによってインターネットに接続している場合を考えてみ

ましょう。この場合、PPPoEヘッダの6オクテットとPPPヘッダの2オクテットの合計8オク

テットが1500オクテットの先頭にきます。そのため、その後のペイロードは1492オクテッ

トとなります。ここに1500オクテットのパケットが到着すると、ISP側のルータがフラグメン

テーションを行います。ISPに接続されたNATルータは、2つにフラグメント化されたパケッ

トを受け取りますが、インターネットから見るとNATルータはエンドノードでもあるので、2

つのフラグメントを再構成して1500オクテットのパケットにしたうえで、IPアドレスなどの

フィールドを変更してユーザへと転送します。

このような環境では、ユーザは何事もなかったかのように1500オクテットのパケットを受

け取るので、途中経路上でフラグメンテーションが発生していることにまったく気づかないま

まインターネットを利用できてしまいます。

†3 RFC 879:J. Postel, “The TCP Maximum Segment Size and Related Topics”, 1983年11月†4 RFC 1191:J.C. Mogul, S.E. Deering, “Path MTU discovery”, 1990年11月

Page 203: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10.2 IPv6フラグメントヘッダ 189

家庭内ネットワーク

ISPのネットワーク

PPPoEによるトンネル

ISP側のルータ

NATルータ

サーバ

1500オクテットのパケット

フラグメンテーション

フラグメントを再構築

途中でフラグメンテーションが発生していることに気づかない

▲ 図10.5 IPv4 NATによるMSS書き換え

10.2 IPv6フラグメントヘッダIPv6でのフラグメンテーションは、図10.7のような IPv6拡張ヘッダのひとつであるフラ

グメントヘッダを利用して行われます。IPv6拡張ヘッダは、経路の途中にあるノードでの処

理、挿入、削除が禁止されています†5。フラグメントヘッダも例外ではありません。そのため、

IPv6でのフラグメンテーションはエンドノード同士で行うことになります。この点が、経路途

中のルータでフラグメンテーションが発生する IPv4との大きな違いです。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Next Header 予約 Fragment Offset 予約 M

Identification

▲ 図10.6 フラグメントヘッダ

rNext Header(8ビット)

この拡張ヘッダの直後にくるプロトコルの種類を示します。IPv6ヘッダにおけるNext

Headerフィールドと同じく、IANAによって割り当てられている値(IPv4のProtocol Type

フィールドで利用される値と同じ値)を指定します。r予約(8ビット)

将来の利用に備えたフィールドです。r Fragment Offset(13ビット)

後述するように、このフラグメントヘッダの後には、フラグメント化されたデータが続きま

†5 ただし、Hop-by-Hopオプションに関しては途中経路上での確認や処理が可能です。

Page 204: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

190 第10章 IPフラグメンテーション

す。そのデータが、フラグメント化される前のデータの先頭から見てどの部分のデータなの

かを、8バイト単位で示すフィールドです。r予約(2ビット)

将来の利用に備えたフィールドです。rMフラグ(1ビット)

このフラグメントが、最後のフラグメントか、それとも後続するフラグメントがあるかを示

すビットです。最後のフラグメントなら0、後続するフラグメントがあるなら1です。r Identification(32ビット)

送信元ノードは、フラグメンテーションが行われるパケットごとに、フラグメント識別子の

値を生成してこのフィールドに格納します。宛先ノードでは、宛先アドレスと送信元アドレ

スが同じで、フラグメント識別子の値も同じフラグメントを、1つのパケットとして再構築

します。送信元ノードでは、「つい最近使っていない」フラグメント識別子の値を選択する

必要があります。「つい最近使っていない」の定義として、RFC 8200では、転送時間と再構

築にかかるであろうと思われるパケットの生存時間としています。

10.2.1 IPv6フラグメンテーションの実際例として、1つのTCPパケットが複数の IPv6パケットへとフラグメント化されて送信される

ケースを考えてみましょう。図10.7に、フラグメント化されたTCPパケットが運ばれるとき

の IPv6パケットのようすを示します。

フラグメントヘッダ(IPv6拡張ヘッダ)

Next Headerフィールド:44(フラグメントヘッダ)

Next Headerフィールド:6

(TCP)

IPv6ヘッダ TCPヘッダ、ペイロードなどの一部(フラグメント)

▲ 図10.7 IPv6パケットにおけるフラグメントヘッダの使い方

図10.7を見るとわかるように、IPv6ヘッダの直後には、拡張ヘッダとしてフラグメントヘッ

ダが続きます。

フラグメントヘッダのプロトコル番号は44なので(表5.1参照)、フラグメントヘッダの前

のヘッダのNext Headerフィールドには、フラグメントヘッダを示す44という数値が入りま

す。したがって、図10.7の例でも、IPv6ヘッダのNext Headerフィールドには44という数値

が入っています。

図10.7は、フラグメント化された個々のデータが IPv6パケットとしてどのように運ばれる

かを示したものです。次は、元の大きな IPv6パケットが送信元のノードでどのようにフラグ

メント化され、宛先のノードでどのように再構成されるかを見てみましょう。図10.8に、フラ

グメント化される前のパケットと、分割されたフラグメントのようすを示します。さらに、そ

Page 205: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10.2 IPv6フラグメントヘッダ 191

れらのフラグメントが再構成されるようすも示します。

●フラグメンテーション前

Per-Fragmentヘッダ

Extension &Upper-Layerヘッダ フラグメンテーション可能な部分

●フラグメンテーション後

Per-Fragmentヘッダ

フラグメントヘッダ

Extension &Upper-Layerヘッダ

1つめのフラグメント

Per-Fragmentヘッダ

フラグメントヘッダ

2つめのフラグメント

...

Per-Fragmentヘッダ

フラグメントヘッダ

最後のフラグメント

●宛先ノードで再構築された状態

Per-Fragmentヘッダ

Extension &Upper-Layerヘッダ

1つめのフラグメント

2つめのフラグメント

· · · 最後のフラグメント

▲ 図10.8 IPv6のフラグメンテーションのようす

図10.8における「Per-Fragmentヘッダ」および「Ext & Upper-Layerヘッダ」の内容を下記

にまとめます。

r Per-Fragmentヘッダ

元の IPv6パケットには、IPv6ヘッダが付いています。この部分はフラグメント化せず、そ

のままフラグメント化した各パケットにすべて含める必要があります。

また、元の IPv6パケットには、IPv6ヘッダの直後にHop-by-Hopオプションヘッダが続い

ている場合もあります。この IPv6拡張ヘッダの情報は、元の IPv6パケットの宛先までに存

在する各ノードやルータにおける処理に必要となる情報です。そのため、Hop-by-Hopオプ

ションヘッダがあれば、それもフラグメント化された各パケットに含めてあげる必要があり

ます。

さらに、Hop-by-Hopオプションヘッダの直後には、宛先オプションヘッダとルーティング

ヘッダが続いている場合もあります。これらは、ルーティングヘッダのオプションで指定さ

れた途中経路のルータで必要になる情報なので、存在する場合にはやはりフラグメント化さ

れた各パケットにも含めてあげる必要があります。

これら、フラグメント化された各パケットに含められる元の IPv6パケットの情報(IPv6ヘッ

ダと、もしあれば一部の IPv6拡張ヘッダ)のことを、RFC 8200†6では ‌Per-Fragmentヘッダと呼んでいます。r Extension & Upper-Layerヘッダ

IPv6パケットをフラグメント化して転送する際、経路途中のファイアウォールで上位層の

†6 RFC 8200:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 2017年7月

Page 206: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

192 第10章 IPフラグメンテーション

ヘッダ情報が必要になる場合があります。その場合、上位層のヘッダ情報がフラグメント化

されて複数のパケットに分散していると、フラグメント化前の元の IPv6パケットに対して

適用されるべき経路途中のファイアウォールのポリシーが適切に実行されません。そのた

め、2014年に発行されたRFC 7112†7では、上位層のヘッダまでを図10.8に示すように先

頭のフラグメントにすべて付加しなければならない(MUST)としています。

この先頭のフラグメントに含めなければならない部分には、Per-Fragmentヘッダには含ま

れない IPv6拡張ヘッダ(ルーティングヘッダより後ろの部分)も含まれます。この部分のこ

とを、RFC 8200では ‌Extension & Upper-Layerヘッダと呼んでいます(RFC 8200でも、

フラグメンテーションの仕様はRFC 7112を満たすものになっています)。

なお、Upper-Layerとありますが、これは必ずしもトランスポート層のヘッダを指すとは限

りません。ICMPv6ヘッダの場合もあれば、他の IPヘッダの場合(IPv4や IPv6のトンネリ

ングを行っている場合)もあります。また、ESP(Encapsulating Security Payload)ヘッ

ダがある場合は、以降のペイロードがすべて暗号化されているので、ESPヘッダまでが

Extension & Upper-Layerヘッダとなります。

Extension & Upper-Layerヘッダは、先頭のフラグメントでフラグメントヘッダの後ろに配

置されます。

NOTE

Per-Fragmentヘッダに相当する部分は、RFC 2460†8では「Unfragmentable Part(フラグメント化不能部分)」と表現されていました。また、RFC 2460には Extension &

Upper-Layerヘッダの区別もありません。IETFの v6opsワーキンググループでは、draft-ietf-6man-rfc2460bisという形でRFC

2460を置き換えるRFCを作成するための議論が交わされていましたが、その初期バージョン(00)で「Unfragmentable Headers」および「Extension & Upper-Layer」が定義されました。さらにバージョン01で前者が「Per-Fragment Headers」という表現に変更されて、そのままRFC 8200になりました。

10.2.2 IPv6ヘッダと IPv6拡張ヘッダの最大長IPv4ヘッダのフィールドには、可変長の「IPv4ヘッダオプション」が含まれているので、IPv4

ヘッダ自体の長さも可変長です。そのため IPv4ヘッダには、IHL(Internet Header Length)と

いう、ヘッダ長を4オクテット単位で示すフィールドが用意されています。IHLは4ビットの

フィールドなので、IPv4ヘッダオプションを含めた IPv4ヘッダの最大サイズは、15× 4 = 60

オクテットということになります。

一方、IPv6ヘッダは、それ自体は20オクテットの固定長です。しかし、拡張ヘッダを好き

なだけ付加できます。IPv6ヘッダと IPv6拡張ヘッダを合計した長さの最大値は、RFC 2460で

は定義されていません。フラグメント化不能部分(IPv6ヘッダおよび経路途中のノードでの転

†7 RFC 7112:F. Gont, V. Manral, R. Bonica, “Implications of Oversized IPv6 Header Chains”, 2014年1月†8 RFC 2460:S. Deering, R. Hinden, “Internet Protocol, Version 6 (IPv6) Specification”, 1998年12月

Page 207: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10.2 IPv6フラグメントヘッダ 193

送に必要な情報)だけを定めたRFC 2460のままでは、フラグメント化不能な IPv6拡張ヘッダ

が異常に長かったり各フラグメントの長さが短かったりした場合に、上位層のヘッダ情報が先

頭のフラグメントに収まりきらず、結果として元の IPv6パケットのままであれば通過できな

かったはずのファイアウォールを通過できてしまうといった問題が起きる可能性があります。

そこで、「IPv6パケットを送出するホストでフラグメント化する際には、上位層のヘッダま

での部分を先頭のフラグメントに収めなければならない」としてRFC 2460を更新したのが、

RFC 7112です†9。

この制約から、IPv6ヘッダと IPv6拡張ヘッダの合計の長さも自然と制約を受けることにな

ります。つまり、IPv6ヘッダ長との合計がPath MTU(第11章参照)を超えるようなサイズに

なる IPv6拡張ヘッダを付加することはできません。IPv6では、IPv4のように明示的な値では

ないものの、フラグメンテーションの仕様によって IPv6拡張ヘッダに対する最大値が制約さ

れているというわけです。

10.2.3 複数のフラグメントに重複する箇所がある場合RFC 2460は複数のフラグメントが重複する箇所を含むことを許容する仕様になっていま

す。2009年に発行されたRFC 5722†10は、この仕様を上書きします。

RFC 5722では、RFC 2460が許容している重複する箇所があるフラグメントが発生させるセ

キュリティ上の問題を解説しています。TCPヘッダを含む最初のフラグメントにおいて、TCP

のSYNとACKのフラグを1とすることで、ファイアウォールに対しては内側からの接続要求

に対する応答であると認識させます。以後、そのファイアウォールは同じ識別子を持つフラグ

メントをもともとは単一のパケットであったと認識する可能性があります。そのような状況

で、攻撃者はTCPのSYNを1としつつ、ACKを0としたTCPヘッダを含む新たなフラグメン

トを送りつけることで、受信者側が持つTCPヘッダの情報を書き換えることによって、本来で

あれば通過させることができなかったTCPの接続要求を外部から受け付けてしまうようにな

ります。さらに、TCPヘッダの任意のフィールドを変更することが可能であるため、TCPヘッ

ダのフラグだけではなく、ポート番号なども変更可能です。

そのような攻撃を防ぐために、RFC 5722は、フラグメントを生成する送信側では重複する

箇所を含むフラグメントを生成することを禁止し、重複する箇所を含むパケットを受け取った

受信側は同じ識別子を持つ一連のフラグメントを破棄するように仕様を変更しています。RFC

8200でも、RFC 5722に記載された仕様と同じくフラグメントを破棄することが求めると同時

に、そのときに ICMPエラーメッセージが送信されないことも記載されています。

10.2.4 AtomicなフラグメンテーションRFC 2460よりも後に発行された次のRFCでは、「Atomicな IPv6フラグメンテーション」が

扱われています。Atomicな IPv6フラグメンテーションとは、IPv6フラグメントヘッダを含む

ものの、パケットが分割されずに最初のフラグメントにすべてが含まれているような状態を意

†9 RFC 7112では、上位層のヘッダまでの部分のことを「IPv6 Header Chain」と呼んでいます(RFC 8200におけるPer-FragmentヘッダおよびExtension & Upper-Layerヘッダに相当する部分)。

†10 RFC 5722:S. Krishnan, “Handling of Overlapping IPv6 Fragments”, 2009年12月

Page 208: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

194 第10章 IPフラグメンテーション

味します。

r RFC 6946†11: Processing of IPv6 "Atomic" Fragmentsr RFC 8021†12: Generation of IPv6 Atomic Fragments Considered Harmful

RFC 6946はStandards Trackです。RFC 6946では、ICMPv6 Packet Too Bigメッセージで

次ホップのMTUが1280オクテット未満であるという報告を受けたホストが、実際には単一の

独立した(Atomicな)パケットにフラグメントヘッダを付加して後続のパケットを送信できる

仕様になっていることが紹介されています(1280オクテット未満のMTUを報告する ICMPv6

Packet Too Bigメッセージが発生する例としては、IPv6を IPv4に変換するような処理が挙げ

られています)。そのようなAtomicなフラグメントを受け取ったホストが、そのAtomicな

フラグメントと「IPv6送信元アドレス、IPv6宛先アドレス、フラグメントヘッダ識別子」が

一致するフラグメントをすでに受け取っていれば、フラグメントが重複していると判定され、

「IPv6送信元アドレス、IPv6宛先アドレス、フラグメント識別子」が一致するフラグメントは

すべて破棄されます。これは、前項で説明したRFC 5722の仕様により、重複するフラグメン

トは破棄されることになっているからです。RFC 6946は、そのようなことが起きないように、

Atomicなフラグメントは個別のパケットとして認識することを求める仕様としてRFC 2460

を上書きするものです。

RFC 8021は InformationalなRFCです。RFC 8021では、1280オクテット以下のMTUを報

告する ICMPv6 Packet Too Bigメッセージを偽造することによるDoS攻撃の可能性を紹介して

います。RFC 7872†13の調査では、IPv6拡張ヘッダが付いたパケットがインターネット上で破

棄される可能性について紹介していますが、フラグメントヘッダも IPv6拡張ヘッダであるた

め、ICMPv6 Packet Too Bigメッセージを1280オクテット未満の値で送りつけることによっ

てフラグメントヘッダを付加させることができれば、そのトラフィックがインターネット上で

破棄されることを狙うようなDoS攻撃が可能であると考えられます(5.3.7項も参照)。そのよ

うな問題点があるため、RFC 8021では、IPv4/IPv6トランスレータが1280オクテット以下の

MTUを報告する ICMP Packet Too Bigメッセージを送信しないようにすることを提案してい

ます。そのうえで、その提案が実装されれば、MTUが1280オクテット未満の ICMPv6 Packet

Too Bigを受け取った場合の仕様を作る必要性がなくなるので、そのような ICMPv6メッセー

ジを無視すべきであるとしています。

RFC 2460を上書き廃止するRFC 8200では、RFC 6946とRFC 8021の流れを受けて、RFC

2460にあった仕様を以下のように変更しています。

r Fragment Offsetが0かつMフラグが0であるフラグメントヘッダを受け取った場合、他

のフラグメントヘッダと IPv6送信元アドレス、IPv6宛先アドレス、フラグメント識別子

のセットが同じパケットを受け取ったとしても、別々に処理する仕様にしています。

†11 RFC 6946:F. Gont, “Processing of IPv6 "Atomic" Fragments”, 2013年5月†12 RFC 8021:F. Gont, W. Liu, T. Anderson, “Generation of IPv6 Atomic Fragments Considered Harmful”,

2017年1月†13 RFC 7872:F. Gont, J. Linkova, T. Chown, W. Liu, “Observations on the Dropping of Packets with IPv6

Extension Headers in the Real World”, 2016年6月

Page 209: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

10.2 IPv6フラグメントヘッダ 195

r ICMP Packet Too Bigが1280未満のMTUを受け取ったときにフラグメントヘッダを付け

て送信するという仕様を削除しています。

Page 210: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 211: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第11章

Path MTU discovery

1回で送信できるネットワーク層のデータの最大値のことを ‌MTU‌(Maximum Transmission

Unit)と呼びます。MTUは、通信を行う際のパフォーマンスに影響するのはもちろん、場合に

よっては通信障害の要因ともなります。インターネットでは複数のルータを越えて IPパケッ

トが転送され、各ルータ間のMTUはそれぞれ異なることもあります。それらのMTUのうち最

小の値より大きなサイズの IPパケットを送信すれば、そのMTUを持つリンクにおいてそのパ

ケットは転送できません。そのような状況が発生した場合、IPv4では途中のルータでフラグメ

ンテーションを行う可能性がありました。一方、IPv6では経路の途中にあるルータではフラグ

メンテーションを行いません。そのため、IPv6パケットを宛先に届けるには、通信経路におけ

る最小のMTUを事前に把握し、そのサイズを超えないように送信元でフラグメンテーション

を行う必要があります。この、通信経路の最小MTUを検知する手法が、本章で解説する ‌Path

MTU Discovery ‌です。Path MTU Discoveryでは、いくつかのプロトコルを組み合わせて IP

パケット長の最適な値を推測します。

IPv4では、IPv4ヘッダのDF(Don’t Fragment)ビットがセットされていなければ、途中経

路上のルータが必要に応じてパケットのフラグメンテーションを行います。一方、IPv6では途

中経路上のルータではフラグメンテーションを行わないので、適切なMTUが設定されていな

いパケットは通信相手に届きません。そうした問題が発生しやすい背景はありますが、Path

MTU Discoveryそのものは IPv6のための仕組みではなく、IPv4時点から存在している仕組み

です。

IPv4におけるPath MTU Discoveryを記述したRFC 1191†1は、1990年に発行されていま

す。IPv6については、1996年にRFC 1981†2が発行されていますが、このRFC 1981は2017

年にRFC 8201†3によって上書きされています。

†1 RFC 1191:J.C. Mogul, S.E. Deering, “Path MTU discovery”, 1990年11月†2 RFC 1981:J. McCann, S. Deering, J. Mogul, “Path MTU Discovery for IP version 6”, 1996年8月†3 RFC 8201:J. McCann, S. Deering, J. Mogul, R. Hinden, “Path MTU Discovery for IP version 6”, 2017年7月

Page 212: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

198 第11章 Path MTU discovery

NOTE

Path MTU Discoveryは IPv4でも IPv6でも必須ではありません。利用するかどうか、どのような手法で行うかは、実装もしくは設定に依存します。

11.1 Path MTU discoveryに関係するIPv4の機能IPv4では、途中経路上のルータが必要に応じてパケットのフラグメンテーションを行いま

す。ただし、IPv4ヘッダのフラグフィールドに含まれるDFビット(図11.1で灰色になってい

るビット)がセットされているパケットはフラグメンテーションが禁止されます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Version IHL Type of Service Total Length

Identification Flags Fragment Offset

Time to Live Protocol Header Checksum

Source Address

Destination Address

Options(可変長。32ビットの整数倍でない場合は末尾にパディング)

▲ 図11.1 IPv4ヘッダフィールド中のDFビット

IPv4では、フラグメンテーションが必要にもかかわらずDFビットがセットされているパ

ケットをルータが受け取った場合、パケットを破棄すると同時に ICMPメッセージをパケット

の送信元アドレスに対して送信します(図11.2)。

ICMP DestinationUnreachable

MTU 1500 MTU 1500 MTU 1300

1400オクテットのパケット(DFビット1)

パケットを破棄

DF=1

ICMPメッセージを送信元に送信

DF=1

▲ 図11.2 IPv4でのPath MTU Discovery

この場合の ICMPメッセージのタイプは、宛先へ到達できないことを示すDestination

Unreachable(3)です。また、タイプにおける意味を示すコードは、フラグメンテーションが

必要であるにもかかわらずDFビットがセットされていることを示す「fragmentation needed

and DF set(4)」です。

このときの ICMPメッセージのフォーマットを図11.3に示します。この ICMPメッセージは

IPv4ヘッダの直後に続きます。

Page 213: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

11.2 Path MTU discoveryに関係する IPv6の機能 199

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type Code Checksum

未使用

IPヘッダと、ペイロードのデータの先頭64ビットhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図11.3 IPv4 ICMP Destination Unreachableメッセージフォーマット

この ICMPメッセージを受け取った送信ホストは、最初に送信したDFビット付きの IPv4パ

ケットが、通信経路の途中にあるリンクのMTUより大きかったことを知ります。しかし、IPv4

の ICMPにはDFビット付きパケットが破棄される原因となったリンクのMTUを通知する機能

はありません。そのため、送信元ホストでは、DFビットを設定したパケットを複数送信しな

がら ICMPメッセージの応答を確認することで、最適なPath MTUを推測する必要があります。

その推測手法は明確に定義されておらず、実装依存となっています。また、Path MTUが判明

して小さくした送信単位を再度大きくすることを試すタイミングなども実装依存になってい

ます。

11.2 Path MTU discoveryに関係するIPv6の機能IPv6ヘッダには IPv4ヘッダのDFビットに相当する機能はありません。ICMPv6について

は、Packet Too Bigメッセージ(図11.4)がPath MTU Discoveryで利用されます。ICMPv6の

Packet Too Bigメッセージには、MTUの値を示すフィールドが存在しない IPv4の ICMPメッ

セージとは異なり、原因となったMTUの値を示すフィールド存在します。そのため、IPv4の

ように複数のパケットを送信しながら最適なPath MTUを探る必要はありません。

さらに、IPv6のPath MTU Discoveryでは、IPv6ヘッダに記載されたフローラベルごとに異

なるPath MTUを利用することも可能になっています。

Page 214: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

200 第11章 Path MTU discovery

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type Code Checksum

MTU

IPv6におけるMTUの最小値(後述)を超えない長さまで、到達不能だった IPパケットを格納する(ICMPv6パケットは除く)

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図11.4 ICMPv6 Packet Too Bigメッセージフォーマット

11.3 上位層プロトコルとPath MTU Discovery

RFC 4821†4では、上位層におけるPath MTU Discoveryの活用方法が標準化されています。

具体的には、TCP、SCTP、その他アプリケーションにおけるPath MTU Discovery活用手法を

解説しています。

また、RFC 8201では、TCP MSSがPath MTU Discoveryによって得られる結果をもとに変

更されることがあったとしても、TCP MSSとPath MTU Discoveryが互いに独立する仕組みで

あると記載されています。

ICMPを悪用したTCPへの攻撃手法とそれらへの対処についてまとめたRFC 5927†5の中で

も、Path MTU Discoveryについて触れられています。RFC 5927では、TCPでのPath MTU

Discoveryの活用について、ICMPによってパケット長が大きすぎることが報告されたとして

も即座にTCPのMSSを変更せず、実際に大きなTCPセグメントの送信が失敗することを確認

してからMSSを変更する手法が説明されています。

11.4 Path MTU Discoveryの仕組みを悪用したDoS攻撃Path MTU Discoveryで利用される IPv4の ICMPと IPv6の ICMPv6にはパケットを認証する

機能がないので、第三者による ICMPメッセージの偽造が可能です。そのため、Path MTU

Discoveryの仕組みを悪用したDoS攻撃が可能です。

†4 RFC 4821:M. Mathis, J. Heffner, “Packetization Layer Path MTU Discovery”, 2007年3月†5 RFC 5927:F. Gont, “ICMP Attacks against TCP”, 2010年7月

Page 215: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

11.4 Path MTU Discoveryの仕組みを悪用したDoS攻撃 201

MTU 1500 MTU 1500 MTU 1500

1400オクテットのパケット(DFビット1)

攻撃者

利用可能な Path MTUより小さなパケットを強制される

IPヘッダの送信元などを偽造した ICMPメッセージ

▲ 図11.5 偽造された ICMPによるPath MTUの誤認

想定される攻撃は、本来の値よりも小さい値をPath MTUとして誤認させ、通信性能を低下

させるというものです。たとえば、本来であれば1500オクテットであるはずのPath MTUを、

IPv4であれば576オクテット、IPv6であれば1280オクテットであると誤認させることによっ

て通信に必要となるパケット数を増やし、通信性能を低下させることができます。

Path MTUを実際よりも低い値に設定されてしまうDoS攻撃は、単に通信速度を低下させる

だけであり、通信ができなくなる状態を作るわけではありません。ただし、この仕組みを悪用

して他の攻撃手法に組み合わせることは可能です。たとえば、UDPで送信されるDNSの応答

パケットを意図的にフラグメンテーションさせたうえで2つめ以降のパケットを偽造して送り

つけることでキャッシュポイズニングを行うという攻撃においてPath MTUの誤認を利用する

手法が、2013年に公表されています†6。

逆に、Path MTUを本来よりも大きな値に誤認させることができれば、攻撃を受けた側の通

信が遮断されてしまう可能性はあります。とはいえ、RFC 1191とRFC 8201には「ICMPメッ

セージをもとにしてPath MTUの値を上昇させてはならない」という規定があるので、そのよ

うな攻撃は成立しません。

ICMPメッセージ偽造によるPath MTU Discoveryの仕組みに対するDoS攻撃への対処は、

ネットワーク層全体の仕組みとして提供されるわけではなく、Path MTU Discoveryを活用す

る機能ごとに行われます。

†6 Amir Herzberg, Haya Shulman, “IP fragmentation attack on DNS”, RIPE 67, 2013年 10月, https://

ripe67.ripe.net/presentations/240-ipfragattack.pdf

Page 216: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 217: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第12章

IPv6マルチキャスト

マルチキャストは、誰かがデータを送り、必要な人にだけデータが届けられるという通信方

法です。マルチキャストの送信者はネットワークのどこにいてもよく、受信者は複数存在する

状況が想定されています。IPパケットのマルチキャストについては、RFC 1112†1でサービス

モデルが定義されています。

RFC 1112によれば、IPマルチキャストでは0もしくは1以上のノードによって構成される

「グループ」に対して IPパケットを送信します。このときの宛先アドレスとしては、グループ

を指す1つの IPアドレスを使います。このグループのことをマルチキャストグループといい、マルチキャストグループを指す IPアドレスをマルチキャストアドレスといいます。マルチキャストの受信側は、マルチキャストグループに「参加(join)」することで、そのグ

ループに割り当てられたマルチキャストアドレス宛のデータを受け取れるようになります。そ

のマルチキャストアドレス宛のデータを受け取る必要がなくなったら、該当するマルチキャス

トグループから「離脱(leave)」します。ノードによるマルチキャストグループへの参加や離

脱は、任意のタイミングで動的に可能です。

一方、マルチキャストの送信側は、あるマルチキャストグループを指すマルチキャストアド

レスを IPパケットの宛先に設定することで、マルチキャストグループに対してデータを送信し

ます。受信側とは違い、送信側は自分が参加していないマルチキャストグループに対しても IP

マルチキャストでデータを送信することが可能です。

マルチキャストアドレスは、ユニキャストで使われる IPアドレスと異なり、特定の宛先を

示すものではありません。とはいえ、マルチキャストグループを構成する各ノードに対して

は、ユニキャストの場合と同様に「best-effort(最善努力)」で IPパケットが送信されます。

best-effortなので、グループを構成するすべてのノードに必ずパケットが届くことが保証され

ているわけではありません。また、受信の順番が送信の順番と必ず一致するわけでもありま

せん。

IPv6には、IPv4に存在したブロードキャストという仕組みがなく、IPv4でブロードキャス

トが担っていた役目をすべてマルチキャストが担うようになりました。そのため、マルチキャ

†1 RFC 4890:S. Deering, J. Mohacsi, “Host Extensions for IP Multicasting”, 1989年8月

Page 218: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

204 第12章 IPv6マルチキャスト

ストは IPv6にとって不可欠な仕組みです。本章では、IPv6におけるマルチキャストの基本的

な事項を整理します。

IPv6におけるマルチキャストアドレス設定上の注意

IPv6マルチキャストは、IPv4におけるブロードキャストの役割を含むので、ルータやファイアウォールなどでマルチキャストをフィルタしてしまうと通信ができなくなるおそれがあり注意が必要です。たとえば、ローカルセグメントで IPv4マルチキャストをフィルタするように設定されることがありますが、そのような IPv4での設定をそのまま IPv6に適用すると、DHCPなどが利用できなくなってしまいます。なお、同様の問題は ICMPv6についてもいえます。ICMPv6については、RFC

4890†2で、IPv4とまったく同じフィルタ設定にすることで障害が発生する要因になる点が議論されています。

12.1 IPv6のマルチキャストアドレスIPv6では、最初の8ビットがすべて1になる IPアドレスがマルチキャストアドレスです。

IPv6アドレスの文字列表記でいえば、ff00::/8がマルチキャストアドレスになります。

IPv6アドレスにおいて、マルチキャストであることを示す先頭の8ビットに続く4ビット

(8ビットめ~11ビットめの)はフラグとして使われます。さらに後ろに続く4ビット(先頭

から12ビットめ~15ビットめ)は、マルチキャストのスコープを表します。図12.1に IPv6

マルチキャストアドレスの構造を示します。

0 1 2 3 4 5 6 7 8 1112 15

11111111 フラグ スコープ グループ識別子 →

64 127

グループ識別子(つづき)→

▲ 図12.1 IPv6マルチキャストアドレス

図12.1の各フィールドは次のようになっています。

rスコープ(4ビット)

マルチキャストスコープを表します。IPv6のマルチキャストスコープに関しては12.2節で

説明します。rフラグ(4ビット)

4ビットのフラグは図12.2のように割り当てられています。

†2 RFC 4890:E. Davies, J. Mohacsi, “Recommendations for Filtering ICMPv6 Messages in Firewalls”, 2007

年5月

Page 219: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.1 IPv6のマルチキャストアドレス 205

8 9 10 11

· · · 0 R P T · · ·

▲ 図12.2 IPv6マルチキャストアドレスのフラグ

8ビットめは必ず0となります。

11ビットめのTは、既知の固定アドレスであるかどうかを示しています。IANAなどによっ

て規定されている既知のマルチキャストアドレスであれば、この部分は0となります。一方

で、固定的ではなく一時的に利用するためのマルチキャストアドレスでは、この部分が1と

なります。

10ビットめのPは、ユニキャストのネットワークプレフィックスを含むマルチキャストアド

レスであることを示しています。Pが1の場合はTの値も1になります。Pが1の場合、IPv6

マルチキャストアドレスは図12.3のようなフォーマットになります。

0 1 2 3 4 5 6 7 8 9101112 1516 2324 3132

111111110R11 スコープ 予約 plen network prefix →

64 9596 127

network prefix(つづき) グループ識別子→

▲ 図12.3 Pフラグが1の場合の IPv6マルチキャストアドレス

マルチキャストでは、マルチキャストグループに参加しているノードが、そのグループを指

すマルチキャストアドレス宛のトラフィックを受信します。複数の異なるアプリケーション

で同じマルチキャストアドレスを同時に利用すると、不必要なトラフィックがネットワーク

上を行き来してしまいます。そうしたマルチキャストアドレスの競合を回避するため、マル

チキャストアドレスについては、割り振りや割り当ての方法が問題になります。マルチキャ

ストアドレスの割り当てと割り振りに関する概要はRFC 6308でまとめられています。マル

チキャストアドレスの自動割り当てを行う方法もあり、RFC 3306では、ユニキャストアド

レスのネットワークプレフィックスを用いて他のネットワークで利用されているマルチキャ

ストアドレスとの競合を防ぎつつマルチキャストアドレスを自動割り当てする方法が定義さ

れています。

NOTE

後述するように、マルチキャストには送信元を指定しないASM(Any-Source Multi-

cast)と、送信元を指定するSSM(Source Specific Multicast)があり、マルチキャストアドレスの割り振りや割り当てが大きな意味を持つのはASMのほうです。SSM

では、マルチキャストグループと送信元が一体として考慮されるので、マルチキャストグループが同じであっても送信元が別であれば異なるトラフィックとして扱われます。そのためSSMでマルチキャストアドレスの競合が発生する可能性があるのは、送信元が同一になるノード内においてのみです。

Page 220: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

206 第12章 IPv6マルチキャスト

図 12.3のplenは、ユニキャストアドレスのプレフィックス長を表します。それに続く

network prefixフィールドには、Pフラグが1の場合にマルチキャストアドレス中で利用さ

れるユニキャストのネットワークプレフィックスを指定します。

IPv6そのものの定義からはプレフィックス長の最大値が64ビットであると仮定できません

が、IPv6のアドレス体系を定義しているRFC 4291の2.5.1項に示されるインターフェース

識別子に関する仕様に従って運用されている場合には、一般的なユニキャストアドレスのプ

レフィックス長の最大値は64ビットとなります。そういった背景もあり、このフィールド

の長さは64ビットとされています(4.5.1項の/127についての説明も参照)。

その後に続くグループ識別子は、RFC 3307†3で規定された方法を用いて割り当てられます。

Rビットは、中継機器を使ってルータをまたぐマルチキャストを実現する場合に、その中継

機器(ランデブーポイント、Rendezvous Point)のアドレスがマルチキャストアドレスに埋

め込まれていることを表しています。Rビットが1の場合のマルチキャストアドレスの構造

についてはRFC 3956†4を参照してください。

12.2 マルチキャストのスコープマルチキャストアドレスによってトラフィックが配送される範囲を、マルチキャストのス

コープといいます。IPv6では、アドレス体系の一部として、宛先として指定するマルチキャス

トアドレスによって配送範囲を調整できる仕組みが最初から定義されています。

NOTE

マルチキャストのスコープは、4.4節で説明した IPv6アドレスの有効範囲を示すスコープとは異なるので注意してください。

IPv6マルチキャストのスコープとしては、以下のような種類が定義されています。なお、

IANAのサイトでは、これらの各スコープごとに IPv6マルチキャストアドレスの割り当て一覧

が公開されています†5。

r 1: Interface-Local(インターフェースローカルスコープ)r 2: Link-Local(リンクローカルスコープ)r 3: Realm-Local(レルムローカルスコープ)r 4: Admin-Local(アドミンローカルスコープ)r 5: Site-Local(サイトローカルスコープ)r 8: Organization-Local(組織ローカルスコープ)r E: Global(グローバルスコープ)

†3 RFC 3307:B. Haberman, “Allocation Guidelines for IPv6 Multicast Addresses”, 2002年8月†4 RFC 3956:P. Savola, B. Haberman, “Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast

Address”, 2004年11月†5 IPv6 Multicast Address Space Registry :

https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.

xhtml

Page 221: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.3 Solicited-Nodeマルチキャストアドレス 207

1のインターフェースローカルスコープは、単一のインターフェース内でのみ利用可能なマ

ルチキャストです。インターフェース内でのループバックでのみ受け取ることが可能です。

2のリンクローカルスコープは、単一リンク内(単一サブネット内)に対して配送されるマ

ルチキャストです。

3のレルムローカルスコープは、RFC 7346で追加されたもので、リンクローカルスコープよ

り範囲が広いものの、ネットワーク体系に依存するようなマルチキャストスコープです。RFC

7346では、ノード同士がメッシュでつながっている状況での利用例が記述されています。

4のアドミンローカルスコープは、管理される最小単位でのネットワークを表します。5の

サイトローカルスコープは、単一サイト内でのマルチキャストです。8の組織ローカルスコー

プは、同一組織が保持する複数サイトをまたがったマルチキャストのスコープを表します。

Eのグローバルスコープは、グローバルなマルチキャストのスコープを表します。

IANAのアドレス割り当てにおいても、このスコープが関連します。たとえば、NTP(Network

Time Protocol)で利用するマルチキャストアドレスは、IANAのサイトではff0X:0:0:0:0:

0:0:101と記述されています。これにスコープを当てはめた実際のマルチキャストアドレス

は以下のようになります。

r ff01::101:同一インターフェース内に存在するNTPサーバr ff02::101:同一サブネット内のNTPサーバr ff04::101:アドミンローカルスコープでのNTPサーバr ff05::101:サイト内のNTPサーバr ff08::101:組織内のNTPサーバr ff0e::101:インターネット上のすべてのNTPサーバ

NOTE

IPv4では、1998年に発行されたRFC 2365でマルチキャストのスコープが定義されています。RFC 2365では、239.0.0.0/8が、Administratively scoped IPv4 multicast

spaceとされています。この239.0.0.0/8を宛先 IPv4アドレスとするマルチキャストは、グローバルなインターネットには配送されず、単一の運用管理体制下にあるネットワーク内でのみマルチキャストとして配送されます。なお、RFC 2365以前は、IPv4マルチキャストの配送範囲を制限するのに主にTTLが利用されていました。

12.3 Solicited­NodeマルチキャストアドレスSolicited-NodeマルチキャストアドレスはRFC 4291で定義されており、ユニキャストも

しくはエニーキャストに使う IPv6アドレスの下位24ビットを利用したマルチキャストアド

レスです。Solicited-Nodeマルチキャストアドレスでは、上位104ビットをff02::1:ff00:

0とし、下位24ビットをユニキャストアドレスもしくはエニーキャストアドレスの下位24

ビットとします。たとえば、2001:db8::01:800:200e:8c6cという IPv6アドレスに対応す

るSolicited-Nodeマルチキャストアドレスはff02::1:ff0e:8c6cです。

Page 222: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

208 第12章 IPv6マルチキャスト

IPv6を利用するすべてのノードは、ネットワークインターフェースに対して IPv6アドレス

を設定するとき、そのネットワークインターフェースにおいてSolicited-Nodeマルチキャスト

アドレスに参加することが求められます。

Solicited-Nodeマルチキャストアドレスは、第7章で解説する近隣探索プロトコルで使われ

ます。Solicited-Nodeマルチキャストアドレスを利用することによって、近隣探索プロトコル

で行われるアドレス解決を行うときに、必要なノードに対してのみマルチキャストで関連する

メッセージを届けることができます。IPv4では、アドレス解決には同一リンク内のすべての

ノードに対するブロードキャストが利用されています。これが IPv6ではマルチキャストにな

るので、ネットワークやノードに対する負荷が軽減され、効率が良くなることが期待されてい

ます。

ユニキャストアドレスもしくはエニーキャストアドレスの下位ビットを利用するのは、上位

ビットだと下位ビットと比べて同一リンク内で同じものが使われる可能性が高いからです。下

位ビットを利用すれば、同じマルチキャストアドレスに複数の IPv6アドレスが含まれる可能

性が少なくなります。

12.4 マルチキャストにおけるゾーンRFC 4007では、IPv6アドレスのスコープに対応する範囲のことをゾーンと呼んでいます

(4.7節参照)。ユニキャストおよびエニーキャストではリンクローカルスコープとグローバル

スコープに対応する2種類のゾーンだけを使いますが、マルチキャストでは多様なゾーンが利

用されます。

マルチキャストアドレスが複数のゾーンに同時に属する例を見てみましょう。図12.4のよ

うな、ネットワークインターフェースが4つあるノードがあるとします。このノードのネット

ワークインターフェース1は、ループバックリンクであり、物理的なデバイスではなく仮想的

なネットワークインターフェースとして構成されています。その仮想的なネットワークイン

ターフェースにより、リンクローカルスコープに対応するゾーンが形成されています。また、

それ単体でインターフェースローカルスコープに対応するゾーンを形成しています。

ネットワークインターフェース2と3も、それぞれが個別のインターフェースローカルス

コープに対応するゾーンを形成しています。しかし、これらは同じリンク(イーサネットリン

ク1)に接続しており、リンクローカルスコープに対応するゾーンとしてはいずれも同じもの

に属しています。

ネットワークインターフェース4は、2および3とは別のリンク(イーサネットリンク2)に

接続されています。やはりインターフェースローカルスコープに対応する単一のゾーンを形

成しているほか、イーサネットリンク2に関係するリンクローカルスコープが形成するゾーン

に、ノードA内のインターフェースとしては唯一属しています。

さらに、これらの全インターフェースは、12.2節で説明したマルチキャストのスコープに対

してもゾーンを形成します。具体的には、アドミンローカルスコープに対応するゾーンに属す

るとともに、サイトローカルスコープに対応するゾーンにも属しています。

Page 223: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.4 マルチキャストにおけるゾーン 209

インターフェース1 ループバックリンク(仮想的)

イーサネットリンク1

イーサネットリンク2

インターフェース2

インターフェース3

インターフェース4

ノードA

インターフェースローカルスコープに対するゾーン

アドミンローカルスコープに対するゾーン

リンクローカルスコープ

に対するゾーン

リンクローカルスコープ

に対するゾーン

リンクローカルスコープ

に対するゾーン

インターフェースローカルスコープに対するゾーン

インターフェースローカルスコープに対するゾーン

インターフェースローカルスコープに対するゾーン

サイトローカルスコープに対するゾーン

▲ 図12.4 ノードAの視点で見たマルチキャストの各スコープのゾーン

図12.4は、ノードA内という視点でゾーンを見たものです。今度は、これを一歩引いた視点

で見てみましょう。まず、ノードAが属するリンクローカルスコープに対するゾーンは、たと

えば図12.5のような範囲で形成されるでしょう。

A Cリンクローカルスコープ

に対するゾーンリンクローカルスコープ

に対するゾーン

B

▲ 図12.5 リンクローカルスコープに対応するゾーン

次に、ノードAは組織のある部署が管理している範囲にある端末だとします。このとき、図

12.6のように、部署1に属する端末でアドミンローカルスコープに対応するゾーンが形成でき

ます。さらに、サイトローカルスコープに対応するゾーンを、組織全体のネットワークで形成

されるものとして設定できるでしょう。このように、より大きなスコープに対応するゾーン

は、より小さなスコープに対応するゾーンを内包する形で構成します。IPv6では、このような

ゾーンの考え方に沿って IPv6マルチキャストアドレスを設計し、マルチキャストトラフィッ

クの配送範囲を制御できます。

Page 224: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

210 第12章 IPv6マルチキャスト

A

サイトローカルスコープに対応するゾーン

部署1

部署2 組織全体

部署3

アドミンローカルスコープに対応するゾーン

アドミンローカルスコープに対応するゾーン アドミンローカルスコープ

に対応するゾーン

C

B

D F

E G

H I

J

▲ 図12.6 アドミンローカルスコープとサイトローカルスコープに対応するゾーン

12.5 MLD(Multicast Listener Discovery)マルチキャストの受信側は、マルチキャストグループへの参加を表明することで、そのグ

ループ宛に送信されたパケットを受信できるようになります。IPv4では、マルチキャストグ

ループへの参加や離脱を制御するために、IGMP(Internet Group Management Protocol)と

いう IPプロトコルが利用されていました。IGMPは、インターネットの初期から存在していた

プロトコルのひとつです。実際、IGMPのプロトコル番号は2です。

IPv6では、マルチキャストグループへの参加や離脱といったマルチキャストの制御に、

ICMPv6のMLD(Multicast Listener Discovery)という機能を利用します。MLDは ICMPv6の

機能の一部であり、基本的な部分は ICMPv6(第6章参照)をベースにしています。言い換え

ると、IPv6におけるマルチキャストの制御では、IPv4における IGMPのような独自のプロトコ

ル番号を持つ独立したプロトコルは使いません。

本書執筆現在、MLDにはバージョン1とバージョン2があります。MLDv2は、MLDv1と

の互換性を維持しつつも、特定の送信元アドレスからのマルチキャストのみを対象としてグ

ループに参加するSSM(Source Specific Multicast)という機能が追加されたバージョンです。

IPv4における IGMPにも IGMPv3という拡張がありますが、その IPv6版がMLDv2といっても

いいでしょう。実際、MLDv2を定義しているRFC 3810でも、MLDv2は IGMPv3プロトコル

を IPv6のセマンティクスへと翻訳したものであると書かれています。

IPv4における IGMPと IPv6におけるMLDの対応を下記にまとめます。

IPv4 IPv6

IGMPv1 対応するバージョンは存在せず

IGMPv2 MLDv1

IGMPv3 MLDv2

Page 225: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.5 MLD(Multicast Listener Discovery) 211

12.5.1 MLDで利用する ICMPv6メッセージMLDv1は、RFC 2710†6で定義されています。ここではRFC 2710で定義されているMLDの

基本的な ICMPv6メッセージ(MLDメッセージ)について説明します。

MLDメッセージには、Multicast Listener Query(タイプ130)、Multicast Listener Report

(タイプ131)、Multicast Listener Done(タイプ132)の3種類があります。Multicast Listener

Queryメッセージは、マルチキャスト受信者が存在しているかどうかを確認するために、ルー

タがリンクに対して定期的に送信するメッセージです。Multicast Listener Reportメッセージ

は、マルチキャストの受信者となることを表明するためにノードが利用するメッセージです。

Multicast Listener Doneメッセージは、マルチキャストグループからの脱退を表明するため

に使われます。以下に、各MLDメッセージの使い方を概説します。

rMulticast Listener Queryメッセージ

リンク上にマルチキャスト受信者が存在しているかどうかを確認するために、ルータはタ

イプ130の ICMPv6メッセージを送信します。同一リンク上でMulticast Listener Queryを

送信するルータは、基本的には1つだけです。このルータをQuerierと呼びます。ルータ

は、もし自分よりも IPv6アドレスの数値が小さいルータから送信されたMulticast Listener

Queryメッセージを確認した場合、自分ではMulticast Listener Queryメッセージを送信し

ないルータ(Non-Querier)となります。

Multicast Listener Queryメッセージには、General Queryと、Address-Specific Queryの

2種類があります。General Queryは、Querierであるルータから定期的にリンクスコープ

全ノードマルチキャストアドレス(ff02::1)宛に送信されるメッセージです。General

Queryを受信したノードは、自分が参加しているマルチキャストグループを、後述する

Multicast Listener Reportメッセージでルータに伝えます。ルータが最初に起動するときに

は、リンク上に存在するすべてのマルチキャスト受信者を把握するために、General Query

を送信することが推奨されています。

一方、Address-Specific Queryは、特定のマルチキャストグループに存在しているノードを

知るためのメッセージです。そのため、Address-Specific Queryは、調べたいマルチキャス

トグループを指すマルチキャストアドレス宛に送信されます。

なお、ルータで考慮するのは各リンクにマルチキャストの受信者が存在しているのかどうか

だけであり、マルチキャスト受信者の数は把握しません。rMulticast Listener Reportメッセージ

マルチキャストグループに参加するノードは、タイプ 131の ICMPv6メッセージである

Multicast Listener Reportメッセージを送信します。ノードでは、ルータからのMulticast

Listener Queryメッセージを受信すると、Queryに対応するマルチキャストアドレス宛に

Multicast Listener Reportメッセージを返信します。ルータがMulticast Listener Report

メッセージを受け取り、そのリンクに該当するマルチキャストグループに参加しているノー

†6 RFC 2710:S. Deering, W. Fenner, B. Haberman, “Multicast Listener Discovery (MLD) for IPv6”, 1999年10

Page 226: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

212 第12章 IPv6マルチキャスト

ドがいることを確認したら、ルータからそのリンクに対してマルチキャストを送信するよう

になるわけです。

ただし、Multicast Listener Queryメッセージを受け取ったノードはすぐにMulticast

Listener Reportメッセージを返信するわけではなく、ランダムな時間だけ待って返信し

ます。その待ち時間に他のノードから該当するマルチキャストアドレス宛に送信された

Multicast Listener Reportを受け取った場合には、自分ではMulticast Listener Reportメッ

セージを送信しません。

Multicast Listener Reportメッセージは、Multicast Listener Queryメッセージに対する応

答だけでなく、ノードが自発的に送信する場合もあります。RFC 2710では、そのリンク内

で最初にマルチキャストを受信するノードになる可能性に備えて、マルチキャストグループ

に参加したときにノードがMulticast Listener Reportメッセージを送信すべきとされてい

ます。さらに、最初のMulticast Listener Reportメッセージに対して障害が発生する可能

性を考慮し、間隔を空けて1つまたは2つを追加で送信することが推奨されています。rMulticast Listener Doneメッセージ

マルチキャスト受信者は、マルチキャストグループから脱退するときにMulticast Listener

Doneメッセージを送信します。Multicast Listener Doneメッセージを受け取ったQuerier

は、そのマルチキャストグループに対するMulticast Listener Queryメッセージを送信し

ます。このMulticast Listener Queryメッセージに対する応答としてMulticast Listener

Reportメッセージを受け取れなかった場合は、そのリンク上に対象となるマルチキャストグ

ループの受信ノードが存在しないと判断します。その判断をするためにMulticast Listener

Reportメッセージの到着を待つ時間は、Multicast Listener DoneメッセージのMaximum

Report Delayフィールドで指定します。

図12.7に、上記3種類のMLDメッセージの基本フォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(130~132) Code Checksum

Maximum Response Delay 予約

Multicast Address

▲ 図12.7 MLDメッセージフォーマット

MLDメッセージを配送する IPv6パケットでは、IPv6ヘッダのHop Limitが1である必要が

あります。これは、MLDメッセージはリンク内で利用するためのものであり、ルータを越えな

いからです。また、MLDメッセージを配送する IPv6パケットの送信元 IPv6アドレスはリンク

ローカルスコープとします。

MLDメッセージの先頭4オクテットは、ICMPv6の基本ヘッダのフォーマットと同一です。

Page 227: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.5 MLD(Multicast Listener Discovery) 213

MLDメッセージではCodeフィールドは使われておらず、すべて0に設定されます。

Maximum Response Delayフィールドは、Multicast Listener Queryメッセージに対する

Multicast Listener Reportの応答の待ち時間を指定するフィールドで、Multicast Listener

Queryメッセージのみで利用されます。Multicast Listener ReportメッセージおよびMulti-

cast Listener Doneメッセージでは、このフィールドはゼロに設定します。

Multicast Addressフィールドには、各タイプのMLDメッセージで伝える必要があるマルチ

キャストアドレスを送信します。具体的には、Multicast Listener Reportメッセージおよび

Multicast Listener Doneメッセージではノードが参加するマルチキャストグループのマルチ

キャストアドレスを指定します。Multicast Listener Queryメッセージでは、Address-Specific

Queryの場合には調べたいマルチキャストアドレスを指定します。General Queryの場合に

は、このフィールドはゼロに設定します。

■ Router AlertオプションMLDパケットは、IPv6拡張ヘッダのHop-by-HopオプションにRouter Alertオプションを

含めて送信されます。Router Alertオプションは、それを受け取ったルータが IPパケットを精

査することを求めるもので、RFC 2711で定義されています。

Router Alertオプションを含めることで、自分自身を宛先としない IPv6パケットのうち中

身の確認が必要なものをルータが識別しやすくなります。MLDでは、通常のパケットを転

送するためのルータの負荷を抑制するために、Router Alertオプションを使います。RSVP

(Resource Reservation Protocol)、MRD(Multicast Router Discovery)、PGM(Pragmatic

General Multicast)などのプロトコルでも、同じ目的でRouter Alertオプションが利用され

ます。

Router Alertオプションのフォーマットを図12.8に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 Value

▲ 図12.8 Router Alertオプション

Valueフィールドは、どのような値を運んでいるかを16ビットの数値で示すもので、MLD

の場合はゼロに設定します。Valueフィールドで利用可能な値は IANAのWebサイトで公開さ

れています†7。

Router Alertオプションを悪用することで、途中経路上のルータに過度な負荷をかけてしま

うといった攻撃が可能になります。そのため、Router AlertオプションをEnd-to-Endのイン

ターネットで利用しないように求めるRFC 6398†8が発行され、これによりRFC 2711は更新

されています。ただし、MLDを運ぶ IPv6パケットの送信元アドレスがリンクローカルである

ため、ルータを越えないことから、RFC 6398で懸念されている途中ルータに過負荷を与える

†7 IPv6 Router Alert Option Values:https://www.iana.org/assignments/ipv6-routeralert-values/ipv6-routeralert-values.xhtml

†8 RFC 6398:F. Le Faucheur, Ed., “IP Router Alert Considerations and Usage”, 2011年10月

Page 228: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

214 第12章 IPv6マルチキャスト

攻撃には利用できません†9。

NOTE

IPv4にもRouter Alertオプションがあります。IPv4のRouter AlertオプションはRFC

2113†10で定義されており、RFC 2113はRFC 5350とRFC 6398によって更新されています。

12.5.2 MLDv2MLDv2は、受信者が興味のある送信元を限定することができるようにする機能をMLDv1に

対して追加したものです。MLDv2は、MLDv1と互換性がある設計になっています。MLDv2

は、RFC 3810†11で定義されています。

MLDv2は、MLDv1と同様の機能に加えて、マルチキャストのトラフィックの送信ノード

を指定するための INCLUDEフィルタとEXCLUDEフィルタを指定できるのが大きな特徴です。

本書では、MLDv2の詳細には立ち入りません。詳細はRFC 3810を参照してください。

12.5.3 SSMRFC 1112で定義されているマルチキャストは、ある特定のマルチキャストグループに対し

て参加したノードが送信元に関係なく対象となるマルチキャストグループのパケットを受け取

るというものです。このような送信元が特定されないマルチキャストは、‌ASM ‌(Any-Source

Multicast)と呼ばれています。それに対して、マルチキャストグループと送信者の両方を指

定できる ‌SSM‌(Source Specific Multicast)です。

SSMは、RFC 4607†12で定義されています。IPv6マルチキャストにおけるSSMでは、xをス

コープ識別子として、ff3x::/32というマルチキャストアドレスが利用されます†13。IPv6の

マルチキャストアドレスであることを示す先頭8ビットのffに続く3は、12.1節で説明したP

フラグとTフラグが両方とも1であることを示しています。

MLDv2を利用して IPv6でSSMを実現するための仕様は、IPv4における IGMPv3を利用した

SSMと合わせて、RFC 4604†14で定義されています。

12.5.4 Lightweight MLDv2

MLDv2の簡易版として、Lightweight-MLDv2(LW-MLDv2)と呼ばれるものがRFC 5790†15で

定義されています。LW-MLDv2は、MLDv2のEXCLUDEフィルタを実装しないことによって、

†9 MLDv2のRFCであるRFC 3810は、Hop Limitが1であることをチェックすることも求めています。†10 RFC 2113:D. Katz, “IP Router Alert Option”, 2011年10月†11 RFC 3810:R. Vida, L. Costa, “Multicast Listener Discovery Version 2 (MLDv2) for IPv6”, 2004年6月†12 RFC 4607:H. Holbrook, B. Cain, “Source-Specific Multicast for IP”, 2006年8月†13 IPv4の場合は232.0.0.0/8が利用されます。†14 RFC 4604:H. Holbrook, B. Cain, B. Haberman, “Using Internet Group Management Protocol Version 3

(IGMPv3) and Multicast Listener Discovery Protocol Version 2 (MLDv2) for Source-Specific Multicast”,

2006年8月†15 RFC 5790:H. Liu, W. Cao, H. Asaeda, “Lightweight Internet Group Management Protocol Version 3

(IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols”, 2010年2月

Page 229: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.6 ルータを越えるマルチキャスト 215

MLDv2の簡易版を実現するという仕様です。MLDv2ではSSMを実現するときなどに INCUDE

フィルタを利用しますが、EXCLUDEフィルタについては利用しない場合が多いので、EXCLUDE

フィルタを必要としない簡易版として標準化されたのがRFC 5790です。

12.5.5 MLDとDADの問題MLDv1が定義されているRFC 2710の仕様では、MLDメッセージの送信元 IPv6アドレス

としてリンクローカルアドレスを使うことが要求されています。さらに、Multicast Listener

Reportメッセージを送信する際にマルチキャストグループへの参加も要求されています。こ

れらの仕様は、実は近隣探索プロトコルの仕様と競合します。

まず、近隣探索プロトコルによるアドレス自動設定(SLAAC)では、アドレスの重複がない

かどうかをDADでチェックするために複数のマルチキャストグループに参加する必要があり

ますが、その時点ではまだ送信元 IPv6アドレスが決定していません。この仮の IPv6アドレス

を通信に利用することはできないので、MLDメッセージを送信する際の送信元 IPv6アドレス

として利用可能な IPv6アドレスが存在しないという状況が発生してしまいます。そこで、適

切な送信元 IPv6アドレスが存在しない場合にMulticast Listener Reportメッセージを未定義

IPv6アドレス(::)で送信できるようにするため、RFC 2710を上書きするRFC 3590†16が策

定されました。

さらに、RFC 4862†17の5.4.2項では、後述するMLDスヌーピングを行うスイッチによっ

てSLAACにおけるDADが正常に動作しない可能性があることが指摘されています。MLDス

ヌーピング機能があるスイッチでは、Multicast Listener Reportメッセージが送信されたあ

とに、関連するマルチキャストパケットを該当するポートに対して配送するようになります。

Multicast Listener Reportメッセージを送信するまでは、Solicited-Nodeマルチキャストアド

レスに送信されるDADのためのパケットが受信できない可能性があるのです。実際、電源障

害などに起因して複数のノードでネットワークインターフェースの同時設定が発生する場合

など、同一リンク上に同時に多数のMulticast Listener Reportメッセージが送信されてしま

い、スイッチにおけるMLDスヌーピングの処理が追いつかず、DADが正常に機能しない可能

性があります。そのような状態を避けるため、RFC 4862では、ランダムな時間だけ待ってか

らSolicited-Nodeマルチキャストグループへ参加することが推奨されています。

12.6 ルータを越えるマルチキャストネットワーク層でのマルチキャストでは、ルータを越えてマルチキャストグループに参加し

ているノードへとパケットを転送できる必要があります。そのための機能を持ったルータはマ

ルチキャストルータと呼ばれています。マルチキャストルータは、必要に応じて IPパケットを

複製しながら転送するだけでなく、マルチキャストパケットの経路を決める必要があります。

ネットワーク層でのマルチキャストでパケットの経路を決めるには、複雑な処理が必要にな

†16 RFC 3590:B. Haberman, “Source Address Selection for the Multicast Listener Discovery (MLD) Protocol”,

2003年9月†17 RFC 4862:S. Thomson, T. Narten, T. Jinmei, “IPv6 Stateless Address Autoconfiguration”, 2007年9月

Page 230: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

216 第12章 IPv6マルチキャスト

ります。ユニキャストであれば特定の宛先に対する経路(Next hop)が1つに定まりますが、

マルチキャストでは複数のサブネットにパケットをコピーして送信する必要があり、一般に複

数のNext Hopが存在するからです。受信するノードが動的にマルチキャストグループに入っ

たり抜けたりできるので、配送先が頻繁に変わる可能性もあります。

マルチキャストルータでは、マルチキャストのNext Hopを決定するために、マルチキャス

トグループを宛先とするパケットの配送経路を示す木構造(マルチキャスト配信ツリー)を構

築します。そのために利用される仕組みとして、PIM(Protocol Independent Multicast)と

呼ばれるものがあります。

PIMにはPIM-SM(Sparse Mode)とPIM-DM(Dense Mode)という2種類があります。PIM-

SMでは、ランデブーポイント(RP)と呼ばれる機能を持ったルータを設定し、マルチキャスト

の各送信元はRPまでの配信ツリーを作成します。一方、サブネット内のノードからMLDで特

定のマルチキャストグループへの参加を表明されたルータは、やはりRPに対し、配下のノー

ドが当該のマルチキャストグループに参加していることをPIMで伝えます。こうして、送信側

と受信側の双方からRPに向けてマルチキャスト配信ツリーが構築されます。RPから受信ノー

ドへの配信ツリーはすべての送信ノードで共有することになるので、このような配信ツリーを

共有ツリーと呼びます。PIM-SMについての詳細はRFC 7761†18を参照してください。

RPから受信ノードまでの配信ツリーを共有するPIM-SMに対し、各送信ノードから受信ノー

ドまでの配信ツリーをすべて途中のルータで管理する方式がPIM-DMです。この場合の配信ツ

リーは、宛先だけでなく送信元についても経路表の要素とするので、送信元ツリーと呼ばれま

す。PIM-DMは、受信側のノードがあまり散らばっておらず、密集(dense)している場合に

利用されます。PIM-DMについての詳細はRFC 3973†19を参照してください。

12.7 MRD(Multicast Router Discovery)リンク層が複数のスイッチで構成されている場合に、IPv6マルチキャストを流すと、該当す

るマルチキャストグループに参加しているノードが接続されていないスイッチにもトラフィッ

クが流れてしまう可能性があります。そのような状況で無駄なトラフィックを抑制するため

に、MLDのメッセージをリンク層レベルで覗き見(snoop)し、IPv6マルチキャストを考慮し

てフォワーディングテーブルを設定する機能(MLDスヌーピング)がスイッチに実装されてい

る場合があります。

リンク層のスイッチでMLDスヌーピングを利用するには、マルチキャストグループに参加

するノードだけでなく、リンクにおけるマルチキャストルータの情報も必要になります。そこ

で、接続している環境でどのノードがマルチキャストパケットを転送するマルチキャストルー

タとして稼働しているのかを知るための仕組みがMRD(Multicast Router Discovery)として

標準化されています。MRDは、RFC 4286†20で定義されています。

†18 RFC 7761:B. Fenner, M. Handley, H. Holbrook, I. Kouvelas, R. Parekh, Z. Zhang, L. Zheng, “Protocol

Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)”, 2016年3月†19 RFC 3973:A. Adams, J. Nicholas, W. Siadak, “Protocol Independent Multicast - Dense Mode (PIM-DM):

Protocol Specification (Revised)”, 2005年1月†20 RFC 4286:B. Haberman, J. Martin, “Multicast Router Discovery”, 2005年12月

Page 231: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.7 MRD(Multicast Router Discovery) 217

NOTE

MRDは IPv4マルチキャストでも利用されます。IPv4マルチキャストの場合、MLDスヌーピングに相当する機能は IGMPスヌーピングと呼ばれています。

IPv6のMRDでは、次の3種類の ICMPv6メッセージを使うことで、マルチキャストのデー

タやMLDのメッセージを送信すべきルータをノードが発見できるようにします。

r Multicast Router Advertisementメッセージ(タイプ151)r Multicast Router Solicitationメッセージ(タイプ152)r Multicast Router Terminationメッセージ(タイプ153)

NOTE

IPv4では、MRDは IGMPにおけるMulticast Router Advertisementメッセージ(タイプ0x30)、Multicast Router Solicitationメッセージ(タイプ0x31)、Multicast Router

Terminationメッセージ(タイプ0x32)として定義されています。

Multicast Router Advertisementメッセージは、マルチキャストルータであることを広告

するために、マルチキャストルータのすべてのインターフェースから定期的に配信されます。

ノードからのMulticast Router Solicitationメッセージへの応答として返送される場合もあり

ます。Multicast Router Solicitationメッセージは、ノードがマルチキャストルータを探すと

きに利用されます。Multicast Router Terminationメッセージは、あるインターフェースでマ

ルチキャストルータとしての機能を停止するときに、接続しているリンクから送信されます。

MRDに利用する ICMPv6メッセージは、Hop Limitが1のパケットによって送信されます

(IPv4の場合にはTTLが1のパケット)。その際の IPv6パケットとしての宛先アドレスは、リ

ンクローカルスコープのマルチキャストアドレスのひとつとして IANAで割り当てられている

All-Snoopersと呼ばれるアドレスとします。All-Snoopersは、IPv6ではff02::6aです(IPv4

では224.0.0.106です)。

MLDスヌーピング対応スイッチを利用する場合の参考情報

RFC 4541†21では、MLDスヌーピング対応スイッチの実装に関して推奨される手法などが紹介されています。RFC 4541では、MLDスヌーピングを行うスイッチがマルチキャストグループへの参加を通知するMulticast Listener Reportメッセージを転送する際に、マルチキャストルータが接続されているポートに限定することなどが推奨されています。また、送信元 IPv6アドレスが未定義アドレス(::)であるMLDメンバーシップレポートメッセージを破棄すできではないといったことが述べられています。

RFC 4541は InformationalなRFCなので、あくまで実装に関して推奨される参考情報がまとめられているものです。とはいえ、MLDスヌーピングを行うスイッチを利用する場合にも有用な情報が含まれているので、MLDスヌーピングを利用する場合にはぜひ参照してください。

Page 232: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

218 第12章 IPv6マルチキャスト

12.7.1 MRDで利用される ICMPv6メッセージMulticast Router Advertisementメッセージのフォーマットを図12.9に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(151) Ad. Interval Checksum

Query Interval Robustness Variable

▲ 図12.9 Multicast Router Advertisementメッセージ

Typeフィールドには、Multicast Router Advertisementメッセージであることを示す151

を指定します。ICMPv6の基本ヘッダにおけるCodeフィールドに相当するAd. Intervalフィー

ルドには、Multicast Router Solicitedメッセージへの応答ではない定期的なAdvertisement

メッセージの送信間隔を秒単位で示します。Query Intervalフィールドには、MLDにおいて

General QueryのMulticast Listener Queryメッセージを送信する間隔を秒単位で指定します。

MLDを利用していないインターフェースではゼロを設定します。Robustness Variableフィー

ルドには、MLDにおいてリンク上でのパケットロス対策に利用される係数を指定します。

Multicast Router SolicitationメッセージとMulticast Router Terminationメッセージのパ

ケットフォーマットは単純で、それぞれ ICMPv6の基本ヘッダのみの構造です(図12.10)。

Typeフィールドは、Multicast Router Solicitationメッセージの場合は152、Multicast Router

Terminationメッセージの場合は153です。ICMPv6の基本ヘッダにおけるCodeフィールド

は0に設定します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(152または153) 0 Checksum

▲ 図12.10 Multicast Router SolicitationメッセージとMulticast Router Terminationメッセージ

12.8 リンク層でのマルチキャストアドレスマルチキャストは、ネットワーク層だけで実現される通信方法ではありません。リンク層の

プロトコルでもマルチキャストの方法が規定されている場合があります。リンク層におけるマ

ルチキャストは、ネットワーク層におけるマルチキャストと異なり、基本的には同一セグメン

ト内のみが送信範囲です。なお、同じHUBやスイッチに接続されているかどうかにかかわら

ず、同じサブネットに存在するPC同士は同一セグメントです。

リンク層におけるマルチキャストパケットは、単純な仕組みでは全ポートにコピーして転送

されます。ただし、ネットワーク層プロトコルの設定によって、送信される対象の機器が変わ

ることもあります。IPv6では、MLDスヌーピング対応スイッチによって必要なポートに対し

てのみマルチキャストパケットを転送するようにできる場合があります。

†21 RFC 4541:M. Christensen, K. Kimball, F. Solensky, “Considerations for Internet Group Management

Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches”, 2006年5月

Page 233: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

12.8 リンク層でのマルチキャストアドレス 219

12.8.1 IPv6アドレスからイーサネットにおけるマルチキャストアドレスを生成する

リンク層プロトコルであるイーサネットにもマルチキャストがあります。イーサネットで

は、宛先がユニキャストの場合にはネットワークインターフェースに設定されているMACア

ドレスを利用しますが、宛先が IPv6マルチキャストの場合には、その IPv6マルチキャストア

ドレスに対応するイーサネットアドレスが必要になります。

IPv6マルチキャストアドレスに対応するイーサネットアドレスを生成する方法は、RFC

2464†22で定義されています。RFC 2464では、図12.11のように、0x33 0x33に続けて、IPv6

マルチキャストパケットの宛先アドレスのうちの13オクテットめから16オクテットめまで

の値をイーサネットにおけるマルチキャストアドレスとして利用するとあります。たとえば、

ff02::1という IPv6マルチキャストアドレスに対応するイーサネットアドレスは、33:33:

00:00:01になります。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

IPv6宛先アドレスの第13オクテット

IPv6宛先アドレスの第14オクテット

IPv6宛先アドレスの第15オクテット

IPv6宛先アドレスの第16オクテット

▲ 図12.11 IPv6マルチキャストアドレスに対応するイーサネットアドレス

ただし、その IPv6マルチキャストの受信ノードが明確に1つであるとわかる場合には、リン

ク層において宛先アドレスをマルチキャストではなくユニキャストとしてもよいという拡張が

RFC 6085†23で行われています。それに伴い、IPv6マルチキャストパケットのリンク層におけ

る宛先アドレスがユニキャストであるという理由で、IPv6マルチキャストの受信ノードがパ

ケットを破棄することが禁止されています。

†22 RFC 2464:M. Crawford, “Transmission of IPv6 Packets over Ethernet Networks”, 1998年12月†23 RFC 6085:S. Gundavelli, M. Townsley, O. Troan, W. Dec, “Address Mapping of IPv6 Multicast Packets on

Ethernet”, 2011年1月

Page 234: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 235: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第13章

IPv6エニーキャスト

エニーキャスト(anycast)は、anyという英単語の意味のとおり、「複数のうちいずれか近

くのもの」に到達する形態の通信です。IPでの通信におけるエニーキャストは、「まったく同

じ IPアドレスを持つ機器をインターネット上に複数存在させたうえで、経路を調整することで

ユーザが最寄りの機器へ到達できるようにする」という意味になります。IPv4と IPv6におけ

るエニーキャストの運用に関しては、RFC 4786(BCP 126)†1でまとめられています。

IPにおけるエニーキャストでは、ユニキャスト IPアドレスを利用するので、IPアドレスを見

ただけではエニーキャストで運用されているものかどうかわかりません。ただし、特定の用途

のエニーキャストについては、IANAで予約されている IPアドレスがあります。それらの IPア

ドレスであれば、IPアドレスを見てエニーキャストであることがわかります。

IPv6では、エニーキャストがユニキャストとマルチキャストと並んで基本的な通信形態のひ

とつとしてプロトコルに含まれています。とはいえ、エニーキャストそのものは IPv4でも利

用されており、そこでの運用が IPv6の提案当初から発展していることもあって、IPv6エニー

キャストに関する仕様も提案当初と比べてかなり大きく変化しています。

13.1 IPv4におけるエニーキャストIPv4では、ユニキャスト IPv4アドレスを利用したエニーキャストが行われています。IPv4

エニーキャストの有名な運用例としては、DNSルートサーバが挙げられます。世界各地で運用

される13系統のDNSルートサーバは、同じ IPv4アドレスを持つ複数のサーバによって運用さ

れています。

注意が必要な点として、かつては複数のDNSサーバを同じ IPv4アドレスで運用する技術の

ことをエニーキャストとは呼ばず、「IPv4アドレスの共有」と表現していました。実際、2002

年に発行されたRFC 3258†2では、「Anycast」ではなく「Shared Unicast Addresses」とされ

ています。エニーキャストの歴史をまとめたRFC 7094の2.1節では、エニーキャストという

†1 RFC 4786:J. Abley, K. Lindqvist, “Operation of Anycast Services”, 2006年12月†2 RFC 3258:T. Hardie, “Distributing Authoritative Name Servers via Shared Unicast Addresses”, 2002年4

Page 236: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

222 第13章 IPv6エニーキャスト

表現が避けられていた理由について、IPv4では後述するon-linkエニーキャストを実現してい

るわけではない点を挙げています。

NOTE

20.1節で紹介する6to4という技術も IPv4エニーキャストを利用していました。ただし、6to4にはさまざまな問題があるので、いまでは「使うべきではない」とされている技術ではあります。

13.2 IPv6のエニーキャストIPv6では、プロトコルの仕様でエニーキャストに対応しています。しかし、ユニキャスト

やマルチキャストと比べると、エニーキャストに IPv6の根幹を成すような利用方法があるわ

けではありません。実際、ルーティング技術を利用してルータを越える遠隔地を対象とするエ

ニーキャスト(off-linkエニーキャスト)は、IPv4と IPv6とで事実上同じものといえます。

一方、同一リンク内エニーキャスト(on-linkエニーキャスト)は、IPv6でのみ標準化され

ています。つまり、IPv6エニーキャストが IPv4エニーキャストと異なるのは、同一リンク上

に IPv6エニーキャストアドレスを持つインターフェースが複数存在する場合です。IPv6では、

IPv6エニーキャストが最初から設計に含まれているので、同一リンク上に同じ IPv6アドレス

が存在できます。これは、IPv6エニーキャストアドレスに対しては IPv6の基本機能である同

一リンク上の衝突検出が行われないからです(8.5節参照)。

13.2.1 IPv6エニーキャストアドレスの仕様変更IPv6におけるエニーキャストの仕様は、昔と今とで異なります。その代表が、IPv6エニー

キャストを利用可能な場面です。

初期の仕様では、IPv6エニーキャストアドレスはホストに対して設定してはならず、ルータ

に対してのみ設定が可能でした。また、IPv6エニーキャストアドレスは宛先アドレスとしての

み利用可能であり、送信元アドレスとして利用することは禁止されていました(RFC 1884†3の

2.5節、RFC 2373†4の2.6節、RFC 3513†5の2.6節をそれぞれ参照)。

しかし、これらの仕様は、2006年に発行されたRFC 4291†6で廃止されました。このRFC

4291はRFC 3513を上書き廃止するものです。この仕様変更の結果、現在では IPv6エニー

キャストを送信元アドレスとして利用可能です。また、IPv6エニーキャストをルータだけでは

なくサーバでも利用できるようになっています。

この仕様変更によるもう1つの大きな変化として、IPv6エニーキャストアドレスを持つノー

ドとTCPを利用した通信が行えるようになりました。TCPでは、送信元 IPアドレス、宛先 IP

アドレス、送信元ポート番号、宛先ポート番号の4つの情報を利用してTCPコネクションを識

†3 RFC 1884:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 1995年12月†4 RFC 2373:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 1998年7月†5 RFC 3513:R. Hinden, S. Deering, “Internet Protocol Version 6 (IPv6) Addressing Architecture”, 2003年4

月†6 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月

Page 237: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

13.3 IPv6サブネットルータエニーキャストアドレス 223

別します。昔の IPv6エニーキャストでは、送信元 IPv6アドレスとして IPv6エニーキャストア

ドレスの利用が禁止されていたので、TCP SYNパケットが送信される宛先 IPアドレスと、それ

に対する返信としてのTCP SYN/ACKパケットの送信元 IPアドレスが異なることになり、TCP

コネクションが張れないという制約がありました。RFC 4291によって送信元 IPアドレスとし

て IPv6エニーキャストアドレスも利用可能になったことから、IPv6エニーキャストでのTCP

の利用が可能になりました。

13.2.2 IPv6エニーキャストを利用するノード側での設定IPv6エニーキャストアドレスは、IPv6ユニキャストアドレスと同じ IPv6アドレス空間を利

用するので、マルチキャストアドレスのように機械的には見分けられません。しかし、IPv6エ

ニーキャストと IPv6ユニキャストには異なる点もあるので、IPv6エニーキャストアドレスを

宛先とするパケットの処理には特別な設定が必要です。このため、IPv6エニーキャストアドレ

スを利用するノードでは、ある IPv6アドレスがエニーキャストであることを認識できる必要

があります。

IPv6におけるエニーキャストとユニキャストの大きな違いは、エニーキャストアドレスに

対してはDAD(Duplicate Address Detection)が行われないことです(RFC 4862†7の5.4節

参照)。DADは、同一セグメント上に同じ IPv6アドレスが設定されたネットワークインター

フェースが存在しているかどうかを確認するためのものなので、これが行われないということ

は、同一セグメント上に同じ IPv6エニーキャストアドレスが同時に存在できることになりま

す。なお、IPv4のエニーキャストでは、同一セグメント上に同じ IPv4アドレスが設定された

ネットワークインターフェースが存在すると、システムのネットワークインターフェースに設

定されている IPv4アドレスと同じものをARPで受け取り、結果として IPアドレスの重複につ

いての警告がシステムから出る場合があります。

13.3 IPv6サブネットルータエニーキャストアドレスRFC 4291の2.6.1項では、サブネットに接続されたルータのネットワークインターフェース

に対するエニーキャスト用として、サブネットルータエニーキャストというアドレスが定義されています。サブネットルータエニーキャストアドレスとして予約されているのは、インター

フェース識別子がすべて0となる IPv6アドレスです(図13.1)。すべてのルータは、サブネッ

トに接続されたネットワークインターフェースに対し、サブネットルータエニーキャストアド

レスを設定する必要があります。

†7 RFC 4862:S. Thomson, T. Narten, T. Jinmei, “IPv6 Stateless Address Autoconfiguration”, 2007年9月

Page 238: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

224 第13章 IPv6エニーキャスト

nビット︷ ︸︸ ︷サブネットプレフィックス →

128−nビット︷ ︸︸ ︷0

▲ 図13.1 IPv6サブネットルータエニーキャストアドレス

13.4 ユニキャストとしての利用を避けるべきIPv6アドレスRFC 2526†8では、各サブネットにおける上位128個の IPv6アドレスを、サブネットエニー

キャストアドレスとして予約しています。さらに、RFC 5375†9のAppendix B.2.5.2では、こ

れらの IPv6アドレスをユニキャストアドレスとして利用することを避けるように推奨してい

ます。

RFC 5453†10では、サブネットエニーキャストアドレスのために、fdff:ffff:ffff:ff80

~ fdff:ffff:ffff:ffffのインターフェース識別子を IANAで予約しています。RFC 5453

では、すべてが0となるサブネットルータエニーキャストのためのインターフェース識別子も

同時に予約しています。

13.5 エニーキャストの注意点

13.5.1 同じエニーキャストアドレスで運営されている別ノードにパケットが配送されることがある

RFC 7094†11では、エニーキャスト運用時の注意点として、エニーキャストで運用されてい

るノードとの通信中に相手が変わる可能性があると紹介されています。つまり、ある特定のエ

ニーキャストアドレスに対して複数のパケットを送信したとき、そのすべてが同じノードに向

けて配送されるとは限りません。実際、RFC 7094では、エニーキャストで運営されるサービ

スに向けての通信では単一の要求パケットに対して単一の応答とするのが安全であるとしてい

ます。

あるアドレス宛の複数のパケットが別々のノードに到達することが問題になる例として、ス

テートフルで再送などを行うTCPのようなプロトコルの利用が挙げられます。RFC 7094によ

れば、TCPにおけるエニーキャストの利用は推奨されないという解釈も可能です。

RFC 7094では、Path MTU Discoveryをエニーキャストアドレスに対して行う場合にも、同

様の問題の可能性があると説明されています。あるアドレスまでのPath MTUを調べるための

複数のパケットが、同じエニーキャストアドレスを持つ異なる相手に届いている可能性がある

†8 RFC 2526:D. Johnson, S. Deering, “Reserved IPv6 Subnet Anycast Addresses”, 1999年3月†9 RFC 5375:G. Van de Velde, C. Popoviciu, T. Chown, O. Bonness, C. Hahn, “IPv6 Unicast Address Assign-

ment Considerations”, 2008年12月†10 RFC 5453:S. Krishnan, “Reserved IPv6 Interface Identifiers”, 2009年2月†11 RFC 7094:D. McPherson, D. Oran, D. Thaler, E. Osterweil, “Architectural Considerations of IP Anycast”,

2014年1月

Page 239: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

13.6 IPv6エニーキャストとBCP 38 225

からです。

エニーキャストアドレスが送信元となっている場合にも注意が必要です。エニーキャストア

ドレスから送信されたパケットに対して期待される応答が、同じエニーキャストアドレスで運

営されている別の相手に向けて配送された結果、返ってこない可能性があるからです。

13.6 IPv6エニーキャストとBCP 382000年に発行されたRFC 2827†12(BCP 38)では、各自が管理するネットワークで偽装され

たパケットを出してDDoSに加担してしまうことを防ぐため、‌RPF‌(Reverse Path Forwarding)

という手法が提案されています†13。これは、各パケットの送信元へのユニキャストの経路を

参照しつつ、「そのパケットがその方向からくることが正しいかどうか」を確認するというも

のです。このRPFにより、IPv6エニーキャストアドレスを送信元アドレスとしたパケットが破

棄される可能性があります(図13.2)。

IPv6インターネット

RPF対応ルータ

2001:db8:1111::/48

送信元アドレス2001:db8:9999::/48

2001:db8:1111::/48以外を送信元とするIPv6パケットは破棄IPv6パケット

▲ 図13.2 BCP 38

同様の問題はマルチホーム環境においても発生します。マルチホーム環境におけるRPFにつ

いては、RFC 3704†14で議論されています。RFC 3704は、BCP 38を補うものとして2004年

に発行されたものですが、その中でマルチホーム環境も考慮したゆるい(Loose)RPFなどが

提案されています。IPv6エニーキャストアドレスについても、このマルチホーム環境での対策

と同じ考え方での運用が可能です。

†12 RFC 2827:P. Ferguson, D. Senie, “Network Ingress Filtering: Defeating Denial of Service Attacks which

employ IP Source Address Spoofing”, 2000年5月†13 マルチキャストのRPFと明確に区別するために、‌uRPF‌(unicast Reverse Path Forwarding)と呼ばれることも

あります。†14 RFC 3704:F. Baker, P. Savola, “Ingress Filtering for Multihomed Networks”, 2004年3月

Page 240: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 241: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第14章

IPv6におけるマルチプレフィックス

IPv6は IPv4と異なり、1つのネットワークインターフェースに対して複数の IPv6アドレス

を設定可能です。複数のプレフィックスが1つのネットワークインターフェースに対して設定

されることを「マルチプレフィックス」と呼びます。この章では、IPv6におけるマルチプレ

フィックスに関連して、以下の3つのトピックについて解説します。

r デフォルト IPv6アドレスの選択r マルチプレフィックスによるマルチホームの問題r IPv6サイトリナンバリング

デフォルト IPv6アドレス選択は、通信にかかわるエンドノードが複数のプレフィックスか

らどれをどのように選択して通信するかを判断するときのデフォルト値に関する話です。これ

はあくまでデフォルトであり、それ以外に何らかの方法が存在しないときに最終的に選択され

るものです。

マルチホーム環境で複数のグローバル IPv6アドレスが上位ネットワークから提供されるマ

ルチプレフィックス環境などでは、デフォルト IPv6アドレス選択だけで通信に使うべき IPv6

アドレスを選択できない場合もあります。それに伴う課題については、マルチプレフィックス

によるマルチホームの問題として、14.2節で解説します。

次の14.3節では、マルチプレフィックスが利用可能であるという IPv6の特徴を生かして新

旧両方のプレフィックスを並行してネットワーク内で運用しつつ、ネットワークの完全停止を

避けながらサイトリナンバリングを実施する際の課題について扱います。

近隣探索プロトコルの話題として7.6節で説明した、IPv6におけるon-linkとoff-linkに関す

る議論にも、ネットワークインターフェースに複数の IPv6アドレスを設定可能であるという

マルチプレフィックスに関連する要素が多く含まれています。

NOTE

IPv6のマルチプレフィックスに関する話題には未解決な点も多く残っています。本書執筆時点においては課題がまとめられているだけという内容も少なくありません。

Page 242: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

228 第14章 IPv6におけるマルチプレフィックス

14.1 デフォルトIPv6アドレスの選択IPv6では、1つのネットワークインターフェースに対し、スコープが異なる複数のユニキャ

ストアドレスが設定される可能性があります。また、ネットワークインターフェースの識別子

に基づいて決まるアドレスのほかに、一時的な IPv6アドレス(匿名 IPv6アドレス)が利用さ

れる場合もあります。さらに、SLAACで生成され、DADが完了して有効になったアドレスに

は、有効期間が完全に切れる前の「利用が推奨されない状態」があります。この状態のアドレ

スは、deprecated(非推奨、146ページ参照)ではありますが、インターフェースに設定され

ていて利用は可能です。

IPv6対応ノードは、ある特定のネットワークインターフェースからパケットを送信する際

に、そのネットワークインターフェースに設定されている複数の IPv6アドレスのうち1つを送

信元 IPv6アドレスとしてパケットに設定する必要があります。宛先アドレスに関しても、特

定の名前に対応する複数のアドレスが存在する場合もあるので、何らかの優先順が必要です。

どの IPv6アドレスを宛先 IPv6アドレスや送信元 IPv6アドレスとして選択するか、その方針が

ノードごとにバラバラな状態では、ネットワークの管理やアプリケーション開発に支障があり

ます。そこで、IPv6アドレスを選択するデフォルトの方法が、RFC 6724†1として定義されて

います。

RFC 6724で想定されているのは、通信を開始するアプリケーションがgetaddrinfo()な

どのAPIを利用して、特定の名前で表現される相手との通信で利用する宛先アドレスを取得

し、その宛先にパケットを送信するという状況です。getaddrinfo()などのAPIは、IPv4ア

ドレスを含む複数の宛先 IPアドレスの候補をリストとして返す可能性があります。アプリケー

ションでは、それらが適切な順番にソートされているものとして、そのリストで先頭にくるも

のを使ってconnect()やsendto()などのシステムコールにより通信を開始します。そこで

RFC 6724では、getaddrinfo()などのAPIで返される宛先アドレスのリストをソートする

ためのルールが定義されています。

宛先 IPアドレスを決めるのがアプリケーションである一方で、送信元アドレスについては、

宛先に応じた複数の候補から、OSカーネルなどが提供するネットワーク層で選択することが

多くなります(アプリケーションがbind()などを利用して送信元 IPアドレスを設定する場合

もあります)。そこでRFC 6724では、アプリケーションが送信元 IPv6アドレスを指定しない

場合に、ネットワーク層の実装で適切な送信元 IPv6アドレスを選択するためのルールも定義

されています。

RFC 6724で定義されている宛先 IPアドレス選択手法と送信元 IPv6アドレス選択手法は、あ

くまでもデフォルトを定めたものであり、明示的に設定された選択方法が別にあればそちらが

利用されます。また、上位層による判断を上書きするものでもありません。上位層で選択の優

先順位などが別途設定されている場合には、そちらが優先されます。実際、RFC 6724では、

明示的に選択の優先順位などを設定する方法も定義されています。

†1 RFC 6724:D. Thaler, R. Draves, A. Matsumoto, T. Chown, “Default Address Selection for Internet Protocol

Version 6 (IPv6)”, 2012年9月

Page 243: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.1 デフォルト IPv6アドレスの選択 229

14.1.1 送信元 IPv6アドレス選択のルールあるアドレスを宛先とする IPv6パケットに、どの送信元 IPv6アドレスを設定するかは、いく

つかの候補から選択します。送信元 IPv6アドレスの候補となるのは、その宛先へ IPv6パケッ

トを送信するときに使うインターフェース(ルータの場合はパケットを転送することになるす

べてのインターフェース)に設定されたユニキャストアドレスです。

送信元 IPv6アドレスの候補から、実際にパケットに設定する送信元 IPv6アドレスを1つ選

択するアルゴリズムは、RFC 6724では8つのルールとして定義されています。各ルールは、候

補となる2つのアドレスを比較するときの基準として定義されています。上位のルールに照ら

して比較したときに2つの候補が同順になった場合には、下位のルールを参照していきます。

多くのプログラミング言語におけるswitch case文のようなものだと考えればよいでしょう。

ただし、アプリケーションでbind()システムコールなどを利用して送信元 IPv6アドレスを

選択する必要がある場合もあるので、これら8つのルールだけで送信元 IPv6アドレスが選択さ

れるわけではありません。アプリケーションで明示的な選択を行わない場合に送信元 IPv6ア

ドレスを選択する際の判断基準が、この8つのルールだといえます。

rルール1:同じアドレスを優先する

宛先アドレスと同じ送信元アドレスであれば、それを選択するrルール2:適切なスコープを選択する

より小さいスコープを選択するrルール3:非推奨のアドレスは避ける

SLAACで有効となったアドレスが2つあり、片方が最初の有効期間を過ぎてdeprecatedに

なっている場合は、そうでないほうを選択するrルール4:ホームアドレスを優先する

モバイル端末に、通常利用するアドレスであるホームアドレス(Home Address)と、移動

先で一時的に利用するアドレスである気付アドレス(Care of Address)が同時に設定され

ていたら、ホームアドレスを選択するrルール5:送出されるネットワークインターフェースのアドレスを優先する

パケットの送信に使うネットワークインターフェースに設定されているアドレスを選択す

る。次ホップとなるルータから広告されたプレフィックスにマッチするアドレスがあれば、

それを選択するrルール6:ポリシーテーブルでラベルがマッチするものを優先する

後述するポリシーテーブルで、宛先アドレスのラベルと一致するラベルを持つアドレスがあ

れば、それを選択するrルール7:一時的な IPv6アドレスを優先する

パブリックなアドレスよりも一時的な IPv6アドレスを選択する(ただし、このルールにつ

いては、アプリケーションによる指定で逆の意味にできるように実装すること)

Page 244: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

230 第14章 IPv6におけるマルチプレフィックス

rルール8:宛先アドレスとより一致するものを優先する

プレフィックスが宛先アドレスと一致する部分が長いアドレスを選択する。通信の質を考慮

するなど、より適切な送信元 IPv6アドレスを選択する手段がある場合は、その方法を優先

してよい

14.1.2 宛先アドレス選択のルール宛先アドレスの選択については、優先順を定めるリストをソートするための基準として、10

のルールがRFC 6724に示されています。送信元アドレスの選択では IPv6アドレスだけが対象

でしたが、宛先アドレス選択に使うリストには IPv4アドレスも含まれます。このとき、IPv4

アドレスは、IPv4-Mapped IPv6アドレスとして表現しなければなりません。

送信元 IPv6アドレスに対する 8つのルールと同様に、下位のルールは上位のルールに

対する同点決着のための方式として定義されています。一般的なアプリケーションでは、

getaddrinfo()などによって得られる結果を順番に試していくので、リストで上位にあるア

ドレスが選択されやすくなります。

rルール1:利用できない宛先は避ける

到達不能である場合や、そのアドレスを宛先とした場合に選択される送信元アドレスがない

場合には、他のアドレスを宛先 IPv6アドレスとして優先する。あるアドレスが到達不能で

あると判断する例としては、未接続のネットワークインターフェースを経由しなければ到達

できない宛先である場合や、近隣不到達性検知(7.3.5項)を継続して受けている場合が考

えられるrルール2:送信元アドレスとスコープが一致するものを優先する

あるアドレスを宛先 IPv6アドレスとして選択した場合に、そのスコープが、送信元 IPv6ア

ドレスとして選択されるアドレスのスコープと同じになるなら、そのアドレスを宛先 IPv6

アドレスとして選択するrルール3:非推奨のアドレスは避ける

あるアドレスを宛先 IPv6アドレスとして選択した場合に、送信元 IPv6アドレスとして選択

されるアドレスがdeprecatedであれば、他のアドレスを宛先 IPv6アドレスとして優先するrルール4:ホームアドレスを優先する

あるアドレスを宛先 IPv6アドレスとして選択した場合に、送信元 IPv6アドレスとして選択

されるアドレスがホームアドレスかつ気付アドレスである場合は、そのアドレスを宛先 IPv6

アドレスとして選択する。そうでなければ、送信元 IPv6アドレスとして選択されるアドレ

スがホームアドレスであるほうを宛先 IPv6アドレスとして選択するrルール5:ポリシーテーブルでラベルがマッチするものを優先する

後述するポリシーテーブルで、送信元 IPv6アドレスのラベルと一致するラベルを持つアド

レスがあれば、それを宛先 IPv6アドレスとして選択する

Page 245: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.1 デフォルト IPv6アドレスの選択 231

rルール6:ポリシーテーブルで優先度が高いものを優先する

後述するポリシーテーブルで、より高い優先度のものを宛先 IPv6アドレスとして選択するrルール7:カプセル化で到達できる宛先は避ける

IPv4にカプセル化される IPv6通信などよりも、IPv6のまま転送されて到達できるアドレス

を宛先 IPv6アドレスとして選択するrルール8:スコープが小さいほうを優先する

より小さいスコープのアドレスを宛先 IPv6アドレスとして選択するrルール9:送信元 IPv6アドレスとより一致するものを優先する

プレフィックスが、選択される送信元 IPv6アドレスと一致する部分が長いほうのアドレス

を、宛先 IPv6アドレスとして選択するrルール10:リストの掲載順に従う

ルール9までで比較できない場合は、並べ替えをせず、現状のリストの掲載順で上位のもの

を選択する

RFC 6724では、上記ルール9と10に関しては、他の方法がある場合には実装依存としても

よいとされています。

14.1.3 ポリシーテーブルポリシーテーブル(Policy table)は、デフォルトの IPアドレス選択のためのルールで利用

できる、優先度(Precedence)およびラベル(Label)を設定するための仕組みです。優先度

とラベルは、アドレスプレフィックスに対する値として設定します。

ポリシーテーブルにおける優先度は、宛先アドレス候補のリストを並べ替える際に利用され

る可能性があります。優先度が高いプレフィックスのほうが、低いプレフィックスよりも、リ

ストで上位に並べられやすくなります。

ポリシーテーブルにおけるラベルは、対象となる IPアドレスを分類するためのものです。宛

先アドレスの選択時には、送信元アドレスと同じラベルが付いたプレフィックスのほうが選択

されやすくなります。送信元アドレスの選択時には、宛先アドレスと同じラベルが付いたプレ

フィックスのほうが選択されやすくなります。

RFC 6724ではポリシーテーブルを設定可能とすることが推奨されていますが、設定可能で

ない実装や、設定前のデフォルトとして、以下のような内容のポリシーテーブルを推奨値とし

ています。

Prefix Precedence Label::1/128 50 0::/0 40 1::ffff:0:0/96 35 42002::/16 30 22001::/32 5 5fc00::/7 3 13::/96 1 3fec0::/10 1 113ffe::/16 1 12

Page 246: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

232 第14章 IPv6におけるマルチプレフィックス

NOTE

glibcでは、RFC 6724が定義しているポリシーテーブルを実現する方法として、gai.confという設定ファイルがあります(16.5節参照)。

ポリシーテーブルに IPv4の優先度を設定するときは、IPv4アドレスの表現として、IPv4-

Mapped IPv6アドレスが利用されます。たとえば、IPv4全体を示す場合には::ffff:0:0/96、

192.0.2.0/24を示す場合には::ffff:192.0.2.0/120という IPv4-Mapped IPv6アドレス

を利用します。IPv4アドレスに対するスコープとしては、IPv4自動設定アドレス169.254.

0.0/16(RFC 3927†2)と IPv4ループバックアドレス127.0.0.0/8(RFC 1918の4章)はリ

ンクローカルスコープに、プライベート IPv4アドレスと ISP Shared IPv4アドレス(25.5節)

を含むその他の IPv4アドレスはすべてグローバルスコープに分類されています。

14.1.4 旧RFC 3484との違いデフォルト IPv6アドレス選択のRFCとしては、2003年に発行されたRFC 3484†3がありま

した。このRFC 3484は、2012年9月に発行されたRFC 6724に置き換えられています。

RFC 3484とRFC 6724の主な違いは以下のとおりです。

r 一時的な IPv6アドレス(匿名アドレス)が存在する場合は優先するようにルールが変更さ

れたr IPv6サイトローカルアドレスがRFC 3879†4によって2004年に廃止されたことに伴い、

RFC 6724では、設定例において IPv6サイトローカルアドレスであるfec0::/10の優先

度が最も低い値に変更されたr RFC 3484より後に定義されたULA(RFC 4193†5)に対する扱いがRFC 6724で追加さ

れたr 6to4(20.1節参照)用の IPv6アドレスである2002::/32が IPv4よりも低い優先度になっ

た。この変更により、将来の実装では「6to4を経由することによって IPv6で通信するほ

うが IPv4よりも通信品質が著しく悪くなる」という状態を回避しやすくなったr DNSロードバランシングが機能しなくなる問題への対処として、ルールの一部が変更さ

れたr グローバル IPv6アドレスが設定されているが IPv4でしかインターネットへの接続性がな

い状況への対応が追加された

†2 RFC 3927:S. Cheshire, B. Aboba, E. Guttman, “Dynamic Configuration of IPv4 Link-Local Addresses”,

2005年5月†3 RFC 3484:R. Draves, “Default Address Selection for Internet Protocol version 6 (IPv6)”, 2003年2月†4 RFC 3879:C. Huitema, B. Carpenter, “Deprecating Site Local Addresses”, 2004年9月†5 RFC 4193:R. Hinden, B. Haberman, “Unique Local IPv6 Unicast Addresses”, 2005年10月

Page 247: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.2 マルチプレフィックスによるマルチホームの問題 233

14.2 マルチプレフィックスによるマルチホームの問題ホストもしくはネットワークに対して上流の接続が複数存在する状態をマルチホームと呼びます。IPv6では、1つのネットワークインターフェースに対して複数の IPv6アドレスを設定

可能です。そのため、上流の接続を提供するネットワークから個別にネットワークプレフィッ

クスを割り当て、マルチプレフィックス環境を利用することにより、マルチホームを実現でき

ます。

とはいえ、ネットワークインターフェースに設定された複数の IPv6アドレスのうちどれを

送信元アドレスとして使うかや、次ホップとなるルータの決め方、利用するDNSサーバによっ

ては、通信の経路が変わったり、最悪の場合には通信ができなくなることもありえます。こう

した問題は、NAT、もしくは IPv6のネットワークプレフィックスを変換するNPT(Network

Prefix Translation)を導入することで解決できる場合もあります。

IPv4では、ルーティングプロトコルであるBGPを使うなどして、こうした問題を回避してマ

ルチホームを実現する手段もありました。ただし、BGPを使う場合には、AS番号と IPアドレ

スの割り当てを受ける必要があり、それらの番号資源を維持管理することなどを含めて運用コ

ストがかかります。そのような理由もあり、IPv4で小規模なネットワークでマルチホームを実

現する場合にNATが利用される事例が多くあります。

このように、IPv4においてマルチホームを実現する主な手段はBGPかNATでした。IPv6は

IPv4と異なり、1つのネットワークインターフェースに複数の IPv6アドレスを設定できるの

で、マルチホームを実現する手段としてマルチプレフィックスによる運用も加わります。IPv6

では、マルチホームを実現する方法として、BGPとNATに加えてマルチプレフィックスとい

う選択肢が増えたのです。

この章では、IPv6におけるマルチプレフィックス環境を利用したマルチホームに伴う問題

と、それらが発生する要因、そしてNATなどを導入することなく問題を回避してマルチホー

ムを実現する手法を紹介します。

NOTE

IETFのhomenetワーキンググループでも、小規模なネットワークにおいて IPv6でマルチホーム環境をどのように実現すべきかという議論が行われています。

14.2.1 IPv6におけるマルチホームの3つのシナリオIPv6におけるマルチホーム環境で発生する問題に関しては、RFC 7157†6とRFC 7078†7でま

とめられています。RFC 7157は、問題点と考えられる対策などがまとめられた Informational

なRFCです。

RFC 7157では、IPv6のマルチホームで問題が発生するシナリオとして、3つのシナリオが

†6 RFC 7157:O. Troan, D. Miles, S. Matsushima, T. Okimoto, D. Wing, “IPv6 Multihoming without Network

Address Translation”, 2014年3月†7 RFC 7078:A. Matsumoto, T. Fujisaki, T. Chown, “Distributing Address Selection Policy Using DHCPv6”,

2014年1月

Page 248: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

234 第14章 IPv6におけるマルチプレフィックス

示されています。

■ シナリオ1

シナリオ1では、ホストが接続された単一のリンクに、2台以上のルータが存在しています

(図14.1)。2台のルータは別々のサービスプロバイダに接続されており、それぞれサービスプ

ロバイダから提供された IPアドレスと再帰検索用DNSサーバに基づいて動作しています。リ

ンク上にあるホストには、両方のルータからネットワークプレフィックスと再帰検索用DNS

サーバがそれぞれ広告されます。したがって、このホストでは複数のネットワークプレフィッ

クスと再帰検索用DNSサーバに関する情報を受け取ります。

複数の ISPと契約し、個別の ISPごとにルータを用意するような場合は、このシナリオ1に該

当します。

ISP

ISPルータ

ルータ

ホスト▲ 図14.1 マルチホームのシナリオ1

■ シナリオ2

シナリオ2では、ホストが接続された1台のルータが、複数の上流ネットワークと接続し

ています(図14.2)。複数の上流ネットワークからは、それぞれネットワークプレフィックス

と再帰検索用のDNSサーバが広告されます。ホストが接続するルータは、再帰検索用のDNS

サーバの情報をすべてホストに伝える場合もあれば、簡易キャッシュDNSサーバとして稼働

する場合もあります。

シナリオ2の例としては、インターネット接続と同時にVPN接続ができるように設定された

ルータを運用している場合が挙げられます。

ネットワーク1

ネットワーク2ルータ

ルータ

ルータホスト

ポート1

ポート2

▲ 図14.2 マルチホームのシナリオ2

Page 249: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.2 マルチプレフィックスによるマルチホームの問題 235

■ シナリオ3

シナリオ3では、ホストが複数のネットワークインターフェースを持ち、それぞれのネット

ワークインターフェースが、別々のサービスプロバイダと通信するルータと接続されています

(図14.3)。ホストは、それぞれのサービスプロバイダから、ネットワークプレフィックスと再

帰検索用のDNSサーバを広告されます。

たとえば、モバイルWiFiと3G回線を同時に利用可能な機器や、複数の ISPからのインター

ネット接続サービスを同時に利用しているホストなどが、このシナリオ3と同じ構成になり

ます。

ネットワーク1

ネットワーク2ルータ

ルータ

ホストポート1

ポート2

▲ 図14.3 マルチホームのシナリオ3

14.2.2 マルチプレフィックスによるマルチホーム環境で発生する問題マルチホームで接続しているホストが通信するとき、上流ネットワークにとっては存在しな

いはずのネットワークプレフィックスからのパケットが届いているように見えることがあり

ます。これは、上流ネットワークが下流ネットワークとして認識しているネットワークプレ

フィックスではない、別の IPv6アドレスを送信元 IPv6アドレスとするパケットが、上流ネッ

トワーク宛に送信されてしまうためです。この影響により、経路の途中で意図せず IPv6パケッ

トが破棄されてしまう可能性があります。

r DDoS攻撃などの発信源になることを防ぐために、各パケットの送信元へのユニキャスト

の経路を参照しつつ「そのパケットがその方向からくることが正しいかどうか」を確認す

る手法について、BCP 38で検討されている(13.6節参照)。上流ネットワークでBCP 38

が実施されているマルチホーム環境では、送信元 IPv6アドレスと経由するネットワーク

が一致してない場合にパケットが破棄されてしまう可能性があるr 過去の通信内容に応じて通過可能なパケットを判断する、ステートフルなファイアウォールが途中経路上に存在している場合がある。マルチホームで接続しているホストからのパ

ケットが、そこで破棄されてしまう可能性がある

14.1節で解説したRFC 6724†8によるデフォルト IPv6アドレス選択は、パケットの送信元

†8 RFC 6724:D. Thaler, R. Draves, A. Matsumoto, T. Chown, “Default Address Selection for Internet Protocol

Version 6 (IPv6)”, 2012年9月

Page 250: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

236 第14章 IPv6におけるマルチプレフィックス

IPv6アドレスを選択するためのデフォルトの方法であり、上記のような問題に対処するための

要素のひとつといえます。しかし、デフォルト IPv6アドレス選択によっては、シナリオ1と

2においてホストから送信するパケットの送信元 IPv6アドレスを決定できません。RFC 6724

では、複数の有効なグローバル IPv6アドレスから最適なものを選ぶ方法が規定されていない

からです。複数の ISPからグローバル IPv6アドレスのネットワークプレフィックスを割り当て

られた状態などでは、RFC 6724によるデフォルト送信元 IPv6アドレス選択によって送信元

IPv6アドレスを決定することはできません。シナリオ3の場合は、パケットを送出するネット

ワークインターフェースに設定されている IPv6アドレスを送信元 IPv6アドレスとすればよい

ので、送出するネットワークインターフェースが決まれば送信元 IPv6アドレスを正しく設定

可能です。

デフォルト IPv6アドレス選択の限界だけでなく、次ホップ選択で問題が生じることもありえ

ます。たとえば、シナリオ1とシナリオ3の環境ではどちらか片方のルータがデフォルトルー

タとされ、場合によってはもう片方のルータに対してパケットが送出されない可能性がありま

す。特にシナリオ3では、ホスト側で細かく経路を設定しなければ、片方だけにトラフィック

が偏ってしまう可能性があります。

再帰検索用のDNSサーバの選択も問題です。シナリオ1、2、3のいずれの場合でも、再帰検

索のためのDNSサーバの選択が課題になる可能性があります。そのネットワークにおいての

み利用可能であるようなローカルな名前空間があり、そのためのDNSサーバが存在している

場合、再帰検索のためのDNSサーバの選択と、名前検索の結果に対する通信で利用される送信

元 IPv6アドレスや経路が一致しないと、通信ができない場合があります。

このように、マルチホームにはいくつかの課題があります。RFC 7157では、これらの問題

が発生する要因を以下の3つにまとめて掘り下げるとともに、考えられる解決策を提案してい

ます。

r 間違った送信元 IPv6アドレスが選択されてしまうr 間違った次ホップが選択されてしまうr 間違った再帰検索用DNSサーバが選択されてしまう

14.2.3 送信元 IPv6アドレスの選択における問題シナリオ3ではパケットの送出ネットワークインターフェースが別々なので、それに応じて

送信元 IPv6アドレスを決定すれば、次節で説明するような次ホップ選択への対策により問題

を回避できます。シナリオ1と2では、複数の IPv6アドレスが設定されているネットワークイ

ンターフェースから次ホップとしてのルータは1つなので、送信元 IPv6アドレスに何を選択す

るかによって通信ができるかできないかが変わる可能性があります。

シナリオ1と2に対する解決策として、RFC 7157で提案されているのは、デフォルト IPv6

アドレス選択における変数やポリシーテーブルの上書きに必要な情報をDHCPv6で配布する

という手法です。そのためのDHCPv6オプションとして、RFC 7078ではAddress Selection

オプションが定義されています。

Page 251: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.2 マルチプレフィックスによるマルチホームの問題 237

RFC 7078で定義されているAddress Selectionオプションのフォーマットを図14.4に示し

ます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_ADDRSEL(84) option-len

予約 A P サーチリスト

Policy Tableオプション

▲ 図14.4 Address Selectionオプション

Address Selectionオプションのオプションコードは84です。オプションのサイズを示す

option-lenには、6ビットの予約フィールド、Aフラグと Pフラグ、それに可変長の Policy

Tableオプションの合計の長さをオクテット単位で示します。

Aフラグは、RFC 6724のSection 2.1にあるAutomatic Row Additionフラグを設定するた

めのものです。このフラグが1に設定されている場合、クライアントは自動的にポリシーテー

ブルに項目を追加できます。このフラグが0である場合、DHCPv6のAddress Selectionオプ

ションのPolicy Tableオプションに含まれているポリシーテーブルは意味をなしません。

Pフラグは、RFC 6724のSection 5にあるPrivacy Preferenceフラグを設定するためのもの

です。この値が1に設定されている場合、送信元 IPv6アドレスとして一時的な IPv6アドレス

が優先されます。この値が0に設定されている場合、一時的な IPv6アドレスではなく、パブ

リックなアドレスが優先されます。

Address Selectionオプションに含まれるPolicy Tableオプションのフォーマットを図14.5

に示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OPTION_ADDRSEL_TABLE(85) option-len

label precedence prefix-len

prefix

▲ 図14.5 Policy Tableオプション

Policy Tableオプションのオプションコードは85です。option-lenフィールドには、label、

precedence、prefix-len、prefixのフィールドのサイズの合計値をオクテット単位で示します。

labelとprecedenceは、それぞれポリシーテーブルにおけるラベルと優先度を指定します。

prefix-lenフィールドには、ネットワークプレフィックス長を示す0から128の値を指定し

ます。prefixフィールドには実際のネットワークプレフィックスを指定します。ネットワーク

プレフィックス長が8の倍数でない場合、8ビット境界になるまで0でパディングされます。

prefixフィールドは可変長で、0オクテットから16オクテットの間になります。

Page 252: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

238 第14章 IPv6におけるマルチプレフィックス

14.2.4 次ホップの選択次ホップに複数の選択肢がある環境では、どのルータを経由して宛先までパケットを送信す

るのかをホストが決定する必要があります。たとえば、シナリオ1や3の環境で、ネットワー

ク1とネットワーク2の間に接続性がない場合、ネットワーク2に対するパケットをルータ1

に対して送信してしまうと、そのパケットは宛先に届きません。このような場合、ホストは経

路情報を考慮したうえで次ホップを選択する必要があります。

マルチプレフィックス環境のホストにおける最初のホップ選択については、2016年に、

Standards TrackのRFC 8028が発行されています。RFC 8028では、デフォルト IPv6アドレ

ス選択によって送信元が決定したあとに次ホップを選択する前提なので、次ホップ選択は送信

元 IPv6アドレスに応じて行うものとしています。具体的には、送信元 IPv6アドレスをRouter

Advertisementメッセージで広告したルータを次ホップとして選択するとしています。

14.2.5 キャッシュDNSサーバ選択RFC 7157では、キャッシュDNSサーバの選択に対し、複数の再帰検索用DNSサーバに対し

て同時に問い合わせを行う方法と、どれか1つのDNSサーバを選択して問い合わせを行う方法

が説明されています。しかし、これだけでは、DNSのクエリにおける送信元 IPv6アドレスに

応じて返信内容を変えるように設定されたDNSサーバがある場合など、目的のサーバの IPア

ドレスを取得てきない場合もありえます。そこでRFC 7157では、DNSサーバを選択するため

のポリシーをDHCPv6によって配布する仕様を定めたRFC 6731を紹介しています。

14.2.6 マルチホーム環境のための IPv6 NAT

RFC 7157が前提としているのは、IPv4の小規模ネットワークにおいてマルチホームを実現

するためにNAT(NAPT)が利用されてきた状況です。プライベート IPv4アドレスで運用され

たネットワークでは、ユーザが利用するホストではなく、NAT機器が複数の上流ネットワーク

との接続を仲介することで、次ホップ、送信元 IPアドレス、DNSサーバを選択するのが一般的

でした。

IPv6でも、NATを利用することで、ユーザ環境がマルチプレフィックスになることによる

問題を防げます。しかし、RFC 7157で議論されているのは、あくまでも IPv6 NATを利用せず

に問題を回避する場合の要素や対策です。RFC 7157の背景には IPv6 NATを避けるという動

機があるのです。

とはいえ、RFC 7157では、マルチプレフィックス環境でのマルチホームにおける問題に対

する根本的な解決策が実現するまでの移行期においては、IPv6 NATが解決策になりうる環境

があるともしています。実際、NTT NGNでは、マルチプレフィックス問題の解決策として導

入されている IPv6 PPPoEで IPv6 NATを利用しています。これについては付録Aで改めて扱い

ます。

Page 253: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.3 IPv6サイトリナンバリング 239

NOTE

RFC 7157は、NTT NGNでのマルチプレフィックス問題について根本的な対策を考察していたNTTグループの社員が中心になって書かれたものです。マルチプレフィックス問題は、NTTフレッツだけの問題ではなく、RFC 7157に挙げられている3つのシナリオで必ず直面する問題です。RFC 7157の背景には、最初に問題に直面した経験を共有し、全世界で解決の方向に持っていきたいという動機があるのです。NTT NGNによって発生するマルチプレフィックス問題は、IPv6 IPoEと IPv6 PPPoEという2種類の方法で解決されています。いずれも、ユーザが利用するネットワークをマルチプレフィックスにしないという手法での解決です。IPv6におけるマルチプレフィックス問題に対する解決策として当時実現可能だったのが、マルチプレフィックスにしないという方法だったともいえるでしょう。

14.3 IPv6サイトリナンバリングIPv6は1つのネットワークインターフェースに対して複数の IPv6アドレスを設定できる仕

様になっています。その特徴を活用して、あるサイト内で利用している IPv6アドレスを切り

替える際に、新旧のネットワークプレフィックスを両方とも運用することでスムーズな移行を

実現できるようにしようというのが ‌IPv6サイトリナンバリングです。IPv6サイトリナンバリングは IPv6の基本的な仕様においても考慮されています。たとえば、

近隣探索や IPv6アドレスの自動設定の仕様には IPv6アドレスの有効期間という概念が組み込

まれています。これはサイトリナンバリングを考慮したものだといえます。

とはいえ、本書執筆段階では IPv6サイトリナンバリングにはさまざまな課題があり、簡

単に実行できるとはいえない状況です。実際、IPv6サイトリナンバリングに関しては複数

の InformationalなRFCだけが存在し、正式な方法を定義するといった位置づけの BCPや

Standards Trackがありません。下記に、IPv6サイトリナンバリングに関する各種のRFCとそ

の役割を要約します。

r RFC 4192†9:ある特定のタイミングでネットワークを停止して一気にネットワークの

IPv6アドレスを変更するようなことをしない前提で、ネットワークの IPv6を振り直す手

順や、その際の課題が解説されています。r RFC 5887†10:“Renumbering Still Needs Work”(「リナンバリングには、まだ課題が多

い」)と題されていることからわかるように、リナンバリングに関連する各種課題が紹介

されています。r RFC 6866†11:SLAACやDHCPv6などの動的な IPv6アドレス設定によらず、静的に IPv6

アドレスが設定されているホストにおけるリナンバリングの問題がまとめられています。

†9 RFC 4192:F. Baker, E. Lear, R. Droms, “Procedures for Renumbering an IPv6 Network without a Flag

Day”, 2005年9月†10 RFC 5887:B. Carpenter, R. Atkinson, H. Flinck, “Renumbering Still Needs Work”, 2010年5月†11 RFC 6866:B. Carpenter, S. Jiang, “Problem Statement for Renumbering IPv6 Hosts with Static Addresses

in Enterprise Networks”, 2013年2月

Page 254: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

240 第14章 IPv6におけるマルチプレフィックス

r RFC 6879†12:企業内ネットワークや ISPなど、大規模なエンタープライズネットワーク

におけるリナンバリングを対象として、リナンバリングのシナリオ、課題、方法が解説さ

れています。小規模なホームネットワークについては対象外としています。r RFC 7010†13:IPv6サイトリナンバリングが抱える課題に関連するプロトコルなどの紹介

と同時に、RFC 5887、RFC 6866、RFC 6879などで指摘されている課題の概要が紹介さ

れています。IPv6サイトリナンバリングの全体像を把握するには、このRFCから読み進

めるのがよいでしょう。

いずれのRFCでも、事前に計画された IPv6サイトリナンバリングについて主に論じられ

ています。不測の事態によって急にサイト全体の IPv6アドレスをリナンバリングするような

ケースに関しては範疇外です。

上記のRFCのほかにも、ルータのリナンバリングに関するガイドとして、やはり Informa-

tionalなRFC 2072が1997年に発行されています。ただし、RFC 2072で提起されている問題

の多くはCIDR(Classless Inter-Domain Routing)の導入開始に関連するものであり、すでに

内容が古くなっています。RFC 2072は IPv4と IPv6の両方を対象としていますが、IPv6に関

するリナンバリングに関しては、RFC 4192がRFC 2072を更新しています。

NOTE

Standards TrackのRFCであるRFC 2894では、ルータのリナンバリングを行うためのICMPv6フォーマットが定義されています。しかし、RFC 7010には「we are not aware

of real network deployment」(実際のネットワークで導入されている例を知らない)とあるので、定義はされたものの誰も実装しなかったプロトコルとみなされているようです。

14.3.1 RFC 4192で紹介されているリナンバリング手順RFC 4192では、IPv6サイトリナンバリングを以下の8段階の手順で解説しています。

r1. 初期段階

ルーティング、ネットワークインターフェースに設定されたアドレス、フィルタ設定、ファ

イアウォール、その他システムで、古いネットワークプレフィックスが利用されている状態

です。r2. リナンバリングプロセスの準備

リナンバリングの最初のステップは、新しいネットワークプレフィックスと、そのネット

ワークプレフィックスのための逆引きゾーンの確保です。そのうえで、ネットワークに存在

するすべてのリンクに対してサブのネットワークプレフィックスを割り当てる必要がありま

す。この割り当ては、ネットワークに存在する機器に対する設定よりも前に実施します。実

†12 RFC 6879:S. Jiang, B. Liu, B. Carpenter, “IPv6 Enterprise Network Renumbering Scenarios, Considera-

tions, and Methods”, 2013年2月†13 RFC 7010:B. Liu, S. Jiang, B. Carpenter, S. Venaas, W. George, “IPv6 Site Renumbering Gap Analysis”,

2013年9月

Page 255: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.3 IPv6サイトリナンバリング 241

際にリナンバリングを始める前に、DNSサーバに登録されているレコードのTTLを短くし

たり、DHCPクライアントからDHCPサーバへの問い合わせの頻度を多くしたりするといっ

た再設定も必要です。r3. 新しいプレフィックスのための設定

ルータやスイッチなどのネットワーク機器は新しいネットワークプレフィックスで稼働を

開始しますが、新しいネットワークプレフィックスを利用した通信はまだ行わない状態で

す。IPv6では、同時に複数の IPアドレスが利用可能なので、古いネットワークプレフィッ

クスと並行して新しいネットワークプレフィックスを利用したネットワーク運用が可能で

す。ファイアウォールに設定されているフィルタなどについても、この段階で設定を追加

し、実運用に向けた準備を進めます。新しいネットワークプレフィックスでネットワークが

正しく稼働していることを確認するためのテストも、この段階で実施します。r4. 新しいホストアドレスの追加

新しいネットワークプレフィックスがネットワークで正常に稼働したら、ホストに対して

新しいネットワークプレフィックスでの IPv6アドレスを追加します。この段階では、古い

ネットワークプレフィックスでも運用を続けます。ホストに対して新しいネットワークプレ

フィックスでの IPv6アドレスが追加されたら、DNSに登録されている情報も更新していき

ます。r5. 両方のプレフィックスの安定運用

新しいネットワークプレフィックスでの設定がネットワークに追加され、それが安定するま

でに十分な時間が経過した段階です。RFC 4192では、ネットワーク内のすべてのホストに

対し新旧両方のプレフィックスでのアドレスが設定されている状態を「安定運用」と表現し

ています。r6. 古いプレフィックスから新しいプレフィックスへの移行

新しいネットワークプレフィックスが完全に導入され、テストが終了し、安定運用に至った

ら、ホスト、ルータ、スイッチなどのネットワーク機器で新しいネットワークプレフィック

スを利用し始めます。DNSサーバに設定された古いネットワークプレフィックスを新しい

ものに変更するなど、新しい環境へと徐々に移行していきます。r7. 古いプレフィックスの廃止

古いネットワークプレフィックスを利用したすべてのセッションが終了し、古いネットワー

クプレフィックスへの依存がなくなった状態です。古いプレフィックスに関連するすべての

設定を削除できます。r8. 最終段階:新しいプレフィックスの安定運用

利用しているネットワークプレフィックスがすべて新しいものだけになった状態です。

14.3.2 IPv6サイトリナンバリングが抱える課題サイト全体のサービスを特定のタイミングで停止せずに IPv6サイトリナンバリングを行

う手順には、実現にあたってさまざまな困難があることが知られています。RFC 4192の

Page 256: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

242 第14章 IPv6におけるマルチプレフィックス

Introduction(序論)では、プロイセン王国の軍人であったカール・フォン・クラウゼヴィッ

ツによる『戦争論』の悲観的な文章を紹介することで、IPv6サイトリナンバリングの難しさを

強調しています。

Everything is very simple in war, but the simplest thing is difficult. These difficul-

ties accumulate and produce a friction, which no man can imagine exactly who has

not seen war.... So in war, through the influence of an ’infinity of petty circum-

stances’ which cannot properly be described on paper, things disappoint us and

we fall short of the mark.

(参考訳)戦争においてすべてのことは単純であるが、最も単純なことは難しい。困難

は積み重なり、摩擦を発生させる。戦争を見たことがないものには想像できない摩擦

を……。そのため戦争においては、紙面には適切に記せない「無限にある小規模な状

況」の影響によって我々は失望し、目標を逃してしまう。

さらに、セキュリティ上の懸念に関して述べているRFC 4192のSection 5の最初の文章で

は、「リナンバリングのプロセスは理論上はわかりやすいが、実践では難しく、かつ危険であ

る」と書かれています。設定ミスや攻撃によってサイト全体に対して大きな影響を与えてしま

う可能性があるのです。

IPv6サイトリナンバリングには、セキュリティ上の問題以外にも、さまざまな課題がありま

す。以下、RFC 5887で扱われているホストに関連する話題を中心に、IPv6サイトリナンバリ

ングが抱える課題をいくつか紹介します。

r DNSに関連する問題として、ユーザが自分でDNSサーバを管理していない環境などでサ

イトリナンバリングが発生する場合に、DNSサーバに登録されている情報を更新できない

可能性があることなどが紹介されています。r トランスポート層では、送信元 IPアドレスと宛先 IPアドレス、それにポート番号を利用す

る場合があります。たとえばTCPでは、一度通信が開始すると、通信開始時に利用した IP

アドレスなどを変更することはできません。そのため、サイトリナンバリングにおいて古

い IPアドレス設定が削除されるときに、影響を受けるセッションが発生する可能性があり

ます。r アプリケーションが一度利用した IPアドレスをキャッシュしている場合、サイトリナンバ

リングが行われることによって通信ができなくなる可能性が考えられます。ソフトウェア

のライセンスを管理するために IPアドレスを利用しているアプリケーションも考えられ

ます。また、IPアドレスをURLやHTTPクッキーで利用していたり、アプリケーションの

ためのプロキシとして IPアドレス情報が管理されている場合もあります。r BSDソケットの実装では、DHCPv6(第9章参照)やSLAAC(第8章参照)などで通知さ

れる IPアドレスの生存期間をアプリケーションが取得できる手段がありません。そのた

め、その IPアドレスがいつまで利用可能であるのかをアプリケーションが感知できず、利

用をやめるべき古いプレフィックスの IPアドレスを使い続けてしまう可能性があります。

Page 257: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

14.3 IPv6サイトリナンバリング 243

r 固定 IPアドレスによって運用されているノードが存在する場合、そのノードに関連する設

定がさまざまなネットワーク機器に対して手動で行われているでしょう。そうした設定の

更新については別途考える必要があるので、ネットワークの保守運用のための停止期間を

発生させずにサイトリナンバリングを行うことが難しい場合もあります。固定 IPv6アド

レスで運用されているノードの対処に関する問題についてはRFC 6866でまとめられてい

ます。

NOTE

固定 IPアドレスは手動設定による IPアドレスであるとは限りません。たとえば、ステートフルDHCPv6(9.6節参照)によって自動的に固定 IPアドレスを設定することもできます。

Page 258: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 259: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第15章

IPv6とセキュリティ

この章では、IPv6に関連するセキュリティについていくつか紹介します。

15.1 IPv6はIPv4よりもセキュアというわけではないエンタープライズ環境における IPv6のデプロイについて紹介している InformationalなRFC

7381†1に、「IPv6は IPv4よりもセキュアというわけではない(IPv6 Is No More Secure Than

IPv4)」という章があります。そこでは、IPv6が新しいことから IPv4よりセキュアであると信

じている人もいるが、それは大きな間違いであると明記されています。プロトコルが新しいと

いうことは、むしろ実装上のバグなどが発見され、それがこれから修正されていく必要がある

状態であるとも述べられています。さらに、IPv6にとって最大の脅威は、セキュリティを確保

しながら運用できる経験の不足であるとしています。

RFC 7381では、IPv6とセキュリティに関する誤解†2が3つ紹介されています。1つめの誤

解として紹介されているのは、「IPv6のアドレス空間が膨大であることから、/64の空間すべ

てをスキャンするのが困難である」というものです。これに関しては本章の15.7節で解説し

ます。

2つめは、「IPv6では IPsecが必須とされているので IPv4よりもセキュアである」という誤解

です。初期の IPv6仕様では IPsecが必須とされていましたが、現在の IPv6では IPsecは必須で

はありません。IPsecについては、本書では詳しく解説しませんが、15.8節で簡単に紹介して

います。

3つめの誤解は、「ブロードキャストがなくなったのでパケットの増幅攻撃が存在しない」と

いうものです。これが誤解であるのは、IPv6でもマルチキャストを転送するときに ICMPv6の

エラーメッセージや情報メッセージがルータによって生成される可能性があるからです。IPv6

でも、IPv4同様に、ICMPv6メッセージに対する制限が必要です。

†1 RFC 7381:K. Chittimaneni, T. Chown, L. Howard, V. Kuarsingh, Y. Pouffary, E. Vyncke, “Enterprise IPv6

Deployment Guidelines”, 2014年10月†2 RFC 7381では、神話、虚構、作り話、通説という意味を持つ「myth」が使われていますが、本書では、それを「誤解」と意訳しました。

Page 260: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

246 第15章 IPv6とセキュリティ

15.1.1 IPv6ならではのセキュリティ上の注意点IPv6ネットワークにも、IPv4ネットワークの場合と同様に、セキュリティ上の注意点が多く

あります。WebやSQLといったアプリケーション層に関するセキュリティ、不正なWi-Fiアク

セスポイントなどの機器に関連するセキュリティ、さらには、フラッディングやDDoS攻撃、

送信元アドレス詐称などについては、IPv4と同様に対策が必要です。

その一方で、IPv6ならではのセキュリティ上の課題や注意点もいくつかあります。

r近隣探索プロトコルとセキュリティIPv4と IPv6の非常に大きな違いとして、近隣探索プロトコルの存在があります。近隣探索

プロトコルに関するさまざまな問題については15.2節でまとめて説明します。また、15.3

節では、近隣探索プロトコルに対するセキュリティの仕組みとして考案されたSENDについ

て紹介します。さらに、15.4節では、不正なRouter Advertisementメッセージに関する問

題について解説します。rプライバシーの問題と一時的な IPv6アドレスの課題

IPv6アドレスにおけるインターフェース識別子に関しては、ユーザのプライバシー上の問題

が指摘されており、それに対応した仕組みとして一時的な IPv6アドレスが用意されていま

す。ただ、一時的な IPv6アドレスには、ネットワーク管理者がセキュリティ保全のために

ログを解析する際に、対象となる IPv6アドレスの機器が追跡できなくなる可能性がありま

す。そのため、一時的な IPv6アドレスを利用する場合には、モニタリングやロギングにお

いて、リンク層のアドレスとの関連づけなどの機能が必要になることもあります。さらに、

一時的な IPv6アドレスをユーザが利用しないようにする手法として、RFC 7381ではステー

トフルDHCPv6を利用する手法が紹介されています。これらの問題については15.6節で改

めて扱います。r IPv6拡張ヘッダに伴う管理の複雑化

IPv6拡張ヘッダの存在により、ルータやファイアウォールにおいて通過させるパケットを識

別するためのアクセスコントロールリストの管理が複雑になることがありえます。rフラグメンテーションに伴うフィルタリングの注意IPv6では、IPv4と異なり、パケットのフラグメンテーションがエンドノードにおいてのみ許

可されています(第10章参照)。そのため、IPv6では、ICMPv6のPacket Too Bigメッセー

ジを途中経路上でフィルタしないようにする必要があります。rデュアルスタック環境のセキュリティIPv6と IPv4のデュアルスタック環境では、IPv4のみで構成されるネットワークと比べて、

IPv6ネットワークという要素が追加されるため、攻撃者が攻撃対象として狙える要素が倍に

なります。たとえば、ルータが IPv6と IPv4の両方を有効にしてあるとき、それぞれのプロ

トコルに対する設定が個別に存在しているため、フィルタの設定も IPv6と IPv4で互いに独

立したものです。IPv4に対するフィルタだけを設定していて、IPv6のための設定を忘れて

いる場合もあります。

Page 261: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.2 近隣探索プロトコルとセキュリティ 247

15.2 近隣探索プロトコルとセキュリティIPv6に特有のセキュリティ上の課題として、近隣探索プロトコルに関連するものが挙げられ

ます。近隣探索プロトコルは、IPv6を支える重要な要素であると同時に、IPv4と IPv6の大き

な違いでもあります。

近隣探索プロトコルが関連するセキュリティ上の課題については、近隣探索プロトコルが定

義されているRFC 4861の11.1節に概要がまとめられています。そこでは、さらに詳細な内

容については2004年に発行された InformationalなRFC 3756が参照されています。ただし、

2004年の段階では15.3節で後述するSEND(SEcure Neighbor Discovery)について記述した

RFC 3971も発行されておらず、多少情報が古い部分もあります。

以下、RFC 4861とRFC 3756で紹介されている攻撃のうち、大きな問題となりうるものを

紹介します。

15.2.1 近隣不到達性通知へのDoS攻撃IPv6ノードは、リンク上にあるローカルな宛先への到達性を監視し続けます。一般的な実

装では、隣接ノードが到達可能であるかどうかの判断を上位層に依存しています。しかし、上

位層でのトラフィックに著しい遅延が発生したり、隣接ノードからの応答が一定時間にわたっ

て確認できない場合には、7.3.5節で説明した近隣不到達性通知(Neighbor Unreachability

Detection、NUD)を開始します。具体的には、近隣ノードに対し、Neighbor Solicitationメッ

セージを送信します。

近隣不到達性通知では、応答がない場合に何度かNeighbor Solicitationメッセージを送信し

ます。何度かリトライが発生したら、近隣キャッシュを破棄し、必要に応じて新たなアドレス

解決を行います(7.3.6項参照)。

この近隣不到達性検知に対し、悪意あるノードから、不到達となるはずのノードに偽装した

不正なNeighbor Advertisementメッセージを送信し続けるというDoS攻撃があります。これ

により近隣不到達性通知の正常な実施を妨害し、近隣キャッシュが破棄されない状態が続くと

いう状況が発生します。

15.2.2 DADに対するDoS攻撃SLAAC(StateLess Address AutoConfiguration)によって IPv6アドレスが自動設定されて

いるホストに対する攻撃として、DAD(Duplicate Address Detection、重複アドレス検出)

におけるすべてのメッセージに応答することによって IPv6アドレスが設定されないようにす

るDoS攻撃が指摘されています。

この攻撃には、DADに利用する2種類のメッセージのいずれを悪用するかによって2つの方

法があります。1つは、他のノードによってDADが実施されているかのように偽装するために

Neighbor Solicitationメッセージで応答する方法です。もう1つは、Neighbor Advertisement

メッセージで応答することにより、対象とする IPv6アドレスがすでに存在しているように偽

装する方法です。

Page 262: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

248 第15章 IPv6とセキュリティ

15.2.3 ルータに関連する攻撃近隣探索プロトコルでは、ルータが関連するメッセージも多くあります。特に、Router

Advertisementメッセージに関連しては、非常に大きな影響を与える攻撃があります。Router

Advertisementメッセージに関連する攻撃と、それらの攻撃を防ぐための方法については、

15.4節で改めて解説します。

Router Advertisementメッセージに関連する攻撃以外にも、RFC 3756では、DoS攻撃に

よって正規のデフォルトルータを「殺す」攻撃の可能性が説明されています。その状況で、悪

意あるノードがデフォルトルータであることを表明すれば、事実上のMan-in-the-Middle攻撃

などが可能になります。

Redirectメッセージを利用した攻撃も考えられます。最初の次ホップとなるルータのリンク

ローカルアドレスを送信元とするRedirectメッセージを偽造することで、そのルータを最初の

次ホップとして利用しているホストのトラフィックを不正にリダイレクトすることが可能にな

るでしょう。

15.2.4 リプレイ攻撃ここでリプレイ攻撃と呼んでいるのは、ノードが受け取った近隣探索メッセージを攻撃者が

横取りし、それを都合がいいタイミングで再送するという攻撃です。メッセージの内容を改ざ

んするわけではないので、通信の暗号化などでは防げません。

要求に対して応答する場合(Router Solicitationメッセージに対するRouter Advertisement

メッセージのような)であれば、応答にNonceを含めなければならないようにすることで、有

効なNonceが含まれない古いメッセージを利用したリプレイ攻撃を防げます。

単発で送信されるAdvertisementメッセージやRedirectメッセージをリプレイ攻撃から守

る方法としては、タイムスタンプなどがあります。ネットワークに接続されたノード同士の時

刻同期の精度が高くなかったとしても、タイムスタンプによって示される時間の差を確認する

ことで、新たに受け取ったメッセージが以前のものよりも新しいことを確認できるでしょう。

15.2.5 遠隔からの攻撃RFC 3756では、攻撃者が特定のサブネットプレフィックスに対するアドレスを加工し続け

るという、近隣探索プロトコルに対する遠隔からの攻撃が説明されています。それらのパケッ

トを受け取ったルータは、サブネット内で該当するアドレスに対応するリンク層アドレスを解

決するため、Neighbor Solicitationメッセージをサブネットに対して送信します。実在するサ

ブネットプレフィックスの実在しないインターフェース識別子を問い合わせ続けることになる

ので、近隣キャッシュがあふれ、事実上のDoS攻撃になります。

このような攻撃は、ネットワーク上で攻撃対象とするデバイスを探すためなどに実施される

アドレススキャンについて解説しているRFC 7707でも言及されています。RFC 7707による

と、IPv4では存在しなかったアドレススキャン攻撃の影響として、実際にはネットワーク上

に存在しない大量の IPv6アドレスがルータの近隣キャッシュに登録されることで近隣キャッ

シュがあふれてしまう可能性に言及しています。

Page 263: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.3 SEND(SEcure Neighbor Discovery) 249

遠隔からの攻撃は、ルータに対してだけではなく、ホストに対しても可能です。アプリケー

ションを騙し、on-linkの宛先に向かってパケットを送り続けさせることで、ホストにおける

近隣探索プロトコルの処理を誘発させるというものです。

15.2.6 近隣探索プロトコルとフラグメンテーション不正な近隣探索メッセージによる影響を軽減するための手段として、15.4.2項で説明する

RAガードや IPS(Intrusion Prevention System)などが知られています。しかし、IPv6フラ

グメンテーションを悪用することで、そういった軽減策をすり抜けることが可能になる場合が

あります。この問題はRFC 6980†3で指摘されています。RFC 6980は Standards Trackであ

り、近隣探索プロトコルについて定義したRFC 4861と、次節で後述するSENDについて定義

したRFC 3971とを更新する内容という位置づけです。

RFC 6980では、すべての近隣探索プロトコルメッセージ(次節で扱うSENDのCertification

Path Solicitationメッセージを含む)について、IPv6フラグメントヘッダが含まれるものは無

効であるとしています。そのようなパケットを受け取ったノードは、そのパケットを破棄する

ことが求められています。

15.3 SEND(SEcure Neighbor Discovery)近隣探索プロトコルのもともとの仕様では、近隣探索プロトコルのメッセージは IPsecに

よって守られる場合があるとされていました。しかし、IPsecの利用にあたっては、鍵交換を

自動的に行う手法が必要という制約があります。実際、当初の近隣探索プロトコルにおける

メッセージの送受信に対する暗号化は、手動での鍵管理が可能な状況に限定されていました。

IPsecを利用することなく近隣探索プロトコルに対してセキュリティを提供する仕組みとし

て考案されたのが、‌SEND ‌(SEcure Neighbor Discovery)です。SENDはRFC 3971†4で標準

化されています。RFC 3971が発行されたのは2005年のことですが、運用のオーバーヘッド

が高く、実装も不十分な状況であることから、SENDの利用は現在でも一般的であるとは言い

難い状況です(背景についてはRFC 6980を参照してください)。

15.3.1 SENDのための新しいオプションSENDでは、近隣探索プロトコルのさまざまな機能を安全にするために、7.5節で紹介した近

隣探索メッセージのオプションを新しく4つ利用します。

r CGAオプションr RSA Signatureオプションr Timestampオプションr Nonceオプション

†3 RFC 6980:F. Gont, “Security Implications of IPv6 Fragmentation with IPv6 Neighbor Discovery”, 2013年8月

†4 RFC 3971:J. Arkko, J. Kempf, B. Zill, P. Nikander, “SEcure Neighbor Discovery (SEND)”, 2005年3月

Page 264: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

250 第15章 IPv6とセキュリティ

CGAオプションは、各近隣探索メッセージに記載されている内容が、そこに記された IPv6

アドレスの所有者(ownerと呼ばれます)であることを示すためのものです。CGAオプション

には、公開鍵とそれに関連するパラメータが含まれます。RSA Signatureオプションは、近隣

探索メッセージの内容全体を保護するための署名です。TimestampオプションとNonceオプ

ションは、リプレイ攻撃を防ぐために使います。

以下、それぞれのオプションについて簡単に説明します。

■ CGAオプション‌CGA‌とは、Cryptographically Generated Addressのことで、暗号を使って生成されたアド

レスという意味です。CGAには、IPv6アドレスのインターフェース識別子が、公開鍵などの

パラメータを利用して得られるハッシュ値と同じになるなどの特徴があります。CGAの具体

的な生成方法についてはRFC 3972†5を参照してください。

CGAオプションは、送信者のCGAを検証するためにSENDで利用するオプションです。図

15.1にCGAオプションのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(11) Length Pad Length 予約

CGA Parameters

Padding

▲ 図15.1 CGAオプションフォーマット

rType(8ビット)

近隣探索メッセージのオプションのタイプを指定します。CGAオプションの場合は 11

です。r Length(8ビット)

Typeフィールド、Lengthフィールド、Pad Lengthフィールド、予約フィールド、CGA

Parametersフィールド、Paddingフィールドをすべて含めたオプション全体の長さを示し

ます。単位は8オクテットです。r Pad Length(8ビット)

パディングの長さを示すためのフィールドです。単位はオクテットです。r予約(8ビット)

将来の利用に備えたフィールドです。

†5 RFC 3972:T. Aura, “Cryptographically Generated Addresses (CGA)”, 2005年3月

Page 265: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.3 SEND(SEcure Neighbor Discovery) 251

rCGA Parameters

CGAの生成に利用するパラメータを示す可変長フィールドです。r Padding

オプション全体の長さが8の倍数となるようにするためのパディングです。

■ RSA SignatureオプションSENDでは、メッセージ送信者とメッセージに含まれる内容が経路の途中で改ざんされてい

ないことを示すために、公開鍵を利用した電子署名をメッセージに添付できます。そのために

使うのがRSA Signatureオプションです。署名は、このオプションを含む近隣探索メッセージ

全体に対して計算されます。

図15.2にRSA Signatureオプションのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(12) Length 予約

Key Hash

Digital Signature

Padding

▲ 図15.2 RSA Signatureオプションフォーマット

rType(8ビット)

近隣探索メッセージのオプションのタイプを指定します。RSA Signatureオプションの場合

は12です。r Length(8ビット)

Typeフィールド、Lengthフィールド、予約フィールド、Key Hashフィールド、Digital

Signatureフィールド、Paddingフィールドをすべて含むオプション全体の長さを示します。

単位は8オクテットです。r予約(16ビット)

将来の利用に備えたフィールドです。rKey Hash(128ビット)

SHA-1ハッシュの上位128ビットを格納するフィールドです。

Page 266: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

252 第15章 IPv6とセキュリティ

rDigital Signature(可変長)

パケットの送信元 IPv6アドレス、宛先 IPv6アドレス、ICMPv6ヘッダのフィールド、近隣探

索プロトコルのメッセージのヘッダ、近隣探索プロトコルのメッセージのオプションなどを

署名した可変長データを格納します。r Padding(可変長)

オプション全体の長さが8の倍数となるようにするためのパディングです。

■ Timestampオプション時刻同期が実施されている環境で、リプレイ攻撃を防ぐために使うオプションです。RFC

3971では、NTP(Network Time Protocol)に対する攻撃によって正しくない時刻が SEND

ノードに設定されてしまう攻撃の可能性が言及されています。このオプションを使ってリプレ

イ攻撃を防ぐには、SENDノードが正しく時刻を同期できる環境が必要です。

図15.3にTimestampオプションのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(13) Length

予約

Timestamp▲ 図15.3 Timestampオプションフォーマット

rType(8ビット)

近隣探索メッセージのオプションのタイプを指定します。Timestampオプションの場合は

13です。r Length(8ビット)

Typeフィールド、Lengthフィールド、予約フィールド、Timestampフィールドをすべて含

めたオプション全体の長さを示します。単位は8オクテットです。Timestampオプション

の場合、このフィールドの値は常に2になります。r予約(48ビット)

将来の利用に備えたフィールドです。rTimestamp(64ビット)

64ビットの符号なし整数によって示されるタイムスタンプです。1970年1月1日0時0分

(UTC)からの秒数を上位48ビットによって示し、残りの16ビットで1秒の64,000分の1

の単位を示します。

■ NonceオプションNonceオプションは、Solicitation系のメッセージへの応答であるようなAdvertisementに

ついて、鮮度を確認するために利用されます。

Page 267: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.3 SEND(SEcure Neighbor Discovery) 253

図15.4にNonceオプションのフォーマットを示します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Type(13) Length

Nonce

▲ 図15.4 Nonceオプションフォーマット

rType(8ビット)

近隣探索メッセージのオプションのタイプを指定します。Nonceオプションの場合は14

です。r Length(8ビット)

Typeフィールド、Lengthフィールド、Nonceフィールドを含むオプション全体の長さを示

します。単位は8オクテットです。rNonce(可変長)

Solicitation系のメッセージの送信側が選んだランダムな値(Nonce)を格納します。Nonce

は最低でも6オクテットの長さが必要です。Nonceオプション全体の長さが8オクテットの

倍数となるようにする必要があります。

NOTE

NonceオプションはRFC 7527で定義されている Enhanced DADでも利用されています。Enhanced DADに関しては8.5.2項を参照してください。

15.3.2 ルータの発見におけるセキュリティSENDでは、近隣探索プロトコルにおけるルータの発見(7.2節参照)のセキュリティを向

上させるために、トラストアンカーと証明書を利用した認証の方法も定義されています。ホ

ストは、受け取った近隣探索メッセージに対して有効な証明書パスがない場合、認証委任検

索(ADD、Authorization Delegation Discovery)と呼ばれる手順を開始します。その際には、

RFC 3971で新たに定義されている2つの ICMPv6メッセージと、それらのメッセージに含め

る2つのオプションを利用します。

rCertification Path Solicitationメッセージ

ホストからルータに証明書パスを要求するのに利用する ICMPv6メッセージです。rCertification Path Advertisementメッセージ

ルータがホストからの証明書パスの要求に応答するために利用する ICMPv6メッセージ

です。

Page 268: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

254 第15章 IPv6とセキュリティ

rTrust Anchorオプション

トラストアンカーの名前を指定するためのオプションです。rCertificationオプション

Certification Path AdvertisementメッセージでX.509v3証明書を格納するためのオプショ

ンです。

これらのメッセージとオプションのフォーマットなどの詳細についてはRFC 3971を参照し

てください。

15.4 不正なRouter Advertisementメッセージ近隣探索プロトコルに対する攻撃として、Router Advertisementメッセージに関連する

ものがあります。攻撃ではなく、運用者の設定ミスなどによって、本来は送信されるべき

ではないRouter Advertisementが送信されることもあります。そういった不正なRouter

Advertisementが問題を発生させる可能性があるのです。

不正なRouter Advertisementメッセージに関しては、以下の3つの InformationalなRFC

が発行されています。

r RFC 6104†6:正しくないRouter Advertisementメッセージに関する問題をまとめたもの

です。r RFC 6105†7:RFC 6104で要約された問題への対策として、Router Advertisement Guard

(RAガード)という仕組みを提案しています。r RFC 7113†8:RAガードを回避する手段の紹介と、それに対するさらなる防御策を解説し

ています。

15.4.1 問題の概要RFC 6104では、意図的な攻撃として、偽のRouter Advertisementメッセージが利用される

場合があるとしています。とはいえ、意図的な攻撃の場合にはNeighbor Advertisementメッ

セージなどが利用される傾向があるとして、実際に発生している問題の大半である設定ミスを

防ぐための方策について議論されています。

不正な内容になってしまったRouter Advertisementメッセージがリンク内に流れている

と、リンクに接続されたホストの一部、もしくは全部について、通信が阻害される可能性があ

ります。たとえば、正しくないRouter Advertisementメッセージに記載されているデフォル

トルータを利用しようとすると、通信がまったくできない状態になることもあります。ホスト

が、正しくないRouter Advertisementメッセージが広告しているネットワークプレフィック

†6 RFC 6104:T. Chown, S. Venaas, “Rogue IPv6 Router Advertisement Problem Statement”, 2011年2月†7 RFC 6105:E. Levy-Abegnoli, G. Van de Velde, C. Popoviciu, J. Mohacsi, “IPv6 Router Advertisement

Guard”, 2011年2月†8 RFC 7113:F. Gont, “Implementation Advice for IPv6 Router Advertisement Guard (RA-Guard)”, 2014年

2月

Page 269: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.4 不正なRouter Advertisementメッセージ 255

スを送信元 IPv6アドレスとするパケットを送出してしまうことで、通信できなかったという

状況も考えられるでしょう。

RFC 6104では、正しくないRouter Advertisementメッセージが偶発的(“accidental”)に

広告されてしまうシナリオの例として、ネットワーク管理者による誤った設定や、リンクに接

続されたホストの管理者が6to4ゲートウェイとしての機能を誤って有効にしてしまうことな

どが挙げられています。

RFC 6104では、SENDの利用や、後述するRAガードのようなレイヤー2における対策技術の

採用、DHCPv6の利用、ホスト側におけるフィルタの設定など、不正なRouter Advertisement

メッセージによる悪影響を軽減(mitigate)する方法もいくつか紹介しています。ただし、ど

の手法にも一長一短があり、完全な解決方法が記載されているわけではありません。

15.4.2 RAガード不正なRouter Advertisementメッセージに対する対策として、RFC 6105で ‌RAガード

(Router Advertisement Guard)が紹介されています。RAガードは、図15.5のように、管理

下にあるレイヤー2機器をすべての IPv6パケットが通過する環境を想定しています。管理下

にないレイヤー2機器を通過する通信が発生してしまう状況(シェアードメディア)での利用

は想定されていません。図15.5では、ルータからのRouter Advertisementメッセージは通過

させる一方で、ホストからのRouter Advertisementメッセージはブロックしています。

ルータ

RAガード(レイヤー2機器)

ホスト

ホスト

Router Advertisementメッセージ

▲ 図15.5 RAガードを導入したネットワークの例

RFC 6105では、RAガードを実現する方法として、ステートレスな形態とステートフルな

形態の両方を紹介しています。ステートレスな形態としては、たとえば、レイヤー2機器の特

定の物理ポートからの入力のみを許可し、それ以外はブロックするという単純なものがあり

ます。Router Advertisementメッセージの送出を許可する送信元 IPv6アドレスを設定すると

いった方法もあります。

ステートフルな形態としては、ある一定期間にRouter Advertisementメッセージの送信

を可能とする機器をレイヤー2機器にラーニングさせたうえで、その機器以外からのRouter

Advertisementメッセージをブロックするといった方法が紹介されています。

15.4.3 RAガードの回避RFC 7113では、拡張 IPv6ヘッダや IPv6フラグメンテーションを悪用することで、RFC 6105

で解説されているRAガードを回避する手法が紹介されています。たとえば、一連の拡張 IPv6

Page 270: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

256 第15章 IPv6とセキュリティ

ヘッダを解析せず、IPv6ヘッダに記載されているNext Headerフィールドのみを解析するよ

うなRAガード実装が存在していることを紹介しています。そのような実装では、何らかの拡

張 IPv6ヘッダが ICMPv6ヘッダの前に置かれているような場合に、RAガードによって遮断さ

れるべきRouter AdvertisementメッセージがRAガードを通過してしまいます。

IPv6フラグメンテーションを悪用することでRAガードを回避する方法としては、Router

Advertisementメッセージの ICMPv6ヘッダが最初のフラグメントに含まれないようにするこ

とでRAガードを回避する方法が紹介されています(図15.6)。

宛先オプションヘッダ(IPv6拡張ヘッダ)

宛先オプションヘッダ

(IPv6拡張ヘッダ)

宛先オプションヘッダ

(IPv6拡張ヘッダ)

Next Headerフィールド:58(ICMPv6)

Next Headerフィールド:58(ICMPv6)

本来のパケット

1つめのフラグメント

2つめのフラグメント

Next Headerフィールド:60

(宛先オプションヘッダ)

IPv6ヘッダ Router Advertisementメッセージ(ICPMv6)

RouterAdvertisementメッセージ(ICPMv6)

Next Headerフィールド:60

(宛先オプションヘッダ)

IPv6ヘッダ フラグメントヘッダ(IPv6拡張ヘッダ)

Next Headerフィールド:44(フラグメントヘッダ)

Next Headerフィールド:60

(宛先オプションヘッダ)

IPv6ヘッダ フラグメントヘッダ(IPv6拡張ヘッダ)

Next Headerフィールド:44(フラグメントヘッダ)

▲ 図15.6 RAガードを回避するような IPv6フラグメンテーション

図15.6の例では、ICMPv6ヘッダの前に宛先オプションヘッダを挿入したうえで、最初のフ

ラグメントには宛先オプションヘッダのみが含まれるようにし、ICMPv6ヘッダが第2フラグ

メントに含まれるようにしています。このようなフラグメンテーションが行われた場合、フラ

グメントの再構成を行わない限り、元のパケットがRouter Advertisementメッセージである

ことがわからないので、RAガードを回避できてしまいます。

実際にRFC 7113で紹介されているRAガード回避テクニックは、最初のフラグメントにす

べての IPv6拡張ヘッダを含めないというものです。しかし、RFC 7112†9では IPv6フラグメン

テーションの仕様が更新され、フラグメンテーション時にすべての IPv6拡張ヘッダが最初の

フラグメントに含まれなければならなくなりました(第10章参照)。最新の IPv6基本仕様であ

るRFC 8200にはRFC 7112による更新が反映されているので、本書執筆段階では2つめ以降

のフラグメントにも IPv6拡張ヘッダを入れると IPv6の基本仕様に反することになります。そ

†9 RFC 7112:F. Gont, V. Manral, R. Bonica, “Implications of Oversized IPv6 Header Chains”, 2014年1月

Page 271: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.5 DHCPv6-Shield 257

のため、仮にRAガードを回避する目的でそのような状態になった IPv6フラグメンテーション

が宛先に届いたとしても、最新の IPv6基本仕様に即した実装であれば破棄されます。とはい

え、古い IPv6仕様のままフラグメンテーションを解釈する機器もしばらくは存在すると思わ

れるので、注意は必要です。

15.5 DHCPv6­Shield不正なRAと同様に、不正なDHCPv6メッセージによる攻撃も可能です。たとえば、ステー

トレスDHCPv6で使われるメッセージを偽装することで、名前解決のためのDNSメッセージ

を任意のノードに誘導することもできます。

DHCPv6メッセージを利用した攻撃を軽減するための BCPのRFCとして、RFC 7610で

DHCPv6-Shieldが定義されています。

DHCPv6-Shieldは、RA-Guardに非常に似ています。レイヤー2でDHCPv6メッセージを送

信可能となるポートと、そうでないポートを設定することで、不正なDHCPv6メッセージが送

信されることを軽減します。

15.6 IPv6アドレスとプライバシーSLAACの仕組みでは、IPv6アドレスにおけるインターフェース識別子を生成するのに、IEEE

識別子を利用する方法が規定されています。この自動生成される IPv6アドレスに対しては、

プライバシーの懸念があり、RFC 4941では一時的な IPv6アドレス(匿名 IPv6アドレス)が定

義されています。ただ、ログ保存やトラブルシューティングに対する悪影響を懸念したネット

ワークの運用者が一時的な IPv6アドレスを利用できなくしてしまう場合もあるでしょう。

SLAACに限らず、インターフェース識別子の生成に関しては、セキュリティとプライバシー

に対する懸念がさまざまに議論されています。そのような議論を InformationalなRFCとして

要約したのがRFC 7721†10です。

RFC 7721では、IPv6アドレス生成に関連するセキュリティとプライバシーに対する一般的

な攻撃手法を下記の4つに分類しています。

r活動の関連づけIEEE識別子を利用したインターフェース識別子を利用している場合、そのネットワークイン

ターフェースが利用され続ける限り、インターフェース識別子はずっと同一のままです。そ

のため、IPv6アドレスを利用して、ホストの活動を長期間にわたって関連づけることがで

きます。こうした活動の関連づけでは、IPアドレスだけでなく、DNSにおける名前、HTTP

クッキー、ブラウザのフィンガープリントなどの情報も利用されます。NATとDHCPv4が

同じホストに対して異なる IPv4アドレスを割り当てる IPv4に比べて、IPv6では、この攻撃

の効果が大きくなる可能性が指摘されています。

†10 RFC 7721:A. Cooper, F. Gont, D. Thaler, “Security and Privacy Considerations for IPv6 Address Genera-

tion Mechanisms”, 2016年3月

Page 272: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

258 第15章 IPv6とセキュリティ

r位置トラッキング固定的なインターフェース識別子が利用されている場合、そのホストがネットワークを移動

したことをインターフェース識別子から判別できます。それにより、そのホストがどのよう

に物理的に移動したかを、ネットワークプレフィックスの位置を追跡することで検知できる

ようになります。RFC 7721では、この特性を利用した能動的な攻撃手法も紹介されていま

す。同じ IPv6リンクに接続したサーバ、もしくは途中経路上にある機器がインターフェー

ス識別子を学習することで、遠隔地にあるネットワークからその機器の存在を確認できるよ

うになります。IPv4では、新しいネットワークに接続したときにまったく新しい IPv4アド

レスが割り当てられるので、このような攻撃は可能ではないとされています。rアドレススキャニングアドレススキャニングに関しては、RFC 7707†11で論じられています。15.7節で改めて説明

します。rデバイスの持つ脆弱性への攻撃IEEE識別子は製造者を示す情報を含むので、IEEE識別子がインターフェース識別子として

利用される場合には、そのネットワークインターフェースに関するデバイス情報が漏洩して

います。その機器固有の脆弱性が存在する場合など、デバイス情報が漏れることで攻撃者に

有利な状況になる可能性が考えられます。

IPv6アドレスにおけるインターフェース識別子の生成方法は、IEEE識別子による方法だけ

でなく、さまざまな手段があります。RFC 7721では、インターフェース識別子の生成方法ご

とに、プライバシーやセキュリティの問題が整理されています。

r IEEE識別子から自動生成されたアドレス

アドレスが利用されている間、活動の関連づけと位置トラッキングが可能です。アドレスス

キャニングとデバイスの持つ脆弱性への攻撃も可能です。r手動で静的に設定されたアドレスアドレスが利用されている間、活動の関連づけと位置トラッキングが可能です。アドレスス

キャニングとデバイスの持つ脆弱性への攻撃については、静的なアドレスの生成方法によっ

ては可能になるでしょう。r固定の一時的な IPv6アドレス

ランダムに生成される一時的な IPv6アドレスを固定的に使う方法で、RFC 7721によれば

Windowsで利用されています。アドレススキャニングとデバイスの持つ脆弱性への攻撃の

可能性はなくなりますが、アドレスが利用されている間は活動の関連づけと位置トラッキン

グが可能です。rCGA

SENDで利用されるCGAでは、アドレススキャニングとデバイスの持つ脆弱性への攻撃に加

†11 RFC 7707:F. Gont, T. Chown, “Network Reconnaissance in IPv6 Networks”, 2016年3月

Page 273: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.7 IPv6サブネットに対するスキャン 259

え、位置トラッキングができなくなります。生成に使う公開鍵などの情報が有効な間、活動

の関連づけは可能です。rRFC 7217の方法

RFC 7217†12で規定されている、リンクごとにランダムで一意のインターフェース識別子を

各ネットワークインターフェースに対して生成する方法です。アドレススキャニング、デバ

イスの持つ脆弱性への攻撃、位置トラッキングはできません。リンクに接続されている間は

活動の関連づけは可能です。r一時的な IPv6アドレス

一時的な IPv6アドレスのみを利用している機器は、そのアドレスが有効な間だけは活動の

関連づけもできますが、アドレススキャニング、デバイスの持つ脆弱性への攻撃、位置ト

ラッキングはできません。rDHCPv6

アドレスが有効な間は活動の関連づけが可能です。デバイスの持つ脆弱性への攻撃、位置ト

ラッキングはできません。アドレススキャニングについては、DHCPv6サーバの実装により

ます。

IPv6アドレスの中には、IPv4アドレスが埋め込まれるものもあります。RFC 7721では、そ

の例としてTeredoや ISATAPなどが紹介されています。また、IPv6アドレスの中に IPv4アド

レスとポート番号が含まれる仕組みの例として、Lightweight 4over6、MAP-T、MAP-Eが紹介

されています。RFC 7721では、それらのプロトコルによって使われる IPv6アドレスは、IPv4

アドレスから引き継がれたものであるため、プライバシーやセキュリティ上の問題も埋め込ま

れた IPv4と同様であるとしています。

15.7 IPv6サブネットに対するスキャンIPv6のアドレス空間は、IPv4のアドレス空間と比べて広大です。一般的に利用されてい

る/64のネットワークプレフィックスでは、そのサブネット内で2の64乗個に近い IPv6アド

レスを使えます。これは、IPv4のアドレス空間全体で使える2の32乗個より、さらに2の32

乗倍も多い数です。

IPv6の広大なサブネットに対して IPv4と同様の方法でアドレススキャン攻撃を行うのは困

難です。「IPv6ネットワークにおけるネットワーク偵察(Network Reconnaissance in IPv6

Networks)」と題され、IPv6におけるアドレススキャン攻撃に関して論じている Informational

なRFC 7707でも、IPv4と比べてサブネットのアドレス空間が膨大な IPv6では IPv4と同様の

方法でアドレススキャンを行うことは困難であるとしています。

ただし、RFC 7707では、アドレススキャンを行うアドレスを絞り込むことが可能である

と述べられています。RFC 7707で紹介されている手法としては、SLAACなどを利用して拡

張EUI-64識別子が IPv6アドレスに利用される場合には上位6ビットめにあるuniversal/local

†12 RFC 7217:F. Gont, “A Method for Generating Semantically Opaque Interface Identifiers with IPv6 State-

less Address Autoconfiguration (SLAAC)”, 2014年4月

Page 274: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

260 第15章 IPv6とセキュリティ

ビットが1になること、48ビットのMACアドレスとOUIと残りのビットの間に0xfffeが挿

入されることなどを利用して、アドレススキャンを行う対象を絞り込めるとしています。さ

らに、OUIとして利用されるベンダーをある程度まで絞り込める場合もあります。たとえば、

スキャン対象がサーバ仮想化技術を使っている場合、VirtualBoxであればOUIが08:00:27、

VMware ESX ServerであればOUIが00:05:69などとなることが紹介されています。

外部ネットワークからのアドレススキャン攻撃では、一時的な IPv6アドレスが利用されて

いる場合であっても通常のグローバルアドレスは設定されることや、ステートフルDHCPv6や

手動設定で2001:db8::1のようにインターフェース識別子の上位ビットの多くを0とする設

定が多いことなども、スキャン対象のアドレスを絞り込むのに利用できます。ローカルネット

ワークでのアドレススキャンであれば、全ノードリンクローカルマルチキャストアドレスであ

るff02::1に対して ICMPv6 Echoリクエストを送るという手法もあります。

15.8 IPsecネットワーク層において認証や暗号化といったセキュリティを実現する仕組みとして、IPsec

があります。IPsecに関連するRFCは数多くありますが、IPsecが実現すること、そのための技

術的な要素、IPパケットの具体的な処理など、IPsec対応システムの基本的なアーキテクチャ

についてはRFC 4301†13で示されています。

IPsecを利用するホストやルータでは、ある宛先 IPアドレスに対してどのようなセキュリ

ティプロトコルで通信を行うかを保持しておき、それに応じて単方向の接続に対するセキュリ

ティを実現します。IPsecで利用できるセキュリティプロトコルとしては、IPヘッダを含めた

パケット全体について送信元の認証ができるAuthentication Header(AH)と、IPヘッダ以外

についてパケットの認証と暗号化を提供するEncapsulating Security Payload(ESP)があり

ます。IPv6では、それぞれに必要な情報を、IPv6拡張ヘッダの「認証ヘッダ」(プロトコル番

号51)および「Encapsulating Security Payloadヘッダ」(プロトコル番号50)として、送出

する各パケットに付加します。認証ヘッダについてはRFC 4302†14、Encapsulating Security

PayloadヘッダについてはRFC 4303†15で定義されています。

NOTE

IPsecは、IPv6とともに仕様が策定されてきた技術です。しかし、IPv6だけで利用するための仕組みではなく、IPv4と IPv6の両方で利用できます。IPv6拡張ヘッダのような仕組みがない IPv4では、AHとESPにそれぞれ専用のヘッダ(およびトレイラ)を利用します。

かつては、IPv6を実装しているノードに対し、IPsecが必須とされていました。実際、IPv6

対応ノードが備えるべき機能をまとめたRFC 4294では、IPsecに関連するRFC 4301、RFC

4302、RFC 4303のすべてを実装することが必須とされています。しかしRFC 4294は2006

†13 RFC 4301:S. Kent, K. Seo, “Security Architecture for the Internet Protocol”, 2005年12月†14 RFC 4302:S. Kent, “IP Authentication Header”, 2005年12月†15 RFC 4303:S. Kent, “IP Encapsulating Security Payload (ESP)”, 2005年12月

Page 275: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.9 ICMPv6を無条件にすべてフィルタリングすべきではない 261

年に発行されたものであり、現在では2011年に発行されたRFC 6434によって上書きされて

います。RFC 6434は、IPv6対応ノードにおける IPsecの実装に関しては「必須」ではなく「推

奨」としており、IPsecを実装しないことも可能です。

15.9 ICMPv6を無条件にすべてフィルタリングすべきではない

IPv6では、IPv4では他のプロトコルなどとして実現されていた各種の機能が ICMPv6に統合

されています。そのため、ICMPv6をファイアウォールなどで完全にフィルタリングしてしま

うと、通信障害を発生させる要因になりえます。とはいえ、ICMPv6メッセージに対してまっ

たくフィルタリングを実施しなければ、それによってセキュリティ上のリスクが上昇するとい

う面もあります。そこで、ICMPv6をファイアウォールでフィルタリングする際の注意点が、

RFC 4890†16としてまとめられています。

RFC 4890では、自らが運用しているサイトの外から送信されてくる以下のような ICMPv6

メッセージについてはフィルタすべきではないとしています。

r Destination Unreachableメッセージ(タイプ1)のすべてのコードr Packet Too Bigメッセージ(タイプ2)r Time Exceededメッセージ(タイプ3)のコード0のみr Parameter Problemメッセージ(タイプ4)のコード1とコード2のみ

さらに、RFC 4890では、ICMPv6のエコー要求メッセージ(タイプ128)とエコー応答メッ

セージ(タイプ129)もフィルタすべきではないとしています。その理由として、ICMPv6の

エコー要求メッセージとエコー応答メッセージがTeredo(20.2節参照)プロトコルにおいて

重要な役割を果たすこと、IPv4での ICMPネットワークスキャンと比べて ICMPv6によるネッ

トワークスキャンのリスクが小さいことを挙げています。

逆に、フィルタすべき ICMPv6メッセージとしては、自らが運用しているドメイン外からの

Node Information Queryメッセージ(タイプ139)、Node Information Responseメッセー

ジ(タイプ140)、Router Renumberingメッセージ(タイプ138)などが挙げられています。

その他、IANAによって内容が規定されていない未知の ICMPv6タイプを持つ ICMPv6メッセー

ジについても、フィルタすべきものとして紹介されています。

15.10 トンネル技術が抱える問題一般に、トンネル技術にはセキュリティ上のリスクがあります。IPv4/IPv6共存技術にはト

ンネル技術を採用しているものが多くあり、それらはトンネル技術そのものが持つセキュリ

ティリスクに晒されることになります。

こうした問題については、RFC 6169†17にまとめられています。以下、RFC 6169で紹介さ

†16 RFC 4890:E. Davies, J. Mohacsi, “Recommendations for Filtering ICMPv6 Messages in Firewalls”, 2007

年5月†17 RFC 6169:S. Krishnan, D. Thaler, J. Hoagland, “Security Concerns with IP Tunneling”, 2011年4月

Page 276: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

262 第15章 IPv6とセキュリティ

れている懸念をいくつか紹介します。

15.10.1 ファイアウォールなどのセキュリティ機器が未対応であることによる問題

ファイアウォールなどのセキュリティ機器が、IPv4/IPv6共存技術に対応していない場合、

トンネルの内部を流れるトラフィックを識別できない可能性があります。DPI(Deep Packet

Inspection)を行うようなファイアウォールであっても、IPv4/IPv6共存技術で利用されてい

るトンネル技術に対応していなければ、それを利用してセキュリティ機能を迂回できてしまう

でしょう。

15.10.2 送信元を偽装する目的に利用可能トンネル技術を利用して、送信元 IPアドレスの偽装などが可能になる場合があります。た

とえば、RFC 2827†18では、Ingressフィルタを利用して送信元 IPアドレス偽装を防いでいる

ネットワークにおいて、トンネルを利用することで Ingressフィルタを回避できる例が紹介さ

れています。IngressフィルタやEgressフィルタは、トンネルが終端されているネットワーク

に導入する必要があります。

IPv4ネットワークを利用して IPv6のトンネリングが行われるときの注意点や、各種トンネ

ル技術に対するフィルタの設定方法については、InformationalなRFCであるRFC 7213†19も

参照してください。

15.10.3 外部から内部への攻撃ユーザが張ったトンネルを経由することによって、外部から内部への攻撃が可能になる場合

もあります。ユーザ自身が気がつかないまま IPv4/IPv6共存機能が稼働してトンネルを作成し

ている場合もあるので注意が必要です。

15.10.4 トンネル用のアドレスからプロファイリングが可能トンネル技術によっては、トンネル用のアドレスからクライアントのプロファイリングが可

能です。たとえば、あるトンネル技術のためのプロトコルを利用しているという事実から、そ

のトンネル技術のためのプロトコルが実装されているプラットフォームを利用していること

が推測できるでしょう。初期状態でそのプロトコルが利用できる状態になっているプラット

フォームが限定されている場合には、さらにプラットフォームの特定が可能になります。たと

えば、Teredoアドレスを利用しているクライアントであれば、まずWindowsであると推測可

能です。

†18 RFC 2827:P. Ferguson, D. Senie, “Network Ingress Filtering: Defeating Denial of Service Attacks which

employ IP Source Address Spoofing”, 2000年5月†19 RFC 7213:D. Frost, S. Bryant, M. Bocci, “MPLS Transport Profile (MPLS-TP) Next-Hop Ethernet Address-

ing”, 2014年6月

Page 277: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

15.11 IPv4-Mapped IPv6アドレスの問題 263

15.10.5 悪意あるトンネルサーバ設定の変更による盗聴トンネル技術のクライアント側でサーバの設定を変更することにより、Man-in-the-Middle

攻撃が可能になる場合があります。サーバ認証なしでトンネルが利用される状況では、ユーザ

が攻撃に気がつきにくくなる可能性もあります。DNSサーバに対するキャッシュポイズニン

グと組み合わせた攻撃もありえます。

15.11 IPv4­Mapped IPv6アドレスの問題IPv6には IPv4-Mapped IPv6アドレスという仕組みがあり、IPv6を利用して IPv4アドレスと

通信しているかのような挙動を実現できます(4.10節参照)。便利な仕組みですが、IPv6を通

じて IPv4の通信を偽装することで、ファイアウォールなどのセキュリティ機器によるフィル

タをすり抜けてしまうといったセキュリティ上の懸念があります。そのため、IPv4-Mapped

IPv6アドレスを使うつもりがないアプリケーションを IPv6ソケットを利用して開発する場合

には、IPv6ソケットに対して明示的にIPV6_V6ONLYオプションを設定しておくことをお勧め

します。

15.12 ブラックホール用IPv6アドレスRFC 3882†20やRFC 5635†21では、経路を制御することで攻撃パケットを破棄できるように

する、ブラックホール技術が紹介されています。図15.7のように、攻撃されている対象に対

する宛先経路(次ホップルータ)を別の場所へと向けてしまうことで、攻撃トラフィックがブ

ラックホールへ吸い込まれるように破棄されます。次ホップルータとして監視機器などを指定

することで、攻撃トラフィックを監視することも可能です。

ブラックホールとなる機器

ルータルータ

ルータ

ルータWebサーバなど

▲ 図15.7 ブラックホール技術

ブラックホール技術には、ルータにあまり多くの負荷をかけずに実施できるという特徴があ

ります。ルータにとっては、宛先経路がブラックホールに向かっているだけで、パケット転送

処理としては通常と同じだからです。一般的なルータは、受け取ったパケットをルーティング

テーブルどおりに転送することに最適化されているので、それ以外のことをやろうとすると

†20 RFC 3882:D. Turk, “Configuring BGP to Block Denial-of-Service Attacks”, 2004年9月†21 RFC 5635:W. Kumari, D. McPherson, “Remote Triggered Black Hole Filtering with Unicast Reverse Path

Forwarding (uRPF)”, 2009年8月

Page 278: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

264 第15章 IPv6とセキュリティ

CPUやメモリなどの資源を消費してしまいます。ルータでの計算機資源の浪費は通信品質の低

下を招くので、ルータにかかる負荷は最小限に抑える必要があります。

ブラックホール技術を利用するときは、次ホップとしてどのような IPアドレスを使うのかを

運用者が選択する必要があります。IPv4では、プライベート IPv4アドレスや、ドキュメント

用の192.0.2.0/24が使われることがあります。IPv6では、このような用途のための専用の

IPv6アドレスが0100::/64としてRFC 6666†22で定義されています。

†22 RFC 6666:N. Hilliard, D. Freedman, “A Discard Prefix for IPv6”, 2012年8月

Page 279: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第16章

プログラマにとってのIPv6対応

IPv6対応は、ネットワーク層だけの話ではありません。IPv4と IPv6は異なるプロトコルな

ので、アプリケーション層における IPv6対応が必要な場合もあります。ネットワーク上の機

器の IPv6対応や、ホストのOSにおける IPv6対応が完了し、それらで IPv6機能が有効になっ

ていても、個別のアプリケーションが IPv6対応していなければアプリケーションを使う人は

IPv6を利用できないのです。

本書執筆時点では、ネットワーク層の技術に直接関連する職業以外で、アプリケーションプ

ログラミングにおける IPv6対応はあまり考慮されていないことが多いと予想されます。「IPv6

対応に興味はあるけれど、すぐには着手できないので先でよい」という判断をしているプログ

ラマも少なくないでしょう。アプリケーション開発の現場で IPv6対応プログラミングのノウ

ハウが蓄積されるまでには、もう少し時間がかかりそうです。

とはいえ、これまで IPv4のみを考慮することが前提であったネットワークアプリケーショ

ンのプログラミングでも、今後は徐々に IPv6対応が必須となっていくでしょう。本章では、ア

プリケーションプログラムにおける IPv6対応のヒントになるような情報をまとめます。

16.1 Socket APIとIPv6実のところ、高度なAPIを有するライブラリが増えていることもあり、開発者がいっさい気

にしなくてもアプリケーションの IPv6対応ができる環境が整いつつあります。とはいえ、そ

れらのアプリケーションの内側で何が起きているかを知ることも重要です。場合によっては、

自分でSocket APIを利用する IPv6対応プログラムを書かざるを得ないこともあるでしょう。

この節では、Socket APIにおける IPv6対応について解説します。Socket APIそのものは

POSIXで規定されており、システムごとに多少の違いはあるものの、多くのシステムで同じよ

うな記述が可能です。

Page 280: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

266 第16章 プログラマにとっての IPv6対応

16.1.1 IPv6のSocket APIに関するRFC

IPv6におけるSocket APIの基本は、RFC 3493†1で定められています。RFC 3493は、BSD

における Socket APIの実装を IPv6化するための情報を定めたものです。IPv4を前提とする

Socket APIとの相違、IPv6アドレスファミリ(AF_INET6)および IPv6プロトコルファミリ

(PF_INET6)の追加、IPv6アドレス用の構造体(sockaddr_in6)、ネットワークインター

フェースに関するAPI、ソケットオプションなどの基本的な事項が記載されています。

IPv6拡張ヘッダや ICMPv6に関連するAPIなどは、RFC 3542†2に記載されています。

マルチキャストについては、送信元に関係なく特定のマルチキャストグループ宛のパケッ

トを受け取るためのソケットオプションは、RFC 3493で扱われています。特定の送信元ア

ドレスからのマルチキャストのみを対象としてグループに参加できるような、いわゆる SSM

(Source Specific Multicast)と、SSMに対応した IPv6のマルチキャストプロトコルである

MLDv2については、RFC 3678†3で関係するSocket APIが定義されています。

さらに、RFC 5014†4では、デフォルト IPv6アドレス選択(14.1節参照)における送信元ア

ドレスの選択ルールに関して、アプリケーションから選択ルールを制御するためのAPIが提案

されています。デフォルト IPv6アドレス選択における送信元アドレスの選択を上書きするこ

とになるので、結果としてgetaddrinfo()で宛先アドレスを取得する際の候補の順番にも影

響をもたらします。

RFC 3493、RFC 3542、RFC 3678、RFC 5014は、いずれも参考情報という位置づけの

InformationalなRFCです。標準という位置づけのStandardではないので、Socket APIの実

装がこれらのRFCと同じ方式であることが求められているわけではありません。RFC 3493で

は、Socket APIの標準は ISO/IEC、IEEE、The Open Groupが合同で開発しているPOSIXであ

り、将来の標準化については “Open Group Base Working Group”を参照するように説明して

います†5。

NOTE

APIを提案しているRFCではありませんが、IPv4と IPv6が共存する環境における IPv6アプリケーション開発の外観を示しているRFC 4038†6では、Socket APIを利用した IPv6

対応プログラムのサンプルが記載されています。

†1 RFC 3493:R. Gilligan, S. Thomson, J. Bound, J. McCann, W. Stevens, “Basic Socket Interface Extensions

for IPv6”, 2003年2月†2 RFC 3542:W. Stevens, M. Thomas, E. Nordmark, T. Jinmei, “Advanced Sockets Application Program

Interface (API) for IPv6”, 2003年5月†3 RFC 3678:D. Thaler, B. Fenner, B. Quinn, “Socket Interface Extensions for Multicast Source Filters”, 2004

年1月†4 RFC 5014:E. Nordmark, S. Chakrabarti, J. Laganier, “IPv6 Socket API for Source Address Selection”, 2007

年9月†5 2018年時点ではhttp://pubs.opengroup.org/onlinepubs/9699919799/で参照できます。†6 RFC 4038:M-K. Shin, Y-G. Hong, J. Hagino, P. Savola, E. M. Castro, “Application Aspects of IPv6 Transi-

tion”, 2005年3月

Page 281: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16.1 Socket APIと IPv6 267

16.1.2 IPv6のみで通信するアプリケーションの動作Socket APIを使って、IPv6のみで通信するアプリケーションをプログラムする場合には、以

下の手順で動作するようにプログラムを書きます。

1. IPv6であることを示すAF_INET6(もしくはPF_INET6)でソケットを作成する

2. 作成したソケットに対し、必要に応じて初期設定を行う

3. 通信相手の IPv6アドレスがなく、FQDN情報しかない場合には、名前解決をして IPv6ア

ドレス情報を取得する

4. 名前解決の結果が複数ある場合には、最終的にどの IPv6アドレスを利用するのかを判断

する必要がある。得られた結果順に接続を試み、最初に成功した結果を利用するという

手法を採用してもよい

5. 必要に応じて通信相手との初期接続を確立する(たとえばTCPの場合)

6. ソケットに対して、書き込みや読み込みなどの操作を行う

7. 通信が終了したら、必要がなくなったソケットを閉じる

16.1.3 IPv4もしくは IPv6で通信するアプリケーションの動作Socket APIを使って、IPv4もしくは IPv6で通信するアプリケーションを作成するには、IPv4

および IPv6の両方のソケットを作成し、以下のような手順で動作するようにプログラムを書

きます。

r IPv4ソケット(AF_INET)と IPv6ソケット(AF_INET6)の両方を作成するr 作成した両方のソケットに対し、必要に応じて初期設定を行うr 通信相手の IPアドレスがなく、FQDN情報しかない場合には、名前解決をする。このと

き、名前解決によって得られた IPv4アドレスは IPv4ソケットに対して利用し、IPv6アド

レスは IPv6ソケットに対して利用するr 必要に応じて通信相手との初期接続を確立する(TCPの場合)。このとき、IPv4を利用す

るのか、それとも IPv6を利用するのかを判断するためのプログラムを書かなければなら

ない。IPv4のシングルスタックもしくは IPv6のシングルスタックの場合は、名前解決の

結果が複数であった場合と同じようにすればよい。デュアルスタックの場合には、利用す

るソケットの種類が IPv4と IPv6で異なるという点に注意が必要になるr 最終的に利用するソケットに対して、書き込みや読み込みなどの操作を行うr 通信が終了したら、必要がなくなったソケットを閉じる上記の通信手順からわかるように、IPv4と IPv6のデュアルスタック環境では、IPv4を使う

のか、それとも IPv6を使うのかを、アプリケーションが自ら判断して通信する必要がありま

す。広く採用されているのは、IPv6を最初に試して成功すれば IPv6で通信を行い、IPv6での

通信が失敗した場合には IPv4を利用する、というものです。しかし、より品質が高いほうを採

用すべきという発想の手法もあります(16.2節参照)。

Page 282: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

268 第16章 プログラマにとっての IPv6対応

16.1.4 IPv6と IPv4とで利用する関数が違う処理多くのプログラミング参考書では、IPv4用の関数を利用して通信プログラムを解説していま

す。しかし、IPv6のSocket APIでは、IPv4向けに用意されているのとは異なる関数を利用す

る場合があります。これらのAPIについてもRFC 3493で解説されています。ここでは、その

うちのいくつかを紹介します。

r名前解決にはgetaddrinfo()を使う

IPv4のみのアプリケーションを書く従来のプログラムでは、名前解決のために

gethostbyname()という関数を利用するのが一般的でした。しかし、gethostbyname()

は IPv4の名前解決しか行えず、IPv6は扱えません。IPv6に対応したアプリケーションを書

くには、gethostbyname()ではなくgetaddrinfo()を利用します。r IPアドレスと文字列の相互変換にはinet_pton()、inet_ntopを使う

IPv4のみのアプリケーションを書く従来のプログラムでは、文字列で書かれた IPv4アドレ

スを32ビットのバイナリデータに変換するためにはinet_addr()関数、32ビットのバイ

ナリデータから文字列データを得るためにはinet_ntoa()関数がそれぞれ利用されてきま

した。これらは、IPv6アドレスに対しては使えません。文字列で書かれた IPv6アドレスを

128ビットのバイナリデータに変換するためにはinet_pton()を、128ビットのバイナリ

データから文字列データを得るためにはinet_ntop()をそれぞれ利用します。

IPv6対応を求めるRFC

すべてのネットワーク機器に IPv6対応を求めるRFCが2011年に発行されています。RFC 6540†7です。RFC 6540は、主に機器の開発者に向けた内容で、従来は IPv4のみを想定していた「IP対応」という表現について、これからは IPv6対応を含めたものを指して使用すべきであると主張されています。とはいえ、一度普及したハードウェアを置き換えるのは困難なので、これからの「IP対応」機器は IPv6機能も含むべきであると述べられています。注意が必要なのが、RFC 6540はStandard Trackではなく、BCP(Best Current Prac-

tice)である点です。BCPは、「RFC発行時点での最良の手法」という意味を持つ文書なので、参考にすればよいといった程度であるとも解釈できます。RFC 6540の執筆者が狙ったのは、顧客側からRFC準拠を根拠としてベンダーらに IPv6対応を促すための布石を打つ効果なのかもしれません。

16.2 単なるIPv6対応では不十分な場合多くの資料では、「IPv6対応クライアントプログラミング」として、単純にgetaddrinfo()

を利用することを推奨しています。確かに、gethostbyname()をgetaddrinfo()にするだ

けで、IPv6対応そのものは可能です。

†7 RFC 6540:W. George, C. Donley, C. Liljenstolpe, L. Howard, “IPv6 Support Required for All IP-Capable

Nodes”, 2012年4月

Page 283: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16.3 Happy Eyeballs 269

とはいえ、IPv6を優先するというポリシーで書かれたプログラムでは不十分な場合もありま

す。現状ではまだ、IPv4によって運用されているインターネットのほうが安定している状況も

少なくありません。IPv4/IPv6共存技術の設定ミスなどで不具合が発生する場合もあります。

ネットワークとして見ると IPv4のほうが有利な状況下で、クライアントが IPv6を常に優先し

てしまうと、IPv4へのフォールバックに成功するまで通信開始を待つことになる可能性があり

ます。IPv6による接続そのものは可能で、IPv4へのフォールバックが起こらないけれど、IPv6

の通信品質のほうが悪い場合には、通信のスループットが十分に出ないという問題が発生して

しまいます。

動くものを作るという立場からすれば、「IPv6が使えれば IPv6を使う」という判断でも問題

はないでしょう。しかし、エンドユーザの視点から見れば、「状況に応じて快適に接続される

ほう」を使ってほしいわけです。アプリケーションが動作しうる環境で、快適な動作を実現す

るには、IPv6と IPv4のうち応答が速いほうや通信品質が良いほうを採用するなど、手の込ん

だ処理が必要になります。IPv6対応アプリケーションのプログラミングでは、プログラムの動

作として問題がないようにエラーハンドリングするだけでなく、実際の通信品質まで考慮した

動作がユーザビリティという面で求められるのです。

IPv4と IPv6のどちらを使うべきかという問題意識は1994年から

IPv4を使うべきか、それとも IPv4以外を使うべきかに関する問題意識は、IPv6が世に出るよりも前の1994年に発行されたRFC 1671†8にまで遡ります。そこでは、IPv4に代わる新プロトコル(つまり IPv6)の立ち上がり時には、設定ミスなどによるブラックホールが存在している可能性があるとしています。ここでブラックホールというのは、DNSでは IPv6アドレスが返されるのに、途中のルータが IPv6に未対応であるといった何らかの理由で、実際にはその IPv6アドレスでは目的のホストに到達できない状況です。IPv4アドレスと IPv6アドレスの両方がホストに登録されていると判明していても、ブラックホールが存在しないとは言い切れません。

RFC 1671では、手動設定ではない方法によって、このようなブラックホール問題に対する解決策を確立することが必須であると記述されています。しかし、残念ながら、この問題に対する根本的な解決策がないまま現在に至っています。

16.3 Happy Eyeballsインターネットを利用するプロトコルやアプリケーションの多くでは、「名前」を利用して

通信相手を指定します。1つの名前に対し、複数の IPアドレスが関連づけられていることもあ

りますが、どの IPアドレスを利用して通信するかは各アプリケーションで決定することになり

ます。名前から IPv4と IPv6の両方の IPアドレスが得られても、そのうち片方ではまったく通

信できなかったり、何らかの要因によって十分な通信性能が得られないこともありえます。

そこで、IPv6と IPv4の両方を同時に試しつつ、実際の通信で利用するための IPアドレスを

†8 RFC 1671:B. Carpenter, “IPng White Paper on Transition and Other Considerations”, 1994年8月

Page 284: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

270 第16章 プログラマにとっての IPv6対応

決定するための手法として、Happy Eyeballsというアルゴリズムが提案されています。本書執

筆時点におけるHappy Eyeballsの最新バージョンは、RFC 8305†9で規定されているVersion

2です。

Happy Eyeballsの目的は、短時間で接続確立を諦めて次を試せることや、毎回必ず同時に複

数の接続開始を行うことによるネットワークへの過度の負荷を避けることです。したがって、

Happy Eyeballsは、素早くかつ効率良く通信ができると思われる方法を推測するための仕組

みだといえます。とはいえ、IPv6利用を促進するという目的もあり、そのため、IPv6を IPv4

よりも優先的に採用することを前提としています。

NOTE

RFC 8305では、NAT64とDNS64を利用して IPv4アドレスが直接指定された場合や、AAAAレコードが示す宛先への到達性に問題がある場合に注意すべき点も紹介されています。また、Path MTUに問題がある場合への対処を別途考慮する必要があることや、Happy Eyeballsアルゴリズムを使うことで IPv4もしくは IPv6での通信に問題が発生する環境を発見しにくくなってしまう可能性などに関しても言及されています。

16.3.1 Happy Eyeballs Version 2の概要Happy Eyeballs Version 2の動作は以下のような流れになっています。

1. 非同期にDNSクエリを実行

2. 得られた名前解決の結果をソート

3. 非同期に接続確立を試行

4. 得られた接続を採用し、他の接続確立の試行をすべてキャンセル

■ 非同期のDNSクエリを実行Happy Eyeballsでは、IPv6と IPv4のデュアルスタック環境(第 III部参照)におけるDNSの

利用を前提としています。そこで、名前解決のためにDNSサーバへ問い合わせを実行する際

は、IPv4用のAレコードに対するものと、IPv6用のAAAAレコードに対するものを個別に両方

とも行う必要があります。Happy Eyeballs Version 2では、両方のクエリをほぼ同時に実行す

べきであるとしています。ただし、IPv6用のAAAAレコードに対する問い合わせを先に行うこ

とを推奨しています。

注意が必要なのは、IPv6と IPv4の両方のアドレスファミリに対する問い合わせが完了する

のを待ち、両方の回答が得られてから接続確立を試みる、という手法が非推奨となっている点

です。そのような方法が非推奨となっているのは、片方のアドレスファミリでの回答を受け取

りつつ、もう片方の回答に時間がかかってまうような場合に、すでに名前解決の結果が得られ

ているアドレスファミリで接続を確立するまでの時間が長くなってしまうからです。非同期の

DNS APIが提供されていないプラットフォームについては、アドレスファミリごとにスレッド

†9 RFC 8305:D. Schinazi, T. Pauly, “Happy Eyeballs Version 2: Better Connectivity Using Concurrency”,

2017年12月

Page 285: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16.3 Happy Eyeballs 271

を生成し、それぞれのスレッドで同期APIによる名前解決を行うことで、疑似的に非同期の名

前解決を実現可能です。

先に触れたように、Happy Eyeballs Version 2ではAAAAレコードを優先的に採用するアル

ゴリズムを推奨しています。非同期のDNSクエリにより、AAAAレコードの結果が先に到達し

た場合には、即座にそのAAAAレコードが示す IPv6アドレスに対する接続確立を試行すること

が推奨されています。一方で、AAAAレコードに対する返答よりも先にAレコードに対する返

答が到着した場合には、IPv6を優先するための猶予時間を設定することが推奨されています。

RFC 8305では、猶予時間の例として50ミリ秒が推奨されています。その猶予時間中にAAAA

レコードに対するno errorやno dataのようなネガティブな結果が返ってきた場合には、すで

に受け取っている IPv4アドレスを利用して、接続確立のための IPアドレスリストのソートや

接続確立を試行する段階へと即座に進むべきであるとしています。

複数のキャッシュDNSサーバが存在するとき、名前解決を行うクライアントは、キャッシュ

DNSサーバとの通信に IPv4を使うのか、それとも IPv6を使うのかを選べます(18.1.1項参

照)。Happy Eyeballs Version 2では、そのような場合にはDNSクエリのトランスポートとし

て IPv6を利用することを推奨しています。

■ 得られた名前解決の結果をソート名前解決で IPアドレスが得られたら、接続を試行する前に、接続確立の順番を決めるために

IPアドレスのリストを作ることが推奨されています。そのリストに記載された IPアドレスに

ついて順番に接続確立を試行します。RFC 8305では、このリストに、最初に得られた IPv4ア

ドレスと IPv6アドレスそれぞれ1つだけでなく、得られた結果すべてが含まれていることが重

要であるとしています。また、異なるアドレスファミリが交互にリストに登録されることを推

奨しています。たとえば、IPv6アドレスが最初の項目であれば、次は IPv4アドレスになるよ

うにします。

この IPアドレスのリストを優先順にソートします。その際、14.1.2項で説明したデフォルト

IPv6アドレス選択(RFC 6724)における宛先 IPv6アドレスの決定ルールに基づいてソートを

行う必要があります。過去の接続成功時のRTTのような情報を参考にすることも可能ですが、

判断基準として優先度をあまり高くしないことが推奨されています。送信元 IPv6アドレスの

決定ルールに関しては、リストにある宛先 IPv6アドレスごとに考慮されるべきとされていま

すが、Happy Eyeballs Version 2の範疇外であるとも明記されています。

■ 非同期に接続確立を試行その時点における優先順が反映されたリストが構築された段階で、クライアントは接続確

立を試みます。RFC 8305では、ネットワークへの負荷を過度に上昇させないために、リスト

にある IPアドレスに対して複数の接続確立を同時に開始しないことを推奨しています。そう

ではなく、1つの接続確立を試行して一定時間でその試行が成功しなかった場合に、次の試行

を開始するようにします。接続確立を試行してから、次の試行まで成功を待つ時間としては、

250ミリ秒が推奨されています。

接続確立の試行が成功した時点でその接続を採用し、他の接続試行中のセッションをすべて

Page 286: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

272 第16章 プログラマにとっての IPv6対応

キャンセルすることが推奨されています。

NOTE

すでに得られた名前解決の結果がDNS Push Notification†10などによって変更された場合には、その内容をリストに反映されることが望ましいとされています。ただし、すでに接続確立を試行している IPアドレスに対して変更が発生した場合には、その接続確立の試行を中止すべきではありません。

16.3.2 Happy Eyeballs Version 1と2の違いRFC 8305で規定されているHappy Eyeballs Version 2は、RFC 6555†11に記述されていた

アルゴリズム(便宜的にHappy Eyeballs Version 1と呼びます)を廃止するものです。Happy

Eyeballs Version 1も、Version 2同様に、Standard TrackのRFCでした。

RFC 6555は、RFC 8305と比べると、アルゴリズムそのものを規定するというよりも、アル

ゴリズムに要求される事項をまとめたものになっています。RFC 8305では、より具体的なア

ルゴリズムが示されているといってよいでしょう。RFC 8305で示されているVersion 2のア

ルゴリズムの実装は、RFC 6555の要求にも従うものでありながら、さらに品質を向上させた

ものであるとされています。

Version 1からVersion 2になる際に追加された点は以下のように要約できます。

r IPアドレスを得るためのDNSクエリの方法r 各アドレスファミリごとに複数の IPアドレスがある場合の処理r 接続確立の試行中にDNS Push NotificationやTTL切れによりDNSに関連する情報が更新

された場合の処理r 過去の通信履歴を利用する方法r NAT64とDNS64による IPv6-onlyネットワークをサポートする方法

1つめの「IPアドレスを得るためのDNSクエリの方法」について補足しておきましょう。

Version 2では、IPアドレスを得るためのDNSサーバに対するクエリに関して、非同期APIの

利用が推奨されています。この部分について、Version 1では、getaddrinfo()というブロッ

キングする同期APIの利用が前提となっていました。Version 2でgetaddrinfo()のような

同期APIを使う場合には、複数のスレッドを利用して疑似的に非同期のDNSクエリを実施する

ことが推奨されています。

Version 1では、DNSを利用した名前解決の結果が出たあとで、どのようにTCP接続を実施

するかにも重点が置かれていました。RFC 6555では、Happy Eyeballsの流れとして図16.1

のような例が紹介されています。

この図では、IPv4と IPv6の両方で同時にTCP SYNが送信されますが、IPv6によるTCP SYN

†10 Tim Wicinski, “DNS Push Notifications”, Internet-Draft, https://datatracker.ietf.org/doc/

draft-ietf-dnssd-push/†11 RFC 6555:D. Wing, A. Yourtchenko, “Happy Eyeballs: Success with Dual-Stack Hosts”, 2012年4月

Page 287: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16.3 Happy Eyeballs 273

DNSサーバ

クライアント サーバ

DNSクエリwww.example.comQNAMEAQTYPE

DNSクエリwww.example.comQNAMEAAAAQTYPE

DNS応答192.0.2.1RDATAATYPE

DNS応答2001:db8::1RDATAAAAATYPE

TCP SYN

TCP

宛先

フラグ

2001:db8::1

SYN

IPv6

TCP SYN

TCP

宛先

フラグ

192.0.2.1

SYN

IPv6

TCP SYN+ACK

TCP

宛先

フラグ

192.0.2.1

SYNACK

IPv4

TCP ACK

TCP

宛先

フラグ

2001:db8::1

ACK

IPv6

TCP ACK

TCP

宛先

フラグ

192.0.2.1

ACK

IPv4

192.0.2.1

www.example.com

2001:db8::1

▲ 図16.1 RFC 6555 Happy Eyeballsの流れ

パケットは喪失しています。IPv4によるTCP接続は確立しますが、アプリケーションが設定

したタイムアウトまで待ち、そのタイムアウトになるまでは IPv6によるTCP接続の試行を続

けます。複数のTCP接続を並行して確立しようとしつつ、最初に成功したTCP接続を利用す

ることで、IPv4と IPv6のどちらを利用するかを自動的に判断するわけです。

参考までに、RFC 6555に掲載されているGoogle ChromeとMozilla Firefoxで採用されて

いるHappy Eyeballs version 1のアルゴリズムを紹介します。

1. getaddrinfo()を利用して名前解決を行う

2. getaddrinfo()から受け取った IPアドレスのリストの順番に接続を試みる

3. 接続の試みが短時間で確立しない場合(FirefoxやChromeでは300ms)、異なるアドレ

スファミリの最初の IPアドレスでの接続を試みる。直前に失敗したアドレスファミリが

IPv6であれば、IPv4を試すことになる

4. 最初に確立した接続を利用する

Page 288: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

274 第16章 プログラマにとっての IPv6対応

なお、Happy Eyeballs version 1の実装については、RFC 6556†12で実験結果が報告されて

います。

NOTE

Happy Eyeballs的な手法には、RFC 6555やRFC 8035のアルゴリズムだけでなく、さまざまなものが提案されています。たとえば、2015年の中旬にAppleがOS X El Captain

で実装した手法があります。Appleの手法では、IPv4と IPv6の両方に対する名前解決を実施しつつ、もし最初に届いた結果が IPv4の場合には25ms待ってからTCP接続の確立を試みることで、IPv6を優先的に使うための工夫をしています†13。

本書執筆時点では、IPv4による通信のほうが IPv6による通信よりも品質が高くなりがちで

す。さらに、IPv4によるシングルスタック環境のほうが、IPv4と IPv6のデュアルスタック環

境よりもレスポンスや通信品質が高くなりがちです。単純に IPv6対応するということと、使え

るレベルでの IPv6対応するというのはまったく別の話であり、今後さまざまな取り組みが必要

なのかもしれません。しかし、IPv4アドレス枯渇問題が深刻化して IPv4インターネットが複

雑化すれば、IPv6による通信のほうが品質が高くなる環境も多く登場する可能性があります。

16.4 IPv6ソケットとIPv4­Mapped IPv6アドレスIPv4のソケットはSocket APIをAF_INETというオプションで使うことにより生成し、IPv6

のソケットはAF_INET6というオプションを使うことで生成します。このように IPv4と IPv6

のソケットは違うものですが、IPv4-Mapped IPv6アドレスを利用することで、IPv6ソケット

を通じて IPv4の通信ができます。IPv4-Mapped IPv6アドレスを利用できるような機能の多

くでは、デフォルトでこの機能が有効になっています。この機能を無効にするには、IPV6_

V6ONLYというオプションを付けてsetsockoptを実行します。

IPv4での通信ができないように IPv6ソケットのみを使ってプログラムを書き、意図的に

IPv4ソケットを生成していない場合でも、IPv4-Mapped IPv6アドレスの機能を無効にしてい

ないと、気がつかずに IPv4で通信ができる状態になっていることがあるので注意が必要です。

たとえば、http://[::ffff:192.0.2.1]/といったURLを使って接続が可能なクライアン

トプログラムもあります。

逆に、IPv4だけで使っているつもりでも、IPv6対応のために IPv6ソケットでサーバが実装

されていれば、知らずに IPv6側でもサーバが稼働していることもあります。たとえば、IPv4

のみでApacheなどのWebサーバを起動していると思っていたら、実は IPv6側でもHTTPを受

け付けていたという場合があります。これを確かめるには、Webサーバを起動している機器

で、netstatかlsofかssを実行してみてください。グローバルな IPv6アドレスが設定され

ていない機器であっても、気がつかずにlocalhost(::1)やリンクローカルアドレスでHTTP

を受け付けているかもしれません。「IPv6は自分には関係がない」と思っていたとしても、気

†12 RFC 6556:F. Baker, “Testing Eyeball Happiness”, 2012年4月†13 David Schinazi, “[v6ops] Apple and IPv6 - Happy Eyeballs”, 2015年 7月, https://www.ietf.org/

mail-archive/web/v6ops/current/msg22455.html

Page 289: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

16.4 IPv6ソケットと IPv4-Mapped IPv6アドレス 275

づかずに IPv6で通信可能な状態になっていることもあるので、注意が必要です。

16.4.1 サンプルコード以下の例では、特定の IPアドレスを指定せずにAF_INET6(IPv6)のTCPソケット(SOCK_

STREAM)に対してbindを行っています。

#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>

intmain(){

int sock0;struct sockaddr_in client;socklen_t len;int sock;struct addrinfo hints, *res;int err;

memset(&hints, 0, sizeof(hints));hints.ai_family = AF_INET6;hints.ai_flags = AI_PASSIVE;hints.ai_socktype = SOCK_STREAM;err = getaddrinfo(NULL, "12345", &hints, &res);if (err != 0) {

printf("getaddrinfo : %s\n", gai_strerror(err));return 1;

}

/* ソケットの作成 */sock0 = socket(res->ai_family, res->ai_socktype, 0);if (sock0 < 0) {

perror("socket");return 1;

}

if (bind(sock0, res->ai_addr, res->ai_addrlen) != 0) {perror("bind");return 1;

}

freeaddrinfo(res); /* addrinfo構造体を解放 */

/* TCPクライアントからの接続要求を待てる状態にする */listen(sock0, 5);

/* TCPクライアントからの接続要求を受け付ける */len = sizeof(client);sock = accept(sock0, (struct sockaddr *)&client, &len);

/* 6文字送信 */write(sock, "HELLO\n", 6);

Page 290: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

276 第16章 プログラマにとっての IPv6対応

/* TCPセッションの終了 */close(sock);

/* listen するsocketの終了 */close(sock0);

return 0;}

IPV6_V6ONLYがデフォルトで無効になっていない環境でこのプログラムを実行すると、

IPv4のTCPで12345番ポートに接続しても、IPv6のTCPで12345番ポートに接続しても、通

信ができてしまいます。試しに、telnet ::1 12345およびtelnet 127.0.0.1 12345を

実行してみてください。

IPv4と IPv6の両方でTCPの受付が行われていることは、他の方法でも確認できます。たと

えば、このサーバプログラムを実行中に「netstat -na」をmacOSから実行すると、次のよ

うな結果が得られます。

Active Internet connections (including servers)Proto Recv-Q Send-Q Local Address Foreign Address (state)tcp46 0 0 *.12345 *.* LISTEN

Protoの部分がtcp46となっており、IPv4と IPv6の両方で接続を受け付けていることがわ

かります。AF_INETで作ったソケットであれば、この部分がtcp4となります。IPV6_V6ONLY

を有効にした状態のAF_INET6ソケットであればtcp6になります。

16.5 ポリシーテーブルの実装getaddrinfo()は、複数の IPアドレスのリストを結果として返す場合があります。

getaddrinfo()が返すリストの並びによって、ユーザがどのような IPアドレスで通信を行う

のかが変わってきます。getaddrinfo()が結果として返す IPアドレスの順番は、ネットワー

クを利用するアプリケーションにとって重要な要素です。

getaddrinfo()が結果として返す IPアドレスの順番に関しては、RFC 6724†14にて、デ

フォルト IPv6アドレス選択のルールが定められています。RFC 6724では、getaddrinfo()

が返す順番を開発者が制御できるように、ポリシーテーブルという仕組みを利用可能とするよ

うに推奨しています。gai.confは、RFC 6724で定義されているポリシーテーブルの実装の

ひとつです。glibcを利用するシステムでは、/etc/gai.confという設定ファイルを編集す

ることで、そのホスト内でgetaddrinfoが返す結果の優先度に影響を与えることが可能です。

RFC 6724ではポリシーテーブルの設定例がいくつか示されています。ポリシーテーブルに

ついて詳しくは14.1.3項を参照してください。

†14 RFC 6724:D. Thaler, R. Draves, A. Matsumoto, T. Chown, “Default Address Selection for Internet Protocol

Version 6 (IPv6)”, 2012年9月

Page 291: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第III部

DNSとIPv6

ここでは、IPv6と IPv4のデュアルスタック環境で鍵になるDNSの基本的な仕組みと、DNS

の IPv6対応で必須となるEDNS0拡張について説明します。IPv4と IPv6の名前解決を両方と

も同時に扱い、ユーザが IPv4と IPv6の違いを認識せずに使えるようにするため、DNSがどの

ように運用されているのかを見ていきます。

Page 292: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 293: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第17章

DNSの基礎とIPv6対応

名前から IPアドレスを調べ出すことを「名前解決」といいます。現在のインターネットで名

前解決のために採用されているのが ‌DNS ‌(Domain Name System)です。インターネットを

利用するための仕組みの大半が「まず最初に名前解決を行い、それによって得られた IPアド

レスを使って通信を行う」という動きをするため、DNSは IPv6にとっても非常に重要な要素

です。

17.1 DNSの仕組みDNSプロトコルの基本は、1987年に策定されたRFC 1034†1とRFC 1035†2です。最も基本

となる2つのRFCが策定されたのが1987年にまで遡ることもあり、DNSの細部の表現には不

明瞭な部分もあります。RFC 1034とRFC 1035の曖昧な部分などは、RFC 2181†3で明確化さ

れています。さらに、RFC 1034とRFC 1035に対するさまざまな変更が別のRFCとして策定

されています。また、RFC 6195†4には、DNSについての IANA的な検討事項がまとめられて

います。

根幹的なRFCの更新は珍しい?

IPv6に関連するRFCは、上書きによる廃止がたびたび起きています。たとえば、IPv6

の基本仕様を示しているRFCは、RFC 1883(1995年)→RFC 2460(1998年)→RFC

8200(2017年)のように上書き廃止による更新が行われています。その一方で、DNSに関しては、RFC 1034とRFC 1035を基本としつつ、その周辺が拡張されていくという傾向があります。TCPの基本的な仕様を示したRFC 793も、IPv4

の基本的な仕様を示したRFC 791も、両方とも1981年に発行されたものが今も標準として残っており、上書き廃止はされていません。

†1 RFC 1034:P.V. Mockapetris, “Domain names - concepts and facilities”, 1987年11月†2 RFC 1035:P.V. Mockapetris, “Domain names - implementation and specification”, 1987年11月†3 RFC 2181:R. Elz, R. Bush, “Clarifications to the DNS Specification”, 1997年7月†4 RFC 6195:D. Eastlake 3rd, “Domain Name System (DNS) IANA Considerations”, 2011年3月

Page 294: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

280 第17章 DNSの基礎と IPv6対応

そう考えると、あまり使われていないため仕様を変更したとしても影響が少ないという背景はあったのかもしれませんが、IPv6のように「上書き廃止されつつも基本仕様の内容が更新されていく」というのは、インターネットに関連する根本的な基本仕様としては、珍しい事例なのかもしれません。

17.2 DNSサーバへの再帰問い合わせと反復問い合わせDNSの特徴は、名前に対応する IPアドレスをインターネットのどこか1箇所ですべて把握し

ているわけではない点です。さまざまなDNSサーバが各自の範囲内の情報を持っていて、そ

の情報をたどっていくことで最終的な結果を得るというのがDNSの仕組みです。

DNSの仕組みの概観を知るために、ユーザの手もとにある機器で名前解決を行う場合を考

えてみましょう。ユーザの手もとにある機器で動作するアプリケーションが、名前解決に関連

する過去の記録(キャッシュといいます)を利用するように作られている場合、まずはキャッ

シュを確認します†5。もし過去にwww.example.comの IPアドレスを調べたことがあれば、そ

れがキャッシュとして記録に残っているので、そのときに利用した IPアドレスを使います。

アプリケーションが保持するキャッシュにない名前(過去に調べたことがない名前だった

り、過去に名前解決したことがあってもある程度の時間が経ってキャッシュがタイムアウト

したりしている場合)は、名前と IPアドレスの対応がたくさんキャッシュされている外部の

サーバにwww.example.comの名前解決を依頼します。そのような外部のサーバをキャッシュDNSサーバと呼びます。ここで注意してほしいのは、名前解決を依頼するキャッシュDNSサーバが、その名前に対

応する IPアドレスを知っているとは限らない点です。キャッシュDNSサーバでは、問い合わ

せを受けた名前に対応するキャッシュをいっさい持ってない場合、他のDNSサーバに問い合

わせを行います。DNSサーバが自分で管理している範囲内の情報で問い合わせに対する回答

ができない場合に、問い合わせに対する回答が完結するまで他のDNSサーバに代理で問い合

わせを行うことを、再帰問い合わせと呼びます。再帰問い合わせでは、問い合わせが行われるDNSメッセージのRD(Recursive Desired)フラグが1に設定されます。RDフラグが1に設

定されたDNSメッセージを受け取ったキャッシュDNSサーバは、自分が持っていない情報を

他のサーバに問い合わせます。ユーザがキャッシュDNSサーバに対して行う問い合わせは再

帰問い合わせであり、逆に言うと、ユーザに代わって他のDNSサーバに問い合わせを行うよう

に設定されているのがキャッシュDNSサーバです。

†5 キャッシュを利用しないアプリケーションもあります。

Page 295: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.2 DNSサーバへの再帰問い合わせと反復問い合わせ 281

名前 IPアドレス〇〇××▲▲

2001:db8::1

2001:db8::2

2001:db8::3

名前 IPアドレス〇〇

www.example.com

××▲▲■■

2001:db8::1

2001:db8::10

2001:db8::2

2001:db8::3

2001:db8::4

キャッシュキャッシュwww.example.comの

IPアドレスを問い合わせ

キャッシュにあれば返答

DNSキャッシュサーバ

DNS

▲ 図17.1 DNSクライアントとキャッシュDNSサーバ

再帰問い合わせの要求を受け取ったキャッシュDNSサーバは、他のDNSサーバに対して名

前解決を問い合わせますが、このときはRDフラグが0のDNSメッセージが利用されます。RD

フラグが0のDNSメッセージを受け取ったDNSサーバは、再帰問い合わせをせず、自分が知

る範囲の情報のみを回答します。これを反復問い合わせと呼びます。キャッシュDNSサーバは、いっさいのキャッシュを持たない場合、まず ‌DNSルートサーバと呼ばれるサーバにwww.example.comの IPアドレスを問い合わせます。DNSルートサーバ

については、IPアドレスが事前に配布されているので、この問い合わせは常に可能です。

名前 IPアドレス〇〇××▲▲

2001:db8::1

2001:db8::2

2001:db8::3

名前 IPアドレス〇〇

××▲▲■■

2001:db8::1

…… ……2001:db8::2

2001:db8::3

2001:db8::4

キャッシュキャッシュ

www.example.comのIPアドレスを問い合わせ

www.example.comのIPアドレスを問い合わせ

www.example.comのIPアドレスを問い合わせ

DNSキャッシュサーバ

ルートDNSサーバ

.comDNS権威サーバ

.example.comDNS権威サーバ

.comの権威のIPアドレス

.example.comの権威のIPアドレス

www.example.comのIPアドレスを問い合わせ

www.example.comのIPアドレス

反復問い合わせ

再帰問い合わせ

▲ 図17.2 DNSによる名前解決

キャッシュDNSサーバからDNSルートサーバにwww.example.comの名前解決の問い合わ

せをしても、この名前に対応する IPアドレスがすぐに判明するわけではありません。DNSルー

トサーバが返すのは、.comの範囲の名前解決に必要な情報をすべて持っている別のサーバの

名前です。その別のサーバは、いまの例であれば「.comという限られた範囲の名前解決につい

ての権威」なので、権威サーバと呼ばれます。キャッシュDNSサーバは、権威サーバを示す情

報の付加情報(グルー)として、権威サーバの IPアドレスが付いていれば、その IPアドレスに

対して改めて.comの権威サーバにwww.example.comの名前解決を依頼することになります。

Page 296: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

282 第17章 DNSの基礎と IPv6対応

NOTE

.comのDNS権威サーバであれば、.comで終わる名前を解決するための情報はすべて持っていますが、たとえば.orgで終わる名前についての情報や、.orgそのものについては、まったく知りません。ただし、これは.com以外についての情報を知っていてはいけないという意味ではなく、たとえば実際の運用でも.comのDNS権威サーバは.net

の情報も知っています。

キャッシュDNSサーバから、www.example.comの名前解決を依頼された.comの権威サー

バは、.example.comの権威サーバの名前を返します。このとき、返答メッセージ内に権威

サーバの名前に対するグルーとして権威サーバの IPアドレスが付属していれば、example.

comの権威サーバの IPアドレスが得られます。グルーが付属していない場合には、権威サーバ

の名前から別途問い合わせが必要です。

権威サーバの IPアドレスを得たキャッシュDNSサーバは、今度は.example.comの権威

サーバwww.example.comに対して名前解決の問い合わせを行います。.example.comの権

威サーバは、www.example.comの IPアドレスを知っているので、対応する IPアドレスを返し

ます。最終的にwww.example.comの IPアドレスを得たキャッシュDNSサーバは、もともと

名前解決を依頼していたクライアントに、その結果を通知します。

NOTE

www.example.comのように、各部がそろって IPアドレスと結びつく「名前」のことを ‌FQDN‌(Fully Qualified Domain Name、完全修飾ドメイン名)と呼ぶこともあります。

DNSの特徴を一言でまとめると、「各権威サーバは自分が把握すべき範囲を知っている」と

いえます。すべての情報をどこか1箇所で把握しているのではなく、各自が分担して自分の責

任範囲を定義し、知っている範囲内で次の権威サーバを教えるのです。インターネット全体と

いう巨大なシステムは、このような名前解決の分散管理のおかげで、滞りなく動き続けること

が可能となっています。

17.3 DNSメッセージフォーマットDNSプロトコルで名前解決の問い合わせと応答に使うメッセージは、行きも帰りも同じ

フォーマットをしています。DNSに関連する情報を調べるときに使うdigやnslookupといっ

たコマンドの実行結果の意味を知るためには、このフォーマットに関する知識が必要です。

DNSメッセージのフォーマットはRFC 1035で定義されており、図17.3に示すような5つの

セクションに分かれています。これらHeader、Question、Answer、Authority、Additional

の各セクションが、必要に応じて各種のメッセージに含まれます。

Page 297: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.3 DNSメッセージフォーマット 283

Headerセクション}

17.3.1項参照Questionセクション

}17.3.2項参照

Answerセクション

Authorityセクション

Additionalセクション

可変個の Resource Record(17.3.3項参照)で構成される

▲ 図17.3 DNSメッセージフォーマット

17.3.1 Headerセクション‌Headerセクションは、すべてのDNSメッセージに含まれます。DNSメッセージ全体の意味

を示す重要なフィールドであり、そのDNSメッセージにどんなセクションが含まれているか

や、そのDNSメッセージがクエリなのか応答なのか、といった情報を含みます。

Headerセクションは以下のようなフォーマットになっています。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

ID

QR Opcode AATCRDRA Z ADCD RCODE

QDCOUNT

ANCOUNT

NSCOUNT

ARCOUNT

▲ 図17.4 Headerセクション

r ID(16ビット)

このDNSメッセージの IDを示します。IDの値は問い合わせ側で生成され、応答側からの返

答では、問い合わせメッセージの IDフィールドの値が応答メッセージの IDフィールドにコ

ピーされます。rQR(1ビット)

このDNSメッセージがクエリ(0)であるか応答(1)であるかを示します。rOpcode(4ビット)

クエリの種類を示します。RFC 1035では、クエリの種類として、QUERY、IQUERY、STATUS

の3種類が定義されています。ただし、この3種類のうち、IQUERYはRFC 3425†6で廃止さ

れました。

RFC 1035で定義された 3種類以外には、RFC 1996†7で定義されたNOTIFYと、RFC

2136†8で定義されたUPDATEがあります。

†6 RFC 3425:D. Lawrence, “Obsoleting IQUERY”, 2002年11月†7 RFC 1996:P. Vixie, “A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)”, 1996年8月†8 RFC 2136:P. Vixie, S. Thomson, Y. Rekhter, J. Bound, “Dynamic Updates in the Domain Name System

Page 298: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

284 第17章 DNSの基礎と IPv6対応

rAA(1ビット)

Authoritative Answerを意味し、DNS権威サーバからの応答であることを示すフラグです。rTC(1ビット)

TrunCationを意味するフラグです。転送可能なサイズよりもメッセージが大きくなるため

にメッセージが切断されていることを示します。詳しくは、17.6節を参照してください。rRD(1ビット)

Recursion Desiredを意味するフラグです。サーバは、受け取った問い合わせに対する権威

ある回答を持っていない場合、その問い合わせにRDフラグがセットされていれば、再帰的

に他のDNSサーバに問い合わせできます。RDフラグが1の場合は再帰問い合わせ、0の場

合は非再帰問い合わせになります。rRA(1ビット)

Recursion Availableを意味するフラグです。サーバが再帰検索をサポートしているかどう

かを示します。rZ(1ビット)

予約済みのビットです。ゼロにセットされます。RFC 1035では3ビットですが、RFC 4035

でADとCDビットが定義されています。rAD(1ビット)

Authentic Dataを意味するフラグです。DNSSECで使われます。RFC 4035で定義されてい

ます。rCD(1ビット)

Checking Disabledを意味するフラグです。DNSSECで使われます。RFC 4035で定義され

ています。rRCODE(4ビット)

Response Codeを意味し、応答の状態を示します。状態として設定可能な値としては、No

error(0)、Format error(1)、Server failure(2)、Name Error(3)、Not Implemented

(4)、Refused(5)などがあります。rQDCOUNT(16ビット)

Questionセクションに含まれるエントリ数を示します。RFC 1035の仕様上は複数の問い合

わせが同時にできるので、このビットが1より大きい場合もありえるはずですが、実装上は

1以外の数値での問い合わせは正常に動作しないので注意が必要です。rANCOUNT(16ビット)

Answerセクションに含まれるResource Recordの数を示します。rNSCOUNT(16ビット)

Authorityセクションに含まれるName server resource recordの数を示します。

(DNS UPDATE)”, 1997年4月

Page 299: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.3 DNSメッセージフォーマット 285

rARCOUNT(16ビット)

Additionalセクションに含まれるRecource Recordの数を示します。

17.3.2 Questionセクション‌Questionセクションには、DNSサーバへの問い合わせ内容を含めます。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

QNAMEhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

QTYPE

QCLASS

▲ 図17.5 Questionセクション

rQNAME

問い合わせるドメイン名を指定するフィールドです。ドメイン名は、そのままの文字列では

なく、サブドメインを表すラベル(label)の列として表現します。たとえば、問い合わせ

るドメイン名がexample.comであれば、exampleを示すラベルと、comを示すラベルと、

ルートを示すラベルとを順番にQNAMEに指定することになります。

各ラベルの先頭には、そのラベルの長さも1オクテットで指定します。つまり、exampleを

示すラベルには6を、comを示すラベルには3を指定します。ルートを示すラベルは長さゼ

ロとみなし、0を指定します。したがって、ラベル列全体は、このルートを示すラベルの長

さを意味する0で終端されることになります。

例として、test.example.comを問い合わせる場合にQNAMEに指定するラベル列は次の

ようになります。t e s t e x a m p l e c o m

0x04 0x74 0x65 0x73 0x74 0x07 0x65 0x78 0x61 0x6d 0x70 0x6c 0x65 0x03 0x63 0x6f 0x6d 0x00

NOTE

このラベルの形式はRFC 1035のSection 3.1で示されており、DNSだけでなく、名前を利用するさまざまなプロトコルでも活用されています。

なお、QNAME全体の長さは奇数オクテットになる場合もあります。rQTYPE(16ビット)

問い合わせの種類を示すフィールドです。IPv4アドレスを要求するA(1)や、IPv6アドレ

スを要求するAAAA(28)、DNS権威サーバに対する情報要求を意味するNS(2)などが代表

的な値です。

Page 300: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

286 第17章 DNSの基礎と IPv6対応

QTYPEフィールドでは、Resource RecordのTYPEフィールド(287ページ参照)と同じ数

値が使われます。ただし、Resource RecordのTYPEフィールドに指定できる値は、QTYPE

フィールドに指定できる値のサブセットになっています。Resource RecordのTYPEに存

在しないQTYPEとしては、ゾーン全体をリクエストする AXFR(252)、関連するすべて

(ANY)のレコードを要求する*(255)などがあります(ANYについては301ページも参照

してください)。rQCLASS(16ビット)

RFC 1035では、後述するResource Recordについていくつかのクラス(class)を規定して

おり、それを指定するフィールドです。本書執筆時点では、インターネットを意味するIN

(1)という1種類のクラスのみが利用されています。IPv4でも IPv6でも、両方ともこのIN

を利用しています。

17.3.3 Resource Record問い合わせに対する回答の内容は、Answer、Authority、Additionalの3種類のセクション

に含めて返信されます。

r ‌Answerセクションは、Questionセクションに記述された問い合わせに対する回答を示

します。r ‌Authorityセクションには、ドメイン名の委任先のDNS権威サーバを示すNSレコードな

どが含まれます。r ‌Additionalセクションには、付随情報として、Authorityセクションに記述されたDNS権

威サーバの IPv4アドレス(Aレコード)や IPv6アドレス(AAAAレコード)などが含まれ

ます。

Answer、Authority、Additionalは、空になる場合もあります。

これら3種類のセクションは、いずれも、可変個の ‌Resource Record ‌(‌RR‌)で構成されます。Resource Recordは、DNSでやり取りするドメインの性質を表すもので、セクションにお

いては図17.6のようなフォーマットによって示されます。

Page 301: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.3 DNSメッセージフォーマット 287

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

NAMEhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

TYPE

CLASS

TTL

RDLENGTH

RDATAhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

▲ 図17.6 Resource Record

rNAME

Resource Recordに関連するドメイン名を示すフィールドです。rTYPE

Resource Recordの種類を示します。QuestionセクションのQTYPEの説明で触れたAや

AAAA、NSなどが代表的なResource Recordです。rCLASS

Resource Recordのクラスを示します。QCLASSと同様、通常はインターネットを示すクラ

スのIN(1)が利用されます。rTTL(32ビット)

このResource Recordをキャッシュとして保持してもよい秒数を示しています。rRDLENGTH

後述するRDATAの長さを示します。rRDATA

リソースを表現する可変長のフィールドです。TYPEフィールドとCLASSフィールドの組み

合わせによってフォーマットが異なります。たとえば、TYPEフィールドがAAAAでCLASS

フィールドがINの場合は、128ビットの IPv6アドレスが格納されます。TYPEフィールド

がAで、CLASSフィールドがINの場合は、32ビットの IPv4アドレスが格納されます。

■ Resource RecordのTYPEフィールドに指定できる値RFC 1035では、Resource RecordのTYPEフィールドの値はQuestionセクションのQTYPE

フィールドの値のサブセットであると書かれています。実際、Resource RecordのTYPEフィー

Page 302: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

288 第17章 DNSの基礎と IPv6対応

ルドでは、QTYPEフィールドと同じ値が使われます。したがって、IPv4アドレスの名前解決

であればA(1)、権威のあるネームサーバ情報であればNS(2)を指定します。

本書の主題である IPv6アドレスの名前解決の場合は、QTYPEとしてAAAA(28)を指定しま

す。AAAAレコードはRFC 3596†9で定義されています。STUN(第26章参照)や ISATAP(20.3

節参照)で利用されるQTYPEであるSRV(33)もあります。17.5節で解説する逆引きではPTR

(12)を指定します。

TYPEフィールドに指定できる値の詳細は、IANAのリスト†10およびRFC 6195を参照して

ください。

■ IPv6に関連するResource Recordの拡張DNSが開発された当初は、IPv4のみが前提であったため、DNSで IPv6アドレスを表現する

手段がありませんでした。そのため、IPv6をDNSで表現するために新しいResource Record

のTYPEを追加するという形で、既存のDNS仕様を拡張して IPv6を表現できるようにするRFC

1886が1995年に発行されました。その後、RFC 1886を上書き廃止するRFC 3596が2003年

に発行されたので、現在ではDNSに対する IPv6拡張はRFC 3596で定義されています。

RFC 3596では、IPv6アドレスを示すAAAAレコードと、IPv6の逆引きアドレスを示すIP6.

ARPAドメインが定義されています†11。

IPv6アドレスを示すAAAAレコードのデータ部分は、128ビットの IPv6アドレスがネット

ワークバイトオーダーで表現されます。

IPv6の逆引きのアドレスは、下位ビットから先に4ビット区切りで並べた16進数で表現さ

れます。たとえば、2001:db8:1:2:3:4:5:6という IPv6逆引きアドレスは、以下のようにな

ります。

6.0.0.0.5.0.0.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.IP6.ARPA

NSやMXなど、AdditionalセクションでAレコードと関連づけられるResource Recordにつ

いて、従来のAレコードだけではなく、AAAAレコードとも関連づけられるようにする必要が

あります。そういったDNSの機能に必要な変更についても、IPv6対応としてRFC 3596に含

まれています。

17.4 IPv4とIPv6アドレスの問い合わせ例フォーマットだけを見ていてもわかりにくいので、IPv4アドレスと IPv6アドレスの名前

解決を行ったときのDNSメッセージの例を見てみましょう。ここでは、ユーザとキャッシュ

DNSサーバ間のやり取りの例を紹介します。ユーザがキャッシュDNSサーバに対してwww.

†9 RFC 3596:S. Thomson, C. Huitema, V. Ksinant, M. Souissi, “DNS Extensions to Support IP Version 6”,

2003年10月†10 Resource Record (RR) TYPEs :

https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#

dns-parameters-4†11 IPv4の逆引きにはin-addr.arpaが利用されています。

Page 303: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.4 IPv4と IPv6アドレスの問い合わせ例 289

example.comの名前解決を行う場合を考えます。

ユーザがキャッシュDNSサーバに対し、www.example.comのAレコードとAAAAレコード

の問い合わせを別々のセッションとして送信したとします。キャッシュDNSサーバは、2つの

異なる問い合わせに対して、それぞれ応答します。

Questionセクション

HeaderセクションDNS

キャッシュサーバ

ルートDNSサーバ

QNAMEQCLASSTYPE A

INwww.example.com

ID 55555

フラグ RDが1Opcode QUERY

Questionセクション

Headerセクション

QNAMEQCLASSTYPE AAAA

INwww.example.com

ID 23456

フラグ RDが1Opcode QUERY

Questionセクション

Answerセクション 1つ2つ4つ

AuthorityセクションAdditionalセクション

Headerセクション

QNAMEQCLASSTYPE A

INwww.example.com

ID 55555

フラグ QR、RD、RAが1ECODE No error

Opcode QUERY

Questionセクション

Answerセクション 1つ2つ4つ

AuthorityセクションAdditionalセクション

Headerセクション

QNAMEQCLASSTYPE AAAA

INwww.example.com

ID 23456

フラグ QR、RD、RAが1ECODE No error

Opcode QUERY

キャッシュがなければ再帰検索

▲ 図17.7 www.example.comの名前解決例

図17.7の例では、IDが55555のDNSメッセージでwww.example.comのAレコードを問い

合わせ、IDが23456のDNSメッセージでwww.example.comのAAAAレコードを問い合わせ

ています。問い合わせを受け取ったキャッシュDNSサーバにキャッシュがあれば、そのまま結

果を返しますが、キャッシュがなければキャッシュDNSサーバによって再帰検索が行われま

す。再帰検索が行われるのは、ユーザからのDNSメッセージのHeaderセクションでRDビッ

トが1になっているためです。

キャッシュDNSサーバからユーザへの返答を見ると、HeaderセクションのRCODEが0で

エラーなしとあり、問い合わせが成功していることを示しています。次に、Headerセクショ

ンのフラグを見ると、QRおよびRAビットが1となっています。QRビットが1となっている

のは、そのDNSメッセージが問い合わせに対する回答であるためです。RAビットが1となっ

Page 304: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

290 第17章 DNSの基礎と IPv6対応

ているのは、キャッシュDNSサーバが再帰検索をサポートしていることを示しています。

返答パケットのAnswerセクションは1つですが、そこにはwww.example.comの IPv4アド

レスが含まれています。Authorityセクションは2つありますが、それらにはwww.example.

comの DNS権威サーバの FQDNである a.iana-servers.netと b.iana-servers.net

が示されています。Additionalセクションは 4つありますが、a.iana-servers.netの

IPv4アドレスを示すAレコードとa.iana-servers.netの IPv6を示すAAAAレコード、b.

iana-servers.netの IPv4アドレスを示すAレコードとb.iana-servers.netの IPv6アド

レスを示すAAAAレコードの4つとなっています。

AAAAレコードを問い合わせた IDが23456のDNSメッセージも、基本的にAレコードと同じ

ような結果となっています。

17.4.1 Aのdig結果キャッシュDNSサーバとのDNSメッセージの内容をdigコマンドの結果でも確かめてみま

しょう。dig a www.example.com.の実行結果は、たとえば次のようになります。

; <<>> DiG 9.8.3-P2 <<>> a www.example.com.;; global options: printcmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63333;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:;www.example.com. IN A

;; ANSWER SECTION:www.example.com. 51298 IN A 192.0.43.10

;; AUTHORITY SECTION:example.com. 8262 IN NS b.iana-servers.net.example.com. 8262 IN NS a.iana-servers.net.

;; ADDITIONAL SECTION:a.iana-servers.net. 1800 IN A 199.43.132.53a.iana-servers.net. 1800 IN AAAA 2001:500:8c::53b.iana-servers.net. 1800 IN A 199.43.133.53b.iana-servers.net. 1800 IN AAAA 2001:500:8d::53

;; Query time: 17 msec;; SERVER: 192.168.0.1#53(192.168.0.1);; WHEN: Fri Sep 14 17:12:11 2012;; MSG SIZE rcvd: 185

17.4.2 AAAAのdig結果dig aaaa www.example.com.の実行結果は、たとえば次のようになります。

; <<>> DiG 9.8.3-P2 <<>> aaaa www.example.com.;; global options: printcmd;; Got answer:

Page 305: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.5 DNSの逆引き 291

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55140;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:;www.example.com. IN AAAA

;; ANSWER SECTION:www.example.com. 172800 IN AAAA 2001:500:88:200::10

;; AUTHORITY SECTION:example.com. 8250 IN NS b.iana-servers.net.example.com. 8250 IN NS a.iana-servers.net.

;; ADDITIONAL SECTION:a.iana-servers.net. 1788 IN A 199.43.132.53a.iana-servers.net. 1788 IN AAAA 2001:500:8c::53b.iana-servers.net. 1788 IN A 199.43.133.53b.iana-servers.net. 1788 IN AAAA 2001:500:8d::53

;; Query time: 17 msec;; SERVER: 192.168.0.1#53(192.168.0.1);; WHEN: Fri Sep 14 17:12:11 2012;; MSG SIZE rcvd: 197

17.5 DNSの逆引きここまでの説明では、DNSについて、名前から IPアドレスを解決する手段として説明してき

ました。DNSの実装では、これとは逆、つまり IPアドレスから名前を検索する機能も用意され

ています。これをDNSの逆引きといいます。DNSの逆引きの話題では、名前から IPアドレス

を解決することを「正引き」と表現することがあります。

IPv4を利用したこれまでのインターネットでは、さまざまな場面でDNSの逆引きが利用さ

れることがあります。たとえばWebサーバでは、接続相手の情報をアクセスログに書き込む

際、IPアドレスではなく逆引き後の名前を記述するように設定できます。sshdやinetdのよ

くある初期設定でも、接続受付時に逆引きが行われます。逆引き設定が存在しないと、メール

サーバがメールを受け取れない場合もあります。逆引き設定が存在しないと接続処理に時間が

かかる可能性もあります。

注意が必要なのは、名前から IPアドレスの名前解決である正引きの結果と、逆引きの結果が

一致するとは限らない点です。逆引きは、あくまでリソースレコードのひとつであり、正引き

との整合性が必ず取れるものとは限らないのです。そのため、逆引きは、参考にする情報のひ

とつという程度であり、逆引きで設定されている内容そのものが何かを保証するものでもない

のです。

17.5.1 逆引きの仕組み逆引きは、IPアドレスを逆に並べた特殊な名前を利用して行われます。IPv4では.in-addr.

arpa.が利用され、IPv6では.ip6.arpa.が利用されます。

たとえば、192.0.2.3という IPv4アドレスに対する逆引きを行うときには、3.2.0.192.

in-addr.arpa.という名前を利用して逆引きを行います。2001:db8::1:2:3456という

Page 306: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

292 第17章 DNSの基礎と IPv6対応

IPv6アドレスの場合には、6.5.4.3.2.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.

b.d.0.1.0.0.2.ip6.arpa.という名前を利用して逆引きが行われます。

逆引きに利用されるQTYPEおよびリソースレコードのTYPEはPTRです。PTRレコードは、

逆引きに対して対応する名前を返します。

IPv4と IPv6における逆引きのためのトップレベルドメインの運用に関しては、RFC 5855†12

(BCP 155)で説明されています。

RFC 5855では、.in-addr.arpa.のためのNSは次のような名前になるとあります。

A.IN-ADDR-SERVERS.ARPAB.IN-ADDR-SERVERS.ARPAC.IN-ADDR-SERVERS.ARPAD.IN-ADDR-SERVERS.ARPAE.IN-ADDR-SERVERS.ARPAF.IN-ADDR-SERVERS.ARPA...

RFC 5855では上記のようにAからFまでの名前が例として示されているものの、6個に限定

しないために最後が「...」になっています。とはいえ、本書執筆現在、dig ns in-addr.

arpa.の結果はaから fになっています。

同様に、RFC 5855では IPv6用の.ip6.arpa.のためのNSは次のような名前になるとあり

ます。やはり、本書執筆現在、dig ns ip6.arpa.の結果はaから fになっています。

A.IP6-SERVERS.ARPAB.IP6-SERVERS.ARPAC.IP6-SERVERS.ARPAD.IP6-SERVERS.ARPAE.IP6-SERVERS.ARPAF.IP6-SERVERS.ARPA...

ARPAトップレベルドメインは、作られた当初は、インターネットの前身であるARPANET

に関連するものでしたが、現在は「Address and Routing Parameters Area」の略であるとさ

れています。

IPv6の逆引きで利用される名前は、かつてはip6.intでしたが、いまはip6.intは廃止さ

れています。ip6.intに関しては17.8.1項を参照してください。

17.5.2 digによる IPv4アドレス逆引きの例逆引きについてもdigコマンドによる例を見ていきましょう。まずは、IPv4アドレス逆引き

の例を紹介します。

digコマンドでは、引数-xを利用することで逆引きができます。IPv4アドレスに対する逆

引きdig -x 198.41.0.4の実行結果は、たとえば次のようになります。

†12 RFC 5855:J. Abley, T. Manderson, “Nameservers for IPv4 and IPv6 Reverse Zones”, 2010年5月

Page 307: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.5 DNSの逆引き 293

; <<>> DiG 9.8.3-P2 <<>> -x 198.41.0.4;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37764;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:;4.0.41.198.in-addr.arpa. IN PTR

;; ANSWER SECTION:4.0.41.198.in-addr.arpa. 900 IN PTR a.root-servers.net.

;; Query time: 21 msec;; SERVER: 192.168.0.1#53(192.168.0.1);; WHEN: Thu Sep 14 17:16:57 2017;; MSG SIZE rcvd: 115

この例では、Aルートサーバの IPv4アドレスの逆引きを行っています。Questionセクショ

ンは、198.41.0.4という IPv4アドレスから計算された in-addr.arpaの名前と、CLASS

フィールドが IN、QTYPEフィールドがPTRです。

Questionに対するAnswerセクションには、Questionセクションに示された IPv4アドレス

に対応する名前がa-root-servers.net.であるという回答が含まれています。

17.5.3 digによる IPv6アドレス逆引きの例次は、IPv6アドレスの逆引きの例です。

digコマンドでは、引数-xを利用することで逆引きができます。IPv6アドレスに対する逆

引きdig -x 2001:503:ba3e::2:30の実行結果は、たとえば次のようになります。

; <<>> DiG 9.8.3-P2 <<>> -x 2001:503:ba3e::2:30;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13211;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:;0.3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.3.a.b.3.0.5.0.1.0.0.2.ip6.arpa. IN PTR

;; ANSWER SECTION:0.3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.3.a.b.3.0.5.0.1.0.0.2.ip6.arpa.

86400 IN PTR a.root-servers.net.↪→

;; Query time: 19 msec;; SERVER: 192.168.0.1#53(192.168.0.1);; WHEN: Thu Sep 14 17:21:34 2017;; MSG SIZE rcvd: 161

この例では、Aルートサーバの IPv6アドレスの逆引きを行っています。Questionセクション

は、2001:503:ba3e::2:30という IPv6アドレスから計算されたip6.arpaの名前と、CLASS

が IN、QTYPEがPTRです。

Page 308: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

294 第17章 DNSの基礎と IPv6対応

Questionに対するAnswerセクションには、Questionセクションに示された IPv6アドレス

に対応する名前がa-root-servers.net.であるという回答が含まれています。

17.5.4 IPv6逆引き問題さまざまなサービスに影響を与えるDNSの逆引きですが、IPv6ではすべてのアドレスに対

して逆引き設定を行うのが一般には困難であり、結果として「逆引き設定を行えない」という

状況が発生します。

IPv4では、ユーザが利用する IPアドレスが限られているので、利用される可能性があるすべ

ての IPv4アドレスに対して逆引きの設定ができます。しかし IPv6では、ユーザがどのような

IPv6アドレスを利用するのか、基本的には事前にわかりません。/64のネットワークアドレス

と、EUI-64ベースのハードウェアアドレスを使って、各端末で IPv6アドレスが生成されるか

らです。各ユーザが64ビット空間を利用して各自の IPv6アドレスを決定するので、可能性が

あるすべての IPv6アドレスを記述することによる逆引き設定が困難というわけです。

もちろん、そのような設定方法が可能な場合もあります。たとえば、企業内での IPv6利用

で、システム運用部門が許可を出したマシン以外はネットワークにつながせないという運用も

可能です。その場合はハードウェアに関する情報を事前に調査可能なので、必要な部分は概ね

逆引きが動くようにできます。それ以外の場合、たとえば ISPが提供する個人向け IPv6サービ

スなどでは、ISPが/64のアドレス空間すべてを逆引き設定できるわけではないと考えられる

ので、そもそも逆引きができない状況が多いでしょう。したがって逆引き設定が存在せず、そ

れが原因で利用できないサービスが発生する可能性があります。現在のインターネットでは、

メールサーバのように、逆引き情報を運用で要求するサービスも少なくありません。逆引きが

困難な可能性があるという IPv6の状況では、これまでの IPv4の世界とは異なるサービス運用

が必要になる場合もあります。

IPv6逆引きに関しては、これからさまざまな提案が登場すると考えられますが、いまのとこ

ろデファクトな方式は定まっていないので、動向を見守る必要があると思われます。

17.6 DNSメッセージの512オクテット問題17.3節で説明したDNSメッセージは、通常はUDPで送信されます。このときのDNSメッ

セージの長さは、DNSの実装について規定したRFC 1035†13にて、512オクテットまでに制限

されています。

時代の変化とともに、DNSメッセージでさまざまな情報を提供するような提案が登場し、

DNSメッセージの長さが512オクテットを超えるような状況も発生するようになりました。

もちろん、DNSメッセージのHeaderセクションにTCビットが用意されていることからわか

るように、512オクテットを超えるDNSメッセージがまったく扱えないわけではありません。

しかし、インターネット上には512オクテット以上のDNSデータを処理できない機器もあり、

問題を発生させることもあります。

本書執筆現在、512オクテットを超えるDNSメッセージを送る方法としては、下記の2種類

†13 RFC 1035:P.V. Mockapetris, “Domain names - implementation and specification”, 1987年11月

Page 309: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.6 DNSメッセージの512オクテット問題 295

があります。

r EDNS0(Extension Mechanisms for DNS)r TCPフォールバック

IPv6も、IPアドレス長が IPv4より長いことから、DNSメッセージが512オクテットを超える

主な要因となっています。そのため、RFC 3226†14では、DNSを IPv6対応するためにEDNS0

が必須であると記述されています。

17.6.1 EDNS0‌EDNS0‌の「E」は、Extension(拡張)を意味します。最後の「0」はプロトコルバージョン

を表す番号です。

EDNS0は、1999年に、RFC 2671†15として最初に標準化されました。このRFC 2671は、

RFC 2673†16とともに、2013年4月にRFC 6891†17によって廃止されています。

EDNS0が定義している拡張機能は以下の3つです。

r RCODEの拡張r ラベル型の拡張r 最大512オクテットとなっていたDNSメッセージの長さを65535オクテットまで拡張

IPv6が関連するのは、上記のうち3つめの、メッセージサイズの拡張です。本書ではそれを

中心に解説します。

■ EDNS0オプションを指定した場合としない場合の違いの例EDNS0の動作を説明する前に、EDNS0が有効になった場合となっていない場合を実際に

digコマンドで実験して確かめてみましょう。まず、EDNS0オプションを指定しない問い合わ

せの例を下記に示します。この例ではdigコマンドを利用してMルートサーバに対して問い

合わせを行っています。

% dig @m.root-servers.net . NS +norec

; <<>> DiG 9.8.3-P1 <<>> @m.root-servers.net . NS +norec; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62334;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 15

;; QUESTION SECTION:;. IN NS

†14 RFC 3226:O. Gudmundsson, “DNSSEC and IPv6 A6 aware server/resolver message size requirements”,

2001年12月†15 RFC 2671:P. Vixie, “Extension Mechanisms for DNS (EDNS0)”, 1999年8月†16 RFC 2673:M. Crawford, “Binary Labels in the Domain Name System”, 1999年8月†17 RFC 6891:J. Damas, M. Graff, P. Vixie, “Extension Mechanisms for DNS (EDNS(0))”, 2013年4月

Page 310: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

296 第17章 DNSの基礎と IPv6対応

;; ANSWER SECTION:. 518400 IN NS b.root-servers.net.. 518400 IN NS k.root-servers.net.. 518400 IN NS i.root-servers.net.. 518400 IN NS g.root-servers.net.. 518400 IN NS l.root-servers.net.. 518400 IN NS c.root-servers.net.. 518400 IN NS a.root-servers.net.. 518400 IN NS d.root-servers.net.. 518400 IN NS e.root-servers.net.. 518400 IN NS j.root-servers.net.. 518400 IN NS m.root-servers.net.. 518400 IN NS f.root-servers.net.. 518400 IN NS h.root-servers.net.

;; ADDITIONAL SECTION:a.root-servers.net. 3600000 IN A 198.41.0.4b.root-servers.net. 3600000 IN A 199.9.14.201c.root-servers.net. 3600000 IN A 192.33.4.12d.root-servers.net. 3600000 IN A 199.7.91.13e.root-servers.net. 3600000 IN A 192.203.230.10f.root-servers.net. 3600000 IN A 192.5.5.241g.root-servers.net. 3600000 IN A 192.112.36.4h.root-servers.net. 3600000 IN A 198.97.190.53i.root-servers.net. 3600000 IN A 192.36.148.17j.root-servers.net. 3600000 IN A 192.58.128.30k.root-servers.net. 3600000 IN A 193.0.14.129l.root-servers.net. 3600000 IN A 199.7.83.42m.root-servers.net. 3600000 IN A 202.12.27.33a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30b.root-servers.net. 3600000 IN AAAA 2001:500:200::b

;; Query time: 37 msec;; SERVER: 202.12.27.33#53(202.12.27.33);; WHEN: Fri Feb 23 21:31:55 2018;; MSG SIZE rcvd: 492

次は、EDNS0オプションを設定した問い合わせの例です。digコマンドで+bufsize=1024

というオプションを指定することにより、1024オクテットまで受け取れるということをM

ルートサーバに伝えています。

% dig @m.root-servers.net . NS +norec +bufsize=1024

; <<>> DiG 9.8.3-P1 <<>> @m.root-servers.net . NS +norec +bufsize=1024; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36373;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27

;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;. IN NS

;; ANSWER SECTION:. 518400 IN NS k.root-servers.net.

Page 311: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.6 DNSメッセージの512オクテット問題 297

. 518400 IN NS l.root-servers.net.

. 518400 IN NS e.root-servers.net.

. 518400 IN NS g.root-servers.net.

. 518400 IN NS a.root-servers.net.

. 518400 IN NS h.root-servers.net.

. 518400 IN NS i.root-servers.net.

. 518400 IN NS f.root-servers.net.

. 518400 IN NS c.root-servers.net.

. 518400 IN NS d.root-servers.net.

. 518400 IN NS j.root-servers.net.

. 518400 IN NS b.root-servers.net.

. 518400 IN NS m.root-servers.net.

;; ADDITIONAL SECTION:a.root-servers.net. 3600000 IN A 198.41.0.4b.root-servers.net. 3600000 IN A 199.9.14.201c.root-servers.net. 3600000 IN A 192.33.4.12d.root-servers.net. 3600000 IN A 199.7.91.13e.root-servers.net. 3600000 IN A 192.203.230.10f.root-servers.net. 3600000 IN A 192.5.5.241g.root-servers.net. 3600000 IN A 192.112.36.4h.root-servers.net. 3600000 IN A 198.97.190.53i.root-servers.net. 3600000 IN A 192.36.148.17j.root-servers.net. 3600000 IN A 192.58.128.30k.root-servers.net. 3600000 IN A 193.0.14.129l.root-servers.net. 3600000 IN A 199.7.83.42m.root-servers.net. 3600000 IN A 202.12.27.33a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30b.root-servers.net. 3600000 IN AAAA 2001:500:200::bc.root-servers.net. 3600000 IN AAAA 2001:500:2::cd.root-servers.net. 3600000 IN AAAA 2001:500:2d::de.root-servers.net. 3600000 IN AAAA 2001:500:a8::ef.root-servers.net. 3600000 IN AAAA 2001:500:2f::fg.root-servers.net. 3600000 IN AAAA 2001:500:12::d0dh.root-servers.net. 3600000 IN AAAA 2001:500:1::53i.root-servers.net. 3600000 IN AAAA 2001:7fe::53j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30k.root-servers.net. 3600000 IN AAAA 2001:7fd::1l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42m.root-servers.net. 3600000 IN AAAA 2001:dc3::35

;; Query time: 13 msec;; SERVER: 202.12.27.33#53(202.12.27.33);; WHEN: Fri Feb 23 21:34:55 2018;; MSG SIZE rcvd: 811

EDNS0オプションを指定しない例ではADDITIONALの部分が15でしたが、指定した場合は

27に増えています。それに伴い、512よりも小さい値であった492が699になり、512よりも

大きな値になっていることがわかります。

なお、この27というの数字は、EDNS0の疑似レコードを含んでいます。digの結果として

表示されているAdditionalセクションの項目数が26である一方で、Additional数が27となっ

ているのは、そのためです。

Page 312: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

298 第17章 DNSの基礎と IPv6対応

■ EDNS0の疑似レコードEDNS0では、疑似レコード(Pseudo Resource Record)を利用することで、問い合わせ先

が EDNS0に対応しているかどうかを確かめてから問い合わせを行います。疑似レコードの

フォーマットを図17.8に示します。図17.6に示したResource Recordのフォーマットを踏襲

していますが、Resource Recordとは根本的に用途が異なるので注意してください。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

NAME(.) TYPE(41)

TYPE(つづき) CLASS(送信者のUDPペイロードの長さ)

CLASS(つづき)

TTL(拡張RCODE、EDNSバージョン、フラグ)

RDLENGTH

RDLENGTH(つづき)

RDATA…

▲ 図17.8 EDNS0の疑似レコード

EDNS0では、NAMEフィールドに、ルートを示す「.」が入ります。TYPEフィールドとして

は疑似レコードを示すOPT(41)が利用されます。CLASSフィールド(16ビット)には送信者

のUDPペイロードサイズが入ります。TTLフィールドは、拡張RCODEおよびEDNSバージョ

ンとフラグを示します。RDLENGTHフィールドは、RDATAのオクテット数です。RDATAは

可変長の付属データになります。

■ EDNS0の最大メッセージ長EDNS0で指定できるメッセージ長の最大値は、16ビットで表現できる値として最大の

65535です。ただし、IPv4とUDPを利用する場合には、実際に利用可能な最大のメッセージ

長は65507(65535− 20− 8 = 65507)になります。これは、IPv4ヘッダとUDPヘッダにお

けるデータ長フィールドの値には各ヘッダ自身の長さが含まれるからです。

IPv6 Jumbogram(85ページのコラム参照)を利用すれば、1つの IPv6 UDPパケットで、理

論上は約4Gオクテットのデータを送信可能になります。したがって、EDNS0を利用すれば、

1つの IPv6 UDPパケットで65535オクテットのデータを送信可能になります。

17.6.2 TCPフォールバックDNSサーバは、クライアントからの要求に対する応答が512オクテットを超える場合、メッ

セージにTCフラグを設定して回答を送信します。クライアントは、TCフラグが設定された

応答を受け取ると、改めてTCPによる問い合わせを試みます。これをDNSメッセージのTCP

フォールバックと呼んでいます。DNSへの問い合わせにはUDPを使うという印象があるかも

しれませんが、メッセージが512オクテットより長い場合にはTCPが利用されることがある

のです。

Page 313: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.6 DNSメッセージの512オクテット問題 299

DNSメッセージのTCPフォールバックはEDNS0よりも昔から存在しています。1989年に

発行されたRFC 1123†18では、DNSのTCPサポートを「SHOULD」として記述していました

(RFC 1123、6.1.3.2項)。その後、2010年に発行されたRFC 5996†19では、DNSのTCPサポー

トが必須となりました。

EDNS0とTCPフォールバックの大きな違いは、EDNS0では指定できるメッセージ長の最

大値が65535に制限される点です。65535よりも多いデータを送信する必要がある場合には

TCPを利用することになります。

DNSメッセージがTCPによってやり取りされる可能性に気づかず、ファイアウォールなど

でUDPの53番ポートのみを許可してTCPの53番ポートを破棄する設定にしてしまうと、TCP

フォールバックが機能しません。DNSで IPv6に関する情報を扱う必要があって応答メッセー

ジが512オクテットを大きく超えてしまい、EDNS0ではなくTCPフォールバックを行うとい

う状況になることもありえます。その場合、TCPの53番ポートがブロックされていると IPv6

アドレスの名前解決ができなくなってしまうことになるので注意が必要です。

■ TCPフォールバック例EDNS0オプションをクライアント側から指定せずにTCPフォールバックした例を以下に示

します。この例では、Mルートサーバに対してANYを要求することで、Mルートサーバが保

持しているすべてのリソースレコードを要求しています。

% dig @m.root-servers.net . ANY +norec;; Truncated, retrying in TCP mode.

; <<>> DiG 9.4.3-P3 <<>> @m.root-servers.net . ANY +norec; (1 server found);; global options: printcmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42599;; flags: qr aa; QUERY: 1, ANSWER: 21, AUTHORITY: 0, ADDITIONAL: 22

---途中省略---

;; Query time: 12 msec;; SERVER: 202.12.27.33#53(202.12.27.33);; WHEN: Wed Aug 29 16:41:00 2012;; MSG SIZE rcvd: 1951

digコマンドでのMルートサーバに対する問い合わせに対し、応答の長さが1951と512を

超えています。この例ではクライアント側からEDNS0オプションが設定されていないので、

TCPへとフォールバックしています。

†18 RFC 1123:R. Braden, “Requirements for Internet Hosts - Application and Support”, 1989年10月†19 RFC 5996:C. Kaufman, P. Hoffman, Y. Nir, P. Eronen, “Internet Key Exchange Protocol Version 2 (IKEv2)”,

2010年9月

Page 314: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

300 第17章 DNSの基礎と IPv6対応

17.6.3 最初からTCPでの問い合わせを行うことも可能にRFC 1123では、ゾーン転送を除いて、DNSメッセージのやり取りではUDPに対応する必

要があると記述されています。さらに、ゾーン転送でないDNSサーバへの問い合わせはまず

UDPで行わなければならず、そこで得られた応答がUDPのDNSメッセージで収まりきらない

大きさ(truncated)であることを示すTCビットが立っている場合にTCPでのDNSクエリを

試すべきとされています。つまり、DNSサーバへの問い合わせはUDPの53番で行うべきもの

とされており、最初からTCPでDNSサーバへの問い合わせを行うことはRFC 1123に違反し

ていたのです。

この状況は、2016年3月にRFC 7766†20が発行されたことで変わりました。RFC 7766で

は、DNSサーバへの問い合わせをUDPから必ず始めるという従来の規定を緩和し、UDPより

も先にTCPを利用してもよいとしています。さらに、UDPが使えない場合の代替手段として

TCPを捉えるのではなく、有効なDNSメッセージのトランスポートとして捉えるべきである

と記述されています。RFC 7766によって、DNSサーバへの問い合わせをTCPだけで行えるよ

うになったのです。

17.7 IPv6環境におけるDNSの運用上の注意点IPv6とDNSに関して、運用上の注意点がRFC 4472†21で紹介されています。

以下、そこで紹介されている注意点をいくつか紹介します。

17.7.1 特殊な IPv6アドレスの登録に関してRFC 4472では、リンクローカルアドレスをDNSサーバに登録すべきではないとしていま

す。リンクローカルアドレスはリンク内においてのみ有効であるため、正引きまたは逆引きの

レコードとして登録されるべきではないとあります。

プライバシーアドレスとも呼ばれる一時的な IPv6アドレスをDNSサーバに登録することも、

RFC 4472では推奨しないとあります。一時的な IPv6アドレスが変更されるたびにDNSサー

バに対して最新のAAAAレコードが更新されてしまうと、本来の目的にそぐわなくなるため

です。

17.7.2 IPv6対応が終わってからDNSサーバにAAAAレコードを登録すること

RFC 4472では、AAAAレコードをDNSサーバに登録するタイミングとして、以下のものを

すべて満たしたときとすることを推奨しています。

r ノードのネットワークインターフェースに IPv6アドレスが割り当てられているr 割り当てられた IPv6アドレスが設定されている

†20 RFC 7766:J. Dickinson, S. Dickinson, R. Bellis, A. Mankin, D. Wessels, “DNS Transport over TCP - Imple-

mentation Requirements”, 2016年3月†21 RFC 4472:A. Durand, J. Ihren, P. Savola, “Operational Considerations and Issues with IPv6 DNS”, 2006

年4月

Page 315: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.7 IPv6環境におけるDNSの運用上の注意点 301

r IPv6インフラに接続されたリンクに IPv6アドレスが設定されたネットワークインター

フェースが接続されている

IPv6対応が行われた一方で、グローバルな IPv6インターネットとの接続が完了していない

デュアルスタックノードに関しては、DNSサーバにAAAAレコードを登録しないことによって、

IPv4アドレスのAレコードのみが結果として返されるので、通信できない IPv6アドレスへの

通信を試みることがありません。

17.7.3 QTYPE ANYで IPv4と IPv6の同時解決はできるかRFC 1035で「*」と記述されているANYは、Questionセクションに対する応答としてDNS

サーバが持っている情報をすべて返してほしいという要求です。したがって、DNSサーバ

がAレコードとAAAAレコードの両方を保持している状況で、そのDNSサーバにANYを含む

Questionセクションを送信すれば、AレコードとAAAAレコードが両方同時に返答される可能

性はあります。

ここで注意が必要なのは、ANYの定義が「対象となるサーバが保持している情報」であると

いう点です。キャッシュDNSサーバに対し、QTYPEとしてANYを指定したQuestionセクショ

ンを含むDNSメッセージを送信すれば、そのキャッシュDNSサーバは、そのメッセージを受

け取った時点で保持している情報だけを返します。言い換えると、DNS権威サーバにAレコー

ドとAAAAレコードの両方が登録されていたとしても、それが両方ともキャッシュDNSサーバ

から得られるとは限りません。このように、ANYだけで、名前に関連づけされた IPv4アドレス

と IPv6アドレスの両方を1つのDNSメッセージで問い合わせたとしても、必要な結果を得ら

れないこともあります。RFC 4472では、QTYPE=*は一般的にはデバッグや運用目的でのみ利

用されるとあります。

一般に、IPv4と IPv6のデュアルスタック環境で名前解決をするときには、Aレコードに対す

るQuestionと、AAAAレコードに対するQuestionを、両方とも個別に送信します。QTYPEと

してANYを使えば両方を同時に得られると思うかもしれませんが、本書執筆段階では IPv4と

IPv6の名前解決を別々のDNS問い合わせで行わざるを得ない状況なのです。

17.7.4 再帰検索とトランスポートの関係RFC 4472で参照されているRFC 3901†22(BCP 91)では、再帰検索を行うDNSサーバが

IPv6にしか対応していない状態は好ましくないとしています。ユーザに代わって名前解決を

行うDNSサーバが IPv6のみに対応しているということは、IPv4で運用されているDNSサーバ

からゾーン情報を得られないためです。再帰検索を行うDNSサーバは、IPv4のみ、もしくは

IPv4と IPv6のデュアルスタックであることをRFC 3901は推奨しているのです。

RFC 3901は、DNSゾーンの管理を行うDNSサーバについて、最低でも1つは IPv4によって

通信可能なDNS権威サーバを運用することも推奨しています。DNSゾーンのすべてのDNS権

威サーバが IPv6のみで運用されることは推奨されていないのです。

†22 RFC 3901:A. Durand, J. Ihren, “DNS IPv6 Transport Operational Guidelines”, 2004年9月

Page 316: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

302 第17章 DNSの基礎と IPv6対応

RFC 3901には、「IPv4で名前解決ができない状況の発生を避けるように推奨しているのは、

名前空間のフラグメント化を避けるためである」と書かれています。DNSによる名前空間は

ルートからの階層構造になっているので、その階層構造の一部が特定のバージョンのインター

ネットプロトコルにおいてのみ確認可能であるのは、名前空間のフラグメント化にほかならな

いからです。IPv4インターネットのみだった時代には名前空間がフラグメント化されること

がなかった一方で、IPv6のみによる名前空間はフラグメント化を発生させてしまうという主張

です。

17.8 廃止された仕様IPv6のためにDNSに対して施された拡張仕様のいくつかは、その後廃止されました。以下、

廃止された旧仕様であるip6.intとA6リソースレコードを紹介します。

17.8.1 逆引きのためのip6.intの廃止1995年に発行された IPv6のためのDNS拡張の仕様を示したRFC 1886では、IPv6アドレス

の逆引きのために利用するドメインとして、ip6.intが記述されていました。しかし、2001

年に発行されたRFC 3152によって、ip6.intが果たしていた役割が、2000年に発行された

RFC 2874で定義されたip6.arpaへと委任されました。さらに、その後、2003年に発行され

たRFC 3596によって、RFC 1886で逆引きでip6.intを利用するとされていたRFC 1886が

上書き廃止され、逆引きとしてip6.arpaを利用することが正規の仕様になりました。そし

て、2005年に発行されたRFC 4159によってip6.intの運用も廃止されました。

ip6.intが廃止された背景として、RFC 1591にあるように、.intというトップレベルドメ

インが国際機関と国際的なデータベースのために予約されていた点が挙げられます。しかし、

2000年に IABが国際機関と国際的なデータベースは別々の名前のもとで運用すべきであると

いう見解を表明し、国際的なデータベースとしての役割は.intから.arpaへと移行されまし

た。2001年には.arpaトップレベルドメインの用途に関してRFC 3172が発行されています。

その中では、in-addr.arpa、ip6.arpa、e164.arpaの3つが記載されています。

本書執筆現在、.intトップレベルドメインは国際条約に基づく国際機関のみが利用可能で

す†23。.intを利用している国際機関としては、たとえば国連(un.int)が挙げられます。

ip6.arpaがip6.intから置き換えられる過程では、それまでDNSルートサーバで管理さ

れていた.arpaトップレベルドメインがDNSルートサーバから切り離されています。.arpa

トップレベルドメインをDNSルートサーバから切り離すことに関しては、RFC 2870で紹介さ

れています†24。

17.8.2 廃止されたA6リソースレコードIPv6アドレスを示すためのリソースレコードとして、AAAAレコードのほかにA6レコードと

いうものもありました。Draft StandardのRFC 1886でAAAAレコードが定義されたのは1995

†23 https://www.iana.org/domains/int/policy†24 RFC 2870はRFC 7720によって上書き廃止されています。

Page 317: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

17.8 廃止された仕様 303

年でしたが、2000年にProposed StandardのRFC 2874でA6レコードが定義されました。当

初Proposed StandardであったA6レコードは、2002年にRFC 3363によってExperimental

へと変わりました。同時期に発行されたRFC 3364では、AAAAとA6を比較しつつ、A6が持つ

多くの問題点がまとめられています。

つまり、A6レコードは2000年に標準として定義され、その2年後に実験的というステータ

スに降格しました。その後、2012年にRFC 6563でA6レコードが廃止されるまでは、IPv6ア

ドレスを示すためのリソースレコードが2種類存在していたことになります。

A6リソースレコードは、IPv6によるネットワークリナンバリングやマルチホームを扱いや

すくするために、チェイニング(chaining)と呼ばれる方法で IPv6アドレスを分割して管理で

きるリソースレコードでした。しかし、A6レコードの解決のためにDNSサーバに対して多く

の問い合わせが発生することや、処理が複雑になってしまう可能性があること、管理が複雑に

なってしまう可能性、セキュリティリスクが高くなる可能性などが指摘されていました。さら

に、1つの目的のために2つの異なるリソースレコードが存在したときに、同じ名前解決でリ

ソースレコードによって結果が異なるときにどうするかという問題もありました。そのため最

終的にA6は廃止され、本書執筆現在ではAAAAのみが IPv6での名前解決で利用されています。

本書執筆現在はip6.arpaが IPv6アドレスの逆引きで利用されていますが、ip6.arpaの利

用はA6レコードを最初に定義したRFC 2874で定義されています。RFC 2874の内容のうち、

A6レコードが廃止された一方で、ip6.arpaについてはip6.intが廃止されるという背景で

生き残ったのは興味深いところです。

Page 318: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 319: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第18章

DNSによるデュアルスタック環境の実現と運用

2つの異なるインターネットプロトコルである IPv4と IPv6の間には直接的な互換性はあり

ません。しかし実際には、同一の物理回線を利用し、IPv4と IPv6のデュアルスタック環境で運用されることが一般的です。直接的な互換性がない IPv6インターネットと IPv4インターネッ

トを、一般ユーザが1つのインターネットとして利用できるのは、DNSのおかげです。

DNSによって IPv4と IPv6のデュアルスタック環境が実現できるとはいえ、IPv4という単一

のインターネットプロトコルで運用されていたネットワークがデュアルスタック環境になるこ

とはかなり大きな変化であり、運用に関する教育やノウハウの蓄積もこれからです。IPv4の

ネットワーク設定と IPv6のネットワーク設定の勘違いなどによる障害の発生や、どちらか片

方だけのプロトコルで障害が発生している場合をどうやって切り分けるかといった課題もあり

ます。本章では、そうした問題や課題についても紹介します。

18.1 デュアルスタック環境の実現インターネットは、単一の名前空間を構成するように設計されています(RFC 2826†1)。し

かし、同一の名前に対応する IPv4アドレスと IPv6アドレスをそれぞれ解決できるだけでは、単

一の名前空間を維持しながらの IPv4と IPv6のデュアルスタック環境の実現にとって不十分で

した。そのため、IPのバージョンに依存して名前空間が別物にならないようにするため、DNS

によって管理される名前の内容と、DNSサーバにアクセスするときにパケットを配送(トラン

スポート)するネットワーク層プロトコルのバージョンを、それぞれ独立にするという設計が

選択されました。具体的には、IPv4を使って IPv6に関連する名前解決が行え、逆に、IPv6を

使って IPv4に関連する名前解決もできるような設計になりました。

18.1.1 DNSサーバへのトランスポートに IPv6と IPv4を利用可能にする

IPv4および IPv6と、DNSメッセージのResource Recordに関する組み合わせとしては、以

下の4パターンが考えられます。

†1 RFC 2826:Internet Architecture Board, “IAB Technical Comment on the Unique DNS Root”, 2000年5月

Page 320: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

306 第18章 DNSによるデュアルスタック環境の実現と運用

トランスポート Resource Record

IPv4 A

IPv4 AAAA

IPv6 A

IPv6 AAAA

もし、AAAAの検索が IPv6でのみ可能という設計だったとすると、ある名前解決に関与す

るすべてのDNSサーバが IPv6対応している必要が生じます。逆に言うと、IPv6のみに対応し

たDNS権威サーバだけで運用してしまうと、そのDNS権威サーバが扱う名前空間に関しては

IPv4でまったく名前解決ができなくなってしまいます。

そのため、RFC 3901†2では、名前管理を行っている組織が運営するDNS権威サーバのうち

の少なくとも1つは IPv4でもアクセス可能にすることを推奨しています。この推奨は、IPv6

に関するDNSの運用上の問題を扱ったRFC 4472†3にも引き継がれています。

したがって、たとえば図18.1のように、IPv6を示すAAAAレコードの問い合わせに際して

DNSサーバへのトランスポートに IPv4が利用できます。

DNSキャッシュサーバ

Questionセクション

Headerセクション

UDPヘッダIPv4ヘッダ

QNAMETYPE AAAA

www.example.com

ID 23456

UDPヘッダIPv4ヘッダ

Questionセクション

Answerセクション 2001:db8::1

Headerセクション

QNAMETYPE AAAA

www.example.com

ID 23456

IPv4でAAAAレコードを問い合わせ

IPv4でAAAAレコードに対応するIPv6アドレスを応答

▲ 図18.1 IPv4でAAAAレコードを問い合わせる場合

逆に、IPv6をDNSサーバへのトランスポートとして利用し、IPv4を示すAレコードを問い

合わせることもできます。

DNSルートサーバについては、2008年2月4日に13系統あるDNSルートサーバのうちの6

系統に IPv6アドレスが設定され、IPv6トランスポートによるDNSルートサーバへの問い合わ

†2 RFC 3901:A. Durand, J. Ihren, “DNS IPv6 Transport Operational Guidelines”, 2004年9月†3 RFC 4472:A. Durand, J. Ihren, P. Savola, “Operational Considerations and Issues with IPv6 DNS”, 2006

年4月

Page 321: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18.1 デュアルスタック環境の実現 307

せが可能になりました。つまり、2008年2月以前は、IPv6トランスポートでDNSルートサー

バへの問い合わせができなかったということです。もし仮に IPv6トランスポートでしかAAAA

レコードの問い合わせができない仕様だったなら、2008年2月以前にはAAAAレコードを利用

した名前解決がすべて不可能で、したがって IPv6アドレスの名前解決ができなかったことで

しょう(もちろん実際には IPv6でインターネットの名前解決は可能でした)。

18.1.2 IPv4アドレスと IPv6アドレスは同時に問い合わせできない名前に対する IPv4アドレス(Aレコード)の問い合わせと IPv6アドレス(AAAAレコード)の

問い合わせを別々に行う必要があるので、DNSサーバに対する問い合わせは2回発生します。

DNSサーバに対して IPv4アドレスと IPv6アドレスの問い合わせを同時に送ることはできま

せん。これは、DNSでは1回の問い合わせに対して利用できるメッセージは1つのみだから

です。複数の問い合わせを1つのDNSメッセージとして送信することは、基本的にはできま

せん。

DNSの仕様上は IPv4と IPv6を同時に問い合わせ可能?

実は、DNSサーバへの IPv4アドレスと IPv6アドレスの問い合わせは別々に行わなければならないというのは事実上の話であって、仕様上そうなっているとは言い切れません。

DNSに関するRFCは、RFC 1034†4とRFC 1035†5を基本としています。RFC 1034でDNSのコンセプトが解説され、RFC 1035で仕様が記載されている格好です。これらのRFCは、1987年に発行されていますが、本書執筆時点においてRFC 1034とRFC 1035

を上書きして廃止するRFCは存在しないので、DNSに関してはRFC 1034とRFC 1035

がベースになっています。このRFC 1035では、「4.1.2. Question section format」に、“The section contains

QDCOUNT (usually 1) entries”と書かれています。この記述があることから、仕様上はDNSサーバへの IPv4アドレスと IPv6アドレスの問い合わせを同時にできると読むこともできてしまうのです。この記述の何が問題かを読み解いてみましょう。そもそも、QDCOUNTのQDが何を意味するか明確に示されていないのが困りものです。QはQuestionだと推測されますが、Dが何なのかは謎です。そして、そのQDCOUNTが「普段は1(usually 1)」と記述されているわけです。

Questionセクションに含まれるエントリが「普段は1」ということは、普段とは違う場合があると考えられるので、RFCの仕様上は複数のQuestionを同時に送信することが明確に禁止されていないとも読めます。つまり、RFC 1035を読む限りは、QDCOUNT

を2にしたうえでQuestionセクションとして IPv4用のAレコードと IPv6用のAAAAレコードを同時に送信すれば、IPv4アドレスと IPv6アドレスに関する問い合わせを同時にできなくはない、ともとれます。RFC 1035の発行は1987年で、当時はいまほど厳密な記述でないとはいえ、これまで上書きされずにそのまま仕様として残り、その仕様上は IPv4アドレスと IPv6アドレスに関するDNSでの問い合わせが同時に可能という状態なのです。

Page 322: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

308 第18章 DNSによるデュアルスタック環境の実現と運用

ただし、現時点ではQDCOUNTが1ではない値を受け付ける実装がありません。したがって、複数の問い合わせを同時に含むDNSメッセージを受け入れる実装は存在せず、単一のDNSメッセージで行える問い合わせは事実上1つだけです。昔のRFCに謎の仕様が残されていることは少なくありませんが、DNSというインターネットの根幹的な仕組みにおいてさえ修正されずに残っている謎の仕様が存在し、それに基づいて世界中で運用されているのが現在のインターネットの実状です。

18.2 IPv6からIPv4へのフォールバックDNSは、ユーザが実行するアプリケーションが IPv4を使って通信を行うのか、それとも IPv6

を利用するのかを判断する際に、交通整理役として大きな役割を果たします。ただ、この「実

は2つだけど交通整理役のおかげで1つに見える」という状況によって問題が引き起こされる

場合もあります。

通信を開始する側のホストが IPv4と IPv6の両方を利用していて、DNSによる名前解決で通

信相手のFQDNに対応する IPv4と IPv6両方のアドレスが取得できたとすると、通信を開始す

る側のホストはまず IPv6による通信を試みます。これは、IPv6と IPv4の両方の IPアドレスが

存在する宛先と通信する場合に、「まず最初に IPv6を試してみて、それでダメであれば IPv4を

試す」というのが一般的な方法だからです(図18.3)。IPv6での通信が成功すれば問題がない

のですが、もし IPv6による通信ができない状況だと、IPv4での通信へのフォールバックが起

こることになります。

IPv4インターネット

IPv6インターネット

サーバ

IPv4/IPv6両方に接続

IPv4/IPv6デュアルスタックネットワーク

フォールバック

▲ 図18.2 IPv6から IPv4へのフォールバック

現時点の IPv4と IPv6デュアルスタック環境では、このような IPv6から IPv4へのフォール

バックという現象が発生する可能性があります。DNSへの問い合わせそのものは IPv4と IPv6

のどちらを利用することも可能なので、DNS権威サーバに IPv4と IPv6の両方のアドレスが登

録されていれば、IPv4しか利用できない環境であってもFQDNに対応する IPv6アドレスを取

得できてしまうからです。これは、互換性がない IPv4と IPv6とでDNSを利用して名前解決を

†4 RFC 1034:P.V. Mockapetris, “Domain names - concepts and facilities”, 1987年11月†5 RFC 1035:P.V. Mockapetris, “Domain names - implementation and specification”, 1987年11月

Page 323: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18.3 キャッシュDNSサーバとCDNに関する問題 309

行う部分は共通であることから発生する現象であり、IPv4と IPv6とで同じ名前空間を共有す

るという設計に起因する問題だといえます。

IPv6から IPv4へのフォールバックの問題は、通信開始までの遅延です。まず IPv6で試して

みて、それがダメならば IPv4で通信することになるので、従来のように IPv4だけで通信する

場合より通信開始までに時間がかかります。IPv6での接続が失敗して IPv4での接続が確立す

るまで、数十秒も余分な時間を要する可能性すらあります。

さらに大きな問題は、IPv6での接続に失敗してしまうと通信そのものを諦めてしまうアプリ

ケーションが存在する点です。たとえば、メールソフトやWebブラウザのバージョンによっ

ては、IPv6での通信が失敗したあとに IPv4での通信を試みないものもあります。このような

問題は、IPv4アドレス在庫枯渇が現実のものとなって IPv6に関する話題が増えたこともあっ

て徐々に修正されつつありますが、古いソフトウェアを使い続けている場合には注意が必要

です。

それ以外にも、IPv6から IPv4へのフォールバックには、実際の通信で使われているのが IPv4

か IPv6かがわからなくなって障害発生時に問題の切り分けに時間がかかる可能性があるなど、

副作用ともいえる影響もあります。

18.3 キャッシュDNSサーバとCDNに関する問題Webトラフィックなどの負荷分散を目的として利用されるCDN(Content Delivery Net-

work)で、キャッシュDNSサーバの IPアドレスが利用される場合があります。IPv4と IPv6の

デュアルスタック環境において、サーバとクライアント間のパケットが通過する経路が IPv4

と IPv6とで異なると、どのキャッシュDNSサーバを利用したかによって通信効率が大きく変

わってしまう可能性があります。これは、DNSによる問題というよりも、キャッシュDNSサー

バの IPアドレスを利用した負荷分散を行うCDNとの相性問題といえます。既存のCDNの構築

手法がある意味で無理矢理な力技なので、技術的に何か問題があるというよりは、既存の運用

では効率化が十分にできないだけという解釈も可能です。

この問題が発生するのは、DNS権威サーバが問い合わせを行ったキャッシュDNSサーバに

応じて回答する IPアドレスを変更することでCDNを実現している環境です。図18.3に問題が

発生している状況を示します。

Page 324: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

310 第18章 DNSによるデュアルスタック環境の実現と運用

ISP A

ISP B

IPv6インターネット

IPv4インターネット

DNS権威サーバ

CDNキャッシュサーバA

(IPv6)

CDNキャッシュサーバB(IPv6)

DNSキャッシュサーバ

この名前解決で得られるのはBのIPv6アドレス

名前解決に関するトラフィック

IPv4/IPv6デュアルスタックネットワーク

Webコンテンツの取得経路

IPv6用

IPv4用

▲ 図18.3 デュアルスタック環境におけるCDN

図18.3では、IPv6は ISP Aによって提供され、IPv4は ISP Bによって提供されています。

ユーザが利用しているPCに設定されているキャッシュDNSサーバは、IPv4を利用している

ISP Bのものを利用しています。

このような環境で、CDNによって負荷分散が行われているコンテンツをユーザが取得する

ときの流れを見てみましょう。まず、ユーザが ISP BにあるキャッシュDNSサーバを利用して

名前解決を行います。このとき、ユーザは IPv4と IPv6の接続性を両方持っているので、AAAA

レコードの問い合わせを先に行っているものとします。AAAAレコードの問い合わせに使われ

るキャッシュDNSサーバまでのトランスポートは、この環境では当然 IPv4になります。

ISP BにあるキャッシュDNSサーバは、DNS権威サーバにAAAAレコードの問い合わせを行

い、回答を得ます。ISP Bは、IPv4と IPv6の両方で運用されており、IPv6で運用されたCDN

キャッシュ B’が ISP B内にあるものとします。このような環境下で、DNS権威サーバから

キャッシュDNSサーバへ返答されるのは、問い合わせを行ったキャッシュDNSサーバの最寄

りにあるコンテンツキャッシュであるCDNキャッシュB’のアドレスです。

キャッシュDNSサーバからの名前解決結果を受け取ったユーザは、CDNキャッシュB’から

コンテンツを取得します。このとき、コンテンツの取得に利用されるのは IPv6なので、ユーザ

は ISP Aを経由してCDNキャッシュB’にあるコンテンツを取得します。

しかし、ISP AにもCDNキャッシュA’というコンテンツキャッシュがある場合、これでは

ユーザは遠回りをしてコンテンツを取得していることになってしまいます。このような遠回り

が発生するのは、CDNによる負荷分散機能の一部であるDNS権威サーバが「ユーザは ISP Bに

いる」と認識しているために発生しています。

ISP AのキャッシュDNSサーバを利用すれば、ユーザはCDNキャッシュA’から IPv6トラ

ンスポートを利用してコンテンツを取得できるようになりますが、今度は逆に IPv4でのCDN

キャッシュコンテンツ取得が遠回りになってしまいます。

IPv4の Aレコードを取得するときと、IPv6の AAAAレコードを取得するときに利用する

キャッシュDNSサーバを切り替えられればよいのですが、そういった使い分けが行われるこ

Page 325: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18.4 デュアルスタック環境におけるSRVの利用 311

とは稀なので、このような問題が発生します。

18.4 デュアルスタック環境におけるSRVの利用SRVは、「Service」を意味するResource Recordで、インターネット上で提供されている

サービスの場所を探すために使われます。各種サービスを利用したいクライアントは、DNS権

威サーバに登録されているSRVを通じて、そのサービスに必要なサーバを発見できます。SRV

はRFC 2782†6で規定されています。

たとえば、example.comというドメインで運用されているUDPのSTUNサーバを探すとき、

クライアントは次のようなフォーマットでSRVの問い合わせを行います(STUNについては第

26章で説明します)。

_stun._udp.example.com

これに対して得られるのは、IPアドレスではなく、そのサービスのFQDNとポート番号など

の情報です。クライアントは、IPv4もしくは IPv6アドレスを取得するために、得られたFQDN

を利用してAもしくはAAAAのDNS問い合わせを改めて行います。

ここで問題になるのが、単一のFQDNに対して IPv4と IPv6とでポート番号を変えてサービ

スするといった運用ができないことです。たとえば、同じFQDNで、IPv4ではTCPポート番

号30080、IPv6ではTCPポート番号80でサービスを提供するといったことはできません。そ

のため、IPv4と IPv6とでサービスを分けるには、IPv4用と IPv6用で異なるFQDNを用意して

SRVレコードを別々に設定する必要があります。

18.5 IPv6 DNSホワイトリストとブラックリスト特定のサーバに対して IPv4で通信を行うのか、それとも IPv6で通信を行うのかは、DNS権

威サーバの設定に大きく依存します。DNS権威サーバに IPv6用のAAAAレコードがあると、

IPv6を利用可能なクライアントは IPv6で通信を始めようとするからです。しかし、IPv6対応

ができていない組織に対してAAAAレコードを含むDNS応答をしてしまうと、前述した IPv6

から IPv4へのフォールバックが発生したり、そもそも通信に失敗したりします。大量のトラ

フィックを日々処理しているWebコンテンツ事業者が、ある日突然 IPv6対応をすると、それ

が原因で多くのユーザがサービスを円滑に利用できなくなる可能性があるのです。そのよう

な状況を招かないよう、IPv6対応を徐々に進めたいという要望から、IPv6 DNSホワイトリス

ティングという手法が使われることがあります。

IPv6 DNSホワイトリスティングは、「IPv6対応が行われているとわかっている組織に対して

だけAAAAレコードを返答する」というものです。IPv6 DNSホワイトリスティングとは逆に、

「AAAAを返すと障害の原因となりそうな相手にはAAAAを返さない」という IPv6 DNSブラック

リスティングという方式もあります。

†6 RFC 2782:A. Gulbrandsen, P. Vixie, L. Esibov, “A DNS RR for specifying the location of services (DNS

SRV)”, 2000年2月

Page 326: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

312 第18章 DNSによるデュアルスタック環境の実現と運用

IPv6ホワイトリスティングとブラックリスティングは、エンドユーザに対して IPv6でのコ

ンテンツ提供をするうえでの注意点をまとめたRFC 6589†7で詳しく紹介されています†8。

18.5.1 ホワイトリスト方式ホワイトリスト方式は、実験的に IPv6に取り組みたいと考えるコンテンツ事業者によって使

われることが多い方式です。IPv6 DNSホワイトリストに従って運営されているDNS権威サー

バは、ホワイトリストに登録されたDNSキャッシュサーバからのAAAA問い合わせだけに答え

ます。

図18.4の左側が、ホワイトリストに掲載されていないDNSキャッシュサーバからの名前解

決問い合わせへの対応です。右側が、ホワイトリストに掲載されているDNSキャッシュサー

バからの問い合わせへの対応を示しています。ホワイトリストに掲載されているDNSキャッ

シュサーバに対しては、AレコードとAAAAレコードの両方に IPアドレス情報を返しますが、

ホワイトリストに掲載されていないDNSキャッシュサーバに対してはAレコードのみ IPアド

レス情報を返します。

キャッシュB

権威キャッシュA

ARR QTYPE

DNS応答

ARR QTYPE

DNS応答

ARR QTYPEAAAARR QTYPE

DNS応答

ARR QTYPEAAAARR QTYPE

DNS応答

ホワイトリストにキャッシュDNSサーバAのIPアドレスを含まない

IPv6でも通信可能IPv4のみで通信可能

▲ 図18.4 IPv6 DNSホワイトリスティング

Googleは、2008年3月から2012年6月のWorld IPv6 Launchまで、IPv6 DNSホワイトリ

スティングによるAAAAレコード提供を行っていました。これは、Google over IPv6と呼ばれ

るプログラムに申し込んだ組織だけが IPv6でGoogleのコンテンツを取得できるというもの

でした。2010年1月以降は、Google over IPv6に参加している組織であればYouTube動画を

IPv6で閲覧できるようになっていました。

†7 RFC 6589:J. Livingood, “Considerations for Transitioning Content to IPv6”, 2012年4月†8 本書執筆時点では Internet Draftですが、“IPv6 Guidance for Internet Content and Application Service

Providers” https://tools.ietf.org/id/draft-carpenter-v6ops-icp-guidance-03.html も非常に参考になります。

Page 327: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18.5 IPv6 DNSホワイトリストとブラックリスト 313

18.5.2 ブラックリスト方式ブラックリスト方式は、ブラックリストに掲載されたDNSキャッシュサーバにのみAAAAレ

コードを返さないというものです。デフォルト設定としてはAAAAレコードに返答し、問題を

発生させる可能性が高いと思われるキャッシュDNSサーバに対してはAレコードのみを返し

ます。

キャッシュB

権威キャッシュA

ARR TYPE

DNS応答

ARR TYPE

DNS応答

ARR TYPEAAAARR TYPE

DNS応答

ARR TYPEAAAARR TYPE

DNS応答

ブラックリストにキャッシュDNSサーバAの

IPアドレスを含む

IPv6でも通信可能IPv4のみで通信可能

▲ 図18.5 AAAAブラックリスト

ブラックリストという表現から、まったく通信できなくするという印象を抱くかもしれませ

んが、IPv6 DNSブラックリスティングでは基本的に IPv4での通信は可能であり続けます。そ

のため、あまり大きな問題にならず、ブラックリストに掲載されたことに気がつかない可能性

もあります。とはいえ、長期的視点で見ると、ブラックリストに掲載されたDNSキャッシュ

サーバを利用するネットワークにおいて IPv6の普及が阻害されるなどの影響はあるかもしれ

ません。

Googleは、2012月6月6日のWorld IPv6 Launch以降、Google over IPv6のようなプログ

ラムへ申請のあった組織にのみAAAAレコードを返すホワイトリスト方式ではなく、問題を発

生させる可能性がある組織に対してAAAAレコードを返さないブラックリスト方式へと切り替

えています。つまり、デフォルトではAAAAレコードを返さず申請があった組織に対してのみ

AAAAレコードを提供していた状態から、AAAAレコードを返さないほうがよいとGoogleが判

断した組織に対してのみAAAAレコードを返さないように変わりました。Googleが作成したブ

ラックリストは、Facebookなど他のコンテンツ事業者も利用しています。

日本では、Googleのようなコンテンツ事業者が各自のDNS権威サーバで運営するブラック

リストとは別に、ISPにあるDNSキャッシュサーバでAAAAフィルタが実施されている場合が

あります。これは、NTTフレッツ網における閉域 IPv6問題に対処するためです。DNSキャッ

シュサーバでのAAAAフィルタに関しては、A.1.4項で説明します。

Page 328: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

314 第18章 DNSによるデュアルスタック環境の実現と運用

18.6 アプリケーションのIPv6対応とデュアルスタック環境ネットワークやOSの IPv6化と、各機器にインストールされているアプリケーションは、独

立した問題です。ネットワークとOSが IPv6に対応して IPv4と IPv6のデュアルスタック環境

が実現されたとしても、アプリケーションが IPv6対応されなければユーザが IPv6を利用する

ことはないのです。アプリケーション実装者が IPv6対応コードをアプリケーションに追加す

るまでは、そのアプリケーションがデュアルスタック環境で IPv6を使うことはありません。ア

プリケーションの IPv6対応に関しては、RFC 4038†9で概説されています。

アプリケーションに関して IPv4と IPv6のデュアルスタック環境で注意が必要なのは、ソフ

トウェアのバージョンによって挙動が異なる可能性です。同じアプリケーションであっても複

数の異なるバージョンが同時に利用されることがあり、バージョンによって IPv6対応状況が

異なる場合もあります。

IPv6には、IPv4-Mapped IPv6アドレスという仕組みがあり、IPv6を利用して IPv4アドレス

と通信しているかのような挙動を実現することができます。一見便利な仕組みですが、デュア

ルスタック環境では、IPv4での通信のように IPv6を偽装することでフィルタをすり抜けてし

まうといったセキュリティ上の懸念があります。IPv4-Mapped IPv6アドレスを使うつもりが

ない場合には、IPv6ソケットに対して明示的にIPV6_V6ONLYオプションを設定しておくこと

をお勧めします。IPv4-Mapped IPv6アドレスに関しては4.10節で説明します。IPv6対応プロ

グラミングに関しては第16章で解説します。

なお、アプリケーションの IPv6対応は、必ずしもアプリケーションにおける IPv4と IPv6の

デュアルスタック化を意味するわけではありません。実際、さまざまなネットワークコマンド

では、IPv4用と IPv6用とが別のアプリケーションになっています。たとえば、UNIX系システ

ムで利用されることが多いpingコマンドは、IPv4の場合には ICMP Echo Requestを送信する

ように実装されています。このpingコマンドの IPv6版は、ping6コマンドとして、IPv4とは

別のアプリケーションになっています。

Webの IPv6対応は他人事ではない

できるだけ高速にサイトを表示することが重要とされるWebコンテンツ事業者にとっては、IPv6から IPv4へのフォールバックによって表示速度が遅くなったり、そもそも表示されなくなったりするのは、なんとしても避けたい状況です。そのような事情から、Webサイトの IPv6化について社内の承認を得るのが難しいという話も少なくありません。しかし、Webにおいては、「自分のサイトで直接対応しない技術であっても間接的に影響がある」という場合がよくあります。IPv6対応も例外ではありません。「自分のサイトをどのようにして IPv6対応するか」という課題とは別に、外部Webサイトの画像表示、外部Webサイトへのリンク、外部WebサイトAPIの利用などで、IPv6に関連した対応が発生する場合があります。たとえば、画像を提供しているアフィリエイト事業

†9 RFC 4038:M-K. Shin, Y-G. Hong, J. Hagino, P. Savola, E. M. Castro, “Application Aspects of IPv6 Transi-

tion”, 2005年3月

Page 329: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

18.6 アプリケーションの IPv6対応とデュアルスタック環境 315

者が IPv6に対応すると、「IPv6で取得可能な画像」がWebサイト内で利用されるようになります。IPv6対応された画像が表示されなかったりリンク先に移動したりできなければ、自分のWebサイトが IPv6対応を行っていなくても、IPv6対応の影響を受けてしまっていることになります。「自分は IPv6対応をするつもりがないので関係ない」と言い切れないところが、デュアルスタック環境における IPv6対応の難しい点の1つかもしれません。

Page 330: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 331: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第IV部

IPv4/IPv6共存技術

ここまでの各章では、IPv6インターネットを支える基本的な要素技術を見てきました。と

はいえ、本章執筆時点では、インターネットユーザの大半がまだ IPv4を利用しています。第

III部ではDNSを利用することで IPv4インターネットと IPv6インターネットをデュアルスタッ

クで運用できることを紹介しましたが、IPv4と IPv6には互換性がないので、IPv6によるイン

ターネットと IPv4をつなぐ技術は別に考える必要があります。そのような問題意識から、IPv4

と IPv6の間で相互通信を行うための技術がさまざまに作られてきました。ここでは、IPv4イ

ンターネットへの接続と IPv6インターネットへの接続の両方を実現するための IPv4/IPv6共存

技術を紹介していきます。

IPv4/IPv6共存技術に関しては、IPv6の基本仕様が策定されてからというもの、活発な議

論が続いています。当初は、IPv4インターネットから IPv6インターネットへとユーザを移行

させるという意識が強かったこともあり、IPv6移行技術(IPv6 Transition Mechanism)と

呼ばれていたこともあります。しかし、2010年頃からは、IPv4/IPv6共存技術(IPv4 IPv6

Co-existence)という表現が利用されることが増えました。IPv6インターネットへの移行を議

論するには、IPv4アドレス在庫枯渇という、より広い問題についての理解が不可欠です。IPv4

アドレス在庫枯渇問題については第V部で改めて扱います。

Page 332: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 333: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第19章

IPv4/IPv6共存技術の分類

IPv4/IPv6共存技術にはたくさんの種類があります。「たくさんの IPv4/IPv6共存技術があっ

て煩雑だ」という感想を持っている方も少なくないでしょう。

IPv4/IPv6共存技術が煩雑に見える背景には、IPv6が IPv4とはまったく異なるプロトコルで

あることだけでなく、インターネットそのものがさまざまなバリエーションの技術によって運

用されており、ネットワーク構成も大きく異なる場合が多いという側面があります。従来どお

りの品質で IPv4インターネットへの接続性を提供しつつ、IPv6インターネットへの接続性を

実現することには、さまざまなネットワークに固有の難しさがあります。IPv4/IPv6共存技術

を理解するには、「この IPv4/IPv6共存技術はどういった環境を想定して作られたものか」とい

う視点で、仕様の設計思想に着目してみてください。たくさんの IPv4/IPv6共存技術があって

も、各事業者が利用を検討するときには、選択肢は自ずと1つか2つに絞られるはずです。

ネットワーク事業者にとって、ネットワーク構成の違いはビジネス構造の違いでもありま

す。その意味で、IPv4/IPv6共存技術の標準化動向は、ビジネスの方向性を左右するものだと

いえるでしょう。

19.1 IPv4/IPv6共存技術のバリエーション本書では、説明のため、IPv4/IPv6共存技術を以下のように分類します。

r トンネル技術r 変換技術r 組み合わせによる運用手法トンネル技術は、IPトンネルを構築することによって通信路を確保するための技術です。

本書で扱うトンネル技術は、IPv4トンネルで IPv6パケットを運んだり、逆に IPv6トンネルで

IPv4パケットを運ぶようなものです。たとえば、IPv6接続性が確保できずに IPv4接続性だけ

が確保できる環境で、IPv4を利用してトンネルを構築し、IPv6が接続できる場所まで IPv6パ

ケットを運ぶような技術があります。IPv4で IPv6パケットを運ぶトンネル技術の主な目的は、

接続性の確保です。一方、IPv6で IPv4パケットを運ぶ技術は、IPv6を利用して基幹ネットワー

Page 334: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

320 第19章 IPv4/IPv6共存技術の分類

クを構築することで運用コストを下げることを目指しています。両者で想定しているメリット

が異なる点に注意してください。

変換技術は、IPv4による通信を IPv6に変換したり、逆に IPv6による通信を IPv4に変換した

りするものです。変換技術を利用することで、エンドノードは、自らが対応していないバー

ジョンの IPプロトコルで運営された相手と通信が可能になります。

組み合わせによる運用技術は、トンネル技術や運用技術などを組み合わせることを指しています。各種の技術を組み合わせることによって、IPv4と IPv6の両方に対応しやすくすること

を意図したものです。

19.2 ステートフルとステートレスIPv4/IPv6共存技術の仕組みを理解するとき、そのプロトコルがステートフルであるか、ス

テートレスであるかは非常に大きな要素です。以降で紹介する各種プロトコルの説明を読むと

き、そのプロトコルがステートフルであるかステートレスであるかに注目すると、プロトコル

の設計思想や制限事項が垣間見えてくると思います。

ステートフルなプロトコルは、各通信セッションの状態をルータなどが保持する必要があります。そのため、規模性が制限されると同時に、実装コストが高くなりがちです。

ステートレスなプロトコルは各通信セッションの状態に依存せずに処理ができます。あらかじめ決められた決まり事に応じて処理を行うだけなので、ステートフルなプロトコルと比べる

と規模性があり、実装コストも低くなります。しかし、ステートフルなプロトコルと比べると

細かい制御ができない傾向があります。

19.3 IPv4/IPv6共存技術利用のパターンIPv4と IPv6の混在環境をどのように構築するのかには、いくつかのパターンがあります。

それらを紹介しているRFCとして、RFC 4213†1やRFC 6180†2などが挙げられます。

以下に、考えられる4つのパターンを要約します。

r IPv4と IPv6のデュアルスタック環境を構築するr IPv4だけで構成されているネットワークを経由して IPv6インターネットへと接続する

(IPv4の島を越えて IPv6へと接続するイメージ)r コアネットワークを IPv6だけで構築することにより、コアネットワークのデュアルスタッ

ク運用を避け、運用コストを軽減するr IPv6のみでの運用を基本とするネットワークを構築する。IPv4インターネットとの通信

が必要な場合には、IPv6ネットワークを経由して IPv4インターネット上のホストと通信

を行える仕組みを用意する

†1 RFC 4213:E. Nordmark, R. Gilligan, “Basic Transition Mechanisms for IPv6 Hosts and Routers”, 2005年10月

†2 RFC 6180:J. Arkko, F. Baker, “Guidelines for Using IPv6 Transition Mechanisms during IPv6 Deploy-

ment”, 2011年5月

Page 335: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

19.4 今後も多くの試みが誕生する 321

これらのパターンに応じて、環境によってどのような IPv4/IPv6共存技術が採用されるの

かが変わります。たとえば、IPv4だけで構成されているネットワークを経由して IPv6イン

ターネットへと接続するために採用される主な IPv4/IPv6共存技術は、トンネル技術になるで

しょう。

これまでに提案されてきたさまざまな IPv4/IPv6共存技術には、時代背景による差もありま

す。IPv4アドレスの中央在庫が枯渇するまでは、IPv6によるインターネット接続サービスが稀

だったので、IPv4ネットワークを経由して IPv6インターネットへの接続を実現する IPv4/IPv6

共存技術の提案が多く見られました。その後は、IPv6ネットワークの普及を前提として考慮さ

れた IPv4/IPv6共存技術の提案が増えてきました。

IPv6の普及が進み始めたこともあり、IPv4を IPv6ネットワーク上で仮想的に提供する

IPv4aaS(IPv4 as a Service)という考え方も登場しています。これは、クラウドの世界で使わ

れているSaaS(Software as a Service)、PaaS(Platform as a Service)、IaaS(Infrastructure

as a Service)のように、IPv4をサービスのひとつとして提供するというイメージでの表現で

す。IPv6の普及が進めば進むほど、そういった考え方での設計や運用が増えそうです。

IPv4/IPv6共存技術の調査検討が必要という場合、IPv6対応ネットワークを構築しつつ純粋

な IPv4と IPv6のデュアルスタック環境構築は難しいという状況が多いでしょう。その際には、

どのような環境で IPv4/IPv6共存技術を利用するかはもちろん、業界動向を含めた全体的な流

れを調査することも大切です。

19.4 今後も多くの試みが誕生するIPv4と IPv6が共存する状態はしばらく続くことが予想されるので、IPv4/IPv6共存技術に関

する提案や取り組みは今後も続くでしょう。議論や実運用を通して問題点が明らかになること

で廃止される手法もいろいろありそうです。

IPv4/IPv6共存技術について検討する際に重要なのは、自分の環境に適合した技術がどれで

あるかを理解することです。たくさんの技術があるように見えるのは、インターネットがさま

ざまな環境で運営されているためであり、そのすべての環境で利用可能な万能の技術はありま

せん。言い換えれば、必ずしもすべての手法を理解する必要もないのです。

これから IPv4アドレス在庫枯渇に伴う問題が深刻化するとともに、IPv6の普及が進めば、数

多くの IPv4/IPv6共存技術が開発され運用されていくと考えられます。

Page 336: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 337: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第20章

トンネル技術

パケットをパケットでカプセル化するトンネル技術は、多くの IPv4/IPv6共存技術で利用さ

れています。IPv4/IPv6共存技術におけるカプセル化には、IPv6パケットを IPv4パケットでカ

プセル化する場合と、IPv4パケットを IPv6パケットでカプセル化する場合があります。

IPv6パケットを IPv4パケットでカプセル化するトンネル技術(図20.1)は、IPv6インター

ネットへの接続性がなく IPv4インターネットへの接続性しかない環境において、IPv6イン

ターネットを利用する目的で利用されます。IPv4ネットワークを利用した IPv6パケット転送

の仕組みについては、RFC 4213†1で議論されています。

IPv6インターネット

IPv6ネットワーク

IPv4によるトンネル

IPv6ヘッダペイロード IPv4ヘッダIPv6ヘッダペイロード IPv6ヘッダペイロード

▲ 図20.1 IPv4によるトンネル

IPv4ネットワークで IPv6パケットを運ぶのとは逆に、IPv6ネットワークで IPv4パケットを

運ぶトンネル技術もあります。RFC 2473†2では、IPv6を利用した各種プロトコルについて、

パケットのカプセル化が定義されています。RFC 2473は1998年のRFCということもあり、

記載されているプロトコルには IPv4のほかAppleTalk、IPX、CLNPなども含まれています。

IPv6ネットワークを利用した IPv4パケットの転送の主な目的は、IPv6のシングルスタック

ネットワークから IPv4インターネットへの接続性を提供することです。将来における IPv4と

IPv6のデュアルスタック運用に伴う負荷の軽減や、IPv4アドレス節約を意識した技術といえ

るでしょう。

†1 RFC 4213:E. Nordmark, R. Gilligan, “Basic Transition Mechanisms for IPv6 Hosts and Routers”, 2005年10月

†2 RFC 2473:A. Conta, S. Deering, “Generic Packet Tunneling in IPv6 Specification”, 1998年12月

Page 338: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

324 第20章 トンネル技術

IPv6パケットを IPv4パケットでカプセル化する場合と、IPv4パケットを IPv6パケットでカ

プセル化する場合とでは、トンネルを張る主体やユースケースも異なります。IPv6パケットを

IPv4パケットでカプセル化する場合のユースケースは、一般ユーザがトンネルを張るというも

のです。IPv6サービスを提供していない ISPなどで、IPv6インターネットへの接続性を確保す

るために、一般ユーザがトンネルを張るユースケースが想定されます。一方、IPv4パケットを

IPv6パケットでカプセル化する場合のユースケースは、コスト削減や運用性向上のためのトン

ネル技術として、ISPなどのネットワーク管理者が利用するというものです。たとえば、22.1

節で紹介するDS-Liteは、IPv6トンネルで IPv4を転送することで、ネットワークのコア部分を

IPv6のみで実現できる設計になっています。

IPv4/IPv6共存のためのトンネル技術には、セキュリティ上のリスクもあります。トンネル

技術が抱えるセキュリティリスクに関しては20.7節で紹介します。IPv4ネットワークにおけ

る IPv6の利用で考えられるセキュリティ上の課題に関しては、15.10節で紹介しています。

20.1 6to4‌6to4 ‌は、IPv4/IPv6共存を目的としたトンネル技術のための基本的な仕組みとして、RFC

3056†3で規定されたプロトコルです。IPv4での接続サービスしかないユーザが IPv6インター

ネットへの接続性を得られるように、IPv6パケットを IPv4トンネルを通じて IPv6インター

ネットへと届ける仕組みです。Windows VistaやWindows 7、Mac OSX、Linux、各種BSD系

OSなど、さまざまなOSが6to4に対応していました。6to4機能を持つSOHOルータなども世

界中で稼働しています。たとえば、2017年10月に行われたNANOG 68の発表でも、6to4に

よるトラフィックが存在していることが示されています†4。

ただし、6to4は2001年に標準化された古いプロトコルである点に注意が必要です。多くの

エンドユーザが ISPなどの直接的な協力を得ずに IPv6環境を手軽に試せる仕組みとしてかつて

は重宝されましたが、さまざまな欠点も抱えていることから、現在では利用が推奨されない

古いプロトコルとなってしまっています。たとえば、2012年9月に発行されたRFC 6724†5で

は、6to4による IPv6よりも、IPv4での接続を優先するデフォルト設定を規定しています。

6to4そのものは利用が推奨されていませんが、その考え方や、それが廃止へと向かった経緯

を理解することは、IPv4/IPv6共存技術の考え方を知るうえで重要です。そこで本書では6to4

について少し詳しく解説します。6to4の問題点に関しては、20.1.4項で説明します。

20.1.1 6to4の仕組み6to4では、IPv4パケットで IPv6パケットをカプセル化して運びます。図20.2のような互い

に独立した IPv6ネットワークを、IPv4インターネットでつなぐために考案された仕組みです。

なお、図20.2は、IPv6インターネットが世界的に普及しておらず IPv6ネットワークが局所的

に点在していた状況を想定したものです。

†3 RFC 3056:B. Carpenter, K. Moore, “Connection of IPv6 Domains via IPv4 Clouds”, 2001年2月†4 NANOG Meeting Presentation Abstract : https://nanog.org/meetings/abstract?id=2948†5 RFC 6724:D. Thaler, R. Draves, A. Matsumoto, T. Chown, “Default Address Selection for Internet Protocol

Version 6 (IPv6)”, 2012年9月

Page 339: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.1 6to4 325

IPv4インターネット

IPv6ネットワーク IPv6ネットワーク

6to4ルータ 6to4ルータ

▲ 図20.2 6to4概要

図20.2では、IPv6パケットが6to4ルータによって IPv4カプセル化され、IPv6インターネッ

トとの仲介を行う6to4ルータへと IPv4インターネットを通じて転送されます。IPv4でカプセ

ル化された IPv6パケットを受け取った6to4ルータは、IPv6パケットを IPv4パケットから取り

出し、それを IPv6ネットワークへと転送します。

6to4を IPv6インターネットとの接続に利用することも可能です。このとき6to4では、6to4

ルータから送信される IPv6パケットの送信元 IPv6アドレス中に、IPv6インターネットとのや

り取りを担う6to4リレールータ(次項で説明)経由で受け取った IPv4パケットの IPv4送信元

情報を埋め込みます。IPv6アドレスが IPv4アドレスよりも長いことを利用して、6to4リレー

ルータへの負荷を減らすために、6to4リレールータにおいて状態を保持しなくても済むよう

に設計されているのです。

図 20.3に示すように、6to4で利用される IPv6アドレスは 2002:V4ADDR::/48です。

V4ADDRの部分には、6to4ルータのグローバル IPv4アドレスが埋め込まれます。V4ADDRに続

くSLA IDとインターフェース識別子の部分には、必要に応じて適切な値が代入されます。

0 2 3 1516 4748 63

0010000000000010 V4ADDR SLA ID →

64 127

インターフェース識別子→

▲ 図20.3 6to4における IPv6アドレス

IPv4のプロトコル IDフィールドは、IPv4にカプセル化された IPv6なので、IPv6を表す41

番とします。

20.1.2 6to4ルータと6to4リレールータ6to4の仕組みそのものは上記のように非常に単純です。ただし、実際の通信を考えるともう

少し複雑で、6to4サイトからグローバル IPv6インターネットに接続する場合のほかに、6to4

サイト同士の通信について考えなければなりません。以降では、RFC 3056での説明にならっ

て、まず6to4サイト同士の接続について考えます。

図20.4では、IPv4インターネットを利用して、互いに独立した6to4サイト同士が接続され

ています。それぞれの6to4サイトの内部では、6to4用の IPv6アドレスが利用されます。

Page 340: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

326 第20章 トンネル技術

IPv4インターネット

6to4ルータ

203.0.113.1 192.0.2.1

6to4ルータ

IPv6ネットワークIPv6ネットワーク2002:c000:201::/48

(c000:201の十進表記は)192.0.2.1

2002:cb00:7101::/48

(cb00:7101の十進表記は)203.0.113.1

▲ 図20.4 6to4サイト同士の接続

次に、6to4サイトとグローバル IPv6インターネットをつなげる場合です。この場合に6to4

アドレス空間とグローバル IPv6空間を仲介する機器は、6to4リレールータと呼ばれます。

6to4リレールータは、図20.5のように、6to4サイトからの IPv6パケットをグローバル IPv6

インターネットと通信できるように仲介します。

IPv4インターネット

6to4ルータ

203.0.113.1 192.0.2.1

6to4リレールータ

IPv6ネットワーク2002:cb00:7101::/48

グローバルアドレス空間(cb00:7101の十進表記は)203.0.113.1

IPv6インターネット192.168.0.1

▲ 図20.5 6to4リレールータの利用

NOTE

この6to4リレールータを利用した通信を前提として6to4として説明されることが多々ありますが、6to4そのものは6to4リレールータがなくても利用可能である点に注意してください。

6to4リレールータを利用したときのカプセル化の流れを図20.6と図20.7に示します。いず

れも、6to4サイトの内部にいるユーザがグローバル IPv6インターネットに接続されたサーバ

と通信を行う場合を示したものです。図20.6が6to4サイト内のユーザからサーバへのパケッ

トの流れ、図20.7がサーバから6to4サイト内へのパケットの流れです。

IPv6インターネットIPv6ネットワーク IPv4インターネット

6to4ルータ

6to4リレールータ

IPv6ヘッダペイロード IPv4ヘッダ

付加

IPv6ヘッダペイロードIPv6ヘッダペイロードIPv6ヘッダペイロード IPv4ヘッダ

取り外すIPv6ヘッダペイロード IPv4ヘッダ

▲ 図20.6 ユーザ→6to4ルータ→6to4リレールータ→ IPv6ノード

Page 341: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.1 6to4 327

IPv6インターネットIPv6ネットワーク IPv4インターネット

6to4ルータ

6to4リレールータ

IPv6ヘッダ ペイロードIPv6ヘッダ ペイロードIPv6ヘッダ ペイロードIPv4ヘッダ

IPv6ヘッダ ペイロードIPv4ヘッダ

付加取り外すIPv6ヘッダ ペイロードIPv4ヘッダ

▲ 図20.7 IPv6ノード→6to4リレールータ→6to4ルータ→ユーザ

図20.6では、ユーザから送信された IPv6パケットを6to4ルータが IPv4でカプセル化して

います。6to4ルータによって IPv4カプセル化された IPv4パケットは、6to4リレールータへと

転送されます。6to4ルータからの IPv4パケットを受け取った6to4リレールータは、IPv4パ

ケットから IPv6パケットを取り出し、IPv6パケットとして IPv6インターネットへと転送しま

す。6to4リレールータが IPv4パケットを取り除いて得られた IPv6パケットは、通常の IPv6パ

ケットと同様に IPv6インターネットを転送され、サーバへと到達します。

図20.7は、IPv6で運用されているサーバから6to4サイト内のユーザへの通信になります。

サーバから送信された IPv6パケットは、6to4リレールータへと転送されます。6to4リレー

ルータは、宛先 IPv6アドレスから6to4ルータのグローバル IPv4アドレスである宛先 IPv4ア

ドレスを生成し、IPv6パケットを IPv4パケットでカプセル化します。カプセル化された IPv4

パケットは、IPv4インターネットを転送されて、6to4ルータへと到達します。6to4ルータは、

IPv4パケットから IPv6パケットを取り出し、6to4サイト内にいるユーザへと転送します。

20.1.3 6to4とエニーキャスト6to4リレールータを利用する場合、その IPv4アドレスはどのようにしてわかるのでしょう

か。実は、このときにエニーキャストを利用できるというのが6to4の仕組みの大きなポイン

トです。エニーキャストを利用することによって、ユーザが特別な設定を行わなくても、自動

的にトンネルが作成されます。これによる自動設定の手軽さが、6to4の普及に貢献したと考

えられます。

NOTE

6to4の実運用ではエニーキャストが利用される場合が多くありましたが、6to4そのものを規定するRFC 3056は、IPv4および IPv6のエニーキャストには依存していません。

6to4で利用するエニーキャストアドレスは、RFC 3068†6において、192.88.99.0/24と規

定されています。

6to4でエニーキャストを利用する場合の例を図20.8に示します。図20.8の例では、192.

88.99.1という IPv4エニーキャストアドレスを利用しています。この同じ IPv4アドレスを持

つ複数の6to4リレールータが運用されており、6to4ルータから送信されるパケットは最寄り

の6to4リレールータへと自動的に転送されるわけです。

†6 RFC 3068:C. Huitema, “An Anycast Prefix for 6to4 Relay Routers”, 2001年6月

Page 342: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

328 第20章 トンネル技術

IPv6インターネットIPv6ネットワーク

IPv4インターネット

6to4ルータ

6to4リレールータ

6to4リレールータ

6to4リレールータ

c000:002fの十進表記は192.0.2.254

192.0.2.254

192.88.99.1

2002:c000:022a::c000:02fe

192.88.99.1

192.88.99.1

2001:db8::1

IPv6ヘッダペイロード IPv4ヘッダ

IPv6ヘッダ ペイロードIPv4ヘッダ IPv6ヘッダ ペイロード

IPv6ヘッダペイロード

▲ 図20.8 エニーキャストを利用する6to4

IPv6インターネットでは、2002::/16のエニーキャストによって、自動的に6to4リレー

ルータまで IPv6パケットが転送されていきます。

20.1.4 6to4の問題点6to4は非常に単純なプロトコルであり、ユーザによる設定が少なくて済むという利点があ

りますが、欠点も多くありました。そのため、2011年には、6to4に関する標準のステータス

を「Historical」(すなわち利用を推奨しない)へと変更するという議論が IETFで交わされまし

た。最終的にHistoricalになることはありませんでしたが、その代わりに、6to4の運用に関す

る注意点を示したRFC 6343†7が作成されました。

その後、2015年には、6to4のためのエニーキャストを廃止するという内容のRFC 7526†8が

発行されています。

6to4の主な欠点としては、以下のようなものが挙げられます。

r プライベート IPv4アドレスを扱えず、NATとの相性が悪いr エニーキャストで運用されることが多く、どのような経路を通過するかわからないr ユーザが気がつかずに障害に巻き込まれる可能性があるr セキュリティ上の懸念r CDNとの相性が悪い

こうした欠点により、IPv6を利用することで IPv4の場合よりも著しく通信品質が悪くなる

ような状況が、6to4によって引き起こされる可能性もありました。それぞれの項目について

下記に要約します。

rNATとの相性が悪い

6to4は、IPv6アドレス中に直接 IPv4グローバルアドレスを代入する仕様です。そのため、

NATに対応していません。後に提案された、Teredo、ISATAP、6rdなどのトンネリングプ

ロトコルはNAT環境下でも利用できるような仕様になっています。

†7 RFC 6343:B. Carpenter, “Advisory Guidelines for 6to4 Deployment”, 2011年8月†8 RFC 7526:O. Troan, B. Carpenter, “Deprecating the Anycast Prefix for 6to4 Relay Routers”, 2015年5月

Page 343: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.1 6to4 329

rどのような経路を通過するかわからない6to4はエニーキャストを利用しているため、ユーザのパケットがどのような経路を通過し

て通信を行うのかを制御しにくいという問題があります。たとえば、同じ国内に存在して

いるサーバとの通信を行うために地球を半周してから戻ってくることもあります。さらに、

IPv6で接続されたエンドユーザからは、途中経路上で6to4による通信が行われていても

IPv4においてパケットが通過している経路を知る手段がないことも多く、どのような経路で

通信が行われているのかを知ることさえできない場合があります。r障害に巻き込まれてもユーザが気づけない6to4リレールータの仕組みを利用していて、ユーザにグローバル IPv6ユニキャストアドレ

スが配られている場合、ユーザは途中経路で6to4が利用されていることに気がつけません。

さらに、エニーキャストを利用して設定を行わずに実現が可能であるため、ユーザがまった

く気がつかずに6to4ルータを運用してしまっている場合もあります。「IPv6が利用できな

いはずなのになぜか利用できていて、IPv6の通信が非常に遅い」という状況に遭遇したら、

6to4ルータが途中経路に存在していることを疑ってみてもいいかもしれません。rセキュリティ上の懸念6to4におけるセキュリティ上の懸念として、6to4を踏み台にしたDDoS攻撃、6to4ネット

ワークへのDDoS攻撃、6to4を利用した通信の秘匿(spoofing traffic)、IPv4ネットワーク

から6to4を経由して近隣探索メッセージを送るといった手法がRFC 3964†9でまとめられて

います。rCDNとの相性が悪い

どのような経路を通過するかわからないという問題と同根ですが、パケットが通過する経路

が冗長になる傾向があるため、CDNとの相性が悪くなりがちです。CDNとの相性が悪くな

ると、大手Webサイトの表示が遅くなったり、ソフトウェア自動アップデートやウィルス

対策ソフトのパターンファイルのダウンロードが遅くなる場合があります。

なお、IETFにおける6to4に関連するさまざまな検討内容については、RFC 2893†10、RFC

3056†11、RFC 3068†12、RFC 3904†13、RFC 3964†14、RFC 5158†15、RFC 6343†16、RFC

6732†17、RFC 7526†18の各RFCを参照してください。

†9 RFC 3964:P. Savola, C. Patel, “Security Considerations for 6to4”, 2004年12月†10 RFC 2893:R. Gilligan, E. Nordmark, “Transition Mechanisms for IPv6 Hosts and Routers”, 2000年8月†11 RFC 3056:B. Carpenter, K. Moore, “Connection of IPv6 Domains via IPv4 Clouds”, 2001年2月†12 RFC 3068:C. Huitema, “An Anycast Prefix for 6to4 Relay Routers”, 2001年6月†13 RFC 3904:C. Huitema, R. Austein, S. Satapati, R. van der Pol, “Evaluation of IPv6 Transition Mechanisms

for Unmanaged Networks”, 2004年9月†14 RFC 3964:P. Savola, C. Patel, “Security Considerations for 6to4”, 2004年12月†15 RFC 5158:G. Huston, “6to4 Reverse DNS Delegation Specification”, 2008年3月†16 RFC 6343:B. Carpenter, “Advisory Guidelines for 6to4 Deployment”, 2011年8月†17 RFC 6732:V. Kuarsingh, Y. Lee, O. Vautrin, “6to4 Provider Managed Tunnels”, 2012年9月†18 RFC 7526:O. Troan, B. Carpenter, “Deprecating the Anycast Prefix for 6to4 Relay Routers”, 2015年5月

Page 344: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

330 第20章 トンネル技術

20.2 Teredo‌Teredo ‌は、6to4の欠点を補うことが可能な仕組みとして、RFC 4380†19で規定されたプロ

トコルです。Microsoft主導で標準化されたことから、Windowsの各種バージョンに標準で搭

載されています。

6to4が IPv4パケット上に直接 IPv6を乗せるトンネリングプロトコルとして実現されている

のに対し、TeredoはUDP上に IPv6パケットを乗せるトンネルとして実現することでNAT越

えを可能としています。仕組みとしては、STUN(第26章参照)を簡易にしたものであるとも

考えられます。

RFC 4380では、Teredoのことを、あくまで他の方法がないときの最終手段(「IPv6 access

of last resort」)として設計されたものと位置づけています。6to4が利用できないNAT環境

下でも機能しますが、IPv6インターネットへのネイティブな接続ができないときに使うため

のものです。グローバル IPv4アドレスが使える環境であればTeredoではなく6to4を使うこ

とを検討してもよいとされています。また、Teredoはトンネルを生成するプロトコルなので、

他のトンネル生成プロトコル同様に、DDoSの踏み台になるなどセキュリティ上の懸念がある

ことには注意が必要です。

Teredoでトンネル化に関与する機器は、Teredoサーバ、Teredoクライアント、Teredoリ

レーと呼ばれます。一般のエンドユーザが利用するのはTeredoクライアントです。Teredoク

ライアントは、Teredoサーバとやり取りすることで、自身が下記の4種類のNATのいずれの

内側にいるのかを最初に判断します。

r Full Cone NAT

NATの外部から特定の IPv4アドレスとポート宛に送信されたパケットは、送信元 IPv4アド

レスによらずNATの内側へと転送されます。rRestricted Cone NAT

NATの外部から送信されたパケットは、過去に内部から送信された IPv4アドレスが送信元

であれば、NATの内側へと転送されます。r Port-restricted Cone NAT

NATの外部から送信されたパケットは、過去に内部から送信された IPv4アドレスとポート

が送信元であれば、NATの内側へと転送されます。r Symmetric NAT

NATの内側と外側とで、パケットのアドレスとポートの情報の対応関係をNAT機器で保持

します。

これら4種類のNATの分類は、NAT機器の裏側に設置された機器と相互にやり取りするた

めの情報を収集するために、STUNと呼ばれるプロトコルの初期の仕様(旧STUN)について

規定したRFC 3489†20における分類です。旧STUNと、NATの4分類については、第26章で

†19 RFC 4380:C. Huitema, “Teredo: Tunneling IPv6 over UDP through Network Address Translations

(NATs)”, 2006年2月†20 RFC 3489:J. Rosenberg, J. Weinberger, C. Huitema, R. Mahy, “STUN - Simple Traversal of User Datagram

Page 345: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.2 Teredo 331

詳しく説明します。

RFC 3489は現在では推奨されておらず、上記のNATの4分類についても問題が指摘されて

います。とはいえ、Teredoの仕組みを理解するには上記のNATの分類について意識しなけれ

ばならない部分があるので、ここでは上記の分類に基づいて解説を進めます。Teredoそのも

ののアップデートについては20.2.5項で説明します。

なお、Teredoは、上記NATの4分類のうち、Symmetric NAT以外で利用可能です。RFC

4380によれば、NAT機器の設定によりSymmetric NATでもTeredoが利用可能であると書か

れていますが、基本的に「できない」と考えてよいでしょう。

20.2.1 Teredoクライアントによる初期構成Teredoクライアントは、IPv6インターネット上のホストと通信する際に、Teredoリレーを

経由します。その際の流れは、TeredoクライアントがFull Cone NATの内側にいるのか、そ

れともRestricted Cone NAT(およびPort-Restricted Cone NAT)の内側にいるのかで異なり

ます。これを事前に判断するために、まずはTeredoサーバとの間でQualification Procedure

と呼ばれる初期構成を実施します。図20.9に、この初期構成の流れを示します。

Teredoクライアントによる初期構成は、Teredoサーバとのやり取りで開始します。そのた

め、Teredoクライアントは、あらかじめTeredoサーバの IPv4を知っている必要があります。

Teredoサービスの利用に認証が必要な場合には、適切な認証情報も必要です。

Teredoサーバでは、一般にUDPポート3544でパケットを受信します。Teredoクライアン

トは、Teredoサーバに向けて、IPv4 UDPにカプセル化された ICMPv6のRouter Solicitation

メッセージを送信します。このときの IPv6パケットの送信元アドレスは、Coneフラグと呼ば

れるビットを1に設定したリンクローカル IPv6アドレスです。

Teredoクライアントから、IPv4 UDPのトンネル経由でRouter Solicitationメッセージを受

け取ったTeredoサーバは、やはり IPv4 UDPにカプセル化して、Router Advertisementメッ

セージをTeredoクライアントに返信します。その際、IPv4パケットの送信元アドレスとして

は、TeredoクライアントからのUDPパケットを受信した IPv4アドレスとは別のアドレスを指

定します。また、Router Advertisementメッセージにおける送信元 IPv6アドレスでは、Cone

フラグを1に設定します。

ここで、もしTeredoクライアントが Full Cone NATの内側に配置されていれば、この

Router Advertisementメッセージを受け取れます。なぜなら、Full Cone NATでは、外部に送

信したUDPパケットの宛先 IPv4アドレスとは別の IPv4アドレスからのUDPパケットもNAT

の裏側に届くからです。つまり、TeredoサーバからConeフラグに1が設定されたRouter

Advertisementメッセージを受け取ったTeredoクライアントは、自身がFull Cone NATの内

側に設置されていると判断できます。

Teredoクライアントが利用しているNAT機器がFull Cone NATではない場合には、送信元

IPv4アドレスが変更されたTeredoサーバからのRouter AdvertisementメッセージがTeredo

Protocol (UDP) Through Network Address Translators (NATs)”, 2003年3月

Page 346: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

332 第20章 トンネル技術

IPv4インターネット

NATTeredoクライアント Teredoサーバ1 Teredoサーバ2

オリジンポートがサーバ1からの

Router Advertisementのものと違ったらsymmetric NAT

同じならRestricted NAT

受け取れればNATはFull Cone

受け取れない場合

Router SolicitationメッセージIPv4ヘッダ

UDPヘッダ

送信先 Toredoサーバ1のアドレス

送信先 3544

ICMPv6ヘッダ

IPv6ヘッダ

Type 133

送信元送信先 全ルータマルチキャスト

リンクローカルアドレス(Coneフラグ1)

Router SolicitationメッセージIPv4ヘッダ

UDPヘッダ

送信先 Toredoサーバ1のアドレス

送信先 3544

ICMPv6ヘッダIPv6ヘッダ

Type 133

送信元 Coneフラグ0

Router SolicitationメッセージIPv4ヘッダ

UDPヘッダ

送信先 Toredoサーバ1のアドレス

送信先 3544

ICMPv6ヘッダIPv6ヘッダ

Type 133

送信元 Coneフラグ0

Router AdvertisementメッセージIPv4ヘッダ

UDPデータ

送信元

オリジンポートとオリジンIPv4アドレス

Teredoサーバ1でないアドレス

ICMPv6ヘッダIPv6ヘッダ

Type 134

Prefix InformationオプションTeredo IPv6アドレス用のプレフィックス

送信元 Coneフラグ1

NATがSymmetricかどうか確かめる

Router AdvertisementメッセージIPv4ヘッダ 送信元 Toredoサーバ1のアドレス

ICMPv6ヘッダIPv6ヘッダ

Type 134

Prefix InformationオプションTeredo IPv6アドレス用のプレフィックス

送信元 Coneフラグ0UDPデータ オリジンポートとオリジンIPv4アドレス

Router AdvertisementメッセージIPv4ヘッダ

UDPヘッダ

送信元 Toredoサーバ1のアドレス

ICMPv6ヘッダIPv6ヘッダ

Type 134

Prefix InformationオプションTeredo IPv6アドレス用のプレフィックス

送信元 Coneフラグ0オリジンポートとオリジンIPv4アドレス

▲ 図20.9 Teredoクライアントによる初期構成

クライアントに届きません。Teredoクライアントは、タイムアウト後、今度はConeフラ

グを0に設定して、Router Solicitationメッセージをカプセル化した IPv4 UDPパケットを

Teredoサーバ宛に送信します。このRouter Solicitationメッセージを受け取ったTeredoサー

バは、Coneフラグを0に設定してRouter Advertisementメッセージを返します。その際に

は、Teredoクライアントから受け取った IPv4 UDPパケットの送信元 IPv4アドレスとUDP

ポートに送信します。

Page 347: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.2 Teredo 333

TeredoサーバからConeフラグ0のRouter Advertisementメッセージを受け取ったTeredo

クライアントは、自身が Symmetric NATの内側に配置されていないことを確認するために、

別のTeredoサーバに対してConeフラグを0にした別のRouter Solicitationメッセージを送

信します。Coneフラグが0のRouter Solicitationメッセージを受け取ったTeredoサーバは、

Coneフラグが0のRouter AdvertisementメッセージをTeredoクライアントに返信します。

もし、別のTeredoサーバから送られてきたメッセージに含まれる送信元ポート番号の情報と、

最初のTeredoサーバから送られてきたメッセージの送信元ポート番号が異なる場合には、途

中のNATでアドレスとポート番号の対応関係が管理されているということなので、Teredoク

ライアントが配置されているのはSymmetric NATの内側ということになり、Teredoを利用で

きないと判断します。

NOTE

Teredoの問題点として、TeredoクライアントとTeredoサーバとの初期設定により外部とつながるまでに時間がかかる点が挙げられます。TeredoクライアントがPCであれば、そのPCが再起動などを行うたびにTeredoサーバとのやり取りが必要になるでしょう。

20.2.2 Teredoクライアントから IPv6インターネットとの通信(FullCone NAT)

初期構成によりNAT環境の種類が検出できたら、TeredoクライアントにTeredo IPv6アド

レス(20.2.4項参照)が設定されます。このTeredo IPv6アドレスを利用することで、Teredo

クライアントはTeredoリレーを経由して IPv6インターネットと通信できるようになります。

Teredoリレーを経由した通信では、通信ごとに適切なTeredoリレーを選ぶ必要がありま

す。Teredoクライアントは、適切なTeredoリレーを知るために、まず ICMPv6 Echo Request

メッセージを IPv4 UDPにカプセル化してTeredoサーバへと送信します。IPv4 UDPにカプセ

ル化された ICMPv6 Echo Requestメッセージを受け取ったTeredoサーバは、IPv4 UDPパケッ

トから ICMPv6パケットを取り出したうえで、IPv6を利用して IPv6ホストへと ICMPv6 Echo

Requestメッセージを転送します。このときの ICMPv6 Echo Requestメッセージの IPv6送信

元アドレスは、TeredoクライアントのTeredo IPv6アドレスです。

ICMPv6 Echo Requestメッセージを受け取った IPv6ホストは、ICMPv6 Echo Replyを返し

ます。ICMPv6 Echo ReplyメッセージはTeredo IPv6アドレスに向けて送信されますが、その

経路は IPv6インターネットに接続された最寄りのTeredoリレーとなります。

Teredoリレーは、IPv6 Teredoアドレスの情報をもとに IPv4 UDPで ICMPv6 Echo Replyパ

ケットをカプセル化し、Teredoクライアントへと IPv4 UDPパケットを送信します。Teredo

IPv6アドレスから、Teredoクライアントが接続しているNATがFull Cone NATであることが

わかるので、Teredoクライアントへ送信される IPv4 UDPパケットの送信元がTeredoリレー

の IPv4アドレスのまま送信されてもUDPパケットがNATを越えることができます。

Teredoクライアントは、Teredoリレーからの IPv4 UDPパケットによって、対象とする IPv6

Page 348: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

334 第20章 トンネル技術

IPv4インターネット IPv6インターネット

Full Cone NATTeredoクライアント Teredoサーバ Teredoリレー IPv6ホスト

Full Cone NATなので越えられる

Teredoリレー経由でトンネル通信

最寄りのTeredoリレーのアドレスがわかる

Echo RequestメッセージIPv4ヘッダ

UDPヘッダ

送信先 Teredoサーバ

ICMPv6ヘッダ

IPv6ヘッダ

Type 128

送信元送信先 IPv6ホスト

IPv6 Teredoアドレス

Echo Requestメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Type 128

送信元送信先 IPv6ホスト

IPv6 Teredoアドレス

Echo Replyメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Type 129

送信元送信先 IPv6 Teredoアドレス

IPv6ホスト

Echo ReplyメッセージIPv4ヘッダ

UDPヘッダ

送信先 Teredoクライアント

ICMPv6ヘッダ

IPv6ヘッダ

Type 129

送信元送信先 IPv6 Teredoアドレス

IPv6ホスト

▲ 図20.10 Teredoクライアントから IPv6インターネットとの通信(Full Cone NAT)

ホストに近いTeredoリレーを知ることができます。その IPv6ホストとの通信を行う際には、

そのTeredoリレーへと IPv4 UDPパケットを送るようになります。

Teredoリレーへでは、受け取った IPv4 UDPパケットから IPv6パケットを取り出して、IPv6

ホストへと送信します。

NOTE

Teredoクライアント同士が通信する場合は、これらとは異なる手順で通信が確立されます。詳しくはMicrosoft TechNet†21などを参照してください。

20.2.3 Teredoクライアントから IPv6インターネットとの通信(Re­stricted Cone NAT)

TeredoクライアントがRestricted Cone NATの内側に配置されている場合は、同じ送信元

からでなければUDPパケットがNAT内部へと転送されないので、Full Cone NATの場合より

も多少複雑です。図20.11に、Restricted Cone NATの場合のTeredoリレーの流れを示しま

す。ポイントは、Teredoサーバの IPv4アドレスを IPv6アドレスに埋め込むところです。

Teredoクライアントが IPv4 UDPでカプセル化した ICMPv6 Router Solicitationメッセージ

をTeredoサーバ向けに送信し、Teredoサーバから IPv6で ICMPv6 Echo Requestが送信され、

†21 Microsoft TechNet - About Teredo : https://technet.microsoft.com/ja-jp/library/aa965905.

aspx

Page 349: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.2 Teredo 335

IPv4インターネット IPv6インターネット

Restrictes Cone NATTeredoクライアント Teredoサーバ Teredoリレー IPv6ホスト

初期設定フェーズで通信が発生しているので越えられる

Bubbleパケットで通信が発生しているので越えられる

最寄りのTeredoリレーのアドレスがわかる

Echo RequestメッセージIPv4ヘッダ

UDPヘッダ

送信先 Teredoサーバ

ICMPv6ヘッダ

IPv6ヘッダ

Type 128

送信元送信先 IPv6ホスト

IPv6 Teredoアドレス

Echo Requestメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Type 128

送信元送信先 IPv6ホスト

IPv6 Teredoアドレス

Echo Replyメッセージ

ICMPv6ヘッダ

IPv6ヘッダ

Type 129

送信元送信先 IPv6 Teredoアドレス

IPv6ホスト

Echo ReplyメッセージIPv4ヘッダ

UDPヘッダ

送信先 Teredoクライアント

ICMPv6ヘッダ

IPv6ヘッダ

Type 129

送信元送信先 IPv6 Teredoアドレス

IPv6ホスト

Teredoリレー経由でトンネル通信

Bubbleパケット

Bubbleパケット

Bubbleパケット

▲ 図20.11 Teredoクライアントから IPv6インターネットとの通信(Restricted Cone NAT)

IPv6ホストが ICMPv6 Echo Replyを送信するところまでは、Full Cone NATの場合とまった

く同じです。

Full Cone NATでは、送信元 IPv4アドレスが異なっていてもNATの内側にUDPパケットが

転送されたので、この ICMPv6 Echo ReplyメッセージをそのままTeredoクライアントに送信

できました。これに対し、Restricted Cone NATでは、NAT変換テーブルに記載された送信

元 IPv4アドレスが一致しないUDPパケットが転送されません。そのため、何もせずにTeredo

リレーからTeredoクライアントに向けて IPv4 UDPパケットでカプセル化した ICMPv6 Echo

Replyメッセージを送信してしまうと、途中のNAT機器でその IPv4 UDPパケットが破棄され

てしまいます。

そこでTeredoリレーでは、ICMPv6 Echo Replyをすぐに返信せず、いったんバッファに入

れておきます。そして、NAT機器に適切なNAT変換テーブルを作成するために、Teredoサー

バ経由でTeredoクライアントからTeredoリレーに向けたUDPによる通信を発生させます。

この通信は、Bubbleパケットと呼ばれます。

Bubbleパケットは、まずTeredoリレーからTeredoサーバ宛に送信されます。Teredoリ

Page 350: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

336 第20章 トンネル技術

レーが適切なTeredoサーバに向けてBubbleパケットを送信できるのは、Teredo IPv6アドレ

スにTeredoサーバの IPv4アドレスが埋め込まれているからです。

TeredoリレーからのBubbleパケットを受信したTeredoサーバは、Teredoクライアント

に向けてBubbleパケットを転送します。TeredoサーバがTeredoクライアントへと送信する

Bubbleパケットには、Teredoリレーの IPv4アドレスとUDPポート番号が含まれています。

このBubbleパケットがNATを越えられるのは、初期構成フェーズで、Teredoクライアント

からTeredoサーバに向けた通信が発生しているからです。

Teredoリレーが送信したBubbleパケットをTeredoサーバ経由で受け取ったTeredoクライ

アントは、Teredoリレーに向けて IPv4 UDPでBubbleパケットを送信します。このBubbleパ

ケットによって、NAT機器内に、TeredoクライアントとTeredoリレーを結ぶNAT変換テー

ブルエントリが作成されます。

Teredoクライアントからの IPv4 UDPによるBubbleパケットを受け取ったTeredoリレー

は、バッファ内で待機させていた ICMPv6 Echo Replyメッセージを IPv4 UDPにカプセル化し

てTeredoクライアントへと送信します。こうして、Teredoクライアントから IPv4 UDPにカ

プセル化された IPv6パケットをTeredoリレー経由で目的の IPv6アドレス宛に送信できるよ

うになります。

20.2.4 Teredo IPv6アドレスTeredo IPv6アドレスの構成を図20.12に示します。

0 3132 63

Teredoサービスプレフィックス Teredoサーバの IPv4アドレス →

64 127

フラグ ポート Teredoクライアントの IPv4アドレス→

▲ 図20.12 Teredo IPv6アドレス

ポートフィールドには、Teredoクライアント側でのUDPポート番号のビットを反転させて

難読化されたものが格納されます。クライアント側の IPv4アドレスも、IPv4アドレスのビッ

トを反転させて難読化されたものが格納されます。

フラグフィールドは図20.13のようなフォーマットとなっています。

64 70 71 72 79

· · · C 0 0 0 0 0 U G 0 · · ·

▲ 図20.13 Teredo IPv6アドレスのフラグフィールド

先頭のCがConeフラグです。TeredoクライアントがFull Cone NATの内側であると認識

された場合に利用される IPv6アドレスではCが1となります。Full Cone NATでなければ0

です。

UGの部分は、IPv6アドレスの拡張EUI-64フォーマットに準拠しており、グローバルではな

いユニキャストであることを示す00となっています。

Page 351: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.3 ISATAP 337

フラグの他の部分はすべて0です。つまり、RFC 4380の仕様でフラグフィールドが取りう

る値は、Coneビットが設定されていない0x0000か、Coneビットが設定されている0x8000

の2種類のみです。

20.2.5 TeredoのアップデートTeredoは、RFC 5991†22とRFC 6081†23によってアップデートされています。

RFC 5991は、Teredoのセキュリティを向上させるためのアップデートです。RFC 4380の

Teredoでは、IPv6アドレスに13ビットの未使用フィールドがありましたが、外部からのアド

レススキャンを避けるために、その部分にランダムな値を使うことが推奨されるようになりま

した。

RFC 5991によるもう1つのアップデートは、Coneビットの廃止です。Teredoでは、NAT

の種類を推測したうえで、その種類がTeredo用 IPv6アドレスに反映されていましたが、その

情報が外部の攻撃者にヒントを与えることになるので廃止されました。

RFC 5991によるアップデートでは、Teredoクライアントの初期構成においてConeビット

を1にしてRouter Solicitationメッセージを送るフェーズを行わないことを求めています。ま

た、TeredoリレーもConeビットを無視するようにすべきであるとしています。これらによ

り、Coneビットが1となるTeredo IPv6アドレスは採用されなくなります。

ただし、RFC 5991では、古いTeredoクライアントとの後方互換性などのために、Teredo

サーバはConeビットを従来どおりに処理しなければならないとしています。

RFC 6081では、RFC 4380で定義されているNAT対応よりもさらに幅広いNAT対応のため

の拡張が定義されています。

20.3 ISATAP‌ISATAP ‌は、自動的に IPv4トンネルを構築して IPv6インターネットへの接続性を提供する

ためのプロトコルです。InformationalなRFCとして、RFC 5214†24で定義されています。

ISATAPは、以下の図のような構成で動作します。

IPv6インターネットIPv4によるトンネル

ISATAPホスト ISATAPルータ

IPv6ヘッダペイロード IPv4ヘッダ IPv6ヘッダペイロード

▲ 図20.14 ISATAP

†22 RFC 5991:D. Thaler, S. Krishnan, J. Hoagland, “Teredo Security Updates”, 2010年9月†23 RFC 6081:D. Thaler, “Teredo Extensions”, 2011年1月†24 RFC 5214:F. Templin, T. Gleeson, D. Thaler, “Intra-Site Automatic Tunnel Addressing Protocol (ISATAP)”,

2008年3月

Page 352: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

338 第20章 トンネル技術

クライアントとなる ISATAPホストは IPv4インターネットのみに接続していますが、ISATAP

ルータを経由して IPv6インターネットとの通信も可能になります。ISATAPルータは、IPv4

と IPv6両方のインターネットに接続されており、ISATAPクライアントから IPv4トンネル経

由で受け取った IPv6パケットを IPv6インターネットへと転送します。IPv6インターネットか

ら ISATAPホストに対する IPv6パケットを受け取った ISATAPルータは、IPv4トンネル経由で

ISATAPホストへと届けます。

このときの IPv4トンネルは、6to4と同様に、IPv4のプロトコル番号フィールドに IPv6を示

す41番を設定することで構築されます。ただし、動作は6to4と異なります。エニーキャスト

を利用して自動的なトンネルを実現する6to4に対し、ISATAPでは以下の3種類の方法でトン

ネルを構築する相手を発見します。

r DNSに登録されたisatap.example.comのような名前r IPv4アドレスの手動設定r DHCPv4のベンダー固有オプション

6to4のようにプロトコルに依存する IPv6プレフィックスを利用せず、通常の IPv6ユニキャ

ストプレフィックスを利用可能なので、ISATAPホストが利用する経路が明確であるという点

も6to4との大きな違いです。さらに、6to4と違って、ISATAPはプライベート IPv4アドレス

にも対応しています。

20.3.1 ISATAP IPv6アドレスISATAPホストが利用する IPv6アドレスは、以下の手順で生成されます。

1. ISATAPホストが ISATAPインターフェース識別子を生成

2. ISATAPホストが ISATAPインターフェース識別子を利用してリンクローカルアドレス

を生成

3. ISATAPホストが ISATAPルータにRouter Solicitationメッセージを送信する

4. ISATAPルータから ISATAPホストへ、Router Solicitationメッセージの返答として

Router Advertisementメッセージが送信される

5. ISATAPホストがRouter Advertisementメッセージの情報を利用して IPv6アドレスを

自動生成

ISATAPでは、ISATAPホストで利用される IPv6アドレスの下位64ビットを ISATAPイン

ターフェース識別子としています。ISATAPインターフェース識別子は、以下のようなフォー

マットです。ISATAPホストの IPv4アドレスが ISATAPインターフェース識別子に埋め込まれ

ているのがポイントです。

64 70 79 80 95 96

· · · 0 0 0 0 0 0 u g 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 IPv4アドレス(32ビット)

▲ 図20.15 ISATAP IPv6アドレスの下位64ビット

これは拡張 EUI-64形式(8.4.1項参照)の IPv6アドレスです。OUIとしては IANAの持つ

Page 353: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.3 ISATAP 339

00-00-5eが利用され、0xfeがそれに続き、その後に IPv4アドレスをつなげる形式になって

います。この拡張EUI-64形式が利用される IPv4アドレスがグローバルに一意性がある IPv4ア

ドレスである場合には、図20.15のuは1となり、そうでない場合にはuは0となります。gは

individual/groupビットを示します。

ISATAPでは、ISATAPホストの IPv6リンクローカルアドレスを生成します。リンクローカ

ル IPv6アドレスのfe80::/10に対して、下位64ビット分の ISATAPインターフェース識別子

を加えたものが、ISATAPホストの IPv6リンクローカルアドレスになります。

ISATAPホストは、IPv4トンネルを経由して、生成された IPv6リンクローカルアドレス

によるRouter Solicitationメッセージを ISATAPルータに送信します。Router Solicitation

メッセージを受け取った ISATAPルータは、IPv4トンネルを経由して ISATAPホストにRouter

Advertisementメッセージを返信します。

ISATAPホストは、受け取ったRouter Advertisementメッセージに記載された IPv6プレ

フィックス情報と ISATAPインターフェース識別子を組み合わせて IPv6アドレスを自動生成し

ます。ISATAPルータは、ISATAPホストの IPv4アドレス情報を含む IPv6アドレスから、適切

な ISATAPホストへと IPv4トンネルを経由して IPv6パケットを送信できます。

20.3.2 セキュリティ上の懸念2011年に、JPRSからWindows VistaおよびWindows 7の ISATAPルータ自動発見方式の

脆弱性が公表されています†25。Windows VistaとWindows 7では、ISATAPホストとなって

ISATAPルータを自動発見する機能がデフォルトで有効に設定されており、ユーザが意図しな

くても通信時にDNSを利用してisatapという名前のホストを検索します。このとき、同実装

では、第三レベルドメイン名までドメイン名空間を遡って検索します。たとえば、subdomain.

example.co.jpというドメイン名に属する ISATAPホストが ISATAPルータを検索するとき、

以下の3つが検索対象となります。

r isatap.subdomain.example.co.jpr isatap.example.co.jpr isatap.co.jp上記3つのうち、最後のisatap.co.jpはexample.co.jpと管理主体が異なる可能性が高

く、結果として意図しない ISATAPルータを経由して通信が行われてしまう可能性がありまし

た。この対策のため、JPRSではisatapを予約ドメイン名とし、登録できないものとしていま

す。これは、ISATAPそのもののプロトコル上の脆弱性というよりも、プロトコルと実装の組

み合わせによる脆弱性です。こういった脆弱性の発生事例も、IPv4/IPv6共存技術を利用する

うえでの落とし穴を知るという意味では重要でしょう。

もちろん、6to4などと同様にトンネル化に伴うセキュリティリスクもあるので注意が必要

です。たとえば、ISATAPルータが任意の IPv4アドレスからのトンネルを受け付ける設定にし

†25 「Windows Vista/7における ISATAPルーター自動発見方式の脆弱性について」:http://jprs.jp/tech/

notice/2011-03-17-isatap-router-auto-discovery.html

Page 354: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

340 第20章 トンネル技術

ていると、攻撃の踏み台にされる可能性があります。トンネル技術全般のセキュリティリスク

に関しては20.7節で改めて説明します。

6over4

6to4のようにエニーキャストを使うのではなく、IPv4マルチキャストを利用したトンネル技術によって IPv6インターネットへの接続性を確保しようという ‌6over4‌という技術があります。6over4は、RFC 2529†26で規定されています。6to4など他のいくつかの IPv6用トンネル技術とともに、ISATAPなどの技術が考察されるうえで影響を与えたプロトコルだといえます。しかし、6over4はまったくと言っていいほど実運用で使われていません。その理由は、6over4が IPv4マルチキャストに依存することにあります。グローバルインターネットでの IPv4マルチキャストそのものが利用されていないことから、6over4を実際に利用するのも困難というわけです。

20.4 6rd‌6rd‌は、6to4同様に、ISPから提供されている IPv4ネットワークを利用してユーザが IPv6イ

ンターネットへ接続できるようにするプロトコルです。6rdは、IPv4ネットワークを利用して

IPv6インターネットへと接続するステートレスなトンネリングプロトコルであり、本書執筆時

点では実用性が有望視されている技術です。

6rdは、2007年に、フランスの ISPであるFreeにて6to4を改造することで開発されました。

2010年の1月に Informationalとして発行されたRFC 5569†27では、5週間という短い期間

で、Freeが150万契約の顧客に対して IPv6接続可能な環境を提供したことが紹介されていま

す。6rdの詳細なプロトコル仕様を規定するStandard TrackのRFCは、2010年8月に発行さ

れたRFC 5969†28です。

6rdは ISPが主体となって IPv6インターネットへの接続性を提供するモデルです。これは、

6to4が ISPの助けを借りずにユーザが独自に IPv6ネットワークへと接続可能なモデルだった

のとは対照的だといえるでしょう。ISPの IPv6アドレスプレフィックスを利用して運用できる

ので、あらかじめ決められた IPv6プレフィックスを利用する6to4のようにどのような経路を

たどるかわからなくなったり、そもそも到達性を確保できるかどうかもわからない状況になっ

たりせず、経路の制御がしやすいという特徴があります。

ルータにおける負荷が少なく、CGN(Carrier Grade NAT)などの環境下でも利用可能であ

り、全体的に6to4が抱える各種欠点を改善した設計になっている6rdは、各種通信機器ベン

ダーによって実装され、キャリアでも採用されるようになりました。日本でも、2010年4月

†26 RFC 2529:B. Carpenter, C. Jung, “Transmission of IPv6 over IPv4 Domains without Explicit Tunnels”,

1999年3月†27 RFC 5569:R. Despres, “IPv6 Rapid Deployment on IPv4 Infrastructures (6rd)”, 2010年1月†28 RFC 5969:W. Townsley, O. Troan, “IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) – Protocol

Specification”, 2010年8月

Page 355: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.4 6rd 341

よりYahoo! BBで6rdサービスが提供開始されています†29。

20.4.1 6rd概要6rdは、ISPが用意した IPv6プレフィックスと、家庭に設置されるSOHOルータのようなCPE

(Customer Premises Equipment)に ISPが割り当てた IPv4アドレスを利用して、自動的にト

ンネルを生成するプロトコルです。CPEと6rd Border Relayの間で通信ができればよいので、

CPEに割り当てられる IPv4アドレスが10.0.0.0/8などのプライベート IPv4アドレスでも利

用可能です。図20.16に6rdの概要を示します。

IPv4インターネット

203.0.113.5/32 2001::db8::/32

6rd Border Relay

IPv6ネットワーク2001:db8:cb00:7105::/64

グローバルアドレス空間

(cb00:7105の十進表記は)203.0.113.5

IPv6インターネット6rd対応CPE

IPv4トンネル

▲ 図20.16 6rd概要

CPEは、6rd Border Relayの IPv4アドレスや、後述する6rd delegated prefixなどの情報

を、DHCPもしくはPPPoEなどから自動的に取得します。家庭内 IPv6ネットワークから送信

された IPv6パケットは、ISPによる IPv4ネットワークをトンネルによって通過し、6rd Border

Relayで脱カプセル化されて IPv6インターネットへと送信されます。

IPv6インターネットから家庭内 IPv6ネットワークへは、6rd Border Relayを経由して IPv4

へとカプセル化され、ISPによる IPv4ネットワークを通過し、CPEで IPv4パケットから脱カプ

セル化されて IPv6パケットが届きます。

20.4.2 6rdの IPv6アドレスフォーマット6rdで利用される IPv6アドレスの構成を図20.17に示します。6rd prefixとCPEに付けられ

ている IPv4アドレスは6rd delegated prefixと呼ばれます。この6rd delegated prefixをもと

に、各パケットが適切なCPEまで転送されます。

nビット︷ ︸︸ ︷ oビット︷ ︸︸ ︷6rd Prefix IPv4アドレス

→mビット︷ ︸︸ ︷ 128−n− o −mビット︷ ︸︸ ︷

サブネット ID インターフェース識別子→

▲ 図20.17 6rdの IPv6アドレスフォーマット

†29 「ソフトバンクグループによる IPv6インターネットサービスの提供について」:http://www.softbankbb.co.jp/ja/news/press/2010/20100223_01/

Page 356: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

342 第20章 トンネル技術

6rdの IPv6アドレスにおけるサブネット ID部分やインターフェース識別子部分は4.8節で

紹介した IPv6グローバルユニキャストアドレスのサブネット IDと同じです。このため、6rd

の IPv6アドレスを外部から見ると、普通の IPv6グローバルユニキャストアドレスと見分けが

つきません。

20.5 4rd‌4rd ‌は、IPv4パケットを IPv6でカプセル化するステートレスなプロトコルとして提案され

ました。IPv4インターネットへの接続性しかない環境で IPv6インターネットへの接続性を提

供する6rdとは逆の動作をするプロトコルだといえます。

6rdは、IPv4インターネットが主流のインターネットにおいて IPv6インターネットへの接

続性を確保するためのプロトコルであり、IPv6が普及する前の環境での利用が想定されていま

す。これに対し、4rdは、IPv6が普及したあとの環境を想定したプロトコルです。4rdを利用す

ることで、たとえばバックボーンネットワークを IPv6のみで構築することが可能になります。

4rdの必要性については、“Motivations for Carrier-side Stateless IPv4 over IPv6 Migration”

と題された Internet Draft†30が参考になるでしょう。

なお、4rdは6rdの逆の発想であると同時に、CGN運用形態のひとつとして、後述するA+P

の思想も含んでいます。22.4節で詳しく説明します。

6rdと4rdの「rd」の意味

公式には、6rdの rdは rapid deployment、4rdの rdは residual deploymentと、それぞれ異なる単語を表しています。とはいえ、4rdという名称は6rdを意識して付けられたものであることは間違いないでしょう。ちなみに、6rdの「rd」というのは、6rdの提案者であるRemi Despres氏の名前のイニシャルに由来しているのではないかという推測もあります(Remi Despres氏は、4rd

のドラフトの著者の一人でもあります)。

20.6 6PE‌6PE‌(IPv6 Provider Edge router)は、既存の IPv4 MPLS網を変更せずにそのまま利用し、エッ

ジルータで対応することによって IPv6ネットワーク同士を接続する技術です。RFC 4798†31で

規定されています。図20.18に6PEの概要を図示します。

†30 M.Boucadair, Ed., S.Matsushima, Y.Lee, O.Bonness, I.Borges, G.Chen, “Motivations for Stateless IPv4 over

IPv6 Migration Solutions”, 2012年 11月(2013年 3月に期限切れ), https://tools.ietf.org/html/

draft-ietf-softwire-stateless-4v6-motivation-05†31 RFC 4798:J. De Clercq, D. Ooms, S. Prevost, F. Le Faucheur, “Connecting IPv6 Islands over IPv4 MPLS

Using IPv6 Provider Edge Routers (6PE)”, 2007年2月

Page 357: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

20.7 トンネル技術とセキュリティ 343

IPv4/IPv6ネットワーク IPv4/IPv6ネットワーク

IPv4によるMPLS網

IPv6 Provider EdgeRouter(6PE)

IPv6 Provider EdgeRouter(6PE)

▲ 図20.18 6PE概要

6PEルータは、IPv4によるMP-BGPを利用して IPv6の経路情報を交換します。BGPのNext

Hopフィールドを利用して6PEルータの IPv4アドレスをMP-BGPでの IPv6経路交換に使うこ

とで、トンネルなどの設定を行わずに、IPv4 MPLS網でLSP(Label Switched Path)が構築で

きるという仕組みです。

20.7 トンネル技術とセキュリティトンネル技術には、どの手法を採用する場合であっても共通して考慮が必要になるようなセ

キュリティ上の課題がいくつかあります。15.10節でも説明しましたが、改めて要点をまとめ

ると次のようになります。

r ファイアウォール製品などが未対応のトンネル技術がセキュリティ機能の迂回に利用される可能性があるr 送信元を偽装する目的でトンネル技術が利用される可能性があるr 外部から内部への攻撃にトンネル技術が利用される可能性があるr トンネルで利用する特別なアドレスから利用環境をプロファイリングされる可能性があるr トンネルサーバの設定を変更することによるMan-in-the-Middle攻撃の可能性がある

Page 358: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 359: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第21章

IPv4/IPv6変換技術

本章で解説するのは、IPv4から IPv6へと変換したり、IPv6から IPv4へと変換したりする変

換技術です。IPv6接続性を提供することを目的としたトンネル技術とは異なり、変換技術は各

ユーザ環境をデュアルスタックにせずに IPv4と IPv6両方のインターネットを利用可能としま

す。たとえば、エンドユーザは IPv4インターネットと通信をしているつもりで IPv6インター

ネット上の相手と通信できたり、逆に IPv6から IPv4へと通信する仕組みもあります。

21.1 IPv4/IPv6変換の枠組み現在のインターネットの大部分は IPv4で構成されており、さまざまなサービスを提供して

いるサーバの多くは IPv4のみで運用されています。そのため、IPv6のみで構成されているシ

ングルスタックネットワークにおいて、何らかの手段で IPv4インターネットとの通信が要求

される場合があります。IPv4と IPv6には直接的な互換性がないので、IPv6シングルスタック

ネットワークで IPv4インターネットとの通信を行うためには、IPv6による通信を IPv4の通信

へと変換する仕組みが必要です。

本書執筆時点では、IPv6と IPv4を変換するシナリオとして、RFC 6144†1が提案されていま

す。RFC 6144で定義されている IPv4/IPv6変換フレームワークでは、以下の5つの構成要素

が必要であるとしています。

r IPアドレスの変換r IPパケットおよび ICMPパケットの変換r 変換ステートの保持r NAT64とDNS64r アプリケーション用のALG(Application Layer Gateway)

IPv4/IPv6変換では、IPv4アドレスがどのような IPv6アドレスに変換され、逆に IPv6アド

レスがどのような IPv4アドレスに変換されるのかを定義する必要があります。それらを大別

†1 RFC 6144:F. Baker, X. Li, C. Bao, K. Yin, “Framework for IPv4/IPv6 Translation”, 2011年4月

Page 360: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

346 第21章 IPv4/IPv6変換技術

すると、IPv6アドレスに IPv4アドレス情報を埋め込むステートレスな変換(RFC 6052†2)と、

IPv4アドレスと IPv6アドレスの変換をステートフルに行う方法があります。どのような方法

を採用するかは、用途や想定される環境によって変わります。

IPパケットおよび ICMPパケットの変換については、RFC 6145†3で、SIIT(Stateless IP/ICMP

Translation Algorithm)として考察されています。RFC 6145では、ステートレスとステート

フルな変換の両方について記述されています。SIITに関しては21.2節で説明します。

NAT64は、IPv4/IPv6変換を実現するための具体的な仕組みであり、RFC 6146†4で規定さ

れています。IPv4プライベートアドレスと IPv4グローバルアドレスを変換する通常のNATに

対し、IPv6アドレスと IPv4アドレスを変換するNAT64では、特殊なステートの保持が要求さ

れます。NAT64に関しては、21.3節で説明します。

NOTE

IPv4グローバルアドレスと IPv4プライベートアドレスの変換を行う通常のNATは、NAT44と表現されることがあります。

インターネットでの一般的な通信では、名前解決の結果として得られる IPアドレスを持つ相

手と通信を行うことになるので、DNSを利用した名前解決においても IPv4/IPv6変換が必要で

す。IPv4のためのAレコードを IPv6のAAAAレコードへと変換するDNS64はRFC 6147†5で定

義されています。DNS64に関しては、21.5節で説明します。

さらに、ペイロード中に IPv4アドレスに関する情報を含むプロトコルは、IPv4/IPv6変換だ

けでは通信できません。そのような場合にはALG(Application Layer Gateway)が利用され

ます。ALGはNAT44でも利用されますが、IPv4/IPv6変換ではNAT44の場合よりも複雑にな

ることがあります。たとえば、FTPでは IPv4と IPv6とで異なる手法によりパッシブモードを

実現しているので、ALGがその差異を吸収する必要があります。IPv4/IPv6変換のためのALG

に関しては、21.6節で説明します。

21.1.1 廃止されたNAT­PT

IPv4/IPv6変換は、かつてはNAT-PTという仕組みで議論されていました。NAT-PTはRFC

2766†6で規定されています。しかし、さまざまな問題があったことから、2007年に廃止され

ています。さらに、2011年に発行されたRFC 6052、RFC 6144、RFC 6145、RFC 6146、RFC

6147、RFC 6384†7のRFC群によって、NAT-PTは事実上置き換えられました。これらのプロ

†2 RFC 6052:C. Bao, C. Huitema, M. Bagnulo, M. Boucadair, X. Li, “IPv6 Addressing of IPv4/IPv6 Translators”,

2010年10月†3 RFC 6145:X. Li, C. Bao, F. Baker, “IP/ICMP Translation Algorithm”, 2011年4月†4 RFC 6146:M. Bagnulo, P. Matthews, I. van Beijnum, “Stateful NAT64: Network Address and Protocol

Translation from IPv6 Clients to IPv4 Servers”, 2011年4月†5 RFC 6147:M. Bagnulo, A. Sullivan, P. Matthews, I. van Beijnum, “DNS64: DNS Extensions for Network

Address Translation from IPv6 Clients to IPv4 Servers”, 2011年4月†6 RFC 2766:G. Tsirtsis, P. Srisuresh, “Network Address Translation - Protocol Translation (NAT-PT)”, 2000

年2月†7 RFC 6384:I. van Beijnum, “An FTP Application Layer Gateway (ALG) for IPv6-to-IPv4 Translation”, 2011

年10月

Page 361: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

21.1 IPv4/IPv6変換の枠組み 347

トコルによって、RFC 2765†8で定義されていたSIITも更新されています。

RFC 2765とRFC 2766の新しいRFC群による更新を整理すると下記のようになります。

r RFC 2765のSIITが更新されて、RFC 6145にr IPv4/IPv6変換のフレームワークをRFC 6144で解説r IPv4/IPv6変換時の IPアドレス変換に関してRFC 6052で解説r RFC 2766の IPv4/IPv6変換のうち、ステートフルな部分がNAT64としてRFC 6146にr RFC 2766のDNS ALGに関する部分が、DNS64としてRFC 6147にr RFC 2766で解説されているFTP ALG対応が、RFC 6384に

NAT-PTが抱えていた問題は、RFC 4966†9としてまとめられています。問題の一例として

は、フラグメンテーションの扱いが挙げられます。たとえば、TCPやUDPなどのトランスポー

ト層情報を活用するステーレスな変換機が、1番めのフラグメント以降のフラグメントを変換

できません。これは、図21.1のようにトランスポート層ヘッダが最初のフラグメントのみに

含まれ、それ以降のフラグメントには含まれないことから、各フラグメントを見てもポート番

号がわからないことに起因する問題です。フラグメンテーションに対応するためには、何らか

のステートを保持し、断片化された複数のパケットを関連づける必要があります。

MTUが1500のリンク MTUが576のリンクルータ

IPヘッダUDPヘッダIPヘッダIPヘッダUDPヘッダ IPヘッダ

2つめと3つめのフラグメントにはUDPヘッダが含まれない

1400オクテット

▲ 図21.1 IPv4フラグメンテーションの例

この問題はNAT-PTに限った話ではなく、変換機やトランスポート層におけるポート番号を

利用する仕組み全般に適用されます。実際、RFC 3027†10では、NATにおける IPフラグメン

テーションの処理における同様の問題が紹介されています。

RFC 4966には、DNS-ALGがNAT-PTの一部である必要があるかといった疑問点も記載され

ています。これについては、NAT-PTに代わる枠組みではNAT64とDNS64が別々のプロトコ

ルとして定義されています。たとえば、22.6節で紹介する464XLATは、SIITとNAT64のみを

要求しており、DNS64なしでも利用可能な設計になっています。

新しい枠組みは、RFC 4966で挙げられている問題点を考慮したうえで規定されているもの

ですが、すべての問題が解決しているわけではありません。たとえば、プロトコル中に IPアド

レス情報が埋め込まれているのでALGでの対応が必要である点は、NAT64でも同様です。ま

†8 RFC 2765:E. Nordmark, “Stateless IP/ICMP Translation Algorithm (SIIT)”, 2000年2月†9 RFC 4966:C. Aoun, E. Davies, “Reasons to Move the Network Address Translator - Protocol Translator

(NAT-PT) to Historic Status”, 2007年7月†10 RFC 3027:M. Holdrege, P. Srisuresh, “Protocol Complications with the IP Network Address Translator”,

2001年1月

Page 362: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

348 第21章 IPv4/IPv6変換技術

た、DNSSECへの対応についても、DNS64はNAT-PTと同様の問題を抱えています†11。

21.2 SIIT‌SIIT ‌は、図21.2のように、 ‌XLAT ‌と呼ばれる IPv4/IPv6変換機器が IPv4パケットと IPv6パ

ケットの変換を行う構成になっています。

IPv4ネットワークXLAT

IPv6ネットワーク

▲ 図21.2 IPv4/IPv6変換モデル

IPv4/IPv6変換といって真っ先に思い浮かぶのは、送信元や宛先 IPアドレスの変換であった

り、TCPとUDPなどのトランスポート層プロトコルのポート番号の変換であったりといった、

IPv4におけるNATのような機能かもしれません。しかし、SIITそのものでは、そのような変

換については定義していません。SIITでは、IPv4および IPv6パケットそのものをどのように

変換するかや、ICMPをどのように扱うべきかといった内容が規定されています。IPv4と IPv6

はまったく異なるプロトコルなので、IPv4/IPv6変換では IPv4プロトコルと IPv6プロトコルの

差異を考慮する必要があるのです。

まず、基本的なところでは、どの IPv4ヘッダフィールドがどの IPv6ヘッダフィールドに対応

しているのかが記述されています。変換時に、IPv4と IPv6のプロトコルの違いがあるフィー

ルドもあります。たとえば、IPv4のTotal Lengthフィールドは IPv4ヘッダとオプションの長

さを含む値ですが、IPv6のPayload Lengthフィールドの値には IPv6ヘッダの長さは含まれま

せん。

ICMPの扱いも難しいポイントです。そもそも、IPv4では IGMPとして別のプロトコルであっ

たメッセージが IPv6では ICMPv6に含まれますし、IPv4の ICMPと IPv6の ICMPv6とでは仕組

みが異なるので、そのままでは変換が不可能なメッセージもあります。たとえば、IPv4と IPv6

では最小MTUが異なるので、IPv4側からの ICMPv4 Packet Too Bigメッセージが示すMTU

が、IPv6の最小値である1280を下回る可能性があります。

また、IPv4/IPv6変換機はルータとして動作します。そのため、パケットを変換して転送す

るときにはHop LimitもしくはTTLを1減らします。Hop LimitもしくはTTLが0になった場

合、ICMPv4のTTL Exceed、もしくは ICMPv6のHop Limit Exceedの各エラーメッセージが

送信されます。

IPv4と IPv6でのフラグメンテーションの違いにも注意が必要です。IPv4ではフラグメン

テーションが途中ルータでも起こりますが、IPv6では送信元においてのみフラグメンテーショ

ンが行われます。フラグメンテーションの処理とPath MTU Discoveryは、SIITにおいて熟慮

†11 RFC 2766のSection 7.5参照。

Page 363: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

21.3 ステートフルNAT64 349

が必要な要素だといえます。

SIITの制約をまとめると以下のようになります。

r IPv4ヘッダのオプションは変換されないr IPv6拡張ヘッダは、フラグメントヘッダを除くすべての IPv6ヘッダは変換されないr UDPチェックサムが0となっているフラグメント化された IPv4 UDPパケットの変換は行

われないr フラグメント化された ICMPv4および ICMPv6パケットは変換されない

21.2.1 RFC 2765による旧SIITとの違いRFC 6145は、2000年に発行された旧SIITのRFC 2765を置き換えるものです。RFC 6145

とRFC 2765では内容も大幅に変わっています。

RFC 2765には、想定されるシナリオや適用範囲なども書かれていますが、それらはフレー

ムワークを説明するRFC 6144として別になりました。IPアドレスフォーマットの変換に関し

ても、RFC 6052として別になっています。さらに、RFC 2765ではステートフルな変換の詳細

についても記述されていますが、これもNAT64のRFC 6146として別になりました。

その他、フラグメントが関連するパケットや ICMPエラーの処理も大きく変わっています。

21.3 ステートフルNAT64RFC 6146で定義されている ‌NAT64 ‌の主な想定環境は、IPv6ネットワークに接続された

ユーザから開始される通信がNAT64デバイスによって変換され、IPv4ネットワークに接続さ

れた機器と通信を行うというものです。NAT64では、IPv6アドレスと IPv4アドレスの変換が

行われますが、IPv4アドレスが貴重な資源なので、さまざまな IPv6アドレスが同一の IPv4ア

ドレスを共有しながら利用するという用途が想定されています。そのため、NAT64では IPア

ドレス情報だけでの変換は行わず、TCPとUDPのポート番号を同時に利用したマッピングが

主な利用方法になりそうです。その際、IPv6アドレスとTCP/UDPポート番号、IPv4アドレス

とTCP/UDPポート番号のバインディング情報は、NAT64機器によって保持されます。そのた

め、NAT64のことをステートフルNAT64とも呼ぶこともあります。

NAT64とDNS64を利用した単純なネットワーク構成を図21.3に示します。

IPv4インターネット

NAT64

DNS64(名前解決)

IPv6ネットワーク

2001::db8::1192.0.2.1

▲ 図21.3 NAT64利用例

Page 364: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

350 第21章 IPv4/IPv6変換技術

IPv6ネットワーク内に接続された機器は、DNS64などの仕組みを利用して、IPv4アドレス

が埋め込まれた IPv6アドレスを取得します。IPv4アドレスが埋め込まれた IPv6アドレスの

フォーマットは、RFC 6052で規定されています(21.4節参照)。NAT64機器は、宛先 IPv6ア

ドレスから宛先 IPv4アドレスを生成します。

NAT64は、IPv6と IPv4の変換を行いますが、ネットワーク層の情報だけではなくTCPや

UDPのポート番号を活用したNAPT機能をほぼ前提としています。そのため、NAT64機器は、

IPv4のNAPTと同様の要求を満たす必要があります。具体的には、下記のようなRFCへの対

応がRFC 6146によって求められています。

r RFC 4787†12:NATによるUDPの扱いを規定r RFC 5382†13:NATによるTCPの扱いを規定r RFC 5508†14:NATによる ICMPの扱いを規定

また、ICE(Interactive Connectivity Establishment)など、NAT越え技術との互換性も求

められています。ICEについては、RFC 5245†15をご覧ください。

21.4 IPv4/IPv6変換機用IPv6アドレスIPv4/IPv6変換機で利用するための IPv6アドレスフォーマットはRFC 6052で定義されてい

ます。RFC 6052ではプレフィックス長が32、40、48、56、64、96の6種類が定義されてい

ますが、それぞれのフォーマットは図21.4のようになっています。

32 40 48 56 64 72 80 88 96 104

プレフィックス IPv4 u サフィックス32

プレフィックス IPv4 u IPv4 サフィックス40

プレフィックス IPv4 u IPv4 サフィックス48

プレフィックス IPv4 u IPv4 サフィックス56

プレフィックス u IPv4 サフィックス64

プレフィックス IPv496

▲ 図21.4 IPv4/IPv6変換機用 IPv6アドレスフォーマット

それぞれの IPv6アドレスの中に IPv4アドレスが埋め込まれることで、IPv4と IPv6アドレス

の変換をステートレスに行えるフォーマットになっています。

†12 RFC 4787:F. Audet, C. Jennings, “Network Address Translation (NAT) Behavioral Requirements for

Unicast UDP”, 2007年1月†13 RFC 5382:S. Guha, K. Biswas, B. Ford, S. Sivakumar, P. Srisuresh, “NAT Behavioral Requirements for

TCP”, 2008年10月†14 RFC 5508:P. Srisuresh, B. Ford, S. Sivakumar, S. Guha, “NAT Behavioral Requirements for ICMP”, 2009

年4月†15 RFC 5245:J. Rosenberg, “Interactive Connectivity Establishment (ICE): A Protocol for Network Address

Translator (NAT) Traversal for Offer/Answer Protocols”, 2010年4月

Page 365: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

21.5 DNS64 351

図21.4のuが示している64ビットめから71ビットめは、RFC 4291†16で定義されているホ

スト識別子フォーマットとの互換性のために予約されており、すべてゼロにセットされます。

RFC 6052では、IPv4/IPv6変換機専用の IPv6アドレスプレフィックスも定義されています。

具体的には、64:ff9b::/96というプレフィックスに対して、下位32ビットを IPv4アドレス

とします。この IPv6アドレスは、IPv6アドレスのチェックサムが IPv4アドレスと同じになる

ようになっています。先頭16ビットの0064と、17ビットめから32ビットめまでのff9bの

チェックサムはゼロになります。

21.4.1 ローカルな管理ドメイン内で使用するプレフィックスRFC 8215では、ローカルな管理ドメイン内で IPv6/IPv4変換を利用する際に利用可能なプ

レフィックスとして、64:ff9b:1::/48が予約されています。下位32ビットに IPv4アドレス

を埋め込むという使い方は、RFC 6052の64:ff9b::/96と同じです。

RFC 6052で予約された64:ff9b::/96は、プライベート IPv4アドレスへの変換を行うた

めの用途が禁止されているため、IPv6からプライベート IPv4アドレスへ変換するときには利

用できませんでした。RFC 8215では、そういった用途での利用も可能な IPv6プレフィックス

を予約しています。

RFC 8215で定義されている64:ff9b:1::/48は、RFC 6052で定義されている64:ff9b:

:/96のようなチェックサム中立性がありません。

21.5 DNS64一般的なアプリケーションが、IPv6での通信を行うためには、通信相手の宛先に関してDNS

を利用した名前解決を行った結果として IPv6アドレスが得られる必要があります。しかし、

IPv4アドレスのみで運用されているサーバも多く、DNSが IPv4アドレスだけしか返さないこ

とも多いのが実状です。RFC 6147で定義されている ‌DNS64‌は、IPv4アドレスを示すAレコー

ドから IPv6を示すAAAAレコードを合成するための仕組みです。いくつかの制約はあるもの

の、SIITとステートフルNAT64、それにDNS64を組み合わせて利用することで、IPv6シング

ルスタックを利用しているユーザ機器で特別な変更を施さずに、IPv4インターネットにつな

がっている機器と通信できる環境を構築可能です。

DNS64は、NAT64における IPv4アドレスと IPv6アドレス変換規則と連携して動作する必

要があります。IPv4アドレスから生成される IPv6アドレスに利用されるプレフィックス情報

は、DNS64とNAT64の間で同じものが利用される必要があります。DNS64とNAT64の間で

いくつかの設定情報が共有される必要はありますが、DNS64とNAT64の間で個別セッション

に関するステートは共有されません。そのため、動作としては、DNS64とNAT64は独立して

います。

†16 RFC 4291:R. Hinden, S. Deering, “IP Version 6 Addressing Architecture”, 2006年2月

Page 366: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

352 第21章 IPv4/IPv6変換技術

21.5.1 NAT64とDNS64を利用したシングルスタック運用事例RFC 6586†17では、それまで IPv4と IPv6のデュアルスタックで運用されていたネットワー

クを IPv6シングルスタックへと変更し、少ないユーザをその環境に移動させた実例が要約さ

れています。NAT64とDNS64を利用して IPv4インターネットへの接続性を確保しつつ、ユー

ザに対して IPv6シングルスタックサービスを提供した経験を文書化したものといえるでしょ

う。IPv6対応していないアプリケーションや、IPv6環境で実行されたことがないコードのバ

グへの対処といった課題はあるものの、IPv6シングルスタック環境であっても概ね問題なく

ユーザが利用できたと結論づけられています。

IPv4と IPv6のデュアルスタック環境では、IPv6での接続をアプリケーションが試みて失

敗し、IPv4での接続を試みるというフォールバックが発生することがあります。NAT64と

DNS64で端末を IPv6シングルスタックにすると、IPv6から IPv4へのフォールバックが発生し

ないという効果もあります。

一方で課題も少なくありません。RFC 6586の環境では、FTP(RFC 6384)以外のALGを提

供しなかったところ、インスタントメッセージサービスやVoIPアプリケーションなど、IPv4

アドレス情報をプロトコル中で運ぶアプリケーションが動作しなくなったとあります。イン

ターネットを利用するゲームの多くも利用不能だったようです。その他、ファイアウォールの

IPv6対応が不十分であるという課題にも直面したと記述されています。

HTMLに IPv4アドレスが直接記述されているような場合、DNSが利用されないのでDNS64

による変換が行われず、Webページの一部が見られなくなる可能性についても紹介されていま

す。NAT64とDNS64による IPv6シングルスタックへの移行は、用途を選んで問題が発生しな

い範囲であればサービスの提供が可能である、というのが実情なのかもしれません。

21.6 ALGIPv4のNAT同様に、IPv4/IPv6変換においても ‌ALG ‌(Application Layer Gateway)は重要

な要素です。ペイロード中に IPアドレス情報が含まれているプロトコルは、ALG機能がなけ

れば通信を正常に行えません。

本書執筆時点でRFC化されているのは、FTPのALGのみとなっています。

21.6.1 IPv6から IPv4への変換用FTP ALG

IPv6から IPv4への変換用のFTP ALGは、RFC 6384†18で定義されています。

FTPそのものは、RFC 959†19で定義されている古いプロトコルです。FTPには、サーバがク

ライアントに対して接続を張るアクティブモードと、サーバが新たなポートを開いてクライア

ントを待つパッシブモードの、2つのモードがあります。アクティブモードとパッシブモード

の両方とも、IPv4アドレスがコマンド中に登場します。アクティブモードのPORTコマンドの

引数に IPv4アドレスが含まれ、パッシブモードのPASVコマンドに対するサーバ側回答に IPv4

†17 RFC 6586:J. Arkko, A. Keranen, “Experiences from an IPv6-Only Network”, 2012年4月†18 RFC 6384:I. van Beijnum, “An FTP Application Layer Gateway (ALG) for IPv6-to-IPv4 Translation”, 2011

年10月†19 RFC 959:J. Postel, J. Reynolds, “File Transfer Protocol”, 1985年10月

Page 367: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

21.6 ALG 353

アドレスが含まれます。

このように、RFC 959におけるFTPコマンドは IPv4に限定され、IPv6では利用できません。

そのため、RFC 2428†20でFTPの IPv6拡張が定義されています。そこで定義されているのは、

アクティブモード用のEPRT(Extended Port)コマンドと、パッシブモード用のEPSVコマン

ドです。これらのコマンドは、IPv4と IPv6の両方で利用可能です。

IPv6で FTPを利用する場合、EPSVもしくはEPRTコマンドを利用することになりますが、

IPv4のみで運用されている既存のすべてのFTPサーバがそれらに対応しているわけではあり

ません。対応はしていても挙動がおかしいFTPサーバもあるので、RFC 6384では、EPSVから

PASVの変換、EPRTからPORTへの変換手法が定義されています。

RFC 6384では、FTP ALGの設定や状態を知るためのALGSコマンドの実装も要求していま

す。ALGSコマンドにより、EPSVからPASVへの変換をFTP ALGで行うべきであるかどうかを

設定可能です。また、設定されている変換内容を確認できます。

なお、RFC 6384では、セキュリティ上の懸念として、暗号化しないFTPを使うことの危険

性について注意されています。FTPにはTLSによる暗号化の仕組みもありますが、ALGがそれ

に対応しており、かつ、ALGが介在しても通信が可能な方式でなければ、ALG経由で利用でき

るのは暗号化しない方式だけになります。

21.6.2 TURNRFC 5766で定義されているTURNは、IPv4のみ対応しており、IPv6は範疇外です。IPv6に

対応したTURNは、RFC 5776に対する拡張として、RFC 6156で別途定義されています。

RFC 5766のTURNは、IPv4と IPv4での通信のみを対象としていますが、RFC 6156は IPv4

と IPv6の間でのリレーも対象としています。このため、RFC 6156の拡張によって、IPv4ノー

ドと IPv6ノードの通信を行うためのALGとしてTURNを利用することもできます。

TURNに関しては、26.5節で改めて扱います。

†20 RFC 2428:M. Allman, S. Ostermann, C. Metz, “FTP Extensions for IPv6 and NATs”, 1998年9月

Page 368: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 369: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第22章

IPv4/IPv6共存技術の運用形態

さまざまな技術を組み合わせることで IPv4/IPv6共存技術を実現する手法がいろいろ提案さ

れています。これらの技術は、環境や事業者の運用形態に応じて最適なものが決まるため、そ

れぞれ優劣をつけるというよりも、各自にあったものを選択することになるでしょう。

22.1 DS­Lite‌DS-Lite ‌(Dual-Stack Lite)は、基幹ネットワークを IPv6だけで構築したうえでグローバル

IPv4アドレスを節約する手法です。RFC 6333†1で規定されています。24.3.2項で説明する

CGN(Carrier Grade NAT)を利用したNAT444と違い、NATが1段で済む点がDS-Liteの特

徴です。

IPv4プライベートアドレス

IPv6グローバルアドレス

CPE

CGN

ユーザの宅内 ISPなどのIPv6ネットワーク

IPv4インターネット

IPv6インターネット

IPv6トンネル

そのまま転送

B4

AFTR

▲ 図22.1 DS-Lite概要

DS-Liteでは、ISPなどのバックボーンネットワークを IPv6のみで構成し、家庭内などの利用

者の環境にはDS-Lite対応CPE(Customer Premises Equipment)を設置します。そして、家

庭内などでは、IPv6グローバルアドレスと IPv4プライベートアドレスを利用します。

CPEは、IPv6パケットをそのままバックボーンネットワークへと転送します。IPv4パケッ

†1 RFC 6333:A. Durand, R. Droms, J. Woodyatt, Y. Lee, “Dual-Stack Lite Broadband Deployments Following

IPv4 Exhaustion”, 2011年8月

Page 370: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

356 第22章 IPv4/IPv6共存技術の運用形態

トは、CPEによって IPv6カプセル化されて、バックボーンネットワークに設置されたAFTR

(Address Family Transition Router)と呼ばれる機器まで転送されます。AFTRまでのカプセ

ル化を行う機能はB4(Basic Bridging BroadBand)と呼ばれます。AFTRは、CPEによってカ

プセル化された IPv4パケットを IPv6パケットから取り出したうえでNATによる変換を行い、

IPv4インターネットへとパケットを転送します。

NOTE

B4はB-fourと発音し、「前」という意味の英単語「Before」と同じように発音されます。一方、AFTRは「後」という意味を持つ英単語「After」から母音のeを抜いた形になっています。

DS-Liteの利点として、バックボーンネットワークをシングルスタックで運用できることか

ら、デュアルスタック運用にかかるコストを削減できるという点が挙げられます。

DS-LiteとDOCSIS 3.0

DS-Liteの提案者の中心であるAlain Durand氏は、提案時点ではCATV網を運用するComcastに所属していました(RFC 6333発行時点では Juniper Networks)。それもあって、DS-Liteの仕組みは、CATV網の技術と相性が良いものになっています。

CATV網では、IPを利用した通信のために、各CPEに IPアドレスを割り当てます。IPv4のプライベートアドレス10.0.0.0/8では1600万個のCPEまでしか制御できませんが、これではComcastのような大規模なユーザを抱えるCATV事業者には心もとないといえます。そこで、既存のCATV網上で高速な通信を行うための国際規格であるDOCSISでは、2006年に改訂されたバージョン3.0から IPv6に対応しています。DOCSIS 3.0により、CATV事業者は、自社の網内を IPv6だけで構成できるようになりました。さらにDS-Liteのような仕組みを導入することで、ユーザに対する IPv4インターネットへの接続性は、その IPv6上に構築したトンネル経由で提供できます。DS-Liteが米国最大のCATV事業者であるComcast社員によって提案されたのは、実に自然なことだったといえるでしょう。

22.2 Lightweight 4over6(lw4o6)DS-Liteに対して拡張を加えた ‌Lightweight 4over6‌(‌lw4o6‌)と呼ばれる規格がRFC 7596

として定義されています。lw4o6は、DS-Liteでは中央で管理していたNAPTの機能をユーザの

手もとにあるCPEに移すことで、運用者がCGNを運用せずに済むようにしています。DS-Lite

は、デュアルスタックを手軽に実現できることを連想させる名称でしたが、実際にはCGNの

運用にかかる部分が手軽とはいえなかったので、その部分を軽減した標準が lw4o6であるとい

えます。

当然ですが、lw4o6のアーキテクチャはDS-Liteに似ています。lw4o6でも、DS-Liteと同様

に、IPv4を運ぶために IPv6トンネルを利用します。また、IPv6トンネルの両端となるB4と

Page 371: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22.3 A+P 357

AFTRという構成要素もDS-Liteと同じです。RFC 7596では、lw4o6拡張のあるB4を lwB4、

AFTRを lwAFTRと呼んでいます。

IPv4プライベートアドレス

IPv6グローバルアドレス

CPE(NAT)

lwAFTR

ユーザの宅内 ISPなどのIPv6ネットワーク

IPv4インターネット

IPv6インターネット

IPv6トンネル

そのまま転送

lwB4

▲ 図22.2 Lightweight 4over6概要

DS-Liteと lw4o6の大きな違いは、DS-LiteではNAPT機能がAFTRに入る一方で、lw4o6で

は lwB4に入るという点です。DS-LiteではAFTRが担っていたNAPT機能を lwB4が担うので、

NAPTに必要となるパブリック IPv4アドレスとポート番号のセットを lwB4が知っている必要

があります。lwB4は、RFC 7598にあるSoftwire46のDHCPv6オプションを受け取ることで、

それらの情報を得ます。

lwB4は、受け取った情報から lw4o6の IPv6アドレスを生成します。IPv6アドレスの生成方

法は、RFC 7597で定義されているMAP-Eにおける手法を利用します。MAP-Eにおける IPv6

アドレスの生成については22.4.1項を参照してください。

22.3 A+P‌A+P ‌(‌Address plus Port‌)は、その名前のとおり、IPv4アドレスとTCP/UDPポート番号

のセットを利用することで IPv4アドレスの共有を行う手法です。具体的には、複数のCPEが

同じ IPv4アドレスを利用しつつ、割り振られたTCP/UDPポート番号のみを利用します。CPE

からの IPv4パケットは、PRR(Port-Range Router)と呼ばれるルータまでトンネルを通って

転送されます。IPv4インターネット側からのパケットは、PRRがTCP/UDPポート番号に応じ

て適切なCPEとつながるトンネルへと転送します。

Page 372: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

358 第22章 IPv4/IPv6共存技術の運用形態

CPEA

PRR

ISPなどのIPv6ネットワーク

IPv4インターネット

IPv4プライベートアドレス

ユーザの宅内

IPv4プライベートアドレス

192.0.2.100ポート:0~1023

192.0.2.100ポート:0~65535

ポート:1024~2047192.0.2.100

ユーザの宅内

CPEB

▲ 図22.3 A+Pの構成例

図22.3では、PRRが192.0.2.100というグローバル IPv4アドレスを利用しています。CPE

AとCPE Bも、PRRと同じ192.0.2.100という IPv4アドレスを利用しますが、CPE Aが利用

するTCP/UDPポート番号が0~1023、CPE Bが利用するTCP/UDPポート番号が1024~2037

という違いがあります。

各CPEは、PRRへとパケットを送信する前に、必要に応じてNATやポート番号を変換しま

す。このとき、各CPEは、割り当てられたTCP/UDPポート番号の範囲内であれば、NATによ

る変換をせずにパケットを転送することも可能です。たとえば、192.0.2.100という IPv4ア

ドレスを家庭内のPCが利用していて、TCP/UDPの送信元ポート番号をCPEに割り当てられた

ものの範囲内に限定できるのであれば、CPEでNATによる変換をせずに通信が可能です。

22.3.1 DS­Liteとの関係DS-LiteとA+Pは、技術的な観点ではよく似た仕組みです。実際、DS-LiteとA+Pが Internet

Draftとして議論されていたとき、両方を統合するという案もありました。しかし、最終的に

DS-LiteはStandard TrackでRFCになり、A+PはExperimentalなRFC 6346†2になりました。

技術的には似た面もありますが、A+PとDS-Liteとでは、提案のモチベーションが大きく異

なります。DS-Liteのモチベーションは、デュアルスタック運用のコスト削減です。これに対

し、A+Pのモチベーションは、CGNの問題を解消することにあります。A+PのRFCでは、CGN

の問題として、UPnPが使えない、多くのユーザの通信ステートをCGNで保持しなければなら

ない、単一障害点になりうるといった点が具体的に挙げられています。

DS-LiteとA+Pでは、提案の方針にも大きな違いがあります。DS-Liteでは具体的な技術が述

べられているのに対し、A+Pでは考え方が中心に述べられているのです。たとえば、DS-Lite

ではB4とAFTRの間のトンネルを IPv6で構築します。一方、A+Pでは、L2延伸を含む何らか

の方法で行うとあります。A+Pで必要となるシグナリングプロトコルも、詳細がRFCに書かれ

ているわけではなく、可能性がある手法がいくつか列挙されています。

NATによる変換が発生する場所もDS-LiteとA+Pでは異なります。図22.4のように、DS-Lite

が IPv4ネットワークの手前でNATを行うのに対して、A+PはCPE側でNATを行えます。さら

†2 RFC 6346:R. Bush, “The Address plus Port (A+P) Approach to the IPv4 Address Shortage”, 2011年8月

Page 373: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22.4 4rd、MAP-E、MAP-T 359

に、A+PではNATを使わないことも可能です。

CPE

ISPなどのIPv6ネットワーク

IPv6トンネル

IPv4インターネットIPv4プライベートアドレス

ユーザの宅内

ここでNATをするのがDS-Lite

ここでNATをするのがA+P

▲ 図22.4 DS-LiteとA+Pの違い

ステートレスであることもA+Pの大きな特長です。A+Pでは、グローバル IPv4アドレスで

利用するUDP/TCPのポート番号をNATで利用するので、ステートを保持せずに自動的な変換

が可能になっています(ただし、ICMPやフラグメントされた IPパケットについては、通常の

NAT同様にステートフルな変換が必要です)。

22.4 4rd、MAP­E、MAP­TIPv6ネットワークを通じて IPv4サービスを提供するための方法として、 ‌MAP-E ‌、 ‌MAP-T ‌、‌

4rd‌というものがあります。この3つは、IETFのsoftwireワーキンググループで同時期に議論

が続けられていたプロトコルです。それぞれ、以下のRFCとして発行されています。

r MAP-E: RFC 7597†3r MAP-T: RFC 7599†4r 4rd: RFC 7600†5

上記のうち、RFC 7597(MAP-E)とRFC 7599(MAP-T)がStandard Track、RFC 7600(4rd)

がExperimentalです。

MAP-EとMAP-Tは、MAP(Mapping of Address and Port)と呼ばれる仕組みが2つの異

なる方式に分かれたものです。MAP-T†6は、Mapping of Address and Port with Translation

であり、途中でトランスレーションを行います。MAP-E†7は、Mapping of Address and Port

with Encapsulationであり、途中でカプセル化が行われます。

4rdは、時期によって異なる仕組みを指すので注意が必要です。MAPが SAM(Stateless

Address Mapping)と呼ばれるステートレスなトンネリングプロトコルから進化する過程で

†3 RFC 7597:O. Troan, W. Dec, X. Li, C. Bao, S. Matsushima, T. Murakami, T. Taylor, “Mapping of Address

and Port with Encapsulation (MAP-E)”, 2015年7月†4 RFC 7599:X. Li, C. Bao, W. Dec, O. Troan, S. Matsushima, T. Murakami, “Mapping of Address and Port

using Translation (MAP-T)”, 2015年7月†5 RFC 7600:R. Despres, S. Jiang, R. Penno, Y. Lee, G. Chen, M. Chen, “IPv4 Residual Deployment via IPv6 -

A Stateless Solution (4rd)”, 2015年7月†6 X.Li, C.Bao, W.Dec, O.Troan, S.Matsushima, T.Murakami, “Mapping of Address and Port using Translation

(MAP-T)”, 2012年10月:https://datatracker.ietf.org/doc/draft-ietf-softwire-map-t/†7 W.Dec, X.Li, C.Bao, S.Matsushima, T.Murakami, “Mapping of Address and Port with Encapsulation (MAP)”,

2012年9月:https://datatracker.ietf.org/doc/draft-ietf-softwire-map/

Page 374: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

360 第22章 IPv4/IPv6共存技術の運用形態

は、さまざまな個人が4rdという名称のプロトコルを提案する Internet Draftを発表しました。

最終的に、6rdを提案したRemi Despres氏らによって提案された4rd-U†8と呼ばれる仕組み

が4rdと改称され†9、これがExperimentalなRFC 7600として発行されました。

22.4.1 MAP­TとMAP­E

MAP-EおよびMAP-Tは図22.5のような構成で利用されます。

IPv4インターネット

プライベートIPv4アドレス

ユーザの宅内

プライベートIPv4アドレス

ユーザの宅内

MAP CE

NAT44MAP

MAP CE

NAT44MAP

ISPなどの(IPv6ネットワーク)

IPv6サーバ

MAP BR

MAPドメイン

▲ 図22.5 MAP-EおよびMAP-Tの概要

MAP-EとMAP-Tの主な違いは、IPv4パケットを IPv6ネットワークで転送する方式です。

MAP-Eでは、RFC 2473にある IPv4パケットを IPv6でカプセル化します。一方、MAP-Tでは、

RFC 6145(SIIT)を利用して変換を2回行います。

MAP-EおよびMAP-Tでは、MAP CE(Customer Edge)とMAP BR(Border Relay)と呼ば

れる装置を利用します。MAP CEは、IPv6で構成されたMAPドメイン内に利用者のネットワー

クを接続するもので、一般にはCPE(Customer Premises Equipment)やRG(Residential

Gateway)などと呼ばれている機器ですが、MAP-EおよびMAP-Tの文書ではこれが「CE」と

表現されています。MAP BRは、MAPドメイン外の IPv4アドレスを宛先とするときに利用さ

れます。

MAP CEは、ユーザからの IPv4パケットの宛先を確認し、それがMAPドメイン内であるか

どうかを判断します。MAPドメイン外の IPv4アドレスを宛先とするパケットである場合、そ

のパケットはMAP BRの IPv6アドレスを宛先としてMAPドメイン内の IPv6ネットワークで送

信されます。このとき、MAP-Eであれば IPv4パケットは IPv6でカプセル化され、MAP-Tであ

れば IPv4ヘッダが IPv6ヘッダへと変換されたうえで送信されます。

MAP CEは、ユーザからの IPv4パケットの宛先がMAPドメイン内のものであれば、宛先 IPv4

アドレスとTCPもしくはUDPポート番号から宛先 IPv6アドレスを生成します。このとき、ト

ランスポート層プロトコルのポート番号も利用することで、同じ IPv4アドレスを複数のMAP

CEで共有できるようにしています。したがって、図22.5のNAT44は、そのMAP CEに割り当

†8 R.Despres, Ed, R.Penno, Y.Lee, G.Chen, J.Qin, “IPv4 Residual Deployment via IPv6 - Unified Solution (4rd)”,

2012年3月:https://datatracker.ietf.org/doc/draft-despres-softwire-4rd-u/†9 S.Jiang, R.Despres, R.Penno, Y.Lee, G.Chen, M.Chen, “IPv4 Residual Deployment via IPv6 - a Stateless

Solution (4rd)”, 2012年10月:https://datatracker.ietf.org/doc/draft-ietf-softwire-4rd/

Page 375: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22.4 4rd、MAP-E、MAP-T 361

てられたポート番号の範囲内となるように変換する機能を備えたNAT機能を示しています。

同じようにポート番号を利用するA+Pでは、B4とAFTRの間のトンネルを構築する手法が明

記されていません。一方、MAP-EおよびMAP-Tでは、MAP CEとMAP BRの間の通信を IPv6で

行うことが前提となっています。さらに、IPv4アドレスとポート番号を IPv6アドレスにマッ

ピングする手法にも工夫が施されており、IPv4アドレスとポート番号から自動的にMAPドメ

イン内の宛先 IPv6アドレスを計算可能です。逆に、IPv6アドレスから、各MAP CEに対応する

IPv4アドレスとポート番号群を自動的に計算することもできます。

各MAP CEでは、利用するポート番号群を、PSID(Port-Set Identifiers)と呼ばれる識別子か

らアルゴリズムで決定します。PSIDからポート番号をマッピングするアルゴリズムは、GMA

(Generalized Modulus Algorithm)と呼ばれ、“Extended IPv6 Addressing for Encoding Port

Range”と題された Internet Draft†10で説明されています。PSIDは各MAP CEで設定され、16

ビットのポート番号のうち一部のマスク値として運用されます。あるMAP CEが扱えるポート

番号は、このPSIDをその一部に含むようなものになります。連続したポート番号でも飛び飛

びのポート番号でも表現可能です。MAP CEは基本的に同じPSIDを使い続けるので、事実上、

PSIDがMAP CEに割り当てられたポート番号を示すことになります。

図22.6に、16ビットのポート番号にkビットのPSIDが含まれている状態を示します。各

MAP CEが利用できるポート番号は、PSIDの部分を固定値とし、AおよびMの部分を任意の値

とするようなものになります。ただし、IANAによってシステムポートとして割り当てられて

いる番号を利用してしまわないように、Aの部分の長さが0でないときはAの値を0よりも大

きくする必要があります。

kビット

16ビット

PSIDA M

▲ 図22.6 MAP-EおよびMAP-TのPSID

MAPドメイン内では、各MAP CEに対し、IPv4アドレスとPSIDが割り当てられます。それ

らの情報を利用して、MAP CEの IPv6アドレスを生成します。具体的には、図22.7のように、

IPv6プレフィックス部分に IPv4アドレスのホスト部とPSIDが埋め込まれます。この埋め込

まれた部分はEA bitsと呼ばれます。EA bitsの長さと、MAPを利用して転送することを示す

IPv4および IPv6のプレフィックス(Rule IPv4プレフィックスおよびRule IPv6プレフィック

ス)は、あらかじめMAP CEに設定されます。

†10 https://tools.ietf.org/html/draft-bcx-behave-address-fmt-extension-11(本書執筆時点)

Page 376: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

362 第22章 IPv4/IPv6共存技術の運用形態

IPv4アドレス(32ビット) ポート番号(16ビット)

EA bits

Rule IPv4プレフィックス

サフィックス

サフィックス

Rule IPv6プレフィックス

PSID

PSID インターフェース識別子

▲ 図22.7 MAP-EおよびMAP-Tでの IPv6アドレス生成

たとえば、EA bitsの長さが16ビット、Rule IPv6プレフィックスが2001:db8:0000::/40、

Rule IPv4プレフィックスが 192.0.2.0/24、IPv6のプレフィックスが 2001:db8:0012:

3400::/56に設定されているMAP CEがあるとします。Rule IPv4プレフィックスの長さが24

ビットなので、図22.7のサフィックスの部分の長さは8ビットと決まります。そして、2001:

db8:0012:3400::/56におけるサフィックスの部分(先頭の40ビットに続く8ビット)は

十進表記で18となるので、IPv4アドレスは192.0.2.18です。さらに、EA bitsの長さが16

ビットなので、サフィックスの8ビットを除くと、PSIDが8ビットに決まります。2001:db8:

0012:3400::/56におけるPSIDの部分(サフィックスに続く8ビット)は十進表記で34なの

で、PSIDは34とわかり、ここからGMAによりポート番号群が計算できます。

各MAP CEは、MAPドメイン内で IPv4パケットを転送する際に、IPv4アドレスとトランス

ポートプロトコルのポート番号さえあれば、PSIDを利用して宛先 IPv6アドレスも自動生成で

きます。MAP-EおよびMAP-Tでは、このときのインターフェース識別子の生成方法が図22.8

のように定義されています。このインターフェース識別子は、図21.4に示したRFC 6052のプ

レフィックス長が64ビットである場合のフォーマットと互換性があります。

32 40 48 56 64 72 80 88 96 104

プレフィックス u IPv4 PSID 0

▲ 図22.8 MAP-EおよびMAP-Tで利用されるインターフェース識別子

MAP-Eで、ポート番号による IPv4アドレス共有機能を使わない、つまりMAP CEでのNAT44

機能を無効化すると、DS-LiteのAFTRと互換性があるプロトコルになります。NAT44機能が

無効化されたMAP CEで、MAP BRとしてDS-Lite AFTRの IPv6アドレスを設定することで、

DS-Lite AFTRを通じて IPv4インターネットとの通信が行えます。

MAPでは、MAP CEおよびMAP BRが自身が使うべきポートマッピングのルールやPSIDを

何らかの方法で取得し、設定されることが前提になります。MAP CEに対して各種設定情報を

伝えるための標準として、softwireワーキンググループにてMAP用のDHCPv6オプションの

標準化が行われ、RFC 7598†11として発行されています。なお、このRFC 7598は、MAPだけ

ではなく IPv4を IPv6ネットワークを通じて提供するための一般的なDHCPv6オプションを定

義するものです。

†11 RFC 7598:T. Mrugalski, O. Troan, I. Farrer, S. Perreault, W. Dec, C. Bao, L. Yeh, X. Deng, “DHCPv6 Options

for Configuration of Softwire Address and Port-Mapped Clients”, 2015年7月

Page 377: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22.4 4rd、MAP-E、MAP-T 363

22.4.2 MAP­TとMAP­Eの統合に関するコイントスMAP-E、MAP-T、4rdという 3つのプロトコルが乱立している状態については、IETFの

softwireワーキンググループでも議論が続いていました。似て非なるプロトコルであるMAP-E

とMAP-Tを1つの統合されたプロトコルとするのか、それとも別々のプロトコルとするのかに

ついては、2012年8月に行われた IETF84にて別々のプロトコルとすると決定したのですが、

その決定にあたってはコイントスという異例の手法が採用されました。IETF84 softwireワー

キンググループでの挙手による賛否の確認では双方の意見ともにほぼ同数だったこと、プロト

コルの優劣とは違う話であったことから、コイントスが採用されたようです。

IETFで、コイントスによってプロトコルの方向性が決定したという事例を私や私の知人は聞

いたことがないので、もしかしたら初の試みだったのかもしれません。珍しい試みだったこと

もあって当時の風景を数人が撮影しており、ネット上に動画も投稿されています†12。

このコイントスは、唐突に行われたわけではなく、実際はその前に相応の動きがあったよ

うです。softwireワーキンググループのチェアは IETF84の直前に交替しており、その直前に

メーリングリスト上でMAP-EとMAP-Tに関する投票を行っていたのですが、それをまとめら

れなかったことや、それまでの議論のドライブがあまり上手に進行できなかったことなどが背

景にあると噂されています。そういった経緯で登場した新しい softwireワーキンググループ

チェアは、延々と続いていたMAP-EとMAP-Tの議論に大鉈をふるうべく、コイントスという

方法で一気に決定したようです。

IETF84で大鉈がふるわれたのは、MAP-EとMAP-Tの統合の賛否だけではありません。MAP-

E、MAP-T、4rdのうちどれをStandard Trackにするのかという議論も、この IETF84で決着し

ました。softwireワーキンググループ参加者による挙手の結果、最終的にMAP-Eが多数の支

持を得てStandard Trackになり、MAP-Tと4rdがExperimentalとなっています。カプセル化

を行うMAP-Eと、IPv4から IPv6へと変換しその後 IPv6から IPv4への変換を行うMAP-T、各

種工夫によって IPv4パケットの情報が欠落しないようにしてある4rdを比べると、MAP-Eが

最も素直でシンプルなプロトコルといえることから、多数決の結果としては妥当なものと考え

られます。

ただし、その後の softwireワーキンググループでMAP-Tも Standard Trackにすることが

決定され、MAP-EのRFC 7597とMAP-TのRFC 7599が両方ともStandard Track、4rdのRFC

7600だけがExperimentalなRFCとして発行されることになりました。

22.4.3 4rdIPv4と IPv6の間には互換性がなく、IPヘッダに含まれるフィールドの意味が IPv4と IPv6で

異なっていたり、IPv4ヘッダにあったフィールドがなくなっていたり、新しく IPv6で登場し

たフィールドがあったりします。‌4rd ‌では、IPv4と IPv6の差に伴う情報の欠落ができるだけ

発生しないように、MAP-EやMAP-Tでは考慮されていないさまざまな工夫が施されています。

一方で、仕組みが複雑化しているというトレードオフもあります。

†12 Mark Townsley, “Rough consensus, running code, and the occasional coin toss”, 2012年8月:https:

//www.facebook.com/photo.php?v=10150963959567666

Page 378: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

364 第22章 IPv4/IPv6共存技術の運用形態

4rdでは、IPv6拡張ヘッダを利用して、元の IPv4ヘッダに含まれる情報を埋め込む仕組み

が提案されています。それ以外にも、フラグメンテーションや ICMPの扱いなどで細かい工夫

がいろいろ施されています。4rdにおける IPv6拡張ヘッダの活用方法について詳しくはRFC

7600を参照してください。

22.5 CGNを利用して徐々にIPv6対応していく方法第V部で詳しく触れますが、IPv4アドレスの枯渇に伴い、ISPでは複数のユーザが IPv4アド

レスを共有しながら使う環境を検討する必要が出てきます。そのために導入されるのがCGN

(Carrier Grade NAT)です。つまり、CGNは、IPv6対応とは別の問題への対策としても必要

になる設備です。

一方、多くの通信事業者にとっては、IPv4枯渇だけでなく IPv6対応も同時に進めるべき課

題です。とはいえ、ネットワーク内を一気に IPv6対応することは現実的ではありません。そ

こで、少しずつ徐々に IPv6対応していくような漸進的手法が好まれます。

そのような背景から、CGNを導入しつつ既存利用者に影響を与えずに漸進的な IPv6対応を

進めるための手法が、RFC 6264†13として提案されています。RFC 6264で提案されているの

は図22.9に示すような、IPv4のみで接続された既存利用者がCGNを経由せずに IPv4インター

ネットへとつながる環境です。

プライベートIPv6アドレス

IPv4/IPv6デュアルスタック環境の利用者

IPv6インターネット

IPv4インターネット

プライベートIPv4アドレス

既存のIPv4利用者

CPE

CPE

ISPによるIPv4ネットワーク

CGN

IPv6 over IPv4トンネル

▲ 図22.9 徐々にCGN化していくアプローチ

IPv4と IPv6のデュアルスタック環境が提供されるユーザ宅のCPE(Customer Premises

Equipment)は、IPv4パケットを受け取るとCGNへと転送します。CPEは、IPv4トンネルを

利用して IPv6パケットをCGNへと送ります。CGNは、CPEからの IPv4トンネルを経由して送

信されてきた IPv6パケットをトンネルから取り出し、IPv6インターネットへと転送します。

この提案のポイントは、ISPの内部ネットワークがすべて IPv4で運用されている点です。

CGNを導入できるという意味では、DS-Liteも同様ですが、DS-Liteは ISPの内部ネットワーク

が IPv6シングルスタックで運用されるという違いがあります。

†13 RFC 6264:S. Jiang, D. Guo, B. Carpenter, “An Incremental Carrier-Grade NAT (CGN) for IPv6 Transition”,

2011年6月

Page 379: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

22.6 464XLAT 365

22.6 464XLAT‌464XLAT ‌は、IPv4を IPv6へと変換し、変換された IPv6をさらに IPv4へと変換するという

2回の変換により、次のような状況に対処する運用手法です。

r IPv6のみで構成され、IPv4インターネットへの接続手法として用意されているのがNAT64

のみr IPv4でしか通信できないアプリケーションがあり、何らかの方法で IPv6のみのネットワー

クを経由して IPv4インターネットと通信する必要がある

464XLATの仕様はRFC 6877†14として発行されています。464XLATのために新しく定義さ

れたプロトコルはなく、既存技術を組み合わせて上記のような状況に対処することを目指して

いるので、ほぼ既存の製品の組み合わせで実現できるのが特徴です。

464XLATで組み合わされている既存技術は、RFC 6146で定義されたNAT64と、RFC 6145

で定義されている SIITです。IPv4上で直接DNSパケットを送受信できる状況が前提なので、

RFC 6147で定義されているDNS64は必須ではありません。

なお、464XLATではグローバル IPv4アドレスを持つサーバとの通信が想定されているので、

464XLATを介したP2P型通信は実現できません。

22.6.1 464XLATの構成例464XLATを利用した構成例を図22.10に示します。ユーザ側に設置されるトランスレー

タをCLAT(Customer side translator)、プロバイダ側に設置されるトランスレータをPLAT

(Provider side translator)と呼びます。

IPv6アドレス

IPv4/IPv6デュアルスタック環境の利用者

プライベートIPv4アドレス

CLAT

IPv6ネットワーク

IPv6インターネット

IPv4インターネットPLAT

プライベートIPv4→IPv6

IPv6→グローバルIPv4

▲ 図22.10 464XLAT構成例

CLATに接続されたユーザが IPv6で通信する場合には、CLATから IPv6でそのままやり取り

できます。IPv4での通信は、CLATによって IPv6へと変換されたのちにPLATで IPv6から IPv4

へと変換されることで、IPv4インターネットとやり取りできます。

†14 RFC 6877:M. Mawatari, M. Kawashima, C. Byrne, “464XLAT: Combination of Stateful and Stateless Trans-

lation”, 2013年4月

Page 380: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

366 第22章 IPv4/IPv6共存技術の運用形態

464XLATでは、図22.11のように、3GPPネットワークでの構成例も考慮されています。こ

の場合はCLATがモバイル機器に内蔵されます。これにより、モバイル網そのものは IPv6のみ

で構成しつつ、IPv4にしか対応していない古いアプリケーションでも通信できるようになり

ます。

IPv6アドレス

モバイル端末やユーザエージェント

プライベートIPv4アドレス

モバイル網(IPv6ネットワーク)

IPv6インターネット

IPv4インターネットPLAT

CLAT

プライベートIPv4→IPv6

IPv6→グローバルIPv4

▲ 図22.11 464XLAT 3GPPネットワークでの構成例

22.6.2 ステートフルとステートレスの組み合わせプロバイダ側に設置されるPLATはステートフルで、ユーザ側CPEとして設置されるCLAT

はステートレスです。CLATがステートレスとなっているのは、CPEでの実装を可能な限り軽

くするためのようです。

PLAT側はステートフルなので、実際の通信が開始されてからポート番号が割り当てられま

す。そのため、あらかじめ利用するポート番号の範囲が決まっているA+PやMAPなどの他の

方式と比べて、IPv4アドレスの使用効率が良いというメリットがあります(A+PやMAPでは、

ユーザがまったく使っていなくても特定の範囲のポート番号が専有されてしまいます)。とは

いえ、当然のことながら、状態を保持することによる負荷というデメリットもあります。

Page 381: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第23章

プロキシ方式

アプリケーションレベルで一度通信を終端したうえで IPパケットを中継することで、IPv4

環境と IPv6環境の共存を実現する技術があります。ここでは、それらの手法をプロキシ方式としてまとめて扱います。通信内容を理解しつつ必要に応じて調整を行うALG(Application

Level Gateway)と呼ばれる仕組みについても本章で扱います。

プロキシ手法の多くはトランスポートプロトコルとしてTCPやUDPを前提にしたステート

フルな技術です。各セッションごとに新規ソケットを開いて通信するという実装がよく採用さ

れます。TCPであれば IPv6側と IPv4側で個別のソケットを開き、IPv6側と IPv4側でそれぞれ

輻輳制御が動作することになります。

プロキシ方式では、一度通信を終端するので、アクセスログに掲載される通信相手が実際の

送信元 IPアドレスではなく終端を担うプロキシサーバの IPアドレスになります。他の手法に

も同様な問題が発生するものはありますが、プロキシ方式の導入でもアクセスログについては

十分な考慮が必要になります。

23.1 HTTPプロキシIPv6通信を一度終端して IPv4通信を実現するプロキシとして最もよく利用されているのは、

おそらくHTTPプロキシでしょう。既存のWebサーバを IPv4で運用しつつ、IPv6によるHTTP

プロキシを利用することで、既存システムに手を加えずにWebサーバを IPv6化するサービス

もあります。

IPv6インターネット

IPv4ネットワーク

WebサーバHTTPプロキシ

TCP接続を終端

IPv6 HTTP IPv4 HTTP

▲ 図23.1 HTTPプロキシ

Page 382: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

368 第23章 プロキシ方式

HTTPプロキシそのものは、ロードバランサなどによる負荷分散を実現するためによく利用

されており、技術そのものは十分に枯れています。グローバル IPv4アドレス空間のHTTPセッ

ションを終端して、負荷分散用に用意されたプライベート IPv4アドレス空間に設置された複数

のWebサーバへとコネクションを分散するリバースプロキシとしても広く活用されています。

リバースプロキシやロードバランサによって終端されたHTTPセッションの送信元 IPア

ドレスを伝える手段として、X-Forwarded-ForというHTTPヘッダが利用される場合があ

ります。IPv4から IPv6へのHTTPプロキシや、IPv6から IPv4へのHTTPプロキシでも、この

X-Forwarded-Forヘッダを利用した送信元 IPアドレス伝達が行われます。

2014年に、X-Forwarded-Forに代わる新しいHTTP拡張として、ForwardedヘッダがRFC

7239として標準化されました。RFC 7239のForwardedヘッダは、X-Forwarded-Forのよ

うに宛先だけを記述するのではなく、byやfor、host、protoなどの属性を記述できる仕様

になっています。たとえば、forであれば次のように指定します。

Forwarded: For="[2001:db8:cafe::17]:4711"

23.2 TRT方式IPv6を利用したTCPやUDPセッションを一度終端し、IPv4インターネットに対する通信を

仲介する手法のひとつとして、‌TRT ‌(Transport Relay Translator)と呼ばれるものがありま

す。TRTはRFC 3142†1で規定されています。IPv4のみで提供されているサービスに対して

IPv6からも接続できるようにすることがTRTの狙いです。RFC 3142は2001年に発行された

InformationalなRFCであり、同じ狙いで開発されたNAT64およびDNS64による方法と比較

すると考慮すべき点も少なくありませんが、さまざまな議論の土台となったRFCであるともい

えるでしょう。

IPv6ネットワークIPv4インターネット

サーバTRTリレー

TCP接続を終端

IPv6 TCP IPv4 TCP

▲ 図23.2 TRT方式

TRT方式では、IPv6ユーザが「IPv4アドレスを導出できる IPv6アドレス」でTRTリレーへ

と接続し、TRTリレーは IPv6での通信を終端しつつ IPv4での通信を仲介します。IPv6ユーザ

が宛先とする IPv6アドレスをどのように決めるかについて、InformationalなRFCであるRFC

3142では具体的な標準フォーマットを規定していません。

†1 RFC 3142:J. Hagino, K. Yamamoto, “An IPv6-to-IPv4 Transport Relay Translator”, 2001年6月

Page 383: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

23.3 SIP用 IPv6プロキシ 369

23.3 SIP用IPv6プロキシALG機能を含むプロキシとして、SIP用の IPv6変換用プロキシがRFC 6157†2で定義されて

います。SIPはVoIPなどで必要となる呼制御プロトコルなので、通話相手の IPアドレス情報

などをペイロードとしてプロトコル中に抱えています。そのため、NAT64およびDNS64によ

る IPv4/IPv6変換や、TRTによる単純な IPv4/IPv6変換だけでは、SIPセッションの IPv4/IPv6

変換ができません。そこで、プロトコル内部を解釈したうえでの IPv4/IPv6プロキシとして、

RFC 6157が規定されました。

†2 RFC 6157:G. Camarillo, K. El Malki, V. Gurbani, “IPv6 Transition in the Session Initiation Protocol (SIP)”,

2011年4月

Page 384: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 385: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第V部

IPv4アドレス在庫枯渇対策

本書は、IPv4アドレスの中央在庫が枯渇してから何年も経過した時点で執筆しています。に

もかかわらず、IPv4によるインターネットはいまだに運用され続けています。IPv4アドレス

の在庫が枯渇しても、IPv4インターネットは継続しているのです。

「IPv4アドレス在庫は枯渇してない」と考える人も少なくありません。その背景には、「IPv4

アドレス在庫」には複数の種類があり、地域ごとに「IPv4アドレス在庫の枯渇」の実態が異な

ることがあります。必然的に「IPv4アドレス在庫が枯渇しました」というニュースをたびたび

耳にすることになり、狼少年の寓話のような状況になっているのでしょう。

本書の主題である IPv6は、IPv4アドレスの枯渇対策として説明されることがよくあります。

だとすれば、IPv4アドレスが枯渇しても利用し続けていられるいま、IPv6への移行にはどのよ

うな意味があるのでしょうか。

本書の視点のひとつは、IPv4アドレス在庫枯渇への直接的な対策と、IPv6対応を、個別の話

題として捉えることです。この部では、IPv4アドレス枯渇とはそもそも何であるか、それに

よって何が起きるのか、それに対する短期的な対策として考えられている手段についてまとめ

ます。

Page 386: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 387: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第24章

IPv4アドレス在庫枯渇とは

インターネットは、IPv4プロトコルによって実現する仕組みとして世界中に広がりました。

しかし、IPv4で識別子として利用される IPv4アドレスは、世界中の人々が使うアドレス空間

を表現するには短すぎるものでした。インターネットの急激な普及とともに、IPv4アドレスが

使われる数も増え続け、ついに2011年には IPv4アドレスの中央在庫が枯渇してしまいます。

IPv4アドレスはいつか枯渇すると言われ続けていたことが、ついに現実になったのです。

IPv4アドレスの在庫枯渇に関しては、「アナログ放送の停波と地デジへの移行」や「原油の

枯渇」に似た事態であるという認識に基づく説明が多く見られます。しかし、これらの事態

は、IPv4アドレスの枯渇について説明するアナロジーとしては不適当です。むしろ、これらの

事態と IPv4アドレスの枯渇との相違点を考えてみることで、IPv4アドレスの枯渇とは何であ

るかが見えてきます。

まず、アナログ放送の停波との相違点を考えてみましょう。日本では、2011年7月にテレ

ビ用のアナログ放送が停波し、地デジ放送へと移行しました。その際に起きたのは、ある日突

然アナログ放送が視聴できなくなるという事態でした。一方、IPv4アドレスの在庫が枯渇す

るという問題では、ある日突然 IPv4アドレスが使えなくなるわけではありません。それまで

使っていた IPv4アドレスはそのまま使い続けられるという意味で、IPv4アドレスの枯渇はア

ナログ放送の停波とは大きく異なります。

原油枯渇問題も、IPv4アドレス在庫枯渇のアナロジーとしては、やはり適切ではありませ

ん。原油は使うとなくなってしまいますが、IPv4アドレスは使い続けるものです。利用するこ

とによって「消費」されて減るものではありません。

筆者が IPv4アドレスの在庫枯渇問題を説明する際によく使うアナロジーは、「土地」や「相

撲の親方株」です。土地は、まだ誰も所有していない部分が大量にある間は、新しく割り当て

が可能です。すべての土地の割り当てが終了してしまうと、限られた土地を皆で共有しながら

使わなくてはなりません。相撲の親方株(年寄名跡)は、日本相撲協会によって定員が105と

決まっており†1、その限られた資源の権利を譲渡しながら運用が行われています。土地や相撲

の親方株に共通するのは、「有限な資源であり、上限に達することがある」という点です。上

†1 現役時代の功績が著しかった力士に対して例外的に一代に限り特別に認める一代年寄は、105に含まれません。

Page 388: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

374 第24章 IPv4アドレス在庫枯渇とは

限に達した場合、それ以上は新規に割り当てられないので、既存の資源を共有したり譲渡した

りしながら活用していかざるを得ません。資源の利用者もしくは所有者が誰であるかを管理し

ている組織があるという点も、IPv4アドレスに共通しています。

24.1 インターネットの成長とIPv4アドレス在庫の枯渇IPv4アドレスの在庫が枯渇すると何が起こるのでしょうか。ものすごく単純に言えば、IPv4

アドレスが枯渇することで、それ以上 IPv4によるインターネットが拡大しにくくなります。

IPv4アドレス在庫枯渇が発生する前の IPv4インターネットでは、図24.1の中央の図のよう

に、新規ユーザが参加したいと言ったときに新しい IPv4アドレスを割り当てて対処してきま

した。IPv4アドレスの在庫があったので、ユーザが増えるぶんだけ新しく IPv4アドレスの割

り当てが可能な状態だったのです。IPv4アドレス在庫枯渇が発生する前の IPv4インターネッ

トは、IPv4アドレス在庫という制約に制限されることなく、どんどん拡大していきました。

IPv4アドレスの在庫が枯渇してくると、限られた IPv4アドレスの範囲内で新規ユーザに対

処しなければならなくなります。限られた空間に次々に新しいユーザを詰め込めば、図24.1

の右側の図のように、一人あたりの IPv4アドレス数が減ってしまいます。

新しいユーザにIPアドレスを割り当て

IPアドレスを使いたいユーザ

IPアドレス在庫

次々に新しいユーザを詰み込む

IPアドレスを使いたいユーザ

IPアドレス在庫 IPアドレス在庫▲ 図24.1 IPv4アドレス在庫枯渇前の状態

IPv4アドレス在庫枯渇によって発生する状態は、この「詰め込み度合い」の上昇です。IPv4

インターネットへの参加者が増えなければ、一人あたりが利用できる IPv4アドレス数は減ら

ないので、IPv4アドレス在庫が枯渇しても大きな問題にはなりにくいともいえます。現実には

IPv4インターネットの成長が続いているので、IPv4アドレスの在庫枯渇によってさまざまな

影響が起こりえます。

24.2 IPアドレス管理の階層構造とIPv4アドレス在庫枯渇インターネットの IPアドレスは一意であることが求められます。そのため、誰がどこでどの

ような IPアドレスを使うかに関しては、全世界で一元的に管理されています。IPアドレスの一

元管理は、IANA(Internet Assigned Numbers Authority)を頂点とする階層構造で行われて

います。

IANAは、すべてのAS番号や IPアドレスを管理していますが、IANAが自ら直接ユーザに割

り当てる業務はしません。IANAが管理するAS番号や IPアドレスは、まず世界5地域を代表す

Page 389: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.2 IPアドレス管理の階層構造と IPv4アドレス在庫枯渇 375

るRIR(Regional Internet Registry、地域インターネットレジストリ)へと割り振られます。

r AFRINIC(アフリカ)r APNIC(アジア太平洋地域)r ARIN(北米地域)r LACNIC(ラテンアメリカおよびカリブ海地域)r RIPE NCC(ヨーロッパ、中東、中央アジア)

APNIC

RIPE NCCARIN

AFRINIC

LACNIC

▲ 図24.2 RIR

RIRは、LIR(Local Internet Registry、ローカルインターネットレジストリ)などの要求に

応じて、IANAから受け取った番号を割り振ります。IANAから IPアドレスの割り振りを受け

たLIRは、ユーザからの要求に従って番号の割り当てを行います。

LIRを介さずに、ユーザが直接RIRから IPアドレスの割り当てを受けることもあります。

APNIC RIPE-NCCARIN

IANA

企業 ISP 学術機関

AfriNICLACNICRIR

LIR

▲ 図24.3 LIR

日本を含むアジア太平洋地域には、国など、RIRよりも細かい地域を受け持つNIR(National

Page 390: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

376 第24章 IPv4アドレス在庫枯渇とは

Internet Registry、国別インターネットレジストリ)が存在しています。日本のNIRは、JPNIC

です。日本国内の ISPなどは、JPNICから IPアドレス割り振りを受ける場合もあれば、APNIC

から IPアドレス割り振りを受ける場合もあります。

APNIC RIPE-NCCARIN

IANA

企業 ISP 学術機関

AfriNICLACNIC

IDNIC VNNICCNNIC TWNICJPNIC

RIR

NIR

LIR

▲ 図24.4 NIR

このように階層的に IPアドレスを管理することで、複数の異なる組織が同時にまったく同

じ IPアドレスを「自分が使うためのもの」としてしまうことを避けるような仕組みになってい

ます。

国や地域によって多少制度が異なる部分がありますが、インターネットのアドレスや番号を

利用するには、RIRやNIRにお金を払い続ける必要があります。誰でも無制限に番号や資源を

使えるわけではなく、申請と登録が必要なのです。

注意が必要なのは、IPアドレスやAS番号を購入する代金ではなく、割り当て業務を支える

維持料であるという点です。たとえば、日本国内で JPNICから IPアドレス割り振りを受ける

のであれば、JPNICの指定事業者になる必要があります。指定事業者が JPNICに支払う維持料

は、AS番号の契約数や IPアドレスサイズによって変動します。一般ユーザが日々使っている

IPアドレスを利用するために、ISPなどはお金を払っています。

話を IPv4アドレス在庫枯渇に戻しましょう。IANAとRIRには、それぞれ IPv4アドレス在庫

があります。世界にいくつかの「IPv4アドレス在庫」が存在している形です。「IPv4アドレス

在庫」は、「IPv4アドレスプール」と呼ばれることもあります。それらの IPv4アドレス在庫が

枯渇するのが、「IPv4アドレス在庫枯渇」です。

最初に発生する IPv4アドレス在庫枯渇は、中央在庫である IANAの IPv4アドレス在庫の枯渇

です。IANAの IPv4アドレス在庫は2011年2月に枯渇しました。IANAは、32ビットの IPv4

アドレス空間を256個のブロックとして管理していました。そのすべてのブロックが IANAの

IPv4アドレス在庫からなくなった状態が IANAにおける「IPv4アドレス在庫枯渇」です。

次に発生するのが地域ごとのRIRにおける IPv4アドレス在庫枯渇です。日本のようにNIR

がある地域では、RIRの IPv4アドレス在庫枯渇後に、NIRの IPv4アドレス在庫枯渇が発生しま

す。このように、IPv4アドレス在庫枯渇は段階的、かつバラバラのタイミングで発生します。

IANA在庫の枯渇のアナロジーとしては「IPv4アドレス製造工場で製造中止された状態で

Page 391: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.3 IPv4アドレス在庫枯渇の対策 377

あって、問屋と小売店には、まだ IPv4アドレス在庫が残っている」という感じかもしれませ

ん。このとき、RIRやNIRでの IPv4アドレス在庫枯渇は、問屋や小売店の IPv4アドレス在庫が

枯渇した状態というアナロジーになります。

「割り振り」と「割り当て」

本書では、IPアドレスに関して、割り振りと割り当てという2つの表現を使い分けています。この使い分けは、日本語に特有の使い分けではなく、2つの異なる英語に対応しています。すなわち、Allocationが「割り振り」で、Assignmentが「割り当て」です。

Allocationは、ある特定の範囲を特定の組織に対して「割り振り」することを表します。プログラミングの経験があれば、「メモリのアロケーション」という表現を聞いたことがあるかもしれません。この場合のAllocationには、メモリの特定の領域を確保するという意味があります。IPアドレスのAllocationも、IPアドレスの特定の範囲を、ある特定の組織に対して「割り振り」します。「割り当て」は、「割り振り」を受けた組織が、ある特定の IPアドレスを「割り当て」ます。最終的にユーザに対して IPアドレスが「割り当て」られるのです。日本で JPNICから IPアドレス分配を受ける場合、IPアドレス分配の階層構造は、IANA

→ APNIC→ JPNIC→ IPアドレス指定管理事業者→ユーザとなっていますが、その中での「割り振り」と「割り当て」は図24.5のようになります。

APNIC

IANA

IPアドレス指定管理事業者

JPNIC

割り振り

割り振り

割り振り

割り当て

▲ 図24.5 「割り振り」と「割り当て」

IANA、APNIC、JPNICによる分配が「割り振り」、IPアドレス指定管理事業者による分配が「割り当て」となっており、最終段階だけが「割り当て」です。

IPアドレス指定管理事業者が自分の組織内にあるネットワークで IPアドレスを使う場合にも「割り当て」となります。

24.3 IPv4アドレス在庫枯渇の対策前節では、IPv4アドレス在庫枯渇とは何かを整理しました。本書の主題である IPv6は、こ

の IPv4アドレス在庫枯渇に対する解決策として説明されることが多くあります。「IPv4アドレ

スが枯渇したから、その対策として IPv6への移行を急ぐべき」というのは、マクロな視点で

見た場合は確かに解決策です。インターネット全体や、国としてという視点で見たときには、

IPv6への移行が IPv4アドレス在庫枯渇への解決策といえます。

Page 392: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

378 第24章 IPv4アドレス在庫枯渇とは

しかし、本書で繰り返し強調しているように、IPv4と IPv6には直接的な互換性がありませ

ん。IPv6を利用可能な環境は急激に増えつつあるものの、IPv4をまったく利用できなくても

困らない状況とは言い難いのが現状です。たくさんのユーザが IPv4を利用している状況で、

IPv6で何かをしても、IPv4ユーザが直接それを利用できるわけではありません。IPv4による

サービス提供は、引き続き重要であり続けます。IPv6への移行は、IPv4アドレス在庫枯渇に対

する直接的な解決策とは必ずしも言い切れないのです。

そのため、IPv4アドレス在庫枯渇には、IPv6への移行ではなく、IPv4上で対策が必要です。

言い換えれば、IPv4アドレス在庫枯渇に対する直接的な対策と、IPv6対応は、個別に考えるべ

き課題です。本書では、そのような立場で IPv6を捉えています。

では、IPv6対応とは別の問題として IPv4アドレス在庫枯渇を捉えた場合、どのような解決

策が考えられるでしょうか。IPv4アドレスを新たに割り当てられないにもかかわらず、IPv4

インターネットで規模を拡大したいとしたら、既存の IPv4アドレスを使い回すしかありませ

ん。具体的には、一部の IPv4アドレスの利用を圧縮してほかにまわすといった対応が要求さ

れるようになります。とはいえ、実はそんなに対応可能なことがあるわけではなく、考えられ

るのは以下のような方法くらいです。

r 他者から IPv4アドレスを確保する(IPv4アドレス移転など)r 現在利用している IPv4アドレス数を圧縮して再利用するr 1つの IPv4アドレスで複数サービスを運用する

本節では、直接的な IPv4アドレス在庫枯渇対策として、これらの対応策について説明し

ます。

24.3.1 基本的な方式IPv4アドレス在庫枯渇対策の基本的な方式は次の3つです。

1. 圧縮

2. 既存の IPv4アドレスの有効利用

3. 移転による IPv4アドレスの取得

1の圧縮で利用されるのは、CGN(Carrier Grade NAT)などの技術です。IPv4アドレス在

庫が枯渇した時点で多くのユーザを抱えていた事業者は、IPv4アドレスも多く保持していま

す。そのような事業者であれば、ユーザに対して配布している IPv4アドレスの数をNATを

使って圧縮することで、サーバ設置や IaaSの運営にまわすという方法が考えられます。

2の有効利用は、さまざまな理由で活用できていなかった IPv4アドレスをきっちり使い切る

ことを指しています。運用上の優先度が低かったり、事実上は利用していないにもかかわらず

IPv4アドレスが使われてしまっているところから引き上げるというものです。具体的には、終

了を予定していた既存サービスなどを早めに切り上げて IPv4アドレスを回収したり、別々の

セグメントに分散していた複数の機器を1つのセグメントに集約して余った IPv4アドレスを

回収するという方法があります。枯渇時点で多くの IPv4アドレスを保持していれば、それら

を節約してほかにまわすことで、事業を拡大できる余地が多少は広がります。

Page 393: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.3 IPv4アドレス在庫枯渇の対策 379

192.0.2.0/28

192.0.2.4~192.0.2.14が余っている192.0.2.21~192.0.2.30が余っている

192.0.2.1192.0.2.17

192.0.2.16/28

192.0.2.2192.0.2.18 192.0.2.19 192.0.2.20 192.0.2.3

▲ 図24.6 別々のセグメントに分散している IPv4アドレス

このように、上記の1と2の対策は、すでに IPv4アドレスを保持していることが前提です。

IPv4アドレス在庫が枯渇した時点で保持していた IPv4アドレスのベースが小さければ小さい

ほど、圧縮や節約の効果も小さくなります。そういうことをできない事業者は、新規 IPv4アド

レスを捻出するために何らかの方法を模索しなければならず、苦しい思いをするでしょう。上

記3の IPv4アドレスの登録者の移転には、金銭的なやり取り(いわゆる「IPv4アドレス売買」)

を伴う場合もあります。

24.3.2 CGNとNAT444

グローバル IPv4アドレスの利用数を圧縮する代表的な技術としてCGN(Carrier Grade

NAT)が挙げられます。CGNは、文字どおり、大規模なNAT(Network Address Translation)

です。CGNを利用することで、ISPが接続サービスに利用しているグローバル IPv4アドレス数

を圧縮できます。

日本では、1つの契約に対して1つのグローバル IPv4アドレスを割り当てるサービスを提供

する ISPが多くありました。しかし、IPv4アドレス在庫枯渇に伴い、徐々にCGNの利用が増え

ています。CGNが導入されると、図24.7のように、家庭内のSOHOルータなどにおけるNAT

に加えてもう1段階のNATが利用されるようになります。

家庭内ネットワーク

ISPネットワーク

CGN(Carrier Grade NAT)

IPv4インターネット

SOHOルータなどにおけるNAT

▲ 図24.7 一般家庭へのCGN

Page 394: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

380 第24章 IPv4アドレス在庫枯渇とは

この方法は、3種類の IPv4アドレスを利用することから、NAT444と呼ばれることがありま

す。3種類の IPv4アドレスとは、ユーザ側のCPE(Customer Premises Equipment)に備わっ

ているNATの内側で利用されるプライベート IPv4アドレス、CGNで行われる2段めのNATの

内側で利用されるプライベート IPv4アドレス、CGNが接続されている IPv4インターネットで

利用されるグローバル IPv4アドレスです。

NAT444という単語が IETFで最初に提案されたのは、日本のキャリアや ISP数社が共同で

2008年に提出した “NAT444 with ISP Shared Address”†2という Internet Draftです。

NOTE

CGNは、利用される IPv4アドレスの数を圧縮する技術であり、IPv6対応に直接寄与する技術ではありません。利用される IPv4アドレスの数を圧縮するとともに IPv6対応を徐々に進めるためにCGNを用いる手法については、22.5節で説明しました。CGN導入によるユーザへの影響などの詳細については第25章で改めて説明します。

24.3.3 単一の IPv4アドレスで仮想的に複数のサービスを提供するIPv4アドレス在庫が枯渇して時間が経ってくると、ユーザ側だけではなく、サーバ側に対し

ても徐々に変化が求められるようになるでしょう。特に、個々のサービスを提供するサーバに

対して個別に IPアドレスを割り振ることが難しくなっていくと予想されます。そこで考えら

れるのが、1つの IPアドレスで複数のサーバを仮想的に運用するような技術です。

単一の IPアドレスを利用して仮想的に複数のサービスを利用する方法としては、TCPやUDP

のポート番号によるサービスの切り替えが考えられます。たとえば、サーバの IPアドレスが

192.0.0.2である場合、HTTPのウェルノウンポートである80番で運用されたWebサーバで

あればhttp://192.0.0.2/のようなURLでアクセスが可能です。もし、同じ IPアドレスで

別のWebサーバをTCPの10080番ポートで運用していたら、http://192.0.0.2:10080/と

して別のWebサーバにアクセスできます。このように複数のTCPポート番号を利用すること

で、単一の IPアドレスを利用しつつ複数のWebサーバプロセスを実行できます。

ただし、クライアント側で明示的にポート番号を指定して通信を開始することは、特にWeb

のような一般のサービスでは必ずしも現実的ではありません。環境によっては、ファイア

ウォールなどで宛先ポート番号が制限されていて、一般ユーザが直接外部のネットワークと通

信できるのは80番(HTTP)と443番(HTTPS)のみという場合もあります。そういったファ

イアウォール設定をしている組織内のユーザにとって、80番と443番以外のポート番号で運

用されているWebサーバは、存在しないのと同じです。そのため、本書執筆時点においては、

商用サービスとしてサーバでウェルノウンポート以外で積極的にサービスを提供している事業

者は非常に少ないと思われます。

実際に広く利用されているのは、名前に基づくバーチャルホストを利用することで単一の

†2 J. Yamaguchi, Y. Shirasaki, A. Nakagawa, H. Ashida, “NAT444 addressing models”, 2012年7月(本書執筆時点の最終的なドラフト):https://tools.ietf.org/html/draft-shirasaki-nat444-isp-shared-addr-08

Page 395: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.4 IPv4アドレス移転、IPv4アドレス売買、IPv4アドレス市場 381

IPv4アドレスで仮想的に複数のWebサービスを運用する方法です。この方法では、複数の

バーチャルホストが、単一の IPアドレスとTCPポート番号を共有します。たとえば、HTTPの

ウェルノウンポートである80番を、複数のバーチャルホストで共有できます。複数の契約者

が1つのサーバを共用するホスティングサービスなどでも、この方法がよく使われています。

名前に基づくバーチャルホストで注意が必要なのは、HTTPSを利用するときです。HTTPS

で利用されるTLSプロトコルでは、接続を希望するホスト名をクライアント側からサーバに伝

えるために、SNI(Server Name Indication)というTLS拡張が必要です。TLSサーバは、SNI

に未対応のクライアントに対しては、あらかじめ決められたホスト名に紐づけられた証明書

を利用して通信を行います。そのため、SNIに未対応のクライアントが多く存在する環境で

HTTPSによるサービスを提供するときには、証明書ごとに個別の IPv4アドレスが必要になっ

てしまいます。

24.4 IPv4アドレス移転、IPv4アドレス売買、IPv4アドレス市場

IPv4アドレスの中央在庫が枯渇し、RIRなどの在庫も枯渇すると、インターネットに接続し

ようとする組織が新たな IPv4アドレスの割り当てを受けられなくなってしまいます。しかし、

IPv4アドレスを必要とするサービスは引き続き数多く存在しているので、各組織は何とかして

IPv4アドレスを確保しようとします。

組織がすでに保持している IPv4アドレスの圧縮や有効利用では間に合わない場合の方策と

して考えられるのは、他の組織からの IPv4アドレスの移転です。ここでは、他の組織に割り当

てられた IPv4アドレスを移転する制度である IPv4アドレス移転や、いわゆる「IPv4アドレス

売買」「IPv4アドレス市場」について紹介します。

24.4.1 IPv4アドレス移転の仕組みが成立する背景IPv4アドレスを組織間で移転することは、IPv4アドレス在庫の枯渇が間近に迫るまでは、公

式には認められていませんでした。とはいえ、IPv4アドレスが貴重な資源になって価値が発生

し、組織間で IPv4アドレスの「売買」が行われるだろうことは、誰の目から見ても明らかでし

た。IPv4アドレスを組織間で移転できる仕組みがないままでは、どうしても IPv4アドレスが

必要な組織は、事業を諦めるか IPv4アドレスを闇取引するしかありません。

IPv4アドレスが闇で取り引きされてしまうと、ある IPv4アドレスを誰が管理しているのか

わからなくなるという問題が生じます。現在のインターネットでは、「誰がどの IPアドレスブ

ロックを利用しているか」が中央で管理されており、何か問題が発生したときに管理者が IPv4

アドレスをもとに原因となった組織を調べて連絡できる体制が整えられていますが、それが機

能しなくなってしまいます。IPv4アドレスを統括的に管理している組織を通さずに、IPv4ア

ドレスの闇取引が横行すると、各 IPv4アドレスを実際に利用している組織が把握できない状

態が多発して、微妙なバランスで成り立っているインターネットが根底から変化してしまうお

それがあるのです。

そのため、それまでのように IPv4アドレスの移転を禁止するのではなく、手続きを経て IPv4

Page 396: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

382 第24章 IPv4アドレス在庫枯渇とは

アドレスを移転できるようにするための仕組みが用意されました。日本が参加しているAPNIC

でも、2010年に IPv4アドレス移転のための仕組みが実装され、組織間で IPv4アドレスを移転

できるようになっています。

ここで重要なのは、いわゆる「IPv4アドレス市場」や「IPv4アドレス売買」と、ここで整備

された IPv4アドレス移転の仕組みとは、同じものでないという点です。IPv4アドレス移転で

は、IPv4アドレスを新規に受け取る団体に対する審査が従来の新規割り当てと同様に存在しま

す。IPv4アドレスを自由に取り引きできるような市場とは違うので、投資目的で IPv4アドレ

スを取得するような行為は困難であると考えられています。

また、仮に IPv4アドレスの取引市場が確立したとしても、IPv4アドレスそのものの供給は

簡単に増やせません。IPアドレスに対する需要は、IPv4アドレス枯渇後も、世界的に増加し続

けます。その一方で、使い続けることが前提の IPv4アドレスがそのような市場に供給される

量は減少していくばかりでしょう。最初のうちは、利用していない IPv4アドレスを市場で売

り出す組織が登場する可能性もありますが、そこで購入された IPv4アドレスが再度流通する

可能性はほとんどないと考えられます。時間が経過すればするほど供給が減少し、IPv4アドレ

スの価格は高騰していく可能性があります。価格が高騰することで売り手として前向きになる

組織が増える可能性もありますが、IPv4アドレスを売るということは、自分のネットワーク規

模を縮小するということです。どの組織も一定以上は身を削れないので、価格が上昇したから

といって供給の継続的な増加は見込めないと考えられます。

24.4.2 Final /8 Policy

IPv4アドレス在庫が枯渇するまでは、IPv4アドレス移転や、いわゆる「IPv4アドレス売買」

と呼ばれる金銭的な見返りを伴う IPv4アドレス移転に対して否定的な見方が大勢でした。し

かし、JPNICおよびAPNICでの IPv4アドレス在庫枯渇と、IANAの中央在庫から各RIRへの最

後の5つの/8ブロックの割り当てによって、雰囲気が大きく変わりました。

各RIRへ割り当てられた最後の5つの/8ブロックは、その分配方法について、それまでのブ

ロック(通常在庫)とは違う特別なポリシーが定められています。これはFinal /8 Policyと呼

ばれています。RIRで通常在庫が枯渇すれば、この最後の5つのブロックから分配されること

になり、Final /8 Policyが発動します。これにより、各組織は最後に一度しか IPv4アドレスの

割り振りを受けられなくなり、IPv4アドレスが必要になってもこれまでのようには申請できな

くなりました。新たに IPv4アドレスが必要になった場合、IPv4アドレス移転以外の方法が完

全になくなったのです。

さらに、Final /8 Policyによって IPv4アドレス返却の意味が変わったという側面もありま

す。それまでは、返却された IPv4アドレスは、しかるべき期間が過ぎたあとに再割り振りされ

ていました。しかし、Final /8 Policy発動後は、割り振りを受けられる組織が限定されると同

時に、一度に受けられる割り振りサイズも小さくなってしまったので、返却される IPv4アドレ

スが死蔵される状況となりました。死蔵されるならば移転したほうが有効利用であるという意

見が増えたことで、IPv4アドレス移転に対する考え方も変わりました。

Page 397: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.4 IPv4アドレス移転、IPv4アドレス売買、IPv4アドレス市場 383

IPv4アドレスの返却は焼け石に水

2010年頃は、IPv4アドレス在庫枯渇の話題に関連して、IPv4アドレスを保持している組織に対して「たくさん持ってるんだから返せ」という意見がネット上などで多数登場しました。しかし、たとえ複数の企業が持っている IPv4アドレスを返却したとしても、それは焼け石に水でしかなく、実はあまり建設的ではありません。

IANAの IPv4アドレス中央在庫が枯渇する前の2010年時点での IPv4アドレス割り振りペースは、IPv4アドレス空間全体の1/256の大きさである/8ブロックが約1ヶ月で割り当て終わってしまうという速度でした。2010年の段階で、それだけインターネットが急激に成長していたことを示しています。そこからざっくり逆算すると、/8ブロックの1/256である/16ブロックには、成長を続ける世界のインターネットの3時間分の需要しか満たせていなかったことになります。つまり、ある組織が何ヶ月、あるいは何年もかけて組織内ネットワークの構成変更を準備して/16ブロックを返却したとしても、一瞬でそのすべてが割り当て終わってしまいます。IPv4アドレスを少し余分に持っている組織から返却があったとしても、砂漠にバケツ一杯の水を撒くような状態になってしまうという状況だったのです。

24.4.3 IPアドレスの維持料IPv4アドレス移転を理解するうえでは、IPアドレスには維持料がかかるという事実も重

要です。JPNICにおける IPアドレス維持料は、IPv4のPAアドレス(Provider Aggregatable

Address)の場合、/24で年間52,500円、/16で年間428,259円です。

さらに、2012年4月からは、それまで課金されていなかった歴史的PIアドレス(Provider

Independent Addresses)に対しても課金が実施されるようになりました。それまで課金され

ていなかった歴史的PIアドレスを利用していた日本国内の大学などでは、経費削減のために

IPv4アドレス移転を検討するようになりました。

24.4.4 IPv4アドレス移転と経路爆発問題IPv4アドレス移転において、IPv4アドレスを譲渡する側の組織は、自分が保持している IPv4

アドレスブロックから自分が使っていない部分を切り出して渡します。すると、それまで1つ

だった経路が複数に分割されてしまいます。

IPv4アドレスの売買が盛んになるようなことがあれば、大きなアドレスブロックを持つ組織

が IPv4アドレスを細切れにして多数の組織に売り渡し、それだけ大量の経路がインターネッ

ト上にあふれる可能性があります。細切れになって販売された IPv4アドレスを購入した結果、

同じ組織が連続していない細切れの IPv4アドレスを利用する状態が発生する可能性もありま

す。IPv4アドレスの売買が世界各地で活発になると、それまでにない勢いでインターネット上

で経路数が増加し、処理性能が低い(メモリが少ない)古いルータが処理しきれなくなって一

部の経路への到達性を失うネットワークが発生するかもしれません。このため、IPv4アドレス

の過度に自由な売買が行われるようになれば、結果としてインターネットを不安定にしてしま

うかもしれないと考えられています。

Page 398: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

384 第24章 IPv4アドレス在庫枯渇とは

NOTE

細切れのブロックによる経路爆発問題は、IPv4アドレス移転に限った話ではありません。2011年以降、RIRやNIRなどで IPv4アドレス在庫枯渇が発生し、最小割り振り単位が小さくなったことによって、それまで以上に細かい経路が増えているという側面もあります。

24.4.5 IPv4アドレス移転に関する情報APNIC管理下にある IPv4アドレスについては、2011年1月から移転が可能になりました。

さらに、2011年8月1日には、JPNIC管理下にある IPv4アドレスの移転も可能になりました。

2011年の段階では IPv4アドレスの移転はRIR内のみに限定されていましたが、2012年には

RIRを越えた移転もできるようになりました。

IPv4アドレス移転に関する情報は、以下のURLで公開されています。

r JPNIC:http://www.nic.ad.jp/ja/ip/ipv4transfer-log.htmlr APNIC:http://ftp.apnic.net/transfers/apnic/

ただし、これらの公開情報はAPNICや JPNICが直接かかわっている移転そのものに関する

ものであり、移転に伴う当事者間での金銭授受や契約などに関する情報は範疇外となってい

ます。

24.4.6 技術的課題以外の部分が多い IPv4アドレス在庫枯渇対策IPv4アドレス在庫枯渇に対する直接的な対策は、初期段階においては IPv4アドレス移転(お

よびそれに伴う金銭的やり取り)が主な手法となるでしょう。しかし、移転可能な IPv4アド

レス保持者が徐々に減っていくことを考えると、IPv4アドレス移転は継続的な効果がある手法

ではありません。最終的には、IPv4アドレスを保有する企業が倒産するなどのタイミングでし

か、まとまった IPv4アドレスが放出されなくなるでしょう。

当面、最も活用される手法は、IPv4アドレスの利用数を圧縮するためのCGNになると思わ

れます。ただ、CGNにはさまざまな課題もあり、ユーザにとって不便な環境が増える可能性も

あります。

IPv4アドレス在庫枯渇に対する直接的な解決手法は非常に限られています。一方で、イン

ターネットは成長を続けており、IPv4によるインターネットは徐々に複雑化していきます。複

雑化するだけではなく、IPv4アドレスをすでに保有する組織と保有していない組織の格差も時

間の経過とともに拡大していくことが予想されます。このまま IPv4アドレスが足りない状態

で進んでいくと、IPv4上でのサーバ運用が複雑化すると同時に、それらを制御するためのプロ

グラムの開発、テスト、デバッグにかかる工数も上昇するでしょう。複雑なネットワークには

管理コストもかかります。

ネットワーク運用者やインターネットでサービスを提供する事業者にとって、IPv4アドレス

在庫枯渇に伴う影響がない IPv6へとユーザを移行させるメリットはここにあります。繰り返

しになりますが、IPv6は IPv4アドレス在庫枯渇に対する解決策にはなりません。しかし、IPv6

Page 399: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

24.4 IPv4アドレス移転、IPv4アドレス売買、IPv4アドレス市場 385

ネットワークの環境を整備し、IPv6対応を進めていかなければ、インターネットそのものがい

まよりもさらにいびつな形になっていくでしょう。

Page 400: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 401: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第25章

IPv4 NATとCGN

‌NAT‌(Network Address Translation)は、途中経路上の機器で、パケットが持つ IPアドレ

スを別の IPアドレスに変換する仕組みです。NATの主な用途は、ISPから提供される1つのグ

ローバル IPv4アドレスを利用して、プライベートなネットワーク内で複数の機器をインター

ネットに接続するというものでした。ISPがユーザに対して IPv4を割り当てるときには、一般

にサブネット単位で割り当てるのではなく、単一の IPv4アドレスを割り当てます。そういっ

た環境で、複数の機器をインターネットに接続したい場合、個々の機器の IPv4アドレスを ISP

から割り当てられた単一の IPv4アドレスに変換するためにNATが必要になります。

IPv4アドレス在庫枯渇が発生する数年前からは、IPv4アドレス利用数を圧縮するために、

ISPなどで利用されるCGN(Carrier Grade NAT)と呼ばれる大規模なNATが注目されるよう

になりました。それに伴い、IPv4 NATに関する議論も増えています。

25.1 NATとNAPTRFC 1631†1で説明されているもともとのNATは、IPアドレスだけを変換するものでした。現

在のNATでは、TCPとUDPのポート番号を考慮して、単一の IPアドレスを複数のユーザが同時

に利用できるようになっています。これを特に ‌NAPT‌(Network Address Port Translation)と

呼んで区別する場合もよくあります。実際、2001年に発行されたRFC 3022†2では、RFC 1631

で定義されていたNATを「Basic NAT」と呼び、Basic NATとNAPTを合わせて「Traditional

NAT」と表現しています。ただし、昨今ではNAPTのことを含んでNATと表現することが多

いので、本書でもNATといったら基本的にNAPTを含むものとします。

NOTE

NATに関連する用語定義は、1999年に発行されたRFC 2663†3で紹介されています。

†1 RFC 1631:K. Egevang, P. Francis, “The IP Network Address Translator (NAT)”, 1994年5月†2 RFC 3022:P. Srisuresh, K. Egevang, “Traditional IP Network Address Translator (Traditional NAT)”, 2001

年1月

Page 402: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

388 第25章 IPv4 NATとCGN

NATの典型的なユースケースを図25.1に示します。図25.1の例では、SOHOルータのWAN

側インターフェースにグローバル IPv4アドレス198.51.100.100が割り当てられています。

一方、家庭内ネットワークのアドレスは10.0.0.0/24であり、SOHOルータの家庭内ネット

ワーク側には10.0.0.1というプライベート IPv4アドレスが設定されています。PC1は10.

0.0.2というプライベート IPv4アドレス、PC2は10.0.0.3というプライベート IPv4アドレ

スをそれぞれ利用しています。プライベート IPv4アドレスのネットワークに接続された複数

の機器が、NATを利用することによって、1つのグローバル IPv4アドレスを共有していること

がわかります。

家庭内ネットワーク

ISPのルータ

IPv4インターネット

SOHOルータ(NAT)

10.0.0.2

10.0.0.1

198.51.100.100

203.0.113.30

10.0.0.3

TCPヘッダ

IPv4ヘッダ

送信元アドレス 10.0.0.3203.0.113.30TCP

宛先アドレス

送信元ポート 200080宛先ポート

プロトコル

IPパケット(TCPデータ)

TCPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.100203.0.113.30TCP

宛先アドレス

送信元ポート 200180宛先ポート

プロトコル

IPパケット(TCPデータ)

TCPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.100203.0.113.30TCP

宛先アドレス

送信元ポート 3333380宛先ポート

プロトコル

IPパケット(TCPデータ)

TCPヘッダ

IPv4ヘッダ

送信元アドレス 10.0.0.2203.0.113.30TCP

宛先アドレス

送信元ポート 111180宛先ポート

プロトコル

IPパケット(TCPデータ)

PC1 PC2

▲ 図25.1 NATの典型的なユースケース

このような環境から、203.0.113.30というグローバル IPv4アドレスでインターネットに

接続されたWebサーバへの通信を考えます。PC1からは送信元TCPポート番号1111で、PC2

からは送信元TCPポート番号2000でWebサーバへのTCPパケットが送信されます。SOHO

ルータは、NATとして、PC1とPC2からのパケットの送信元 IPv4アドレスをSOHOルータに

割り当てられているグローバル IPv4アドレスへと変換します。同時に、必要に応じて送信元

TCPポート番号も変換します。

Webサーバ側には、PC1とPC2という別々の機器からの通信ではなく、1つのグローバル

IPv4アドレスから2つのTCPセッションが張られているように見えます。SOHOルータでは、

それぞれのパケット情報の変更をどのように行うべきかを示すマッピングテーブルを作成し、

同じフローに属するパケットが同じフロー†4として扱われるように変換します。グローバル

†3 RFC 2663:P. Srisuresh, M. Holdrege, “IP Network Address Translator (NAT) Terminology and Consider-

ations”, 1999年8月†4 送信元と宛先 IPアドレス、送信元と宛先ポート番号、トランスポートプロトコルの種類という5つの情報の組で

区別される1つの通信のことです。

Page 403: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

25.1 NATとNAPT 389

IPv4アドレスで運用されたインターネット側からのパケットがSOHOルータへと到達すると、

マッピングテーブルに応じて変換が行われ、プライベートネットワーク内の適切な機器へとパ

ケットが転送されるように処理されます。

25.1.1 ALGNATは IPアドレスとポート番号を変換するものですが、それだけでは通信できないプロト

コルもあります。たとえば、ファイル転送に使われるFTP(RFC 959†5)や、IP電話などで使

われるSIP(RFC 2543†6)では、同時に張られた複数のセッションを識別して既存セッション

中で新規セッションの情報を伝えるために、ペイロード中に IPアドレスやポート番号を情報と

して含むことがあります。そのような場合にNATが介在すると、通信が成立しなくなる可能

性があります。こういった問題を解決するために、各プロトコルの中身を理解しつつ変換を行

うのがALG(Application Level Gateway)です。NATを考えるうえでは、NATそのものだけ

ではなく、ALGの存在も忘れないことが重要です。

NOTE

ALGも万能ではありません。たとえば、IPsecなどで通信が暗号化されていて、その中で IPアドレスなどの情報がやり取りされている場合、ALGは利用できません。

IPv4アドレス在庫枯渇対策としてのプライベート IPv4アドレス

プライベート IPv4アドレスは、インターネットに直接接続されていない閉じた環境で利用されるものですが、NATを介することでインターネットと通信できます。このようにNATとプライベート IPv4アドレスは密接な関係がある仕組みです。実際、NATに関する最初の仕様であるRFC 1631は1994年5月発行、プライベート IPv4アドレスがIANAに予約されたことを示すRFC 1597†7は1994年3月発行と、わずか2ヶ月の差であり、両者は事実上同時に成立した仕組みであることがわかります。この2ヶ月はRFC

として発行されるまでのさまざまな議論や準備に伴う差であり、IETFではNATとプライベート IPv4アドレスの両方について同時に議論されていました。プライベート IPv4アドレスは、現在ではさまざまな場面で使われています。身近なところでは、家庭内LANであったり、マンションで共用回線を使う場合のマンション内LAN、会社内で使うLAN、スマホなどでのテザリングが挙げられます。プライベート IPv4アドレスが登場する前も、インターネットとは直接通信をしない閉じた環境でTCP/IPを使った通信を行うシステムは存在しました。通信手段としてTCP/IPを利用する以上、通信機器に対して、それぞれ何らかの IPアドレスを割り当てる必要があります。プライベート IPv4アドレスが登場する前は、そのような閉じた環境であっても、世界で一意となるようなグローバル IPアドレスを利用するしかありませんでした。しかし、インターネットと通信するわけではない閉じた環境で通信を行

†5 RFC 959:J.Postel and J.Reynolds, “FILE TRANSFER PROTOCOL (FTP)”, 1985年10月†6 RFC 2543:M.Handley, H.Schulzrinne, E.Schooler, and J.Rosenberg, “SIP: Session Initiation Protocol”,

1999年3月

Page 404: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

390 第25章 IPv4 NATとCGN

うのであれば、その組織内においてのみ IPv4アドレスの一意性が保たれればよいのであって、世界的に一意な IPv4アドレスは必ずしも必要ではありません。そこで、インターネットで使われない閉じた環境のためにグローバル IPv4アドレスが大量に消費されてしまうことを避けるために、「閉じた環境であれば自由に使ってよい IPv4アドレスブロック」としてプライベート IPv4アドレスが生まれたのです。プライベート IPv4アドレスは、1994年頃に考えられた IPv4アドレス在庫枯渇への対策とも考えられます。実際に IANAにおける IPv4アドレスの中央在庫が枯渇したのは2011年のことですが、プライベート IPv4アドレスという概念が存在しなかったなら、IPv4アドレス在庫の枯渇はもっと早かったことでしょう。

25.2 CGNCGN(Carrier Grade NAT)は、その名のとおり、ISPなどの通信事業者が大規模で利用す

るNATです。ISPなどが利用するCGNは、基本的には家庭内ネットワークなどで利用される

NATと同じ仕組みですが、いくつか大きな違いがあります。要約すると、導入目的の違いと、

利用環境(利用人数)の違いだといえるでしょう。

一般のNATには、ISPから割り当てられる1つの IPv4アドレスで複数の機器をインターネッ

トにつなぐという目的があります。それに対し、CGNの導入目的は、グローバル IPv4アドレ

スの利用数を節約することです。

一般のNATの利用環境は、家庭や中小企業のネットワークです。そのため、利用人数も比

較的限定されています。一方、CGNは ISPのような通信事業者の構内で運用され、多くの契約

者が1つの機器へと集約されます。

NOTE

「CGNという名称ではキャリア(通信事業者)しか使えないようなイメージになってしまうのでLSN(Large Scale NAT)という呼称のほうが適切ではないか」という意見がIETFで強くなったことがあり、LSNという名称が用いられたことがありました。MAN

(Multiple Address NAT)という名称が提案されたこともあります。しかし、最終的にはCGNという表現に落ち着きました。

以降では、RFC 6888†8の議論を中心に、CGNの技術的な特徴を紹介します。

25.2.1 複数のグローバル IPv4アドレスを利用一般的なNAT機器は、1つのプライベートネットワークごとに1つのグローバル IPv4アド

レスを利用します。これに対しCGNでは、単一機器が複数のグローバル IPv4アドレスを利用

します。CGNは扱っているプライベートネットワークの規模が大きいので、1つのプライベー

トネットワークに対して複数のグローバル IPv4アドレスを使うことになるのです。

†7 RFC 1597:Y. Rekhter, B. Moskowitz, D. Karrenberg, G. de Groot, “Address Allocation for Private Inter-

nets”, 1994年3月†8 RFC 6888: S. Perreault, Ed., I. Yamagata, S. Miyakawa, A. Nakagawa, H. Ashida, “Common Requirements

for Carrier-Grade NATs (CGNs)”, 2013年4月

Page 405: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

25.2 CGN 391

NATは、プライベート IPv4アドレス空間に接続されたユーザの通信をグローバル IPv4アド

レスへと変換して通信を行います。その際、通信の一意性は、IPv4ヘッダのプロトコルフィー

ルド、宛先および送信元 IPv4アドレス、プロトコルヘッダ情報(プロトコルフィールドがTCP

ならプロトコルヘッダ中に含まれる宛先および送信元ポート番号)に基づいて識別されます。

この一意性を識別できる数が、NATにおける同時通信セッション数の論理的な上限になりま

す。NATが扱える通信セッションの数は、NATで利用されるグローバル IPv4アドレスの数に

よって論理的に制限されてしまうのです。

TCPの80番ポートを利用するWebを例にして説明すると、NATで利用されるグローバル

IPv4アドレスが1つであった場合、そのNATの配下のプライベートネットワークから同じ

Webサーバへの同時接続数は65536が上限となります†9。これは、TCPヘッダのポート番号

フィールドが16ビットだからです。このような論理的な同時接続数の上限が存在するため、

CGNでは複数のグローバル IPv4アドレスを利用する必要があります。

さらに、ユーザごとに同時に通信が可能なセッション数に上限を設定できることがCGNに

要求される場合もあります。複数のグローバル IPv4アドレスを多数のユーザで共有して使う

ことが前提なので、たとえば単一のユーザが大量のTCPセッションを確立してしまうと、他の

ユーザが使える論理的なTCPセッション数が減ってしまうからです。論理的なセッション数

の上限だけではなく、CGNの物理的なメモリ量などの物理的な制約もあるので、セッション数

の上限についても複数ユーザが条件を共有しなければなりません。

25.2.2 同じユーザが同じ IPv4アドレスを利用できるようにする複数の IPv4アドレスをCGNで複数人が共有する場合、同じユーザは同じグローバル IPv4ア

ドレスで通信できるほうが好ましいといえます。もし通信ごとに異なるグローバル IPv4アド

レスが使われてしまうと、サーバ側で同じユーザからの複数の通信であることがわかりにくく

なってしまうからです。たとえば、WebのためのHTTPはコンテンツごとにTCPセッション

を確立することが多いため、毎回異なるグローバル IPv4アドレスがTCPセッションごとに使

われてしまうと、同じユーザからの通信を複数のユーザからの通信と誤認してしまう可能性が

あります。そのためCGNでは、複数のグローバル IPv4アドレスを使いつつも、プライベート

ネットワーク内の同一ユーザに対してはできるだけ同じグローバル IPv4アドレスを割り当て

るような仕組みが望ましいとされています。

25.2.3 冗長構成やソフトウェアアップデート一般のNAT機器は、連続運用に耐えることやダウンタイムを限りなくゼロに近づけること

よりも、安価であることのほうが優先されがちです。これに対し、CGN機器では、通信事業者

での利用に耐えるための性能が求められます。

たとえば、一般的な家庭用NAT機器では、設定を変更するたびにルータの再起動が要求され

ます。NAT機器に重大なセキュリティホールが存在してファームウェアアップデートが必要

となった場合も、ファームウェアアップデート後に再起動が必要になります。しかし、通信事

†9 もしくは、16ビットがすべて0の場合とすべて1の場合を除いた、65534個。

Page 406: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

392 第25章 IPv4 NATとCGN

業者が運用するCGNでは、可能な限りダウンタイムを少なくすることが要求されます。CGN

での設定変更やファームウェアアップデートのたびに再起動が必要であっては、通信事業者が

顧客に提供するサービスの品質が著しく低下してしまいます。

NAT機器の再起動には、通常のルータの再起動とは異なる面もあります。通常のルータで

あれば、通信を行っている両端で通信の状態が把握されるので、途中経路におけるルータが一

時的に落ちていたとしてもパケットが落ちるだけで済みます。しかし、NAT機器が再起動し

て変換テーブルが失われると、それまで行われていた通信に関する情報がすべて破棄されてし

まうので、それまでの通信はすべてリセットされてしまいます。そこで、再起動による通信の

リセットを最小限に抑えるために、変換テーブルを失わずにファームウェアアップデートが可

能になる工夫が施されているCGN機器も多くあります。

25.2.4 ログの保存アクセスログの保存機能もCGNの大きな特徴です。CGN環境下では、グローバル IPv4アド

レスを持つインターネット側からは通信相手を特定することが困難です。いつ誰がどのような

通信を行ったかに関するトレーサビリティを確保するため、CGN機器には変換テーブルをロ

グとして保存する機能が要求されます。

CGNにおけるログの保存は、ISPなどの通信事業者側の視点だけではなく、Webサーバなど

の各種サーバ運用者の視点でも重要な問題です。後者については25.4節で改めて扱います。

25.2.5 CGN配下でのユーザ間での折り返し通信NAT環境では、図25.2のように通信経路がヘアピンのように鋭角に曲がる折り返し通信(ヘ

アピニング)のサポートが要求される場合があります。ヘアピニングについてはRFC 4787†10、

RFC 5382†11、RFC 5508†12で規定されています。特にCGNでは、P2P利用時にヘアピニング

が発生する可能性があるため、対応が必須とされています。

†10 RFC 4787:F. Audet, C. Jennings, “Network Address Translation (NAT) Behavioral Requirements for

Unicast UDP”, 2007年1月†11 RFC 5382:S. Guha, K. Biswas, B. Ford, S. Sivakumar, P. Srisuresh, “NAT Behavioral Requirements for

TCP”, 2008年10月†12 RFC 5508:P. Srisuresh, B. Ford, S. Sivakumar, S. Guha, “NAT Behavioral Requirements for ICMP”, 2009

年4月

Page 407: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

25.3 CGNが抱える課題 393

ISPネットワーク

CGN(Carrier Grade NAT)

IPv4インターネット

SOHOルータ(NAT)SOHOルータ(NAT)

ISPの顧客のネットワーク

ISPの顧客のネットワーク

▲ 図25.2 ヘアピニング

25.3 CGNが抱える課題CGNには、グローバル IPv4アドレスを配布する従来型のインターネット接続サービスと比

較してさまざまな課題があります。ここではそのうちのいくつかを紹介します。

25.3.1 P2P的な通信への対応NATはP2P的な通信を阻害する可能性があります。CGNでは、NATが家庭だけではなく ISP

などでも行われることになるので、P2P的な通信がさらに困難になります。

たとえば、多くの SOHOルータで実装されているUPnP IGD(Universal Plug and Play

Internet Gateway Device)によるNAT越えは、CGN環境下では使えません。UPnPは、その

名のとおり、ネットワークに接続された機器を「プラグアンドプレイ」するための標準です。

IGDは、UPnPでインターネットに接続されたゲートウェイを制御するための機能です。

UPnPは、マルチキャストで対応機器を発見し、発見した対応機器に対して SOAPを使っ

て情報取得や制御を行います。これは、主にユーザセグメントでの利用を想定された仕様で

す。UPnPで利用されるマルチキャストアドレスも239.255.255.250であり、家庭内にある

SOHOルータを越えるようなマルチキャストルーティングは考慮されていません。主に同一セ

グメント内での利用が想定されており、CGNような環境は想定されていないのです。

UPnPがCGN環境で使えないという背景があったことから、IPv4および IPv6のNATやファ

イアウォールに対してポート番号マッピングを行うための仕組みが考案されました。この

仕組みはPCP(Port Control Protocol)と呼ばれ、2013年にRFC 6887†13として標準化され

ています。UPnPからPCPを利用するUPnP IGD-PCP IWF(Universal Plug and Play Internet

Gateway Device - Port Control Protocol Interworking Function)については、RFC 6970†14と

して標準化されています。PCPは、CGNだけでなく、家庭用NAT、ファイアウォール、NAT64

†13 RFC 6887:D. Wing, S. Cheshire, M. Boucadair, R. Penno, P. Selkirk, “Port Control Protocol (PCP)”, 2013

年4月†14 RFC 6970:M. Boucadair, R. Penno, D. Wing, “Universal Plug and Play (UPnP) Internet Gateway Device -

Port Control Protocol Interworking Function (IGD-PCP IWF)”, 2013年7月

Page 408: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

394 第25章 IPv4 NATとCGN

やDS-Liteなどの IPv4/IPv6共存技術でのポート番号マッピングも可能となるように設計され

ています。

いわゆるNAT越えには、UPnP以外にもさまざまな手法があります。WebRTCなどで利用さ

れるSTUNも、NAT越えのための手法のひとつです。ここでは詳細は割愛しますが、P2P的な

通信をNATで実現する具体的な手法に関してはRFC 5128†15で紹介されているので参考にし

てください。

25.3.2 通信セッションの生存期間CGN環境には、TCPやUDPなどの通信セッションの生存期間をどれぐらいにするかという

課題もあります。通信がまったく行われていないセッションに割かれている資源をいつ解放す

るかによって、単一の機器で収容できる人数も変わってきます。

インターネットにおける通信セッションは、突然途切れることもあるので、「確実にセッショ

ンが切れた」と判断できないことも多くあります。たとえば、Webサイトの閲覧中にいきなり

パソコンの通信ケーブルを抜けば、その瞬間のTCP接続は途切れてしまいます。しかし、Web

サーバ側にはインターネットの向こう側にいるパソコンの状態はわからないので、通信相手が

復帰した場合に備えて、その際のTCP接続の状態が一定時間は維持されます。一定時間が経過

すればWebサーバにおけるTCP接続の状態も破棄されますが、途中経路に存在するCGN機器

には、WebサーバにおいてTCP接続の状態が破棄された瞬間はわかりません。そのため、何ら

かのタイミングで「この通信は破棄された」と自分で判断しなければなりません。

一方、TCP接続を切断する際のFINパケットをCGN機器が検知したとしても、セッション数

のカウントを残さなければならないような場合もあります。たとえば、TCP接続を切断した側

は、切断後にTIME_WAITという状態に入ります。CGN機器では、この状態を、「TCPセッショ

ンが維持されている期間」としてカウントしなければなりません(RFC 6269†16)。

25.3.3 ジオロケーションIPアドレスは、あまり正確な手法とは言い難いものの、通信相手が物理的に存在している地

域の推定に使われることがあります。CGNによって集約される範囲によっては、従来よりも、

IPアドレスによる物理的な位置情報の推定誤差が大きくなる可能性があります。

25.3.4 ICMPの扱いICMPにはTCPやUDPのようなポート番号という概念がないので、NATによる変換を行う際

に一意性を確保するための特別対応が必要となります。NATにおける ICMPの扱いについては

RFC 5508で議論されています。特に、MTUが小さすぎてパケットが転送できず、かつフラグ

メンテーションができない場合に送信される ICMP Message Too BigメッセージをCGN機器

で転送できないと、Path MTU Discoveryを利用しているアプリケーションが正しく動作せず

†15 RFC 5128:P. Srisuresh, B. Ford, D. Kegel, “State of Peer-to-Peer (P2P) Communication across Network

Address Translators (NATs)”, 2008年3月†16 RFC 6269:M. Ford, M. Boucadair, A. Durand, P. Levis, P. Roberts, “Issues with IP Address Sharing”, 2011

年6月

Page 409: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

25.3 CGNが抱える課題 395

に通信ができなくなる可能性があります。

なお、ICMPの扱いは、NAT64などの IPv4/IPv6トランスレータでも課題とされています。

25.3.5 フラグメンテーションフラグメンテーションもCGNにおける課題のひとつです。IPv4パケットがフラグメント化

されるとき、TCPやUDPなどのトランスポートプロトコルヘッダは、分割されたパケットのう

ち最初のパケットにのみ含まれます。分割されたパケットのうち2つめ以降にはトランスポー

トプロトコルのヘッダが含まれないため、CGNにおいて特別な処理が必要となります。

25.3.6 IPv4アドレスによるブラックリストネットへの悪質な書き込みや、迷惑メール送信行為に対するブラックリストとして、IPv4ア

ドレスが利用されることがあります。CGN環境では、複数のユーザが同時に同じグローバル

IPv4アドレスを利用するので、ブラックリストにそのうちの一部の IPv4アドレスが登録され

てしまうと、無実のユーザにも影響が出る可能性があります。

25.3.7 ダイナミックDNSユーザとの相性自宅にサーバを設置し、外部からアクセス可能にする手法のひとつとして、ダイナミック

DNSが利用されることがあります。ISPによってCGNが運用されるようになると、ダイナミッ

クDNSを利用した外部からのアクセスを実現するのが困難になります。

25.3.8 ロードバランシングIPアドレスをもとにロードバランシングを行うような機器では、同じ IPv4アドレスを集約

したCGNによってトラフィックが上手に分散できなくなってしまう可能性があります。これ

は、CGNが、極端に多くの通信を行っている特定のホストのように見えてしまうためです。

25.3.9 IPv4マルチキャストNATにおける IPv4マルチキャスト対応については、RFC 5135†17(BCP 135)で例が紹介さ

れています。本書執筆時点では、グローバル IPv4インターネットにおけるマルチキャストの

利用は稀ですが、CGNによって IPv4マルチキャストの実現がさらに困難になる可能性もあり

ます。

25.3.10 その他の課題RFC 6269†18には、NATなどの IPアドレス共有技術全般における課題がまとめられていま

す。RFC 6269ではCGN、DS-Lite、NAT64、A+Pなどが例として登場しますが、個々の技術で

はなく大規模に IPアドレスを共有することに伴う課題そのものが議論されています。

†17 RFC 5135:D. Wing, T. Eckert, “IP Multicast Requirements for a Network Address Translator (NAT) and

a Network Address Port Translator (NAPT)”, 2008年2月†18 RFC 6269:M. Ford, Ed., M. Boucadair, A. Durand, P. Levis, P. Roberts, “Issues with IP Address Sharing”,

2011年6月

Page 410: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

396 第25章 IPv4 NATとCGN

RFC 7021†19には、2013年段階のCGNによる通信への影響に対する調査結果がまとめられ

ています。

25.4 CGNの普及とサーバにおけるアクセスログIPv4アドレス在庫が枯渇すると、ISPはこれまでのように「必要になったら新しい IPv4アド

レスを申請して割り振りを受ける」ことができなくなります。これは、IPv4アドレスの総量が

これ以上増えなくなるということであり、ISPはそれまで割り振りを受けた IPv4アドレスを節

約しながら使い続けなければなりません。その節約の手段としてCGNが活用されることが増

えていますが、ISPがCGNを利用するようになると、家庭用NATと合わせて2段階のNATが

行われる環境が増えます。多くのユーザが同じ IPv4アドレスにまとめられてしまうので、Web

サーバ側でプログラムを書いたりサーバを管理したりする側の視点から見ると、ユーザとして

見える相手の IPv4アドレスのバリエーションが劇的に減ることになります。

ISPがCGNを利用すると、IPv4アドレスだけでは実際に通信を行った契約回線を特定できな

くなるので、サーバ側でアクセスログに記載する項目も変更を迫られることになります。具

体的には、TCPのポート番号情報がアクセスログに追加されるようになります。CGN通過後

のグローバル IPv4アドレスはまとめられたものであり、契約回線特定のためには IPv4アドレ

スとTCPポート番号の両方が必要になるからです。CGNによる IPv4でのインターネット接続

サービスが増えるに従い、Webサービスなどのインターネットサービスを提供する側でも、対

応が必要になるということです。

RFC 6302†20では、インターネットに接続されたサーバでは以下の項目をログとして保存す

ることが推奨されています。

r 送信元ポート番号r タイムスタンプr トランスポートプロトコル(たとえば、UDPやTCP)r アプリケーションが複数のポート番号を利用する場合には、宛先ポート番号もサーバのアクセスログについては、NAT機器での時刻情報とサーバログでの時刻情報をど

のように同期すればよいかという課題もあります。

25.5 ISP SharedアドレスCGNから各家庭にあるCPEまでのインターネットサービスプロバイダネットワークにおい

て既存のプライベート IPv4アドレスを使ってしまうと、各家庭内で利用されているプライベー

ト IPv4アドレスと競合する可能性があります。そのような競合を起こさずにサービスプロバ

†19 RFC 7021:C. Donley, L. Howard, V. Kuarsingh, J. Berg, J. Doshi, “Assessing the Impact of Carrier-Grade

NAT on Network Applications”, 2013年9月†20 RFC 6302:A. Durand, I. Gashinsky, D. Lee, S. Sheppard, “Logging Recommendations for Internet-Facing

Servers”, 2011年6月

Page 411: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

25.5 ISP Sharedアドレス 397

イダ内ネットワークのグローバル IPv4アドレスを節約できるようにするため、RFC 6598†21

(BCP153)にて ‌ISP Shared Address‌と呼ばれる下記のアドレスブロックが確保されました。

r 100.64.0.0/10このアドレスブロックはARINから出されたもので、2012年3月時点で確保されており、

whoisには「SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED」として登録されていま

す†22。ISP Shared Addressは、本書執筆時点において、すでにさまざまな ISPによって活用さ

れています。

ISP Shared Addressにより、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16に続く4

つめのプライベート IPv4アドレスが誕生したとも考えられます。ただし、100.64.0.0/10は

サービスプロバイダネットワーク内でのみ利用される点で、他の3種類のプライベート IPv4ア

ドレスとは異なります。

†21 RFC 6598:J. Weil, V. Kuarsingh, C. Donley, C. Liljenstolpe, M. Azinger, “IANA-Reserved IPv4 Prefix for

Shared Address Space”, 2012年4月†22 Whois-RWS SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED:http://whois.arin.net/rest/net/

NET-100-64-0-0-1

Page 412: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 413: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

第26章

STUN

STUN(Session Traversal Utilities for NAT)は、P2P的な通信において、NAT機器の裏側

に設置された機器と相互にやり取りするための情報を収集する代表的な手法です。第 IV部で

紹介したいくつかの IPv4/IPv6共存技術でも、STUNと類似する技術が採用されています。

STUNは、いわゆる「NAT越え」のためのUDPによるツールだといえます。ただし、実際に

通信を行う際には、STUN以外の何らかのマッチングを行うサーバも必要になる場合が多くあ

ります。STUNのみですべて完結するわけではない場合も多く、その点には注意が必要です。

STUNそのものは、IPv4アドレス在庫枯渇問題と直接的な関係はありません。とはいえ、

IPv4アドレス在庫枯渇の発生とともに IPv4におけるNAT機器が増えることが予想されること

から、その際の要素技術として必要になる場面が出てくるでしょう。

STUNには、無数にあるNAT機器の実装に依存する部分も多く、実運用の中で得られた経験

から仕様がいったん見直されたという経緯があります。さらに、その仕様見直しによって、か

つては非常に重要な考え方とされた「NATの分類」まで変わってしまいました。そういった意

味では、多少ややこしいプロトコルであるともいえます。ここでは、当初のSTUNプロトコル

が定義したものや、なぜその定義が見直されたのかについて説明します。

26.1 STUN概要STUNは、RFC 5389†1として定義されています。RFC 5389には、STUNの利用環境の例と

して、図26.1のような環境が紹介されています。

†1 RFC 5389:J. Rosenberg, R. Mahy, P. Matthews, D. Wing, “Session Traversal Utilities for NAT (STUN)”,

2008年10月

Page 414: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

400 第26章 STUN

STUNサーバ

NATインターネット

NAT

STUNクライアント

▲ 図26.1 STUNの想定環境例

STUNクライアントは、プライベート IPv4アドレスで運用されたネットワーク内に存在し

ます。STUNクライアントが接続されているネットワーク自身も、NATによるプライベート

IPv4アドレスによって運用されるネットワークに接続されています。この例からわかるよう

に、STUNのユースケースはCGNを強く意識したものです。

ただし、STUNそのものは図26.1のような2段NAT環境に限定された仕組みではありませ

ん。一般的なSOHOルータにおけるNATのみの1段NAT環境でも利用可能なプロトコルです。

26.2 旧STUNと新STUNSTUNは、最初はRFC 3489†2として定義されました。現在のSTUNを規定するRFC 5389は

RFC 3489を上書きして廃止するものなので、旧STUNを利用することは推奨されません。

同じ STUNという呼称であることから、同一のプロトコルであると誤解されがちですが、

RFC 5389はRFC 3489とは根本的にまったく異なるプロトコルを規定していると考えたほう

がよいでしょう。そもそも、実は名前もまったく違います。旧 STUNは、「Simple Traversal

of User Datagram Protocol (UDP) Through Network Address Translators (NATs)」を短縮

したものとされていました。これに対し、新STUNは、「Session Traversal Utilities for NAT」

というのが正式な名称です。旧STUNは、名称からわかるように、UDPを前提としたものでし

た。新STUNはメッセージをTCPやTLSでもやり取りできるように変更されています。

新 STUNで想定されている利用環境は、1つもしくは複数のNAT機器の裏側にクライアン

トが存在しているような環境です。STUNクライアントからのリクエストに対して、STUN

サーバがレスポンスを送信します。これらの基本的な構造は旧STUNも同様ですが、旧STUN

と新STUNではメッセージの種類が異なります。旧STUNでは、クライアントとサーバ間で、

Binding Requestと Shared Secretという2種類のメッセージを利用していました。新 STUN

では、これがBindingという1種類のメッセージだけになっています。

新STUNは、NAT越えの機能を実現するためのツールの一部という位置づけであり、実際の

用途は他のプロトコルに依存します。新STUNを定義しているRFC 5389では、新STUN と連

携するプロトコルとしてTURN、ICE、SIP Outboundが挙げられています。

†2 RFC 3489:J. Rosenberg, J. Weinberger, C. Huitema, R. Mahy, “STUN - Simple Traversal of User Datagram

Protocol (UDP) Through Network Address Translators (NATs)”, 2003年3月

Page 415: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

26.3 NATの分類 401

26.3 NATの分類旧STUNを定義しているRFC 3489では、NATを下記の4種類に分類し、これらのNATの種

別を検出するための機能も規定されていました。

r Full Cone NATr Restricted Cone NATr Port-restricted Cone NATr Symmetric NAT

その後、これらの分類を利用することが推奨されなくなりました。実際、2007年に発行さ

れたRFC 4787(NATにおけるユニキャストUDPの挙動に関する要求事項をまとめたもの)で

は、RFC 3489のように4種類に分けるのではなく、NAT機器の挙動を要素に分けて組み合わ

せで考えられるようにしています。さらに、「RFC 3489では、Full Cone、Restricted Cone、

Port-restricted Cone、Symmetric という表現が利用されているが、それらの分類は実際の

NATの挙動を示すには不適切であることが証明されており、多くの混乱の原因となった」とし

ています。

新STUNのRFCにも、旧STUNのようなNATの分類方法は含まれていません。その代わり、

RFC 4787で定義されているNAT機器の挙動の要素が参照されています。とはいえ、Full Cone

NATなどの表現はTeredoの仕様では残っていますし、どういった分類だったのかを知ること

は重要なので、次項ではまずこれらの分類について簡単に解説します。そのうえで、現在利用

されているNAT機器に要求される挙動を示したRFC 4787とRFC 5382について紹介します。

26.3.1 Full Cone NAT‌Full Cone NAT ‌では、特定の内部 IPアドレスとポート番号の組を、特定の外部 IPアドレス

とポート番号にマッピングします。NAT外部の特定のアドレスとポート宛の通信が、送信元

IPアドレスに依存せず、NAT内部の単一の IPアドレスとUDPポートに転送されるような構成

です。Full Cone NATでは、NAT機器においてセッションが確立すると、複数の IPアドレス

から特定の内部 IPアドレスにUDPパケットを送信可能になります。

図26.2の例では、NAT内から203.0.113.3のUDP 2222番ポートに向けてUDPパケット

が送信されています。NATの外側では、このUDPパケットの送信元 IPアドレスは198.51.

100.2、UDP送信元ポートは1111となっています。このとき、NATの外側から198.51.100.

2のUDPポート1111に向けてインターネット上の他のホストからUDPパケットが送信される

と、そのUDPパケットはNAT機器を越えてNATの内側の192.168.0.2に転送されます。

Page 416: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

402 第26章 STUN

NAT

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2203.0.113.3UDP

宛先アドレス

送信元ポート 11112222宛先ポート

プロトコル

IPパケット(UDPデータ)

192.168.0.2203.0.113.99

192.0.2.6

203.0.113.3

198.51.100.2192.168.0.1

NATの内側 NATの外側

UDPヘッダ

IPv4ヘッダ

198.51.100.2UDP

宛先アドレス

1111宛先ポート

プロトコル

IPパケット(UDPデータ)

▲ 図26.2 Full Cone NAT

26.3.2 Restricted Cone NAT‌Restricted Cone NAT ‌では、Full Cone NAT同様に、特定の内部 IPアドレスとポート番号

の組が特定の外部 IPアドレスとポート番号の組へとマッピングされます。Full Cone NATと

の違いは、外部から内部へパケットが届くために、内部からその外部ホストに対してパケット

の送信が過去に行われている必要があるという点です。

図26.3の例では、NAT内部からUDPパケットが送信されたことがある203.0.113.3およ

び203.0.113.99からのUDPパケットはNAT内部へと転送されますが、NAT内部からUDP

パケットを受け取っていない192.0.2.6からのUDPパケットはNAT内部へと転送されずに

破棄されています。

NAT

192.168.0.2

192.0.2.6

203.0.113.3

198.51.100.2192.168.0.1

NATの内側 NATの外側

NAT内部に転送

NAT内部に転送203.0.113.99

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2203.0.113.3UDP

宛先アドレス

送信元ポート 11112222宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 192.0.2.6198.51.100.2UDP

宛先アドレス

送信元ポート 22221111宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 203.0.113.3198.51.100.2UDP

宛先アドレス

送信元ポート 22221111宛先ポート

プロトコル

IPパケット(UDPデータ)

▲ 図26.3 Restricted Cone NAT

Page 417: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

26.3 NATの分類 403

26.3.3 Port­restricted Cone NAT‌Port-restricted Cone NAT ‌は、Restricted Cone NATに対してポート番号による制限を加

えたものです。NAT内部からパケットを送信したことがある外部 IPアドレスとポート番号か

らのパケットのみが、NAT内部へと転送されます。

図26.4の例では、NAT内部から受け取ったUDPパケットの送信元ポートを宛先ポートとし

てNAT外部から送信されるUDPパケットは、NAT内部へと転送されます。一方、この例では

192.0.2.6はNAT内部からUDPパケットを受け取っていますが、192.0.2.6からのUDPパ

ケットの送信元UDPポートがNAT内部からのUDP宛先ポートとは異なる9999となっている

ので、これはNAT内部へと転送されずに破棄されています。

NAT

192.168.0.2

192.0.2.6

203.0.113.3

198.51.100.2192.168.0.1

NATの内側 NATの外側

NAT内部に転送

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2203.0.113.3UDP

宛先アドレス

送信元ポート 11112222宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2192.0.2.6UDP

宛先アドレス

送信元ポート 11112222宛先ポート

プロトコル

IPパケット(UDPデータ) UDPヘッダ

IPv4ヘッダ

送信元アドレス 192.0.2.6198.51.100.2UDP

宛先アドレス

送信元ポート 99991111宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 203.0.113.3198.51.100.2UDP

宛先アドレス

送信元ポート 22221111宛先ポート

プロトコル

IPパケット(UDPデータ)

▲ 図26.4 Port Restricted NAT

26.3.4 Symmetric NAT

‌Symmetric NAT‌では、内部 IPアドレスとポート番号の組と外部 IPアドレスとポート番号の

組が個別に扱われます。送信元パケットが利用する内部 IPアドレスとポート番号の組が同じ

であっても、別 IPアドレスに対するセッションに対しては別の外部ポート番号が割り当てられ

ます。外部からのパケットは、内部から送信されたことがある外部 IPアドレスおよびポート番

号からのもののみが内部へと転送されます。

図26.5の例では、NAT内部からのUDPセッションは送信元と宛先 IPアドレス、送信元と

宛先UDPポートの4つの組ごとに個別に扱われます。NAT内部での送信元UDPポート番号

は203.0.113.3と192.0.2.6の両方に対して9001となっていますが、インターネットでは

NAT機器によって別々の送信元UDPポートとなって送信されます。

Page 418: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

404 第26章 STUN

NAT

UDPヘッダ

IPv4ヘッダ

送信元アドレス 192.168.0.2203.0.113.3UDP

宛先アドレス

送信元ポート 90012222宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2203.0.113.3UDP

宛先アドレス

送信元ポート 11112222宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 192.168.0.2192.0.2.6UDP

宛先アドレス

送信元ポート 90012222宛先ポート

プロトコル

IPパケット(UDPデータ)

UDPヘッダ

IPv4ヘッダ

送信元アドレス 198.51.100.2192.0.2.6UDP

宛先アドレス

送信元ポート 88882222宛先ポート

プロトコル

IPパケット(UDPデータ)

192.168.0.2192.0.2.6

203.0.113.3

198.51.100.2192.168.0.1

NATの内側 NATの外側

▲ 図26.5 Symmetric NAT

26.4 NAT機器に要求される挙動NAT機器に要求される挙動は、RFC 4787†3とRFC 5382†4でまとめられています。RFC

4787では、ユニキャストUDPに対する挙動と要求がまとめられています。RFC 5382では、

RFC 4787に書かれている内容を前提としつつ、TCPに関する内容がまとめられています。

RFC 4787とRFC 5382は、ともにRFC 7857によって更新されています†5。3つのRFCは、い

ずれもBCPのRFCです。

RFC 4787では、アドレスとポートに対するマッピングの選択肢として、Endpoint-

Independent Mapping(エンドポイント非依存マッピング)、Address-Dependent Mapping

(アドレス依存マッピング)、Address and Port-Dependent Mapping(アドレスとポート依存

マッピング)の3種類が考えられるとしています。

Endpoint-Independent Mappingでは、NATの内側 IPアドレスとポート番号の組に対して、

インターネット側ノードの IPアドレスが無関係にマッピングされます。たとえば、NATの内

側から、192.0.2.1というインターネット側のノードとUDPで通信したとします。NAT機器

の外側での送信元ポート番号を30000としたとき、インターネット側で203.0.113.2という

別の IPアドレスからNAT機器に対してUDPポート30000番宛への通信があったとしても採用

されるのがEndpoint-Independent Mappingです。文字どおり、インターネット側のエンドポ

イントに非依存なマッピングです。

Address-Dependent Mappingでは、インターネット側の IPアドレスもマッピングの対象要

素となります。そのため、インターネット側で別の IPアドレスを持つノードからの通信はマッ

ピングに該当しなくなります。

Address and Port-Dependent Mappingでは、Address-Dependent Mappingに加えて、さ

†3 RFC 4787:F. Audet, C. Jennings, “Network Address Translation (NAT) Behavioral Requirements for

Unicast UDP”, 2007年1月†4 RFC 5382:S. Guha, K. Biswas, B. Ford, S. Sivakumar, P. Srisuresh, “NAT Behavioral Requirements for

TCP”, 2008年10月†5 RFC 6888もRFC 4787を更新していますが、RFC 6888はCGNに関連する更新です。

Page 419: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

26.5 TURN 405

らにインターネット側ノードからのポート番号もマッピングの対象要素として利用します。

このうち、NAT機器が満たすべき必須の要件をEndpoint-Independent Mappingとしている

のが、RFC 4787とRFC 5382の大きなポイントのひとつです。その理由としては、Endpoint-

Independent Mappingによって、UNSAF(UNilateral Self-Address Fixing)と呼ばれるプロ

セスが実行できるようになる点が挙げられます。UNSAHは、外部からの通信がNAT機器を越

えられるようにするために、通信に使うべきアドレスとポート番号を測定するプロセスです。

IABによる InformationalなRFCであるRFC 3424†6で記述されています。NAT機器を通して

リアルタイムメディアやオンラインゲームなどのP2P的な接続を利用できるようにすることが

考慮された要件だといえるでしょう。

RFC 4787では、アドレスとポートのマッピングに関する挙動以外にも、NATの挙動を以下

のような項目に分類しています。

r アドレスとポートのマッピングr ポート割り当てr ポートパリティr ポートの連続性r マッピングの更新r 外部 IPアドレス空間と内部 IPアドレス空間の競合に関する挙動r フィルタリングr ヘアピニングr ALGr 決定論的プロパティr ICMP Destination Unreachableの挙動r フラグメンテーションに関する挙動そのうえで、NATに対する要求事項を14個定義しています。たとえば、エンドノード同士

がNAT機器を通じて通信を行うヘアピニングに対応することが必須とされていたり、RTPが

偶数ポートを利用しRTCPが奇数ポートを利用するという仕様を考慮して外部ポートに関して

も偶数と奇数を維持(ポートパリティ)することが推奨とされたりしています。NAT機器に対

する要求仕様の詳細について興味のある方は、RFC 4787をはじめとする関連RFCを参照して

ください。

26.5 TURNNATルータの挙動によっては、外部との直接通信ができない場合があります。そのような場

合には、通信を仲介するノードの手助けが必要になります。その仲介のためのプロトコルが、

RFC 5766で定義されているTURNです。

†6 RFC 3424:L. Daigle, IAB, “IAB Considerations for UNilateral Self-Address Fixing (UNSAF) Across Network

Address Translation”, 2002年11月

Page 420: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

406 第26章 STUN

NOTE

RFC 5766†7で定義されているTURNは IPv4のみに対応していますが、2011年に発行されたRFC 6156†8によって IPv6におけるTURNの利用も可能になっています。

RFC 5766は、“Traversal Using Relays around NAT (TURN): Relay Extensions to Session

Traversal Utilities for NAT (STUN)”と題されていることからわかるとおり、STUNに対する

拡張として定義されています。実際、TURNで使われるフォーマットの多くは、STUNと類似

したものです。

TURNの動作環境例を図26.6に示します。STUNによるNAT超えが困難な環境に対応する

ための中継サーバとなるのが、TURNサーバです。TURNクライアントは、NATの内側のプラ

イベート IPv4アドレス環境に接続されており、TURNサーバを経由して「ピア(peer)」と呼

ばれる他のノードと通信が可能になります。

IPv4インターネット

TURNサーバTURN

クライアント ピアA

ピアB

プライベートIPv4アドレス環境

プライベートIPv4アドレス環境

NAT NAT

UDP/TCP/

TLS over TCP UDPのみ

UDPのみ

▲ 図26.6 TURN概要

TURNでは、NAT環境下のTURNクライアントからTURNサーバへの通信手段として、UDP、

TCP、TLS over TCPの3種類の通信が利用可能です。一方で、TURNサーバからピアへの通信

としては、UDPのみが採用されています。これは、NAT環境から外への通信として、TCPや

TLS over TCPのみがファイアウォールなどで許可されている環境に対応するためです。

TURNクライアントからTURNサーバへの通信 TURNサーバからピアへの通信

UDP UDP

TCP UDP

TLS over TCP UDP

TURNサーバを経由してピアと通信するTURNクライアントは、何らかの方法によって、ピ

アとの通信に必要なピアの IPアドレスやポート番号を知る必要があります。しかし、その方法

†7 RFC 5766:R. Mahy,P. Matthews,J. Rosenberg, “Traversal Using Relays around NAT (TURN): Relay Exten-

sions to Session Traversal Utilities for NAT (STUN)”, 2010年4月†8 RFC 6156:G. Camarillo,O. Novo,S. Perreault, “Traversal Using Relays around NAT (TURN) Extension for

IPv6”, 2011年4月

Page 421: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

26.5 TURN 407

はTURNプロトコルの範疇外です。RFC 5766では、電子メール、ICE、SIPなどの方法が利用

可能であることが記載されています。

26.5.1 TURNサーバの自動的な発見Standards TrackのRFCであるRFC 8155†9では、TURNサーバを自動的に発見する方法が

定義されています。RFC 8155で定義されているのは、DNSの S-NAPTR(Straightforward-

Naming Authority Pointer)リソースレコードを利用する方式、DNS-SD(DNS-based Service

Discovery、RFC 6763†10)とmDNS(Multicast DNS、RFC 6762†11)を利用した方式、IPエ

ニーキャストを利用する方式の3つです。IPエニーキャストによるTURNサーバ発見のため

に、192.0.0.10/32と2001:1::2/128が予約されています。

†9 RFC 8155:P. Patil,T. Reddy,D. Wing, “Traversal Using Relays around NAT (TURN) Server Auto Discovery”,

2017年4月†10 RFC 6763:S. Cheshire,M. Krochmal, “DNS-Based Service Discovery”, 2013年2月†11 RFC 6762:S. Cheshire,M. Krochmal, “Multicast DNS”, 2013年2月

Page 422: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の
Page 423: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

付録A

NTT NGNでのIPv6

NTT東日本とNTT西日本(NTT東西)では、フレッツ(FLET’S)と呼ばれるデータ通信サー

ビスを提供しています。このサービスの基盤となるネットワークは、‌NTTフレッツ網や ‌NTT

NGN‌などと呼ばれています。このネットワークは、インターネットとは切り離されている「閉域網」です。日本電信電話株式会社等に関する法律(通称NTT法)による制限で、NTT東西

ではインターネット接続サービスを利用者に対して直接提供することが許されていないから

です。

閉域網ではありますが、NTT NGN内では IPv6グローバルユニキャストアドレスが利用され

ています。東西NTTが展開するフレッツ光の回線を契約すると、この閉域網から IPv6アドレ

スが割り振られる仕組みです。この IPv6アドレスで、NTT NGN内で閉じたサービスではなく

IPv6インターネットへの接続を行うには、ISPとの契約が必要になります。

NTT NGNにおける IPv6の扱いは非常に特殊であり、その IPv6をめぐる特殊な事情は、海外

で「日本の IPv6問題」と表現されることもありました。「日本の IPv6問題」は、厳密に言うと

2種類に分けて考えられます。NTT閉域網 IPv6フォールバック問題と、NTT NGN IPv6マルチ

プレフィックス問題です。両方とも原因は同一であり、互いに密接に絡み合っている問題です

が、現象や周辺状況が異なっているので、本書では2種類の別々の問題として扱います。

現在のNTT NGNでは、これらの問題を解決するために、IPv6 IPoEと IPv6 PPPoEという2

つの異なる手法が提供されています。以降の解説では、これらの手法が必要となる技術的な要

因を説明するために、「NTT閉域網 IPv6フォールバック問題」および「NTT NGN IPv6マルチ

プレフィックス問題」という表現をしています。繰り返しになりますが、これらの「問題」は

IPv6 IPoEと IPv6 PPPoEを採用することで解決されています。

この付録では、NTT NGN経由で IPv6インターネット接続を実現するうえで何が問題であっ

たかと、その解決策としての IPv6 IPoEおよび IPv6 PPPoEについて説明します。

A.1 NTT閉域網IPv6フォールバック問題NTT NGN上で提供されているBフレッツ、フレッツ光ネクスト、光プレミアム(NTT西日

本)の各サービスでは、ユーザセグメントに IPv6アドレスが配布されます。しかし、その IPv6

Page 424: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

410 付録A NTT NGNでの IPv6

アドレスでは IPv6インターネットと通信できません。その IPv6アドレスは、割り振りとして

はグローバル IPv6アドレスですが、NTT NGNが IPv6インターネットと接続されていないから

です。

これらのNTTフレッツ網で提供されているサービス上で、ISPを経由して IPv4インターネッ

トに接続しているとします。このとき、IPv6対応のPCを使用していて IPv6が有効になってい

る場合、インターネットに接続する際に「IPv6から IPv4へのフォールバック」が必ず発生する

という問題がありました。これは、NTT NGNからインターネットと通信できないグローバル

IPv6アドレスが割り振られていることで、宛先アドレスとして IPv4アドレスより IPv6アドレ

スが優先されてしまう可能性が高かったからです(14.1節で説明した旧RFC 3484におけるデ

フォルト IPv6アドレス選択のルールを参照)。ISPで IPv6による接続サービスを申し込んでい

ない場合、つまりユーザのPCに IPv6でのインターネット接続性がない状態でNTT NGNによ

る IPv6アドレスが設定されている状況を図A.1に示します。

家庭内ネットワークIPv4インターネット

NTT NGN(閉域網)

宅内ルータ

Webサーバなど

フォールバック POI(Point Of Interface)

ISP

IPv4①

②②

IPv6アドレス

IPv4アドレス▲ 図A.1 NTT閉域網 IPv6フォールバック

この問題は、優先的に使われる設定になっているグローバル IPv6アドレスで運用されてい

るネットワーク(NTT NGN)が、IPv6インターネットに接続されていないために発生してい

たものです。この IPv6から IPv4へのフォールバックを回避するためのアプローチとして最も

単純なのは、常に IPv4のみが利用されるように IPv6を利用しない設定にする方法でしょう。

しかし、それではNTT NGN内において IPv6を利用したサービスが使えなくなります。そこで

現在では、IPv6 IPoEおよび IPv6 PPPoEという、インターネットに接続された IPv6を利用する

方法が採用されています。

IPv6 IPoEおよび IPv6 PPPoEについてはA.3節で説明します。ここではNTT閉域網 IPv6

フォールバック問題への短期的な対策や背景について補足します。

A.1.1 TCP RSTNTT NGN閉域網では、IPv6から IPv4へのフォールバックにかかる時間を短縮するために、

NTT NGN閉域網の外にある IPv6アドレス宛のTCP通信に対してはTCP RSTパケットを送付

するという手法が考案されたことがあります。TCP RSTパケットを送付することで、ユーザが

開始しようとした IPv6でのTCP接続の確立が早期に失敗し、IPv4へとフォールバックするま

Page 425: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.1 NTT閉域網 IPv6フォールバック問題 411

での時間を短縮できます。

家庭内ネットワークIPv4インターネット

NTT NGN(閉域網)

宅内ルータ

Webサーバなど

すぐにフォールバックPOI

(Point Of Interface)ISP

IPv4①

③③②

TCP SYN(IPv6アドレス)

TCP RST(IPv6アドレス)

IPv4アドレス

▲ 図A.2 NTT閉域網 IPv6 TCP RST

ただし、この対策はあくまでもTCPを利用した接続に対してしか利用できません。また、

TCP RSTパケットがネットワークで喪失する可能性があること、IPv6でTCP RSTを受け取っ

て「接続失敗」となった場合に IPv4でTCP接続を再度試みるかどうかはアプリケーションの

実装依存であることといった点にも注意が必要です。

A.1.2 NTT閉域網 IPv6フォールバック問題は新しい問題ではないNTT東日本がBフレッツ回線に IPv6アドレスを割り当て始めたのは2007年2月のことで

す。2007年時点で、NTT東日本のWebサイトには下記のような注意事項が記載されていま

した。

インターネット上には、IPv6と IPv4の両方で公開されているホームページが存在して

おり、このようなホームページへアクセスする場合には、初回表示に数十秒かかる場合

がございます

...(中略)...

【対処方法2】

IPv6をはずすことで回避可能です。設定手順は、以下のとおりです。

BフレッツやNTT西日本のフレッツ光プレミアムだけでなく、2008年に開始されたNTT

NGNサービスであるフレッツ光ネクストでも、NTT NGN閉域網の IPv6アドレスが割り当て

られています。

NTT閉域網 IPv6フォールバック問題が大きく取り上げられるようになったのは2008年前後

のことです。その背景には、この時期に IPv4アドレスの在庫枯渇が現実のものとなり、IPv6

に関する取り組みが増えたことがあります。それまでは、NTT閉域網 IPv6フォールバック問

題が発生し得る環境であったとしても、インターネット上にあるサーバのほうが IPv6に対応

していなかったので、ユーザ側が IPv6による接続を試みることがなかったのです。世界中で

多くのサーバが IPv6対応を実施し、権威DNSサーバにAAAAが登録されたことで、かなり前か

ら存在していた問題が顕在化したと考えられます。

Page 426: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

412 付録A NTT NGNでの IPv6

実際、NTT閉域網 IPv6フォールバック問題が世界的に有名になった背景には、World IPv6

Dayにおいて多くのコンテンツ事業者が期間限定で IPv6によるサービスを提供した際、多数

のユーザ側が IPv6での接続を試みるような状況が発生し、AAAAレコードを登録したWebサー

バ側でも通信確立までの遅延が観測されたという事件がありました。

A.1.3 クライアントサイドでのHappy Eyeballsによる対処NTT閉域網 IPv6フォールバック問題では、IPv6によるインターネットへのアクセスが必ず

失敗します。しかし、そもそもこのようなフォールバックはNTT NGN閉域網に固有の問題で

はありません。IPv4と IPv6のデュアルスタック環境であればどこでも発生し得る問題です。

たとえば、IPv4インターネットでは発生していないような大規模な障害が IPv6インターネッ

トの経路上だけで発生したような状況でも、類似の問題が発生すると考えられます。そのよう

な状況を避けるため、Happy Eyeballsという仕様が提案されています(16.2節参照)。

A.1.4 AAAAフィルタリングAAAAフィルタリングは、ISPにあるキャッシュDNSサーバで、DNS応答に含まれるAAAAレ

コードを抜いてしまうという手法です。キャッシュDNSサーバがAAAAレコードを除外するの

で、結果的にユーザが IPv6での通信を試みなくなります。「ユーザに IPv6を使わせない」方法

だといえます。

名前 AAAA A〇〇××▲▲■■

2001:db8::1

2001:db8::10

2001:db8::2

2001:db8::3

192.0.0.1

192.0.0.10

192.0.0.2

192.0.0.3

DNSサーバ DNSサーバキャッシュ 権威

名前 AAAA A〇〇××▲▲■■

2001:db8::1

2001:db8::10

2001:db8::2

2001:db8::3

192.0.0.1

192.0.0.10

192.0.0.2

192.0.0.3

AAAAは返さない

AAAAは削除

▲ 図A.3 AAAAフィルタリング

AAAAフィルタリングは、2011年のWorld IPv6 Day前後に試験的に実施されました。実施

したのは日本国内の ISP事業者や IX事業者です。World IPv6 Day中のNTT閉域網 IPv6フォー

ルバック問題の発生がかなり抑えられました。

AAAAフィルタリングは IPv6から IPv4へのフォールバック発生に対する解決策ではなく、短

期的な暫定的対応であるという点に注意が必要です。IPv6対応のための時間を稼ぐための手

法でしかありません。

2012年のWorld IPv6 Launch前後には、ISPのキャッシュDNSサーバにおけるAAAAフィル

タと同時に、コンテンツ事業者におけるDNS IPv6ブラックリスティングも実施されました。

権威DNSでのブラックリスト方式については18.5節を参照してください。

Page 427: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.2 NTT NGN IPv6マルチプレフィックス問題 413

A.2 NTT NGN IPv6マルチプレフィックス問題「NTT NGN IPv6マルチプレフィックス問題」は、NTT NGNから IPv6インターネットに接

続されていないグローバル IPv6アドレスがユーザ端末に設定された状態で、その端末に ISPか

らも IPv6アドレスが設定されてしまうことで発生していた問題です。問題の解決をめぐって

は全部で4つの案が検討され、そのうち案2および案4と題されていたものが、それぞれ IPv6

PPPoEおよび IPv6 IPoEとして、2011年に一般向けサービスが開始されています。本書執筆時

点ではすでに解決策が広く普及しており、その意味では「問題」ではありません。

NTT NGN IPv6マルチプレフィックス問題は、「ISPがどのように IPv6サービスを提供すべき

であるかに関する議論」だったといえます。2008年頃には、この問題を契機に、ISPがどのよ

うにしてNTT NGNで IPv6サービスを提供すべきかについての議論が活発に交わされました。

ここでは、現状の解決策である、IPv6 PPPoEおよび IPv6 IPoEについて説明する前に、議論が

交わされていた当時の「NTT NGN IPv6マルチプレフィックス問題」が具体的にどういった課

題だったかをまとめます。

A.2.1 問題が発生する状況NTT NGN IPv6マルチプレフィックス問題は、IPv6 IPoEや IPv6 PPPoEといった解決策を使

わない場合にNTT NGNで発生してしまうことが想定される、日本のネットワーク固有の問題

です。それが発生する背景には、NTT法による制限、NTT東西のネットワーク設計および判断

に加えて、IPv6がそもそも抱えている課題があります。

NOTE

RFC 7157では、IPv6におけるマルチプレフィックス問題が一般的に議論されています。このRFCは、NTT NGNにおける IPv6マルチプレフィックス問題のことを IPv6が本質的に抱えている課題の表面化であると捉えたNTT社員が中心になって書かれたものです。

IPv6 IPoEや IPv6 PPPoEといった解決策がない状態で、NTT NGNに接続しているユーザに

対して ISPが IPv6インターネット接続サービスを提供してしまうと、図A.4のような状態にな

ると考えられます。この環境では、NTT NGNによる IPv6プレフィックスと ISPによる IPv6プ

レフィックスの両方がホストに対して設定される可能性があります。

インターネット

NTT NGN

ISPルータ2

ルータ1

ルータホスト

ポート1

ポート2

▲ 図A.4 NTT NGN IPv6マルチプレフィックス問題が発生する状況

Page 428: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

414 付録A NTT NGNでの IPv6

この環境は、14.2節で紹介したシナリオ2に類似した環境です(図14.2と比べてみてくだ

さい)。そのため、そこで紹介されているのと同じ課題を抱えています。そのうえでNTT NGN

に固有の話として、IPv6インターネットと接続していないことから、NTT NGN IPv6ネット

ワークを利用することを選択したうえで IPv6インターネットと通信を行おうとすると通信が

必ず失敗してしまうという問題が発生します。このままではNTT NGNにおける IPv6インター

ネット接続サービスを ISPが一般利用者向けに提供できないということで、解決策が議論され

ました。解決策が決まるまではNTT NGN経由の IPv6インターネット接続サービスが実施でき

ないこと、どのような解決策を採用するかによって日本における ISPの事業形態が大きな影響

を受けることが予想されることから、この「問題」をめぐっては活発に議論が交わされました。

最終的には IPv6 IPoEと IPv6 PPPoEという解決策が決定し、現在ではすでに問題は解消してい

ます。

A.2.2 通信ができない IPv6環境での例IPv6では1つのネットワークインターフェースに複数のネットワークプレフィックスが設定

可能ですが、そのようなマルチプレフィックス状態であっても、各通信では単一の IPv6アドレ

スが利用されます。このとき、IPv6マルチプレフィックス状態のホストは、何らかの方法で通

信に利用する IPv6アドレスを選択しなければなりません。その選択によって通信結果が異な

る場合もあります。

場合によっては IPv6アドレス選択によって悪影響が生じることもあります。図A.5では、

ISP Aと ISP Bの両方につながった家庭内にあるパソコンに、ISP Aからの IPv6アドレスとして

2001:db8:aaaa:0001::2が、ISP Bからの IPv6アドレスとして2001:db8:beef:cccc::2

が両方とも設定されています。このとき、何らかの理由で、ISP Bにおける IPv6インターネッ

トへの接続性に一時的な障害が発生したとします(IETFでの議論やRFCにおいて「“broken”IPv6」と表現される状況です)。

家庭内ネットワーク

2001:db8:aaaa:0001::1

2001:db8:aaaa::/48

2001:db8:beef::/48

2001:db8:beef:cccc::12001:db8:beef:cccc::2

2001:db8:aaaa:0001::2

IPv6インターネットISP A

ISP B

ルータ

ルータ

▲ 図A.5 IPv6アドレス選択が悪影響を与える例1

このような環境下で、家庭内にあるパソコンが送信元 IPv6アドレスとして2001:db8:aaaa:

0001::2を選択し、ルータA経由で IPv6インターネット上にあるサーバと通信する場合には、

通信は正常に行われます。

Page 429: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 415

家庭内ネットワーク

2001:db8:aaaa:0001::1

2001:db8:aaaa::/48

2001:db8:beef::/48

2001:db8:beef:cccc::12001:db8:beef:cccc::2

2001:db8:aaaa:0001::2

IPv6インターネットISP A

ISP B

ルータ

ルータIPv6ヘッダデータ IPv6ヘッダ

データ

送信元アドレス2001:db8:aaaa:0001::2

宛先アドレス2001:db8:aaaa:0001::2

▲ 図A.6 IPv6アドレス選択が悪影響を与える例2

しかし、家庭内にあるパソコンが送信元 IPv6アドレスとして2001:db8:beef:cccc::2を

選択し、ルータA経由で IPv6インターネット上にあるサーバとの通信を試みる場合には、家庭

内のパソコンからサーバまでのパケットは到達するものの、サーバから家庭までのパケットは

到達せず、通信が成立しません。

家庭内ネットワーク

2001:db8:aaaa:0001::1

2001:db8:aaaa::/48

2001:db8:beef::/48

2001:db8:beef:cccc::12001:db8:beef:cccc::2

2001:db8:aaaa:0001::2

IPv6インターネットISP A

ISP B

ルータ

ルータIPv6ヘッダデータ

IPv6ヘッダ

データ

送信元アドレス2001:db8:beef:cccc::2

宛先アドレス2001:db8:beef:cccc::2

▲ 図A.7 IPv6アドレス選択が悪影響を与える例3

なお、この環境下では、家庭内のパソコンがルータBを経由して通信しようとすると、送信

元 IPv6アドレスの選択にかかわらず、すべての通信が失敗してしまいます。図A.7の状況で家

庭内のパソコンが通信を成功させるには、RFC 7157によると以下の3点が重要です。

r 適切な次ホップを選択してパケットを送信できることr 適切な送信元 IPv6アドレスを利用してパケットを送信できることr 適切なキャッシュDNSサーバを選択できること

送信元 IPv6アドレスの選択と経路の選択が互いに独立している点がポイントだといえるで

しょう。

A.3 IPv6 PPPoEとIPv6 IPoENTT NGN IPv6マルチプレフィックス問題に対しては、解決策として、IPv6 PPPoEと IPv6

IPoEの2種類が利用されています。IPv6 PPPoEか IPv6 IPoEを利用することで、NTT NGNか

らの IPv6アドレスが利用者のネットワーク内には割り当てされなくなるので、複数のグロー

バル IPv6アドレスが設定される状態が避けられます。これにより、NTT NGN IPv6マルチプレ

Page 430: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

416 付録A NTT NGNでの IPv6

フィックス問題を発生させていた要因が解消することになります。ユーザが利用するホストに

対して複数のプレフィックスを提供せずにシングルプレフィックスにすることで問題を回避す

る方法だといえるでしょう。

NTT東西で提供されている IPv6 PPPoEと IPv6 IPoEの違いを表A.1にまとめます。なお、表

中のVNEはVirtual Network Enablerのことで、NTT東西と契約して他の ISPに代わって IPv6

サービスを提供する事業者を指します。

▲ 表A.1 NTT東西で提供されている IPv6 PPPoEと IPv6 IPoE

項目 IPv6 PPPoE IPv6 IPoE

旧称 トンネル方式(案2) ネイティブ方式(案4)

ユーザの宅内の IPv6アドレス ISPの IPv6アドレス VNEからNTTに預けられた

IPv6アドレス

ユーザの宅内で必要となる機器 IPv6トンネルアダプタ 特になし

ユーザのトラフィックの経路 ISP経由 VNE経由

PPPoEIPv4と IPv6で別々のPPPoEセッション IPv6用のPPPoEは不要

特徴 トンネルアダプタ内でNAT66を実施

NGN内で送信元 IPv6アドレスをもとにしたPolicy Basedルーティングを実施

NTTフレッツネクストを利用するユーザに対して ISPが IPv6サービスを提供するときに、ど

ちらの方式を利用するのかは、各 ISPごとの判断となります。ユーザは、利用している ISPの対

応状況を見ながら、IPv6 PPPoEと IPv6 IPoEのどちらを利用するのかを状況に応じて判断し、

申し込みを行う必要があります。

なお、技術的には、各ユーザが IPv4用の ISPと IPv6用の ISPを別々に利用することも可能

です。

A.3.1 IPv6 PPPoE‌IPv6 PPPoE‌は、NTTフレッツ網で IPv4インターネット接続サービスと同様にPPPoEを利用

する方式です。「トンネル方式」という名前のとおり、IPv6 PPPoEでは、図A.8のように、ユー

ザの宅内にある IPv6トンネルアダプタからNTT NGN内にある IPv6終端装置までトンネルが

張られます。IPv6 PPPoEは、IPv4におけるインターネット接続サービスの多くと同様に、ISP

との接続や認証にPPP(Point-to-Point Protocol)を利用します。

IPv6終端装置は ISPのネットワークと接続されており、ISPを経由して IPv6インターネット

との通信が可能になります。

Page 431: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 417

ISP(IPv6)

家庭内ネットワーク

IPv6インターネット

NTT NGN(閉域網)

IPv6トンネルアダプタ

IPv6網終端装置IPv6アドレス CPE

▲ 図A.8 IPv6 PPPoE

IPv6トンネルアダプタに接続しているユーザの宅内のLANに対しては、ISPから IPv6のネッ

トワークプレフィックスが割り当てられます。このときユーザの宅内で利用される IPv6の

ネットワークプレフィックスは、ISPから割り当てられるもののみです。

IPv6トンネルアダプタは、IPv6インターネット宛のトラフィックはトンネルを経由して ISP

へと転送します。NTT NGN内を宛先とするトラフィックについてはトンネルを経由させず、

NAT66を利用することで送信元 IPv6アドレスをNTT NGNにおける IPv6のネットワークプレ

フィックスへと変換してから転送します。IPv6トンネルアダプタによって、NTT NGN宛の通

信と IPv6インターネット宛の通信が両方とも可能になります。

ISP(IPv6)

家庭内ネットワーク

IPv6インターネット

NTT NGN(閉域網)

IPv6トンネルアダプタ

IPv6網終端装置

NTT NGNサービスNAT66

IPv6アドレスCPE

▲ 図A.9 IPv6 PPPoEで行われるNAT66

一般のユーザは、IPv6インターネットだけではなく IPv4インターネットもよく利用します。

その場合には、IPv6 PPPoEに加えて、IPv4 PPPoEも利用することになります。具体的には、

図A.10のように、IPv4 PPPoEの接続はホームゲートウェイ(CPE)が担当し、IPv6 PPPoEは

IPv6トンネルアダプタが担当するという構成になります。IPv4 PPPoEと IPv6トンネルアダプ

タの両方の機能が搭載されたホームゲートウェイが使われる場合もあります。

Page 432: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

418 付録A NTT NGNでの IPv6

ISP(IPv4)

ISP(IPv6)

家庭内ネットワークIPv4インターネット

IPv6インターネット

NTT NGN(閉域網)

IPv6トンネルアダプタ

IPv4網終端装置

IPv6網終端装置

IPv4アドレス

IPv6アドレス

CPE

▲ 図A.10 IPv4 PPPoEと IPv6 PPPoE

A.3.2 IPv6 IPoE‌IPv6 IPoE ‌では、VNE(Virtual Network Enabler)と呼ばれる事業者がNTT東西と契約し、

他の ISPに代わって IPv6サービスを提供します。VNEは、IPv6ネットワークを運用しつつNTT

NGN網との相互接続を行います。IPv6 IPoEでは、VNEが ISPに対してローミングサービスを

提供するわけです。IPv6 IPoEを申し込んだユーザには、VNEからNTTに預けられた IPv6アド

レスが割り当てられます。ISPは、VNEと契約してVNEの顧客となることで、ユーザに対して

IPv6サービスを提供します。IPv6 IPoEにおける ISPの役割は、IPv6ネットワークを直接運用

することではなく、アカウント管理や課金などです。

IPv6 IPoEは、図A.11のような構成で運用されています。

VNE 1

VNE 2

VNE 3

家庭内ネットワーク

IPv6インターネット

NTT NGN(閉域網)

IPv6アドレス

CPE

POI

POI

POI

NTT NGNサービス

▲ 図A.11 IPv6 IPoE

IPv6 IPoEを利用するユーザからの IPv6トラフィックは、NTT NGN内で送信元 IPv6アドレ

スをもとにしたPolicy Basedルーティングされることにより、VNEとの相互接続地点に設定さ

れたゲートウェイルータへと転送されます。「送信元 IPv6アドレスをもとにしたPolicy Based

ルーティング」というのは、送信元アドレスに応じて転送先が決定されていくことを意味して

います。通常、IPv6ユニキャストパケットは、IPv6ヘッダに記載された宛先 IPv6アドレスに

応じて転送されますが、IPv6 IPoEでは、送信元 IPv6アドレスも考慮されたルーティングが行

われるのです。このような仕組みになっているのは、どのVNEを経由して IPv6インターネッ

Page 433: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 419

トへと転送するかを、各ユーザの IPv6アドレスに応じて決定するからです。相互接続地点の

ゲートウェイルータでは、各パケットの送信元アドレスを見て、適切なVNEへと転送します。

IPv6インターネットとの通信でなく、NTT NGNサービスとの IPv6による通信では、ユーザ

からの IPv6パケットの宛先 IPv6アドレスがNTT NGNサービスの IPv6アドレスになっていま

す。そのような IPv6パケットは、NTT NGN内のサーバへとルーティングされます。

さらに、IPv6 IPoEによる直接的な機能ではありませんが、IPv6 IPoEではNTT NGNにおけ

る網内折り返し機能も利用できます†1。これは、IPv6 IPoEを利用する機器同士の通信におい

て、VNEを経由せずにNTT NGN内で通信が可能になるというものです。ただし、NTT東西を

またがるような通信に関しては、VNEを経由しての折り返し通信となります。

VNE 1

VNE 2

VNE 3

家庭内ネットワーク

家庭内ネットワーク

IPv6インターネット

NTT NGN(閉域網)

IPv6アドレス

IPv6アドレス

CPE

CPE

網内折り返し機能

POI

POI

POI▲ 図A.12 IPv6 IPoE(網内折り返し通信)

IPv6 IPoEを利用する場合の IPv4インターネット接続サービスと IPv6関連サービスをまとめ

ると図A.13のようになります。各家庭内にあるCPE(ホームゲートウェイとも呼ばれます)

を経由して、IPv4サービスと IPv6サービスの両方が提供されます†2。IPv4サービスのための

IPv4パケットは、ホームゲートウェイから IPv4網終端装置までNTT NGN内をトンネルで転送

され、そこから ISPまで運ばれます。

†1 網内折り返しは「フレッツ・v6オプション」に契約する必要があります。ISPの契約とは独立しています。†2 CPEがなくても、IPv4 サービスと IPv6 サービスの両方が提供されます。

Page 434: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

420 付録A NTT NGNでの IPv6

ISP(IPv4)

VNE 1

VNE 2

VNE 3

家庭内ネットワーク

家庭内ネットワーク

IPv4インターネット

IPv6インターネット

NTT NGN(閉域網)

IPv4網終端装置IPv4アドレス

IPv6アドレス

IPv6アドレス

CPE

CPE

NTT NGNサービス

網内折り返し機能

POI

POI

POI

▲ 図A.13 IPv6 IPoE(全体像)

IPv6 IPoEは、IPv6 PPPoEの IPv6トンネルアダプタのような追加機器を必要とせず、NTT東

西側の設定によって実現します。IPv6 IPoEを利用するユーザに対しては、VNEから IPv6アド

レスが割り当てられるので、NAT66が必要な IPv6 PPPoEと比べると仕組みも比較的シンプル

です。

ただし、技術的制約から、VNEの総数は制限されています。IPv6 IPoEのサービス開始時点で

は、BBIX株式会社、インターネットマルチフィード株式会社、日本インターネットエクスチェ

ンジ株式会社(現在は日本ネットワークイネイブラー株式会社)の3社がVNEとして事業を展

開していました。BBIXはソフトバンク、日本ネットワークイネイブラー株式会社はKDDI、イ

ンターネットマルチフィードはNTTの系列会社であり、日本国内の大手3キャリアで3つの枠

を分け合っていた格好です。その後、最大16社までVNEを増やせるような方向で検討が進め

られ†3、2018年6月5日時点では6社がVNEとして事業を展開し、2社が接続申し込みの承諾

を受けています†4。

r 2009年12月4日(公表段階)†5

q BBIX株式会社q インターネットマルチフィード株式会社q 日本インターネットエクスチェンジ株式会社(現在は日本ネットワークイネイブラー株式会社)

r 2016年5月28日†6

q ビッグローブ株式会社q 株式会社朝日ネット†3 http://www.soumu.go.jp/main_content/000033625.pdf†4 2018年6月5日時点では、フリービット株式会社とアルテリア・ネットワークス株式会社は「予定」と記されて

います。http://www.ntt-east.co.jp/info-st/ipoe_menu/index.html†5 http://www.ntt-east.co.jp/info-st/mutial/ngn/IPv6sentei091204.pdf†6 http://www.ntt-east.co.jp/info-st/mutial/ngn/IPv6shoudaku20160510.pdf

Page 435: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 421

r 2016年9月29日†7

q エヌ・ティ・ティ・コミュニケーションズ株式会社r 2017年7月6日†8

q フリービット株式会社r 2018年3月5日†9

q アルテリア・ネットワークス株式会社A.3.3 Bフレッツでの IPv6インターネット接続サービス

Bフレッツとフレッツ光ネクストには違いがあります†10。さらに、NTT西日本にはフレッ

ツ光プレミアムという別網もあります。NGN(Next Generation Network、次世代ネットワー

ク)と呼ばれることもあるのは、フレッツ光ネクストです†11。

NGNは、保守コストが上昇している交換機ではなく、汎用的な IP製品を活用して電話網を

構築し直したものです。NGNでは、IP製品を使ってユニバーサルサービスを提供するので、電

話以外のサービスも同時に行えるという特徴もあります。

IPv6 PPPoEと IPv6 IPoEが提供されているのは、フレッツ光ネクスト(NGN)です†12。一方

で、Bフレッツ、フレッツ光プレミアム、フレッツ光ネクストのすべてで、閉域網から IPv6ア

ドレスが提供されています。そのため、フレッツ光ネクスト以外では、公式な手法として IPv6

インターネットに接続する方法は提供されていませんでした。Bフレッツからフレッツ光ネク

ストへのサービス移行によって IPv6インターネット接続サービスが提供されたことになりま

す†13。

A.3.4 IPv6 PPPoEと IPv6 IPoEのビジネス構造的な違いIPv6 PPPoEと IPv6 IPoEの間には、通信そのものの技術的な違いだけではなく、ビジネス構

造による違いもあります。NTT NGN IPv6マルチプレフィックス問題に対して4つの解決案が

提案され、そのうち案2(IPv6 PPPoE)と案4(IPv6 IPoE)が採用された背景には、このビジ

ネス構造の違いという側面がありました。

ISPが、NTT東西の保有するNGNを利用して IPv4インターネット接続サービスを提供する

†7 http://www.ntt-east.co.jp/info-st/mutial/ngn/IPv6shoudaku20160929.pdf†8 https://www.ntt-east.co.jp/info-st/mutial/ngn/IPv6shoudaku20170706.pdf†9 https://www.ntt-east.co.jp/info-st/mutial/ngn/IPv6shoudaku20180305.pdf†10 Bフレッツは2021年1月に終了します。Bフレッツの新規契約は、本書執筆時点(2018年5月)においてでき

なくなっています。https://www.ntt-east.co.jp/release/detail/20180409_01.html†11 本書とは関係ありませんが、総務省などで主に光スイッチングなどの研究でNwGN(新世代ネットワーク)とい

う単語が出てきますが、それはNGNとは別の話です。次世代と新世代で、非常にややこしいのですが、NTTフレッツ網での IPv6が関係するのは「次世代」のほうです。

†12 BフレッツとフレッツADSLで IPv6を利用できる「FLET’S.Net(フレッツ・ドットネット)」というサービスもありました。https://www.ntt-east.co.jp/release/0312/031218c.html

†13 https://www.ntt-east.co.jp/release/detail/20130725_01.html

Page 436: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

422 付録A NTT NGNでの IPv6

場合、ISPは図A.14のように各県にあるPOI(Point Of Interface)で各家庭に対して IPv4イン

ターネット接続サービスを提供します†14。ISPでは、伝送サービスを提供する中継事業者と契

約することで、各POIから自社の IPv4ネットワークへの接続を実現しています。中継事業者と

して伝送サービスを提供する事業者としては、NTTグループ内で長距離会社として民営化され

たNTTコミュニケーションズがあります。

中継事業者

A県のNTT NGN(地域IP網)

POI

B県のNTT NGN(地域IP網)

POI

C県のNTT NGN(地域IP網)

POI

ISP IPv6インターネット

▲ 図A.14 NGNを利用したインターネット接続サービスの事業形態

NTT東西が提供する IPv6 PPPoEは、ISPがNGNを利用して提供する IPv4インターネット接

続サービスの形態に近い形態で IPv6インターネット接続サービスを実現する方法です。IPv6

PPPoEでは、ISPが各POIでユーザ宅との接続を受け取り、自社 IPv6ネットワークまでの伝送

サービスを中継事業者から購入します。POIにて、ユーザに対するサービス提供用の設備を ISP

が設置し、ISPが IPv6通信を実現します。

これに対し、IPv6 IPoEの接続形態は IPv6 PPPoEとはまったく異なります。IPv6 IPoEでは、

ISPがNGNと接続する箇所が各県のPOIではなく、集約された相互接続地点になります(図

A.15)。ISPの役割はパケットを直接処理することではなく、ユーザのアカウントや課金を管理

することに特化されます。

†14 NGNのPOIは日本全国に用意されていますが、ISPが日本全国のすべてのPOIに対応する必要があるわけではありません。

Page 437: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 423

VNE 1

ISP

VNE 2

VNE 3

契約

契約

ユーザ

IPv6インターネットNTT NGN(閉域網)

POI

POI

POI

▲ 図A.15 IPv6 IPoEの事業形態

ISPにとって、IPv6 IPoEでの接続形態は、IPv4における ISP用のローミングサービスに似て

います。各県のPOIで設備を用意したうえで伝送サービスを購入するには大きな投資が必要

なので、中小 ISPはローミング事業者からローミングサービスを購入することで ISP事業を営

みます(図A.16)。ローミング事業は、「ISP用の ISP」と表現されることもあります。日本国

内でローミング事業を行っている ISPとしては、IIJ、FreeBit、アルテリア・ネットワークス

(VECTANT)、NTT PCなどが挙げられます。

ローミング事業者

(大手ISP)A県のNTT NGN POI

B県のNTT NGN POI

IPv6インターネット

小規模ISP契約

契約

ユーザ

▲ 図A.16 ローミングサービスの事業形態

全国規模の ISP事業を前提とせず、特定の県内だけで事業を営む小規模 ISPでは、図A.17の

ように必要なPOIだけに設備を設置することによって IPv6 PPPoEによるサービスを提供する

ことも可能です。

Page 438: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

424 付録A NTT NGNでの IPv6

IPv6インターネットC県だけで事業を営む

ISPC県のNTT NGN(地域IP網)

POI

B県のNTT NGN(地域IP網)

POI

A県のNTT NGN(地域IP網)

POI

▲ 図A.17 小規模 ISPによる IPv6 PPPoEによるサービスの形態

IPv6 PPPoEと IPv6 IPoEが両方とも提供されているのは、このような両方式のビジネスモデ

ルの違いによる面があったと考えられます。

なお、本書執筆現在である2018年では、IPv6 PPPoEによる提供よりも IPv6 IPoEによる提

供のほうが主流になりつつあります。

NTTの成り立ち

NTTの正式名称は日本電信電話株式会社ですが、その前身は日本電信電話公社という国営公社でした。1985年に日本電信電話公社が民営化され、日本電信電話株式会社が設立されました。

1984年に制定された「日本電信電話株式会社等に関する法律」(通称NTT法)に対しては、これまで何度か改正が行われています。1997年には「日本電信電話株式会社法の一部を改正する法律」が成立し、NTTは、持ち株会社と地域会社2社と長距離会社に分離されました。地域会社2社がNTT東日本とNTT西日本、長距離会社がNTTコミュニケーションズです。地域会社2社は、同一都道府県の区域内における電気通信業務を経営することが目的とされました。そのためのネットワークが「地域 IP網」です。

A.3.5 IPv6 IPoEと IPv6 PPPoEの開始時期の違い当時、「案2」とされた IPv6 PPPoEは2011年6月1日に開始され、「案4」とされた IPv6 IPoE

は2011年7月26日に開始されました。

開始時期が異なっている背景は、NTT NGNにおける IPv6マルチプレフィックス問題の議論

と、それを受けて出された総務省の答申†15からうかがい知ることができます。答申書の最初

のページには以下のようにあります。

NTT東西に対し、トンネル方式の提供開始時期がネイティブ方式の提供開始時期より

遅れることのないように努めることを要請すること。(考え方5)

†15 総務省「東日本電信電話株式会社及び西日本電信電話株式会社の第一種指定電気通信設備に関する接続約款の変更の認可 NGNの IPv6インターネット接続に係る接続約款の措置」

Page 439: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

A.3 IPv6 PPPoEと IPv6 IPoE 425

さらに、この「考え方5」に対応する「意見」が以下のように記述されています。

意見5ネイティブ方式が先に開始されてしまうと、アダプタの追加が必要なトンネル方

式に乗り換える可能性は非常に低いため、トンネル方式を先行提供するべき。

ネイティブ方式が有利になってしまうので、アダプタが必要な案2を先に開始できるように

すべきであるという考え方です。当初、NTT NGN IPv6マルチプレフィックス問題に対する解

決方法は、案1、案2、案3の3種類でした。しかし、ISP側との折り合いがつかず、落としど

ころとして、数に制限があるネイティブ方式の案4が登場したという背景があります。そのた

め、実際に案4を実現するための条件として案2が先にという意向があったのではないかと筆

者は推測しています。

NTTは、なぜ閉域網でグローバル IPv6アドレスを割り振ったのか?

すでに触れたように、NTT NGNが IPv6インターネットとの接続性がない閉域網となっている背景には、NTT法による制限があります。では、なぜNTT東西では、その閉域網でユーザにグローバル IPv6アドレスを割り振るというネットワークの構築を選択したのでしょうか? その理由は、IPv6マルチキャストを利用して映像配信をしたいというものでした†16。

NTTフレッツ網内で IPv4マルチキャストによる映像配信を行った場合、図A.18のようにPPPoEを通じて各家庭まで IPv4マルチキャストパケットが運ばれます。このとき、各映像データを運ぶ IPv4マルチキャストパケットは、PPPoEによって集約された場所から各家庭宛に張られたトンネルへとコピーされたうえで送信されます。マルチキャストは、途中のルータがコピーを行ってくれるのでコストを削減できる仕組みです。PPPoE

で集約している上流までしかコピーされず、それよりも下流ではPPPoEセッションごとにすべてコピーしていたのでは、ユニキャストと変わらないトラフィック量になってしまって効率的な映像配信ができません。

ユーザ

NTTフレッツ網

ISP

映像配信事業者

PPPoE

PPPoE

PPPoEユーザ

ユーザ

PPPoE接続分コピー

▲ 図A.18 IPv4でマルチキャストを行う場合

IPv4マルチキャストを利用したときにPPPoEを経由させる必要があるのは、当時のフレッツユーザが利用している IPv4アドレスが ISPによって提供されているものであったためです。しかし、IPv6マルチキャストを利用すれば、PPPoEを経由させずにユーザま

Page 440: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

426 付録A NTT NGNでの IPv6

で効率的に映像データを届けることが可能でした。IPv6マルチキャストを利用した場合は、図A.19のような構成になります。

ユーザ

NTTフレッツ網

映像配信事業者

ユーザ

ユーザ必要に応じてルータがコピー

▲ 図A.19 IPv6でマルチキャストを行う場合

これは、IPv4と IPv6のプロトコルの違いというよりも、提供されている商用サービスの違いであったともいえます。当時、IPv6サービスを提供している ISPはほとんど存在していませんでした。そのため、NTT東西がユーザ宅にグローバル IPv6アドレスを配ったとしても、IPv4インターネットへの接続サービスを提供している ISPと直接競合するとまでいえる状態ではありませんでした†17。そのような事情から、ISPが提供するIPv4サービスと平行して、NTT東西による IPv6アドレスがユーザ宅に配布されました。

IPv4と IPv6がまったく別のプロトコルであり、それぞれまったく異なるネットワークトポロジであっても動作させることが可能であるという特性が、NTT東西による映像配信の道を切り拓いたともいえます。IPv6マルチキャストを利用したフレッツ網での映像配信サービスとして「ひかりTV」がありますが、2015年にNTT東西で300万を超えるサブスクライバー数であると発表されています†18。なお、NTT東西は地域会社として県間をまたぐ通信サービスを制限されていますが、

2003年以降、業務区域を越えない範囲、すなわち東は東、西は西の業務区域内では、当初は県内のみであった地域 IP網の県間をつなぐ広域化が進められてきました。このようなNTT東西における広域化も、IPv6マルチキャストサービスが企画される背景のひとつだったといえます。

†16 http://www.geekpage.jp/blog/?id=2012/8/2/1†17 ただし、IPv6から IPv4へのフォールバック問題は発生するので、JAIPAでの反対はありました。†18 http://www.nttplala.com/information/2014/3/20150311_2.html

Page 441: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

あとがき

本書の企画を実現するにあたり、サポートしていただいた皆さまに感謝します。

GitHubで issueコメントをいただいた何人ものMakuakeサポーターの皆さまに感謝します。

なかでも、技術的視点で数多くの詳細なフィードバックをいただいた佐藤広生さん、神明達哉

さん、西田佳史さん、長谷部克幸さん、林達也さんに感謝します。DNSに関連する内容の間違

いを指摘していただいた、浸透いうなさんに感謝します。フィードバック版を読んでいただけ

たものの特にコメントがなかった皆さまも、完成前のバージョンに目を通すために時間を割い

ていただき、ありがとうございました。

本書作成にあたり、応援のメッセージなどをいただいた皆さまに感謝します。

IETFでの積極的な議論や、kame実装など、IPv6の土台を作った故 itojun(萩野純一郎)さ

んに感謝します。

Makuakeでの本書クラウドファンディング企画段階において、IPv6解説書の可能性を探る

ためにマクアケ社内のエンジニアばかりか社外でも ITエンジニアと思しき人へ需要を調査す

るなど、非常に積極的かつ手厚いサポートをいただいたMakuakeの三田村さんに感謝します。

そして、最後に、電子版を無償配布したいという私の要望に応える形での出版をともに実現

するためにご尽力いただいたラムダノート社の鹿野さんと高尾さんに感謝します。クラウド

ファンディングを行うための企画と運営、書籍の編集と出版を超高品質で行っていただきあり

がとうございます。特に、IPv6本のあるべき姿や、個別箇所に関する技術的な内容などを含

めて議論を続け、一緒に本書を作り上げた鹿野さんは、もはや本書の共著者であるともいえる

ぐらいです。鹿野さんと一緒でなければ、本書を書き上げることはできなかったと考えてい

ます。

IPv6推進でも批判でもない、できるだけ中立的に技術や経緯に絞った情報発信を目指して本

書を作りましたが、この本が少しでも多くの方々のお役に立てば幸いです。本書実現に協力い

ただいた皆さま、本当にありがとうございました。

2018年6月

小川晃通

Page 442: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

428 クラウドファンディングにて本書をご支援いただいた皆さま

クラウドファンディングにて本書をご支援いただいた皆さま(敬称略)

林 達也(@lef)/ Lepidum Co. Ltd.藤本真樹(グリー株式会社)石田慶樹太一(https://github.com/taichi)DeNA有志一同渋川よしき、松木秀憲、pospome、sairoutine、小島泰洋、asakasa、鴨志田良和、noppefoxwolf、alarky、春山誠、立浪千尋、中山貴博(@Civitaspo)、田中貴洋、角田良太、越智琢正、星野隼人、sea_mountain、okitan、戸上凌太、国賀由慎、内海武夫、岡田健、吉田昌平、持田章弘、高橋成人

ピクシブ株式会社さくらインターネット株式会社代表取締役社長 田中邦裕

株式会社朝日ネット(Asahi Net, Inc.)

円佛公太郎横山尚弥Yukihiro Kikuchi新村 信木村成伴三屋光史朗兒島友三郎(テックファーム株式会社)

saitara佐原具幸shirou國武功一浸透いうな鈴木茂哉宮川祥子神明達哉hkanematインフォコム(株)がねこまさしYugui古庄道明小林克志草野貴之加藤善規瀧澤昭広田村奈央katsyoshi@k1complete入川幸之助東平洋史Perotan秋斗Toshiki HayashiUEMサイボウズ株式会社梅原 潤Seiichi Kawamura坂根昌一

土池政司株式会社グラベルロードHIROOKA Yasuo(hirooka.pro)相原玲二伊藤茂幸mi-1aki伊部祐久峰野博史山本 茂三嶋将一郎吉野純平@muo_jpくまもとゆたか髙木正弘阿部 博塚田 学佐々木 健力武健次技術士事務所村岡友介だーはま中村剛川上雄也もみじあめ(@momijiame)長谷川明生宇井太郎十場 裕mtera 寺西 功滝澤隆史樋口勝也渡邊大記b小山哲志深井宣之objectx佐藤 雄八木澤健人Rio FujitaTaisuke Yamada金子康行日比野豊蒲地輝尚大脇 健古畑幸之助許 先明コーダンス 小島慎太郎川井浩陽佐野健介(そな太)湯谷啓明西田佳史宇夫陽次朗森田邦裕宮川大輔(@amedama)坂本仁明Toru Hisai大竹和生大本 貴庖丁章浩masahito吉田真吾

藤田貴大Buta_san恵比澤賢じゅんくどう有賀征爾オープンソース・ソリューション・テクノロジ(株) さとうふみやす

坂口俊文sorah.jp小川雄大中村仁昭藤田紀行村上 学長村善行松崎吉伸有限会社銀座堂bongole土屋太二高橋成人ちぇりおまえだこうへいToshiki HAYASHI村田がん長谷川敏夫kaorukitsukiyaki projectさいとり佐藤裕行永山翔太エリーツ合同会社宇田周平土本康生富永崇之shmz清原智和磯辺和彦菊池希世識@satokaz鈴木健一mewlist平山陽一きむらとものり椹口敏広遠藤陽平松原弘典中村貴志宇多津真彦@SRCHACK.ORG安達昭人村田耕司中伏木新小熊一輝山本猛仁鈴木祐耶菅野健一https://github.com/expf::1@rakusan株式会社創夢 松山直道

Page 443: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

クラウドファンディングにて本書をご支援いただいた皆さま 429

森田悟史Taketo Takashima瀬見鈴木裕亮山田太郎角田 裕小河智章渡部岳郎丸橋弘明Hideaki ODAGIRIわーぷ越智公王vvakameゆたぽんさん柳浦俊渋谷直人atrophybefs_anne横田真俊stereocat竹田幸生bungoume佐藤知津よりいぬ小倉 大小林正幸小嶋 智重松光浩佐藤秀樹吉田大志(Hexa)高木健介横井雄太大須賀義浩zaki北口修一佐藤祐司東村邦彦id:Windymelt海江田謙介kitoku_magic菊地謙澤田石朋彦濱野聖人百々水村直人金城 雄ヤリシンイチ堀口祐司西岡 学安江 卓南出成崇寺岡慶佑小林秀誉岡本裕子渡邊広志新 善文齋藤友誉ティン@ iMarket管理人小池元洋江本祐太藤井一毅Yasuo AshinaTakumu Shiono海老澤健太郎

副田哲生besutomeお湯割りYoshinari Takaoka(a.k.a

mumumu)小山 勉khrtz野々垣裕司中森 望朝倉卓人中島 滋hakase109小山海平新美 bignum 誠Rey.kappapa菊地俊介ortus菊池 久ほりまさたけyosida95ichii386河野真知郎安田 歩瀬名波哲矢Hiroyuki Ohno, Ph.D.(木いちごの会)

はやしさだたか石部博之水谷正慶大平健司末永洋樹武樋彰浩榑林勇気Hirofumi Hida三角 真@ttsubo伊藤孝一中村計雄後藤芳和(@goto_ipv6)tockrock大坪 力伊藤琢巳佐藤 治松山裕樹細野晃広nyoro88西 慶倫さだまさつ石田隆晃うさみけんた(tadsan)あふもん加嶋啓章山口孝穂道向 新Shigeichi Nakanomafutaro博士(びーる)森 祥寛そばゆ鎌形システムエンジニアリング内田泰広岩佐 功竹永吉伸

村山公保木本雅彦@創夢森下泰宏若林寛樹伊藤 崇山田建史前田貴之fugahoge並木秀人藤澤昌隆崎山洋輝都築義仁竹入寛章shinya吉田万浩田中浩司凛 火sassembla笠原 勉今西幸一山田英伸大和田宗宏のいず(@redwell_noise)crarktoruuetani阿部友範前川 肇lyokatoTomokazu HARADAeikihaya神谷雅博森本雅彦櫻井達生大原一真イシクラヒロユキ岩城理規島崎清山(@seizans)桑澤拓也宮原MarlTake大津繁樹西田晴彦石山薫太郎drillbits池 徹高山 温山崎尚子安江直樹松山健吾織 学akiroom横山優樹佐藤弘明株式会社レピダム渡辺露文畑谷進太えいいちuhkgbu伊達英之tamuratakえはらあい米澤明生小野田晃久

Page 444: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

430 クラウドファンディングにて本書をご支援いただいた皆さま

吉田 史上野栄実子I.O岡 啓TAKAFUMI AMANO耿 金洋末廣雅利山口慎也北口将充川辺治之あらんotsuka752とうしみsigeryuone上田和志長谷川喬也tori_kizi内田大樹高石 潔m-suzuki中森康博道正竜彦今井志有人津森洋伸ainoniwa.net鈴木真吾Yusuke Sato株式会社Green Cherry吉田真光千田 霞石井宏和今井 潔IMAZU Mitsumasa伊藤敬彦山本功司Kei Hino上松大輝( @hiroki_u )ruicc堀江正樹higed香月貴義中村明彦n_kane佐藤広生株式会社YYOLO山田幹彦h-michael土屋孝博玉置一則Tsuyoshi Tanakaみるくてぃう゛ぁるちおん岡 豊馬篭修玄Hideo Hattoriszktty大川嘉一園田真人@nabeken井野岡代之寺岡良矩たなむー蛯名龍弘

tjmmm高田雄一yadokarielectric島 慶一堀米義仁yutaro ikedaそうたろう高宮紀明Yuuichi Akagawa松原崇幸中野和貴(かっきぃ)東 真幸たなかしんいち大西尚利@3socha山田暁通清水 順okada小寺康之Makoto Kuwata一色史雄坂本龍亮matcheEgoma田中一直加藤淳也松浦佑紀堤 清則阪口琢哉(SAKAGUCHI, Takuya)Liblib江端ちはやOMOIKANE東海林健太B21Soft, Inc.板谷郷司Yusei YAMAGUCHI佐々木亮太島 将人laymanいわまぞん岡田 洋北海道大学 今井 適株式会社NTシステムデザイン自転車少年シンヤ君綾田直輝岡 勇佑森 智哉村田千尋@seitaro1227にしむらかずひろ三嶋 晶Hirotaka.Matsuo板谷藍子千田展也高木省吾二石真実安部秀基大野哲生合同会社アペンド門脇 優貴たぼ <https://tabolog.net>t.yamada古本英男鈴木亮一

埜中公博岩澤昭一郎小岩井航介Yuzo Honda水越雅浩@philosophumKunihisa Takeda眞城佳奈竹内裕己哉村井広一水野稔晴しろきゆうすけ柚口佳予子株式会社NTTデータ関西山下真樹Anxious中村久美児島孝典菅原匡史うなすけ猿渡 敦takabow栗山 徹(@kotetu)西 和人@ke1juまてつ大場聖史naotaco大越真弓sinmetal荒久田博士河合 潤野中啓弘赤樹 将馬淵俊弥もりかずあき篠宮俊輔川原 啓Tabuchi鮫島康浩ごままkabukawa東瀬野丈史たかはしまこと齋藤将之Toshi Aizawa稲川雄一加納憲男村松 忍中原祥宏今井元太北畠知行河瀬大伸後藤輝彦Kinugasa千葉周一郎中野 岳山根史嵩情創技研(沖縄県中頭郡西原町)NPoiNaotsugu Okada地藏真作@s1061123富安薫人

Page 445: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

クラウドファンディングにて本書をご支援いただいた皆さま 431

倉科貴寛中屋 誠伊藤大悟inu_on酒井洋一T.HamatagattieOrion池田直也鴨川寛之UC-XX伊東英輝Suza関口裕士徳差雄太上坂エンリコみやこう市橋一宣Nefrock Inc.Group MaryMaffi Maffi入谷和典大鷲和紀@toshis_榎本博則三上 洋ながたゆうだいしげじーかわむらけいじ助台良之森福 茂ST2末光真理子

猪股秀樹飯島昭博とやまむねき大原慎一郎えづらあつし新井良二takumi kimuraCrosachitssダメ猿@k-masatanyぐり(@gurigoroblog)村田祥弘畑中貴弘岡崎靖浩柏﨑央士榮野隼一Akira Charlie Hamano結城さくら南 敦史永坂 智岡 裕人横地 晃h.yoshioka伊藤三喜男Tadashi MorikuboHONDA Yasuhiro石川茂明小野寺司史望月裕之魏 心宇西田 剛石川三晃

Kitamura Takehikoたむらかずひこ小澤 仁ymdkskよしはる野田康夫岡本義明寺田雅史大橋正和白石 敦JE3KMZsyuu1228さとうおさむたつみんやっちぶのり藤井勇太酒見一幸沖 勝下竹章寛植松秀文澤田英祐まみやなおきtoohide梅木孝志y-Aki田村陽介高橋祐也藤原 豊小松澤和弘長谷部克幸

Page 446: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

索引

記号・数字%(ゾーンインデックス). . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .73

*(QTYPE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286, 301.arpaトップレベルドメイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.intトップレベルドメイン. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .302.ip6.arpa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292/127(ルータ同士を接続) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67/64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74:: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58短縮 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60

::/128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63::1/128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64::ffff:[IPv4アドレス] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77[](ポート番号) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60127.0.0.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .642000::/3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652001:db8::/32(例示用) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793ffe::/16(例示用としての) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141464XLAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3654rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342, 359, 363名前の由来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342

5f00::/8(例示用としての) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1416LoWPAN Capability Indicationオプション . . . . .132(表)6LoWPAN Contextオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)6manワーキンググループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336over4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3406PE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3426rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340名前の由来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342

6rd Border Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3416rd delegated prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3416to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324欠点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328デフォルト IPv6アドレス選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232

6to4リレールータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326

AA+P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357A6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302AAAAデータ表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288登録のタイミング. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .300

AAAAフィルタリング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412AAAAレコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45, 285AAフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284ACK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26ADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253Additionalセクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286Address and Port-Dependent Mapping. . . . . . . . ... . . . . . . . .404Address Autoconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Address plus Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357Address Registrationオプション . . . . . . . . . . . . . . . . . . . . . . . . .132(表)Address Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114

Address-Dependent Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404Address-Specific Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211Advertise(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . .167(表)Advertisement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Advertisement Intervalオプション . . . . . . . . . . . . . . . . . . . . .132(表)ADフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284AF_INET6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266AFRINIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375AFTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355AH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260ALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346, 352, 367, 389All-Snoopers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217All_DHCP_Relay_Agents_and_Servers . . . . . . . . . . . . .165All_DHCP_Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165ANCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176Answerセクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286ANY(QTYPE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286, 301APNIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375Apple

Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274iOSアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

ARCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285ARIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122ARPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292ARPANET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4, 30AS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20ASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Authentication Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260Authoritative Border Routerオプション . . . . . . . . . . .132(表)Authorityセクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286AXFR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Aレコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45, 285

BB4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356BCP 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225, 235Best Current Practice. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .31BGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20マルチホーム. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233

BGP4+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20Bubbleパケット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335Bフレッツ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421

CCARD Replyオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)CARD Requestオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)CATV網 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356CDN

6to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329キャッシュDNSサーバ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309

CDフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

Page 447: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

索引 433

Certificateオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)Certification Path Advertisementメッセージ. . . ... . . .253Certification Path Solicitationメッセージ . . . . . . . . . . . . . . .253Certificationオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254CGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250CGAオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表), 250CGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364, 379, 390アクセスログ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .396問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393

CIDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4CLAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Coneフラグ(Teredo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331, 336Confirm(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . 167(表)CPE. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .159(注), 341, 380, 419

DDAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147, 153エニーキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .223セキュリティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247ループバック. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155

DARPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30Decline(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . .167(表)DELAY(近隣キャッシュのステート) . . . . . . . . . . . . . . . . . . . . . . .128deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146, 228Despres, Remi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342Destination Address(Redirect) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130Destination Addressフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84Destination Unreachableメッセージ

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103(表), 105,126, 198セキュリティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107

DFビット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198DHCP Captive-Portalオプション . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)DHCP(IPv4用) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161

DHCPv6との違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161

DHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145, 159Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176動作例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163

DHCPv6-PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159, 181DHCPv6-PDプレフィックス除外オプション . . . . . . . . . . . . .184DHCPv6メッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Client Identifierオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170Server Identifierオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168オプション要求オプション. . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . .170基本フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .168経過時間オプション. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .169ステータスコードオプション. . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . .169

Diffserv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84dig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282

AAAAレコードの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Aレコードの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290IPv4逆引きの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292IPv6逆引きの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45, 279Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270IPv4と IPv6を同時に問い合わせ. . . . . . . . . . . . . ... . . . . . . . . . . . . .307IPv6から IPv4へのフォールバック. . . . . . . . . . . ... . . . . . . . . . . .308サーバに関する情報の取得方法. . . . . . . . . . . . . . ... . . . . . . . . . . . . . .160デュアルスタック. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .305

DNS Push Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272DNS RAオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157DNS Recursive Name Serversオプション . . . . . . . . . . . . . . . 174DNS Search Listオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

DNS64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48, 50, 351読み方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48(注)

DNSSLオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表), 138, 157DNSメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

512オクテット問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288

DNSルートサーバ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35, 281IPv4エニーキャスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221IPv6トランスポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

DPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94, 262DS Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84DS-Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355DSCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84DUID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171DUID-EN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172DUID-LL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173DUID-LLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171DUID-UUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173DupAddrDetectTransmits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Duplicate Address Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Durand, Alain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356

EEcho Replyメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104(表), 110Echo Requestメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104(表), 110ECN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84EDNS0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295Encapsulating Security Payloadヘッダ. . ... . .93(表), 260Endpoint-Independent Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .404Enhanced DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155ESP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260EUI-48形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151EXCLUDEフィルタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Experimental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31Extension & Upper-Layerヘッダ. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . .192

Ffe80::/10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64ff00::/8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Final /8 Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382Flagsフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87, 187FLET’S.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421(注)Flow Labelフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84, 88Forwarded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368FQDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282Fragment Offsetフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87, 187FTP(IPv4/IPv6変換). . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .352Full Cone NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330, 401

Ggai.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232, 276General Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211getaddrinfo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228, 266, 276gethostbyname() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268GMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361Google over IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

HHandover Assist Informationオプション . . . . . . . . .132(表)Handover Key Replyオプション. . . . . . . . . . . . ... . . . . . . . . . . . .132(表)Handover Key Requestオプション . . . . . . . . . . . . . . . . . . . . . 132(表)Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270, 412

Page 448: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

434 索引

Header Checksumフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87Headerセクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Historic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Home Agent Informationオプション . . . . . . . . . . . . . . . . .132(表)homenetワーキンググループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233Hop Limitフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84, 88Hop-by-Hopオプションヘッダ . . . . . . . . . . . . . . . . . . . . . . . . .93(表), 94Host Identity Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93(表)HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381HTTPプロキシ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367

IIA_NA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178IA_NAオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179IA_PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178IA_PDオプション. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182IA_PDプレフィックスオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183IA_TA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178IA_TAオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180IAB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80IANA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35, 64, 374IAアドレスオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178ICANN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35ICE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101ICMPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266フィルタリング. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .261

ICMPv6エラーメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103(表), 104ICMPv6情報メッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110ICMPv6メッセージタイプ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103フィルタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102

Identificationフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87, 187Identity Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178IETF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29IGMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101, 210IGMPv3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210IHL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192IHLフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87IID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .→ インターフェース識別子INCLUDEフィルタ. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .214INCOMPLETE(近隣キャッシュのステート) . . . . . . . . . . .127inet_ntop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268inet_pton() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268Information-request(DHCPv6メッセージ) . . .167(表)Informational. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31Internet Draft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Internet Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37invalid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146iOSアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37IP Address/Prefixオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)ip6.int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292廃止 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302

IPoE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418IPsec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245, 260IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37IPv4-Mapped IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . .76, 230, 232セキュリティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78, 263, 314ソケット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274

IPv4/IPv6共存技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .→ 共存技術IPv4/IPv6変換機用 IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

IPv4aaS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321IPv4アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

IPv6アドレスで表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76維持料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383移転 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381構成要素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65在庫枯渇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3, 373在庫枯渇への対策. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .378市場での売買. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382返却 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383

IPv4射影 IPv6 Address .→ IPv4-Mapped IPv6アドレスIPv4の島 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320IPv4ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3, 37セキュリティの誤解. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .245

IPv6 IPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418IPv6 Jumbogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85, 298IPv6 PPPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416IPv6 PPPoEと IPv6 IPoE開始時期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424ビジネス構造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421

IPV6_V6ONLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274IPv6アドレス暗号を使って生成. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .250大文字小文字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60実際に使える空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63ステート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147(図)テキスト表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58デフォルトアドレス. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .228特殊用途 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64ノードに要求される~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66プライバシー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150, 257マルチプレフィックス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140, 233ユーザへの割り当て . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

IPv6移行技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317IPv6インターネット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41IPv6拡張ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266順番 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94先頭16ビット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99ファイアウォール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94ルータで破棄. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100

IPv6サイトリナンバリング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241

IPv6対応 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40, 268アプリケーションの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42サーバの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43ネットワークの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41ユーザの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41

IPv6ネットワーク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41IPv6フラグメンテーション

Atomicな . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193セキュリティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190

IPv6への移行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40IPアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3文字列に変換. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268

IPフラグメンテーション. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .185IS-IS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20ISATAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337脆弱性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339

ISATAP IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338ISO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29

Page 449: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

索引 435

ISP Shared Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397ITU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

JJoke RFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31JPNIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376

LL2スイッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23L3スイッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23L7スイッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23LACNIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375Large Scale NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390Lightweight 4over6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356Lightweight-MLDv2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214Link-layer Addressオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)LIR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375LSB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7LSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390LTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28LW-MLDv2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214lw4o6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356lwAFTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357lwB4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356

MMACアドレスインターフェース識別子. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .151例示用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79

MAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390MAP BR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360MAP CE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360MAP-E. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359MAP-T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359MAPオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)MLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210MLDv2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104(表), 210MLDスヌーピング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216MLDメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211, 212

DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154Mobile Node Identifierオプション. . . . . . . . . . ... . . . . . . . . . .132(表)MRD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216MSB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7MSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188, 200MTU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185, 197最小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39

MTUオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表), 136Multicast Listener Doneメッセージ . . . . . . . . . 104(表), 212Multicast Listener Queryメッセージ . . . . . . . . .104(表), 211Multicast Listener Reportメッセージ . . . . . . .104(表), 211Multicast Router Advertisementメッセージ

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104(表),217, 218Multicast Router Solicitationメッセージ

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104(表),217, 218Multicast Router Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217Multicast Router Terminationメッセージ

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104(表), 218Multiple Address NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390

NNA . . . . . . . . . . . . . . . . . . . . .→ Neighbor AdvertisementメッセージNAPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 379, 387

IPv6における必要性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80RFC 3489での分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330機器に要求される挙動. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . .404分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .401

NAT-PT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346NAT44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346NAT444 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380NAT64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48, 349読み方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48(注)

NAT66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81, 417NAT越え . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394NBMA Shortcut Limitオプション . . . . . . . . . . . . . . . . . . . . . . . . .132(表)ND. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .→ 近隣探索プロトコルNeighbor Advertisement Acknowledgmentオプション. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)

Neighbor Advertisementメッセージ . . . . . . . . .104(表), 123DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154近隣不到達性検知. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .126脆弱性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124リンク層アドレス解決. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . .125

Neighbor Solicitationメッセージ . . . . . . . . . . . . . . .104(表), 122DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154近隣不到達性検知. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .126フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122リンク層アドレス解決. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . .125

Neighbor Unreachability Detection . . . . . . . . . . . . . . . . . . . . . . . . . 114New Router Prefix Informationオプション. . ... . .132(表)Next Headerフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84, 87Next-hop Determination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114NGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421NIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375No Next Header. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99Nonceオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表), 252NPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233NPTv6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81NS . . . . . . . . . . . . . . . . . . . . . . . . . . .→ Neighbor SolicitationメッセージNSCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284nslookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282NSレコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285NTT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424NTT NGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409NTT NGN IPv6マルチプレフィックス問題 . . . . . . . . . . . . . . . 409NTTフレッツ網 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409NTT閉域網 IPv6フォールバック問題 . . . . . . . . . . . . . . . . . . . . . . . . . 409NTT法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424NwGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421(注)

Ooff-link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140on-link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135, 140on-link assumption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142on-linkエニーキャスト. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .222OPTION_CLIENTID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171OPTION_ELAPSED_TIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170OPTION_ORO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170OPTION_SERVERID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171OPTION_STATUS_CODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169OSI参照モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22OSPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19OSPFv3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19OUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151

Page 450: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

436 索引

PPacket Too Bigメッセージ . . . . . . . . . . . . . . . . . . .103(表), 107,199最小MTU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194

Parameter Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Parameter Problemメッセージ . . . . . . . . . . . . . . . . . . .103(表), 109Path MTU Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200

PAアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383PCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393Per-Fragmentヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191PF_INET6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266PIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216PIM-DM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216PIM-SM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216PIアドレス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383PLAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365POI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422Port-restricted Cone NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330, 403PPPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416preferred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Preferred-Lifetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146Prefix Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Prefix Informationオプション. . . . . ... . . . . .132(表), 135,141PROBE(近隣キャッシュのステート) . . . . . . . . . . . . . . . . . . . . . . .128Protocol Typeフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87Proxy Signatureオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)PRR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357PSID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361PTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288, 292

QQDCOUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284QNAMEフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285QTYPEフィールド(Questionセクション) . . . . . . . . . . . . .286Questionセクション. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .285QUIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28

RRA . . . . . . . . . . . . . . . . . . . . . . . . .→ Router AdvertisementメッセージRAガード. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255RAフラグ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284RCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284RDNSSオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表), 137, 157RDフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280, 284REACHABLE(近隣キャッシュのステート) . . . . . . . . . . . . .128ReachableTime(近隣不到達性検知) . . . . . . . . . . . . . . . . . . . . . . .129Rebind(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 167(表)Reconfigure(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . .167(表)Redirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Redirected Headerオプション. . . . . . . . . ... . . . . . . . . .132(表), 136Redirectメッセージ. . . . . . . . . . . . . . ... . . . . . . . . . . . . . .104(表), 129, 141フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129

Relay-Forward(DHCPv6メッセージ) . . . . . . . . . . . . . 167(表)Relay-Reply(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . .167(表)Release(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . .167(表)Renew(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167(表)Reply(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167(表)Request(DHCPv6メッセージ). . . . . . . . . . . . ... . . . . . . . . . . . .167(表)Resource Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Restricted Cone NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330, 402RFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29名前の由来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30

RIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19

RIPE NCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375RIPng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19RIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65, 375Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Route Informationオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表)Router Advertisement Flags Extensionオプション

.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)Router Advertisementメッセージ . . . . .104(表), 116,156

DNS情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157セキュリティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140, 254フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117フラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119プレフィックス情報発見. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .115ルータ発見 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115

Router Alertオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Router Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Router Solicitationメッセージ . . . . . . . . . . . 104(表), 119,156フォーマット. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119

RPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225RR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286RS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .→ Router SolicitationメッセージRSA Signatureオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表), 251

SSAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359SCTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28SEND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Shim6 Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表)SIIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49, 348, 360制約 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349

SIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369, 389DHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176

SLAAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145, 147名前の由来 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156利用例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148

SNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381sockaddr_in6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Socket API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266アプリケーションの動作. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .267

Softwire46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357softwireワーキンググループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Solicit(DHCPv6メッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167(表)Solicitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Solicited-Nodeマルチキャストアドレス . . . . . . . . . . . . . . . . . . . 207Solicited-Nodeマルチキャストグループ. . . . ... . . . .125, 154Source Address Listオプション . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)Source Addressフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Source Link-layer Addressオプション . . . . .132(表), 134SRV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288, 311SSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214STALE(近隣キャッシュのステート) . . . . . . . . . . . . . . . . . . . . . . . 128Standards Track . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31STUN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399Symmetric NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330, 403

TTarget Address Listオプション . . . . . . . . . . . . . . . . . . . . . . . . . . .132(表)Target Address(Redirect) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130Target Link-layer Addressオプション . . . . . 132(表), 134TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 25

Path MTU Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200エニーキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .222チェックサム計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90

Page 451: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

索引 437

TCP RST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27TCPフォールバック(DNSメッセージ) . . . . . . . . . . . . . . . . . . .298TCフラグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284, 298tentative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146Teredo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330問題点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333

Teredo IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336Teredoリレー. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331Time Exceededメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . .103(表), 108Timestampオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表), 252TLV形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108Traffic Classフィールド. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .84TRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368Trust Anchorオプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132(表), 254TTLフィールド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88TURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405TYPEフィールド(Resource Record) . . . . . . . . . . . . . . . . . . . . .287

UUDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22ゼロチェックサム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90チェックサム計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90

ULA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75グローバル IDの生成アルゴリズム . . . . . . . . . . . . . . . . . . . . . . . . . . .76デフォルト IPv6アドレス選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232

universal/localビット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151UNSAF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405UPnP IGD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393uRPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225(注)uビット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151

VValid-Lifetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146VNE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416, 418

WWorld IPv6 Launch. . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . .312

XX-Forwarded-For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368XLAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49, 348

アアック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26宛先オプションヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表), 95アドミンローカルスコープ. . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . .206アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3アドレス依存マッピング. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .404アドレス空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55アドレス自動設定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145アドレススキャニング. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .258アドレススキャン. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259アドレスとポート依存マッピング. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . .404案2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424案4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424暗号

IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250ペイロードの. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260

イイーサネット

IPv6パケットの扱い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24, 86フレーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23マルチキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .219

一時的な IPv6アドレス. . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . .82, 151, 257DNS登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300デフォルト IPv6アドレス選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232

位置トラッキング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257インターネットプロトコル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10インターフェース識別子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13, 65自動生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150

インターフェースローカルスコープ. . . . . . . . . . . . . ... . . . . . . . . . . . . .206

エエイプリルフールRFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31エニーキャスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221

6to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149, 153

エンディアン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6エンドノード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12エンドポイント非依存マッピング. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . .404

オオクテット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5(注)折り返し通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392, 419

カ回線交換方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4拡張EUI-64形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150拡張ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .→ IPv6拡張ヘッダカプセル化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323

6to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324仮(IPv6アドレス) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

キ疑似 IPv6ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90, 103疑似ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90疑似レコード(EDNS0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298逆引き(DNS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291

IPv6における問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294キャッシュDNSサーバ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280共存技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317運用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319

近隣キャッシュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125ステート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127

近隣探索Neighbor Advertisementメッセージ. . . . . . . . ... . . . . . . . .123Neighbor Solicitationメッセージ . . . . . . . . . . . . . . . . . . . . . . . . .122

近隣探索プロトコル. . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . .113近隣不到達性検知. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .122セキュリティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247プレフィックス情報発見 . . . . . . . . . . . . . . . . . . . . . . .115, 120, 121リンク層アドレス解決. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . .122ルータ発見 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115, 120, 121

近隣探索メッセージ. . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . .114オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131オプションのフォーマット. . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . .133

近隣不到達性検知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114, 122Neighbor Advertisementメッセージ. . . . . . . . ... . . . . . . . .126Neighbor Solicitationメッセージ . . . . . . . . . . . . . . . . . . . . . . . . .126

Page 452: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

438 索引

ククエリ(DNS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283組み合わせによる運用技術. . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . .320クラス(Resource Record) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286グローバル IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

NTT NGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410自動生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156マルチプレフィックス. . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . .236

グローバルスコープ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66, 206グローバルユニキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . 64, 74割り振り . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65

ケ経路情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12権威サーバ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281

ココイントス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .363混在環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40

サ再帰問い合わせ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280最小MTU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39サイトリナンバリング . . . . .→ IPv6サイトリナンバリングサイトローカルアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 75デフォルト IPv6アドレス選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232廃止の理由 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75

サイトローカルスコープ. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .206サブネット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12モデル(RFC 5942) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

サブネットプレフィックス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65サブネットルータエニーキャスト. . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . .223

シ識別情報(通信の) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88次世代インターネットプロトコル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33思想

IPv4/IPv6共存技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319IPv4と IPv6の違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37IPv6ヘッダに見る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86IPサービスの前提 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81インターネットにおける分散処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27

十六進表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57自律システム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20

ス推奨(IPv6アドレス) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146スコープ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66スコープ(マルチキャストの). . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . .206ステート(IPv6アドレスの) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147(図)ステートフルDHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159, 176動作例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165

ステートフルNAT64. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .349ステートフルなプロトコル. . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . .320ステートフルな方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49ステートレスDHCPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159, 173動作例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164

ステートレスアドレス自動設定. . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . .145ステートレスなプロトコル. . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . .320ステートレスな方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49ストリーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32

セ正引き(DNS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291セキュリティ

6to4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329DAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247IPv6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245近隣探索プロトコル. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .247

セクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282セグメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188ゼロチェックサム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91

ソ送信元 IPv6アドレス

Happy Eyeballs Version 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271エニーキャストアドレス. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .222デフォルトの選択ルール. . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . .229マルチホーム. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236

送信元 IPアドレスHTTPセッションの . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368

ゾーン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66, 71マルチキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .208

ゾーン ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72ゾーンインデックス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72ソケット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242

IPv6と IPv4を両方扱う . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77組織ローカルスコープ. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .206

チ地域 IP網 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424チェイニング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303チェックサム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89

ICMPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90ゼロ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91

重複アドレス検知. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147

テデフォルト IPv6アドレス選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228

API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271

デフォルトゲートウェイ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18(注)デフォルトルータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18デュアルスタック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44, 305

Happy Eyeballs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270アプリケーション. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .314

ト匿名アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . .→ 一時的な IPv6アドレスドット付き十進表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56トポロジ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17トランスポート(DNSメッセージ) . . . . . . . . . . . . . . . . . . . . . . . . . . .305トランスポート層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 25トンネル技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319セキュリティ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261, 343

ナ名前 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45名前解決 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45名前空間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305フラグメント化. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .302

Page 453: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

索引 439

ニ認証委任検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253認証ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表), 260

ネネットマスク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13ネットワーク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12ネットワークアプリケーション. . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . .265ネットワーク識別子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13ネットワーク層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21ネットワークバイトオーダー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

RFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9ネットワーク部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

ノノード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12要求される IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

ハバーチャルサーキット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26バーチャルホスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380バイト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5バイトオーダー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6パケット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4入れ子としての . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23バイト列としての . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5

パケット交換方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4反復問い合わせ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281

ヒひかりTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426非推奨(IPv6アドレス) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146, 228ビッグエンディアン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6ビットマスク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

フファイアウォール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262フォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5バイトオーダー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

フォールバックIPv6から IPv4への . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269, 308, 410

フォワーディング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16プライバシー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82, 150

IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257プライバシーアドレス . . . . . . . . . . . . .→ 一時的な IPv6アドレスプライベート IPv4アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4, 389, 397フラグメンテーション . . . . .→ IPv6フラグメンテーションフラグメンテーション(IPv4). . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . .198フラグメント化不能部分. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .192フラグメント識別子. . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . .190フラグメントヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表), 189

RFC 6564 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100ブラックホール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269ブラックリスティング(IPv6 DNS) . . . . . . . . . . . . . . . . . . . . . . . . . . .311フレッツ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409フレッツ光ネクスト. . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . .421プレフィックス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15プレフィックス情報発見(近隣探索)ホストの動作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121ルータの動作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120

プレフィックス長 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

フロー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88, 388ブロードキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203フローラベル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88, 199プロキシ方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367プログラミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265プロトコル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3, 28プロトコルスタック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44プロトコルパラメータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36プロファイリング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262

ヘヘアピニング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392ペイロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5ヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5ヘッダフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5変換技術 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320, 345

ホポート番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60

IPv4アドレス在庫枯渇対策 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380ホスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12エニーキャスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . .222

ホストバイトオーダー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8ホスト部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13ポリシーテーブル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276

ホワイトリスティング(IPv6 DNS) . . . . . . . . . . . . . . . . . . . . . . . . . . .311

ママスク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13マルチキャストソケットオプション. . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . .266閉域網 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425リンク層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218ルータ越え . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215

マルチキャストアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64, 203構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204

マルチキャストグループ. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .203マルチキャスト配信ツリー. . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . .216マルチキャストルータ. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .215マルチプレフィックス. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .233

NTT NGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413次ホップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235

マルチホーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233シナリオ1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234シナリオ2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234シナリオ3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235

マルチリンクサブネット. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .143

ミ未定義アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63

ム無効(IPv6アドレス) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

モモビリティヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表)

ユ有効期間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146ユニークローカル IPv6ユニキャストアドレス . . . . .→ ULA

Page 454: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

440 索引

ララベル(QNAME) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285ランデブーポイント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206, 216

リリトルエンディアン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6リンク層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21リンク層アドレス解決. . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . .134

Neighbor Advertisementメッセージ. . . . . . . . ... . . . . . . . .125Neighbor Solicitationメッセージ . . . . . . . . . . . . . . . . . . . . . . . . .125近隣探索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122

リンクローカルアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70アドレス自動生成. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .150

リンクローカルスコープ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66, 206リンクローカルユニキャストアドレス . . . . . . . . . . . . . . . . . . .64, 70

IPv4アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70

ルルータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9, 12, 67

IPv6拡張ヘッダを破棄 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100アドレス自動設定. . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . .147

要求される IPv6アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67ルータ ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20ルータ発見(近隣探索)セキュリティ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253ホストの動作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121ルータの動作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120

ルーティングテーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10ルーティングプロトコル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17, 19ルーティングヘッダ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93(表), 98

Type 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99ループバック(DAD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155ループバックアドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64ループバックインターフェース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

レ例示用アドレス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79, 141レイヤー2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23レイヤー3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23レルムローカルスコープ. . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .206

ワ割り当て . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377割り振り . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377

Page 455: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

■ 著者紹介

小川晃通(おがわあきみち)技術系ブログ「Geekなぺーじ(http://www.geekpage.jp/)」管理人。慶應義塾大学にて

博士(政策・メディア)取得。IT系エンジニア。プログラミング、テクニカルライティング、

コンサルティング、DTP、セミナーや講演なども手がける。著書に『インターネットのカタチ』

『マスタリング TCP/IP OpenFlow編』(オーム社)、『アカマイ知られざるインターネットの巨

人』(KADOKAWAメディアファクトリー)、『ポートとソケットがわかればインターネットが

わかる』(技術評論社)など。

Page 456: ゴールドスポンサー...IPv6は、IPv4と異なる部分も多いので、ちょっとした勘違いが運用上の問題を発生させるこ ともあります。IPv6に関する情報へのアクセスを容易にすることによって、そういった問題の

技術書出版社の立ち上げに際して

コンピュータとネットワーク技術の普及は情報の流通を変え、出版社の役割にも再定義が求められています。誰もが技術情報を執筆して公開できる時代、自らが技術の当事者として技術書出版を問い直したいとの思いから、株式会社時雨堂をはじめとする数多くの技術者の方々の支援をうけてラムダノート株式会社を立ち上げました。当社の一冊一冊が、技術者の糧となれば幸いです。

鹿野桂一郎

プロフェッショナル IPv6

Printed in Japan / ISBN 978 4 908686 04 7

2018年 7 月20日 第 1版第 1刷発行2019年 2 月10日 第 1版第 2刷発行

著 者 小川晃通発行者 鹿野桂一郎編 集 高尾智絵制 作 鹿野桂一郎装 丁 凪小路印 刷 三美印刷製 本 三美印刷

発 行 ラムダノート株式会社lambdanote.com所在地東京都荒川区西日暮里2-22-1連絡先 [email protected]