IPv6入門!【IPv6なんてまだ必要ない?】

インターネットは世の中にひとつしか存在しないのでしょうか。いえ、違います。実は2つの世界があります。それが「IPv4」と「IPv6」です。

毎日何かしらで利用するインターネットですが、今、どちらの世界にアクセスしているのか意識する人はほとんどいないと思います。利用者はそれで良いのですが、エンジニアはそういうわけにはいきません。

今後IoTが普及して、世の中にある多くのものがインターネットに接続されるようになります。IPv4からIPv6への移行もゆっくりですが着実に進んでおり、もう本気でIPv6について勉強しないといけないときが迫っています。

ということで、今回はそのIPv6について見ていきたいと思います。

IPv6(Internet Protocol version 6)とは

インターネットに接続している機器には、インターネット内で一意の識別番号を付与することになります。その一意の認識番号が「IPアドレス」です。このIPアドレスは、今もなお幅広く利用されているIPv4(IPバージョン4)と、次世代のプロトコルであるIPv6があります。

IPv6が開発された主な理由は、32ビット幅であるIPv4では、IPアドレスが間違いなく不足するため、それを解決することにあります。

世界人口は増え続けており、70億人を超えています。さらにひとりが複数台の通信機器を持つ時代です。

IPv4アドレスとして割り当てられる数は約43億個です。インターネットは、今や主要な通信基盤として、世界中の誰もが利用している現在において、その不足は明らかです。

IPv6は128ビットという巨大なアドレス空間を持っているので、事実上無限のIPアドレスを割り当てることができ、今後のインターネットの発展による接続機器の増大にも十分に耐えられような設計となっています。

IPv6の特徴

IPv6の主な特徴として、次のようなものがあります。

IPv6の主な特徴
  • IPアドレスが事実上無限
  • ルータの負荷を軽減
  • プラグ&プレイ機能
  • セキュリティ機能(IPsec)
  • ルーティングテーブルの集約
  • NATが不要

IPアドレスが事実上無限

IPアドレスが128ビットなので、2の128乗、約340澗(かん)個のIPアドレスが用意できるようになります。これは事実上無限に割り当てることが可能な数です。どんなに贅沢な使い方をしても良いでしょう。

ルータの負荷を軽減

IPv4ではIPヘッダサイズは基本は20オクテット(バイト)ですが、それ以上も可能な可変長なものでした。これをIPv6では固定の40オクテットとすることで、処理を単純化できるようにしました。さらにルータでの分散処理(フラグメンテーション)やチェックサムをなくすことで、ルータの負荷を軽減させています。

プラグ&プレイ機能

IPv4ではIPアドレスの自動割り当てにDHCPサーバーが必要でしたが、同サーバーがなくても自動的に割り当てることができるようになりました。

セキュリティ機能(IPsec)

認証機能や暗号化機能、なりすまし防止策などを提供し、安全な通信を可能にするIPsecをIPv6では標準でサポートしています。

ルーティングテーブルの集約

IPアドレスをISPごとに大きく割り当て、ISPがそれを細かく計画的に配布することによって、ルーティングテーブルがあまり大きくならないようにしています。

NATが不要

IPv4では、IPアドレスの不足問題を解決するためにNATやNAPTが広く使われていますが、潤沢なIPアドレスを利用できるIPv6では不要となります。NATを介する通信では、通信を開始できる端末が限定されたり、アプリケーションの使用が制限されたりしましたが、NATがなくなることによって、端末間で双方向の通信を実現できるようになり、NAT使用によるデメリットがすべて解消されます。これにより、例えばファイルを送信したいときに、IPv4ではメールサーバーやWebサーバーなどを介してファイルを送信しますが、IPv6では直接ファイルを送信できるようになります。

NATはセキュリティを向上させる働きもあったと思います。昔、グローバルアドレスを直接パソコンに割り当てるべきではないと言われました。なくなってしまって大丈夫ですか?

上記疑問について、まずNATについて簡単におさらいすると、NATとはプロバイダから割り振られたグローバルIPアドレスと内部で使用するプライベートIPアドレスを相互に変換する機能で、ルーターがその役割をしています。

NATによるIPアドレスの変換は、内部の端末(パソコン)のIPアドレスを隠ぺいすることになるため、第三者からの侵入を遮断する壁にもなり、セキュリティレベルを向上させるというのは間違いではありません。

