2026年5月24日

2026年5月24日

CIDR表記の読み方と書き方(/24の意味から設定ファイルでの使い方まで)

CIDR 表記は 203.0.113.0/24 のように「アドレス/プレフィックス長」で書き、スラッシュの後ろの数字が「先頭から何ビットがネットワーク部か」を表します。この記事では、CIDR 表記を見て範囲をすぐ読み取る方法、範囲から正しい CIDR を書く方法、そしてファイアウォールや Web サーバーの設定で CIDR を書くときの注意点を説明します。サブネットマスクから各アドレスを計算する手順は別記事で扱い、ここでは「表記の読み書き」と「設定での使い方」に絞ります。

CIDR 表記の読み方

/n の n はネットワーク部のビット数です。IPv4 は32ビットなので、残りの 32 − n ビットがホスト部になり、その範囲に含まれるアドレス数は2の(32 − n)乗です。

表記 含まれるアドレス数 読み方の目安
/32 1 そのアドレス1つだけ
/30 4 小さなリンク用
/24 256 第4オクテットが自由(例: 192.168.1.0〜192.168.1.255)
/16 65,536 第3・第4オクテットが自由
/8 約1,677万 第2〜第4オクテットが自由
/0 すべて IPv4 の全アドレス

プレフィックス長が8の倍数のときは「先頭から何オクテットが固定か」で読めます。/24 なら3オクテット固定、/16 なら2オクテット固定です。8の倍数でないときは、プレフィックス長を超える最初のオクテットで幅を考えます。たとえば /20 は第3オクテットのうち上位4ビットが固定なので、第3オクテットは16刻み(2の4乗)で区切られます。10.0.16.0/20 は 10.0.16.0 〜 10.0.31.255 です。

プレフィックス長は1減るごとに範囲が2倍、1増えるごとに半分になります。/24 の半分が /25、/24 2つ分が /23 と覚えておくと、規模の見当がすぐ付きます。

CIDR が生まれた背景

かつての IPv4 は、先頭のビットでクラス A(/8)・B(/16)・C(/24)と大きさが決まる方式でした。これではアドレスの無駄が大きく、経路表も膨らむため、1993年に任意の長さで区切れる CIDR が導入されました(現在の仕様は RFC 4632)。いまでもクラスの名前を見かけますが、実際のネットワークはクラスと無関係に CIDR で区切られています。

CIDR の書き方

アドレス部はネットワークアドレスで書く

192.168.1.10/24 のように、ホスト部が0でない値で書かれた CIDR をよく見かけます。インターフェースの設定(ip addr add 192.168.1.10/24 dev eth0 など)では「このアドレスで、所属ネットワークは /24」という意味で正しい書き方ですが、ファイアウォールの許可範囲などで「範囲」を表すなら 192.168.1.0/24 と書くのが正確です。

ホスト部が0でない値を受け取ったときの扱いはツールによって異なり、エラーにするもの、黙ってネットワークアドレスに丸めるものがあります。丸められた結果、意図より広い範囲を許可していた、ということが起こり得るので、範囲は正しいネットワークアドレスで書く習慣をつけます。

import ipaddress

ipaddress.ip_network("192.168.1.10/24")
# ValueError: 192.168.1.10/24 has host bits set

ipaddress.ip_network("192.168.1.10/24", strict=False)
# IPv4Network('192.168.1.0/24')

連続した範囲を CIDR にまとめる

「192.168.0.0 〜 192.168.3.255 を許可したい」のように範囲で指定された場合は、CIDR に変換します。範囲の大きさが2のべき乗で、開始アドレスがその大きさの倍数になっていれば1つの CIDR(この例では /22)にまとまります。条件を満たさない範囲は、複数の CIDR に分けて書きます。

import ipaddress

a = ipaddress.ip_address("10.0.0.10")
b = ipaddress.ip_address("10.0.0.20")
print(list(ipaddress.summarize_address_range(a, b)))
# [IPv4Network('10.0.0.10/31'), IPv4Network('10.0.0.12/30'),
#  IPv4Network('10.0.0.16/30'), IPv4Network('10.0.0.20/32')]

隣り合うネットワークをまとめるときも同じ条件があります。192.168.0.0/24 と 192.168.1.0/24 は 192.168.0.0/23 にまとまりますが、192.168.1.0/24 と 192.168.2.0/24 は境界が揃っていないため /23 1つにはまとまりません。ipaddress.collapse_addresses() を使うと、まとめられるものだけをまとめた結果を確認できます。

IPv6 の CIDR

IPv6 も同じ書き方で、128ビットのうち先頭何ビットがネットワーク部かを表します。単一アドレスは /128、一般的な LAN(サブネット)は /64 です。プロバイダーや事業者から割り当てられるのは /48 や /56 などで、その中から /64 を切り出して使います(割り当ての大きさは契約ごとに異なります)。表記の例は 2001:db8:1234::/48 のようになります。

設定ファイルで CIDR を書く

CIDR が最もよく使われるのは、アクセスを許可・拒否する範囲の指定です。ここでは WordPress のログイン画面を特定の範囲だけに許可する例を示します。設定を誤ると自分も締め出されるため、変更前に設定ファイルのバックアップを取り、FTP やホスティングの管理画面から元に戻せることを確かめてから試してください。

Apache 2.4 の .htaccess では次のように書けます。

<Files "wp-login.php">
    Require ip 203.0.113.0/24 2001:db8:1234::/48
</Files>

ufw で SSH を特定の範囲だけに開ける例です。

sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp

nginx の allow / deny やクラウドのセキュリティグループも、同じ CIDR 表記で範囲を指定します。

書くときに気を付けたい点は次のとおりです。

  • **/0 の意味を取り違えない**: 0.0.0.0/0 は「IPv4 のすべて」、::/0 は「IPv6 のすべて」です。セキュリティグループで SSH やデータベースのポートに 0.0.0.0/0 を指定すると、インターネット全体に公開することになります。
  • IPv4 と IPv6 の両方を書く: サイトが IPv6 でも公開されている場合、IPv4 の範囲だけを許可しても IPv6 で来た自分は弾かれます。
  • 自分の範囲が変わる可能性を考える: 家庭用回線のアドレスは変わることがあります。単一アドレス(/32)で登録するのか、会社の固定回線の範囲で登録するのかを決めておきます。
  • CDN やプロキシの後ろでは見えるアドレスが違う: Web サーバーには中継機器のアドレスが届くため、接続元の範囲で制限するには、信頼できる中継元からのヘッダーを採用する設定が先に必要です。

あるアドレスが範囲に含まれるかは、次のように確認できます。

import ipaddress

print(ipaddress.ip_address("203.0.113.45") in ipaddress.ip_network("203.0.113.0/24"))
# True

ツールの仕様や書式は更新されることがあるため、細かい挙動は使っているソフトウェアのドキュメントで確認してください(2026年10月現在)。

まとめ

  • /n は先頭 n ビットがネットワーク部という意味で、範囲のアドレス数は2の(32 − n)乗
  • プレフィックス長が1減ると範囲は2倍、8の倍数なら固定オクテット数で読める
  • 範囲を表す CIDR はネットワークアドレスで書く。ホスト部付きの値の扱いはツールで異なる
  • 連続範囲は2のべき乗と境界の条件を満たせば1つにまとまり、満たさなければ複数に分ける
  • 許可設定では /0 の意味、IPv6 側の登録、締め出されたときの復旧手段を確認してから反映する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