SheepDev

IP・ネットワーク計算

192.0.2.10/24はどこからどこまで?

使うツール

許可リストにIPアドレスを書こうとしたら、末尾に/24が付いていた。192.0.2.10という一台だけのつもりで入力すると、想像より広い範囲を指定することがあります。CIDRは文字列の飾りではなく、どこまでのビットを共通部分として扱うかを示す表記です。まず数字を暗記するより、範囲へ展開して見てみましょう。

/24の範囲は、入力した.10から始まらない

IPv4/CIDR計算へ入力
192.0.2.10/24

結果のネットワークは192.0.2.0、終端は192.0.2.255、マスクは255.255.255.0、総アドレス数は256です。入力に書いた.10はこの範囲に属するアドレスであり、範囲の先頭ではありません。同じ/24なら192.0.2.200を入れてもネットワークの範囲は同じになります。CIDRを比較するときは、入力文字列だけでなく、正規化された開始と終了を見ると確実です。

アドレスはIPv4の32bitで表され、/24では先頭24bitを固定し、残り8bitが変化します。その組合せは2の8乗で256です。末尾に書く数値はアドレスの個数ではなく、固定するビット数なので、数値を大きくすると範囲は小さくなります。ここを逆に覚えると、狭めたつもりで許可範囲を広げてしまいます。

/25へ変えると半分、/26なら四分の一

同じアドレスでプレフィックスだけを変える
192.0.2.10/24 → 192.0.2.0 – 192.0.2.255 (256)
192.0.2.10/25 → 192.0.2.0 – 192.0.2.127 (128)
192.0.2.10/26 → 192.0.2.0 – 192.0.2.63 (64)

/25にはもう一つ、192.0.2.128から.255までのブロックがあります。192.0.2.200/25を入力するとこちらになります。ブロックは任意の開始位置から同じ個数を取るものではなく、大きさに応じた境界へそろいます。192.0.2.10から128個という範囲を表したいなら、/25を付けるだけでは足りず、IP範囲からCIDR集合への変換が必要です。

実際の画面でマスクの入力を求められた場合、/25は255.255.255.128、/26は255.255.255.192です。CIDRとマスクは同じ区切りを別の形で表します。ただし、変更先の装置やサービスがその指定を受け付けるか、既存の経路と競合しないかまでは、この計算だけでは分かりません。

総数256と、通常のホスト数254を分ける

一般的なIPv4サブネットのモデルでは、先頭をネットワーク、末尾をブロードキャストとして扱い、256から2を引いた254を通常の利用可能ホスト数とします。しかし、クラウドなどで追加の予約アドレスがある場合、その数は別です。ツールの254を、そのサービスで作成できる仮想マシン数の保証として使わないでください。

許可リストにCIDRを書く場合も、『ホスト数254だから先頭と末尾は一致しない』とは限りません。アドレス範囲としての包含判定と、サブネットで機器へ割り当てるときの利用方針は別です。IP包含・CIDR比較は範囲を比較します。どのアドレスを実際に使えるかは、対象ネットワークの規則で判断します。

/31と/32で、二つ引くのをやめる

192.0.2.10/31は.10と.11の二つです。このツールはRFC 3021のポイントツーポイント用途として両方を利用可能と表示します。二台の間のリンクという前提であり、一般的なLANへ無条件で当てはめる説明ではありません。結果にブロードキャストという欄名があっても、この用途では末尾を通常のブロードキャスト用に失うという意味ではありません。

192.0.2.10/32なら範囲は.10一つだけです。一台の指定をCIDRで表すときに使う形で、総数は1になります。/0では逆にIPv4の全32bitが変化し、総数は4,294,967,296です。これを許可先として入力するときは、非常に広い対象を選ぶことになります。数値の大小だけでなく、開始・終了も見て意図した範囲か確認します。

IPv6では128bit、同じ/64でも桁が違う

IPv6/CIDRへ2001:db8::1/64を入れると、ネットワークは2001:db8::、総数は18,446,744,073,709,551,616です。128から64を引いた64bitが変化するため、2の64乗になります。IPv4のように『末尾の数字だけを見る』『二つを引いてホスト数にする』という読み方は使いません。大きな範囲でも、全アドレスを一つずつ列挙する必要はありません。

記事の192.0.2.0/24と2001:db8::の例は、説明用のアドレスです。実際に接続できる相手の指定ではありません。SheepDevも入力先への通信、空きアドレスの探索、所有者の確認は行いません。『範囲を計算できた』と『そのネットワークを利用できる』は別の判断です。

疑問に合わせて、次の計算を選ぶ

一台が範囲へ入るか知りたいならIP包含・CIDR比較、範囲を部署ごとに分けたいならサブネット分割、長い一覧を範囲を増やさず短くしたいならCIDR集約へ進みます。設定変更の前に、それぞれの入力と期待する範囲を別々に確認すると、誤った前提を後工程へ持ち込みにくくなります。

192.0.2.10/24を入力しても、十番からの範囲にはならない

設定例から192.0.2.10/24をコピーしたとき、.10から256個を許可する指定だと読むと範囲を取り違えます。/24は先頭24bitを固定する指定なので、計算結果は192.0.2.0から192.0.2.255です。入力した.10はその中の一つのアドレスです。範囲の開始と終了を指定したいときは、IP範囲とCIDRの変換へ進みます。アドレスとプレフィックスを組み合わせた表記と、開始・終了による区間を混ぜないことが、アクセス制御の誤った拡大を防ぐ最初の確認です。

同じ/24でも、192.0.2.10/24と192.0.3.10/24は別の範囲です。プレフィックス長は大きさを決めますが、どの位置にあるかまでは決めません。逆に192.0.2.10/24と192.0.2.200/24は、ホスト部分が違うだけで同じ範囲を表します。設定を比較する際は、入力文字列だけでなく計算されたネットワークと範囲を見ます。表記をそろえることで同じ指定を発見できますが、実際の設定ファイルでホストアドレスとして使っている欄まで、ネットワークアドレスへ書き換えてよいわけではありません。

最後に、結果を用途と結び付けて読みます。総アドレス数は、ルーターやクラウドが予約するアドレスを引いた割当て可能数とは限りません。通常のIPv4ホスト数を表示していても、利用するサービスが独自に予約する分までは計算していません。『このプレフィックスには256個のアドレスがある』という数理上の結果と、『この環境で254台を配置できる』という運用判断を分け、実際の割当て条件は利用先の仕様へ戻って確認します。

参考資料

使うツール

使い方・解説 →