NATがなくなるということは、「インターネットに接続する端末すべてがグローバルアドレスを持つ」ということになります。
この点については、長くなるのでまた別の記事で取り上げたいと思いますが、結論を言うと、端末側にセキュリティ対策を施しておけばIPv6を使っても問題はない、何も対策していないのであれば問題であるということになります。

IPv6アドレスの種類

IPv6アドレスはIPv4アドレスと同じく、機器そのものにではなく、機器の持つネットワークインターフェースに付与されます。一つのインターフェースに複数のIPv6アドレスが付与されることも、複数のインターフェースに単一のIPv6アドレスが付与されることもあります。

IPv6アドレスでは代表的な型として次の種類があります。

ループバックアドレス現在使用しているコンピュータを指すアドレスで、IPv4の”127.0.0.1″に相当する。
グローバルユニキャストアドレスIPv6ネットワーク全ての中で一意のアドレスで、IPv4のグローバルアドレスに相当する。
リンクローカルユニキャストアドレスルータを超えない範囲内でのみ一意で、有効なアドレス。
ユニークローカルユニキャストアドレスローカルサイト内の範囲内でのみ一意で、有効なアドレスで、IPv4プライベートアドレスに相当する。
マルチキャストアドレス複数のアドレス宛に同報通信を行うためのアドレスで、IPv4のマルチキャストとブロードキャストを兼ねた役割を果たす。

IPv4と違って、IPv6にはブロードキャストアドレスは存在せず、マルチキャストアドレスが同様の役割を果たすということですね!

グローバルユニキャストアドレス、リンクローカルユニキャストアドレス、ユニークローカルユニキャストアドレスの関係をまとめると下図のようになります。

さらにアドレスの型によってアドレスの先頭ビットの形式が規定されています。

アドレスの型先頭ビットIPv6表記
未指定(Unspectified)00…0(128ビット)::0/128
ループバック00…1(128ビット)::1/128
マルチキャスト1111 1111ff00::/8
リンクローカルユニキャスト1111 1110 10fe80::/10
ユニークローカルユニキャスト1111 110fc00::/7
グローバルユニキャスト0012000::/3

IPv6のアドレス表記

IPv6ではIPアドレスが128ビットであるため、IPv4アドレスと同じように8ビットずつ区切って10進数で表すと、オクテットの数が16個にもなってしまいます。

そのため、IPv6アドレスは128ビットのアドレスを16ビットごとに区切り、それをコロン(:)で区切って16進数で表します。

ここで、IPAの情報処理技術者の過去問を借りて、IPv6のアドレス表記について確認してみます。

IPv6では、128ビットを16ビットごとに区切り、各16ビット(以下、16ビットセクションという)を16進数で表し、区切りにコロン(:)を使用する。また、次の規則を使用してアドレスを表現する文字列を圧縮できる。
(1)各16ビットセクションの先行する0を省略する。例えば、0012は12になる。ただし、16ビットセクションが0000のときは、0とする。
(2)0の16ビットセクションが連続する場合は、連続する2個のコロン(::)で表す。
例えば、
2001:0db8:0000:0000:0000:ff00:0042:8329は、
2001:db8::ff00:42:8329と表す。
ただし、::は1か所にだけ使用できる。
IPv6もIPv4と同様に、アドレスはネットワークを表す部分とホストを表す部分から成る。IPv6では、ネットワークの部分が何ビットで表されるかを示すのにプレフィックス長が用いられる。プレフィックス長は、先頭からのビット数を10進数で表したものである。アドレスとプレフィックス長は、スラッシュ(/)で区切る。例えば、2001:db8:abcd:12::/64では、プレフィックス長は64であり、先頭から64ビットがネットワークアドレス部であることを表している。

IPv6アドレスもv4と同じようにネットワークを表す部分とホストを表す部分があるということですね。

そうだね。IPv4でネットワークアドレスと言われていところが、プレフィックスになり、ホストアドレスと言われていたところが、インターフェイスIDに呼び方が変わっただけなんだ。

例えば、プレフィックス長が64であった場合は、上位64ビットがネットワークを表すプレフィックスで、下位64ビットがホストを表すインターフェースIDとなります。

うーん、「ホストアドレス」の方がしっくりくるんだけどなー。

