CIDRブロックとは?表記をわかりやすく解説
CIDRブロックとは、192.168.1.0/24 のように、ベースアドレスとプレフィックス長で書かれたIPアドレスの範囲です。スラッシュの後の数字は、ネットワークを識別するために先頭の何ビットが固定されているかを表します。CIDRはClassless Inter-Domain Routingの略で、ルーティングテーブル、ファイアウォールのルール、クラウドのセキュリティグループでネットワークを記述する方法です。
CIDR表記の読み方
IPv4アドレスは32ビットです。192.168.1.0/24 の /24 は、最初の24ビットがネットワーク部であり、残りの8ビットは内部のホストを識別するために自由に使えることを意味します。この自由な8ビットにより、2^8 = 256個のアドレスが得られ、192.168.1.0 から 192.168.1.255 までとなります。この規則はどのプレフィックスにも当てはまり、ブロックのサイズは2の(32 − プレフィックス長)乗です。
/8は1オクテットを固定し、たとえば10.0.0.0/8のように16,777,216個のアドレスを持ちます。/16は2オクテットを固定し、たとえば172.16.0.0/16のように65,536個のアドレスを持ちます。/24は256個のアドレスを持ち、/32はちょうど1つのアドレスです。/0はすべてのアドレスで、ファイアウォールのルールでは、「どこからでも」を意味する0.0.0.0/0として目にします。
古い形式のサブネットマスクも、同じことを表します。/24 は 255.255.255.0、/16 は 255.255.0.0、/20 は 255.255.240.0 に等しくなります。IPv6でも同じ考え方が128ビットに適用され、2001:db8::/32 は最初の32ビットを固定します。
CIDRがクラスフルなアドレス指定に取って代わった理由
CIDRの前は、アドレスは/8、/16、/24のプレフィックスを持つA、B、Cという固定のクラスに分けられていました。2,000個のアドレスが必要な組織は、65,536個のクラスBを取ってその大半を無駄にするか、複数のクラスCを取ってルーティングテーブルを肥大化させるしかありませんでした。CIDRでは任意のプレフィックス長が使えるため、/21(2,048個のアドレス)を正確に割り当てられます。また、隣接するブロックをまとめることもできます。境界が揃った2つの隣接する/24は、1つの/23として広告できるため、グローバルなルーティングテーブルを小さく保てます。
アラインメントと使用可能なアドレス
ブロックは、そのサイズに合う境界から始まらなければなりません。/24は最後のオクテットが0のアドレスから、/22は3番目のオクテットが4の倍数のアドレス(たとえば 10.0.4.0/22)から始まる必要があります。そのため 10.0.3.0/22 は有効ではありません。アラインされていないので、ツールは拒否するか、黙って実際の境界に正規化します。通常のサブネットでは、先頭のアドレスがネットワークを識別し、末尾のアドレスがブロードキャストアドレスなので、/24で使えるホストアドレスは254個です。クラウドプロバイダーはサブネットごとにさらに数個を予約することが多いため、サイズを決める前にそのルールを確認してください。
実務でCIDRに出会う場面
最も一般的なのは、ファイアウォールと許可リストです。203.0.113.0/24 を許可すれば、1つのエントリで256個のアドレスを許可できます。危険なのは範囲が広すぎることで、/24のつもりで/16にすると、無関係な数万台のホストを許可してしまう可能性があります。1つのIPしか分からないとき、それを囲むブロックを見つけるのは調査のステップであり、その一部は ipto で行えます。IPレンジディレクトリでは、/8と/16のブロックごとにアドレス空間を閲覧でき、それぞれの国とASNの内訳が分かります。ASN検索はネットワークに帰属するレンジを表示し、IP whois検索はRDAP経由で登録済みのブロックを返すため、組織が保有する正確な範囲が分かります。
予約済みの範囲もCIDRで表されます。10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 などのプライベート空間、ループバックの 127.0.0.0/8、リンクローカルの 169.254.0.0/16 は、公開の送信元として現れるべきではありません。ボゴンIPチェッカーは、アドレスがそれらのいずれかに該当するかを示し、ipto のIP検索は、同じ目的のために bogon と bogon_type のフィールドを返します。
まとめる処理は逆方向にも使えます。2つの範囲を統合できるかを確認するには、それらが同じサイズで、隣接しており、最初のものが統合後のブロックの境界から始まっていることを確かめます。どちらかの条件が満たされなければ、1つではなく2つのエントリが必要です。
よくある間違い
- ベースアドレスとホストの混同。
192.168.1.0/24が表すのはネットワークであり、デバイスではありません。 - 1つのアドレスのために範囲全体をブロックする。共有ホスティングのブロックにある不正なホスト1台のために、その周囲の/24全体が敵対的になるわけではなく、ブロックすれば無実の顧客に影響しかねません。
- IPv6を忘れる。IPv4の範囲だけに書いたルールでは、IPv6のトラフィックがフィルタリングされません。
簡単な妥当性チェックとして、ホスト部のビット数を数え、2をその数でべき乗し、期待した数と比べてください。範囲のデータをプログラムから取得する方法は、APIドキュメントに記載されています。