IPv4アドレスが枯渇し、今後はIPv6を使わざるを得なくなる!? 今からでも遅くない、Windows管理者のためのIPv6入門連載開始。
IPv4アドレスの不足や枯渇などにより、最近にわかにIPv6に対する注目が集まっている。ただしTVの地デジ化などと違い、IPv4アドレスが枯渇したからといって、すぐに明日からインターネットが利用できなくなるわけではないので、まだIPv6を導入していない組織も多いだろう。現在すでにインターネットを利用している組織なら、そのまま現状のIPv4アドレスを使い続けていけばよい。
だがそれでも、そろそろIPv6導入の検討や準備などを始めておく必要はあるだろう。なぜならIPv4アドレスが枯渇した結果、そのうちIPv4アドレスの新規割り当てが受けられなくなるからだ。今後、例えば新しいネット・サービスを始めたり、新しいドメインなどを取得してサーバを設置したりしようとしても、IPv4ではサービスを公開できなくなる可能性がある。しばらくはサーバの統合などでIPアドレスを節約/集約しながらなんとかやりくりできても、そう長くは持たないだろう。となると、まずは外向けサーバ(インターネット・サービス用のサーバ)のIPv6化、ついでインターネット・アクセス回線やVPNサービスなどのIPv6化、そして最後にそれらにつながる社内コンピュータなどのIPv6化といった作業が必要になる。
とはいえ、いきなりインターネット・サーバ向けにIPv6をセットアップするのは簡単ではない。まずはWindows OSを使ってIPv6の基本を学び、順次社内システムやサーバ管理などに応用すればよい。本連載では、主にWindows OSを使ってIPv6の基本的な機能や動作を解説するほか、IPv6ネットワークにおけるWindowsサーバの設定導入方法などについて解説していく。初回の今回は、IPv6アドレスの基本とIPv6でのpingコマンドの使い方などについて簡単に解説する。なおIPv6の基本的な解説はすでに@ITの以下のフォーラムなどでも多く取り上げているので、参考にしていただきたい。
IPv6(Internet Protocol Version 6)とは、現在主流のIPv4(IP Version 4)に代わるべく設計された、新世代のTCP/IP技術の総称である。バージョン番号の4とか6は、プロトコル番号を表している。ネットワーク・プロトコルの階層モデルで言うと、TCP/IPにおけるネットワーク層プロトコルであるIPプロトコルを、IPv4からIPv6に変更したものを指す。上位のトランスポート層プロトコルであるTCPやUDPはほとんどそのままにして、下位のプロトコルだけを変更している。そのため一般的なツールやアプリケーションなどは、IPv6対応されていればほぼ同様に使えるはずである(IPv6対応していない場合は使えない)。例えばpingコマンドは「-6」というオプションを付ければIPv6モードで動作するし(名前解決の結果によっては自動的にIPv4とIPv6モードが切り替わることもある)、Internet ExplorerなどでもそのままIPv6アドレスを指定するだけで利用できる(FQDN名ではなく、IPv6アドレスを直接指定する場合は「http://[fe80::ec37:d371:3cf1:e664]/」のようにする)。
IPv6の主な特徴としては次のようなものがある。
IPv4では32bit分しかなかったアドレス空間が、IPv6では128bit分もあり、はるかに多くのネットワーク機器を接続できる。IPv6が開発された最大の動機は、枯渇しつつあったIPv4に代わり、NATなどのアドレス変換技術を使わずとも接続できるようにすることであった。IPv6の128bit幅のアドレスはこの要求に十分応えるものとなっている。また広いアドレス空間を生かして、余裕のあるネットワーク設計が可能となっている。
IPv4では、すべてのノード(コンピュータやネットワーク機器など、割り当ての対象となるもの)にIPアドレスを重複なく割り当てる必要があった。IPv6ではアドレスの重複を回避したり、ある程度自動的にIPアドレスを割り当てたりする機能があらかじめプロトコルに組み込まれている。
IPv4では、ルータがパケットを処理する際にチェックサムの再計算やフラグメント処理などが必要であったが、IPv6ではこれらを不要にすることにより、より高速なルーティングが可能となっている。
ネットワークの帯域を圧迫するブロードキャストを廃止し、代わりに特定のノードへ向けて送信するマルチキャスト通信を使っている。これにより、ネットワーク帯域の有効利用が可能となっている。
これ以外にも特徴的な機能があるが、それらについては今後の連載で随時取り上げる。
Windows OSでは、Windows XPからIPv6をサポートしていたが、この時点ではまだIPv6はWindows OSの標準機能ではなく、ユーザーが必要に応じて個別にインストールする必要があった(Master of IP Networkフォーラム「Windows XP SP1がIPv6を実装」参照)。その後、新しいWindows OSやService PackなどがリリースされるたびにIPv6関連の機能も強化され、Windows Vista以降ではIPv6が標準プロトコルとしてあらかじめシステムに組み込まれた状態でリリースされている。さらにWindows VistaおよびWindows Server 2008では、LLMNR(Link-local Multicast Name Resolution)という名前解決サービスが標準で提供されたため、IPv6向けの特別なDHCPサーバやDNSサーバ、ルータなどが何もなくてもワークグループ(ピア・トゥ・ピア)形式のIPv6ネットワーク環境をより簡単に構築できるようになった。本連載ではこの簡易形式のネットワークから始めてIPv6の基本を理解し、その後、より進んだ使い方などを解説する。
IPv6を理解するための基本として、まずIPv6のアドレスの表記方法について説明しておく。
IPv4では32bit(4bytes)のIPアドレスを4つのバイトに分け、それぞれ10進数で表記・結合していたが(例:「10.2.3.4」や「192.168.100.11」など)、IPv6では128bitもの幅があるので、この方法で表記すると非常に長く、扱いづらいものになる。そこで、IPv6では16進数を使い、さらに16bitごとに「:」記号で区切って表現する方法が採用されている。これにより、少なくとも10進数を1byteごとに並べるよりは理解しやすい。
具体的には、例えば次のようになる。
IPv6アドレスの内部的な2進数表現例 |
---|
0010 0000 0000 0001 0000 1101 1011 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 (4行に分割) |
これを16進数で表現すると |
---|
2001:0db8:0000:0000:0123:4567:89ab:cdef または 2001:0DB8:0000:0000:0123:4567:89AB:CDEF |
英字の大文字と小文字は関係ないので、上記の2つのうちのどちらを使ってもよい。ちなみに、この「2001:0db8:〜」はドキュメントなどで例示用として利用してもよいアドレスである。IPv6関連の解説記事ではよく登場するので覚えておくとよい。
ところでこの表記では、元の2進数表示よりも分かりやすいが、あまり短くもないし、アドレスも覚えづらい。そこでこれをさらに短く表記する方法が用意されている。まず8つある4桁の16進数表現のうち、それぞれの上位の0は省略してもよい(ゼロサプレス)。そして「:0:」(これは「:0000:」をゼロサプレス表示したもの)が連続している場合は、それらをまとめて1つの「::」に置き換えてもよい。
2001:0db8:0000:0000:0123:4567:89ab:cdef
↓ゼロサプレスすると
2001:db8:0:0:123:4567:89ab:cdef
↓さらに、連続する「:0:」を省略すると
2001:db8::123:4567:89ab:cdef
ただし省略できる、連続した「:0:」は1カ所だけである。例えば「2001:db8::1234::1」のように「::」が2カ所以上に存在していると、元のアドレスが復元できなくなるからだ(*1)。
2001:db8::1234::1
↓元へ戻すと次の3通りが考えられるのでこれは不可
1.2001:db8:0:1234:0:0:0:1
2.2001:db8:0:0:1234:0:0:1
3.2001:db8:0:0:0:1234:0:1
*1 IPv6のアドレス構造について規定しているRFC4291では「:0000:」が1つの場合でも「::」にしてもよいとされているが、1つしかない場合は省略してはいけないという追加規則がRFC5952(RFC4291のUpdate)で決められている。
以上の例ではアドレスの真ん中付近にある「:0:」を省略したが、アドレスの左端や右端でも省略表記は可能である。
2001:0db8:0000:0000:0000:0000:0000:0000
↓省略形式にすると
2001:db8::
fe80:0000:0000:0000:a83a:1762:6beb:994e
↓省略形式にすると
fe80::a82a:a762:63eb:594e
ff02:0000:0000:0000:0000:0000:0000:0001
↓省略形式にすると
ff02::1
0000:0000:0000:0000:0000:0000:0000:0001
↓省略形式にすると
::1
さらに全部0だと次のようになる。
0000:0000:0000:0000:0000:0000:0000:0000
↓省略形式にすると
:: (もしくは 0::)
「::」しか残ってないが、これはルータのデフォルト・ルートを表す場合などに利用される、立派なIPv6アドレスである。
以上のように、IPv6アドレスの表記では0の部分を省略したり、大文字/小文字を混ぜたりできるが、そのために同じIPアドレスなのに異なるアドレスに見えることがある。特にログなど記録されたIPv6アドレスをチェックしたり、プログラムで処理したりする場合は注意していただきたい。RFC5952のガイドラインでは、英字は小文字のみを使用する、ゼロサプレスは行う、連続する0の個数が同じ場所が2カ所以上にあるなら上位の方を「::」にする、などが推奨されている。
IPv6では16進数でIPアドレスを表現するのが基本であるが、場合によってはIPv4の10進数表記と組み合わせて表現することもある。
C:\>netsh interface ipv6 show route
…(省略)…
いいえ Manual 256 fe80::5efe:10.20.1.101/128 12 isatap.local
いいえ Manual 256 fe80::5efe:192.168.3.182/128 15 isatap.local
…(省略)…
これはWindows 7のnetshコマンドの実行例であるが、「fe80::5efe:10.20.1.101」という表記は、「fe80:0:0:0:0:5efe:0:0」というIPv6アドレスの最下位32bitに(末尾の「0:0」の部分に)、「10.20.1.101」という32bitのIPv4アドレスを合成したものを表している。IPv6アドレスを付ける際に、IPv4のアドレス割り当てを引き継ぐように作っているので(こうすると分かりやすいから)、IPv4の部分が分かりやすくなるようにこのような表記をしている。
■更新履歴
【2015/07/07】「●IPv4との合成アドレス」で「『10.20.5.101』」と記していましたが、正しくは「『10.20.1.101』」でした。お詫びして訂正いたします。
Copyright© Digital Advantage Corp. All Rights Reserved.