確かに長年、「ホストアドレス」と呼んでいたから、そっちの方が馴染みやすいかもしれないね。ただ、最近のホスト(つまりコンピュータ)は1台に複数のIPアドレスが割り振られることが多いんだ。だから、「インターフェースID」と呼んだ方が正解と言えるんだ。

IPv4のアドレスとの比較

IPv4もIPv6もアドレスの種類は同じです。両者を比較してみます。

IPv4IPv6
プライベートアドレスクラスA:10.0.0.0/8
クラスB:172.16.0.0/12
クラスC:192.168.0.0/16
ユニークローカルユニキャストアドレス(または、ユニークローカルアドレス)
fd00::/8が自由に利用できる※1
グローバルアドレス上記以外グローバルユニキャストアドレス
2000::/3 つまり200で始まる
リンクローカルアドレス「169.254.」で始まるアドレスリンクローカルユニキャストアドレス
fe80::/10

※1ユニークローカルユニキャストアドレスとして、「fc00::/7」の範囲が定義されていますが、そのうちの半分の「fc00::/8」は未使用状態となっており、実際使用するのは「fd00::/8」となります。

では、実際にipconfigコマンドでIPv6のアドレスを確認してみましょう。

上記例の構成では、IPv4とIPv6の両方のアドレスが割り当てられています。(このようにIPv4環境とIPv6環境の共存させる構成をデュアルスタックと言います。)
ここで着目してほしいのは、IPv4アドレスはプライベートアドレスが割り当てられているのに対して、IPv6アドレスはグローバルユニキャストアドレスが割り当てられている点です。前述のとおり、IPv4のNATやNAPTといった仕組みは、IPv6では廃止されており、そのためこのようになっています。
また、IPv6アドレスとして、グローバルユニキャストアドレスの他にリンクローカルユニキャストアドレスも割り当てられています。

リンクローカルユニキャストアドレスはルータを超えられませんが、直接つながったネットワーク上の端末には接続できます。グローバルユニキャストアドレスが割り当てられてる場合は、リンクローカルユニキャストアドレスは使わないかもしれませんが、IPv6の取り決めとして必ず割り当てられることになっています。

IPv4ではひとつのNICに対してひとつのIPアドレスが割り当てることになりますが、IPv6ではひとつのNICに複数のタイプのIPアドレスを割り当てていることもポイントです。

スコープIDについて

ipconfigコマンドの結果の「リンクローカル IPv6 アドレス」と表記されている「fe80::59f1:ef22:a01d:5b69%8」が、パソコン起動時に割り当てられたIPv6アドレスで、先頭が「fe80::」なので、リンクローカルユニキャストアドレスになります。

Aさん

末尾の「%8」は何ですか?

位置的にプレフィックスのように思えますが違います。そもそも、リンクローカルユニキャストアドレスのプレフィックスは10です。では、この「%8」は何でしょう。

これは「スコープID」と呼ばれる、ネットワーク・インターフェイスの識別番号です。

何でそんな識別番号が必要なんですか?

IPv6アドレスは1台の端末(パソコン)に複数つけることができるので、複数のインターフェイスがある場合、どのインターフェイスからパケットを送信すれば良いのか判断できなくなるときがあります。

そのような場合に、送信する元のインターフェイスを指定するために、このスコープIDが用意されています。

まとめ

今回はIPv6についての基礎的な内容について見てきました。IPv6の特徴についても確認しましたが、結局のところ、アドレス幅がIPv4の32ビットから128ビットに拡張しただけで、IPv4と基本的な考え方は変わっていません。

そのため、確かに覚えなければいけないことはありますが、IPv4ネットワークを管理できる人にとって、IPv6ネットワークを管理することはそれほど難しくはありません。

「IPv6なんてまだ必要ない」と言い続けて未だにIPv4で自社ネットワークを組んでいるところも多くありますが、IPv6への移行なんてとっくに終わっているというところもあるのは事実です。

現状は問題なくIPv4が使えるので、IPv6への移行にかかる投資コストに見合った対価は得られないのは確かで、それが足かせになって足踏み状態が続いているところも多いと思います。(私が勤めている会社もそうです。)しかし、IoT化が急速に進んでいる現在において、近い将来、IPv6への移行を余儀なくされるときが来るので、準備は早ければ早いほど良いのは確かです。