CIDR(Classless Inter-Domain Routing)
概要
CIDR(Classless Inter-Domain Routing) は、IP アドレスのネットワーク部とホスト部の境界を可変長で指定するアドレス表記法およびルーティング方式です。RFC 4632(2006 年)で現在の仕様が定義されており、初期の仕様は RFC 1519(1993 年)で導入されました。
CIDR 以前、IPv4 アドレスはクラス A(/8)、クラス B(/16)、クラス C(/24)の 3 つの固定サイズで割り当てられていました。クラス B は 65,534 台のホストを収容できますが、実際に必要なのが 1,000 台程度でも /16 ブロックを丸ごと割り当てるしかなく、アドレスの浪費が深刻でした。CIDR はこのクラスフル方式を廃止し、任意のビット長でネットワークを分割できるようにしました。192.168.1.0/24 のように、スラッシュの後にネットワーク部のビット数(プレフィックス長)を記述します。
CIDR はアドレス空間の効率的な利用だけでなく、ルーティングテーブルの集約(スーパーネッティング)にも使われます。複数の連続したネットワークを 1 つの大きなプレフィックスにまとめることで、インターネットのコアルーターが保持するルーティングエントリ数を削減できます。
仕組み
CIDR はプレフィックス長でネットワークの境界を定義し、IPv4・IPv6 の両方でアドレス管理とルート集約に使われます。
プレフィックス長とサブネットマスク
CIDR 表記の /N は、先頭 N ビットがネットワーク部であることを示します。残りのビットがホスト部となり、そのネットワーク内で個々の機器を識別します。
192.168.1.0/24
ネットワーク部: 192.168.1 (先頭 24 ビット)
ホスト部: .0 〜 .255 (残り 8 ビット)
プレフィックス長はサブネットマスクと等価です。/24 は 255.255.255.0 に対応し、ネットワーク部のビットがすべて 1、ホスト部のビットがすべて 0 になります。
| プレフィックス長 | サブネットマスク | ホスト数 | 用途例 |
|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 | 大規模 ISP |
| /16 | 255.255.0.0 | 65,534 | 企業ネットワーク |
| /24 | 255.255.255.0 | 254 | オフィスの 1 セグメント |
| /27 | 255.255.255.224 | 30 | 小規模サブネット |
| /30 | 255.255.255.252 | 2 | ポイントツーポイントリンク |
| /32 | 255.255.255.255 | 1 | ホストルート |
ホスト数は 2^(32 - N) - 2 で計算します。ネットワークアドレス(ホスト部がすべて 0)とブロードキャストアドレス(ホスト部がすべて 1)の 2 つを除くためです。ただし /31(RFC 3021)はポイントツーポイントリンク用に 2 アドレスとも使えます。
IPv6 での CIDR
CIDR は IPv6(RFC 8200)でも同じ表記法を使います。IPv6 は 128 ビットのアドレス空間を持つため、プレフィックス長は /1 から /128 まで指定できます。
2001:db8::/32
一般的な割り当て単位は、ISP への割り当てが /32、エンドサイトへの割り当てが /48、1 つのサブネットが /64 です。IPv6 では /64 がサブネットの標準単位であり、SLAAC(Stateless Address Autoconfiguration、RFC 4862)はこの /64 を前提に動作します。
ルート集約(スーパーネッティング)
CIDR の大きな利点はルート集約です。連続する複数のネットワークを 1 つのプレフィックスにまとめて広告することで、ルーティングテーブルのエントリ数を減らせます。
集約前:
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
集約後:
192.168.0.0/22 (4 つの /24 を 1 つの /22 にまとめる)
/22 はネットワーク部が 22 ビットで、ホスト部が 10 ビット(1,022 台)です。集約前は 4 つのルーティングエントリが必要でしたが、集約後は 1 つで済みます。インターネットのコアルーターは 2024 年時点で 100 万以上のルーティングエントリを保持しており、ルート集約なしでは現在のインターネットは維持できません。
ネットワークアドレスの計算
CIDR 表記から実際に利用可能なアドレス範囲を計算するには、IP アドレスとサブネットマスクの AND 演算を行います。
IP アドレス: 10.100.50.200
プレフィックス長: /22
サブネットマスク: 255.255.252.0
AND 演算:
00001010.01100100.00110010.11001000 (10.100.50.200)
11111111.11111111.11111100.00000000 (255.255.252.0)
-----------------------------------
00001010.01100100.00110000.00000000 (10.100.48.0)
ネットワークアドレス: 10.100.48.0
ブロードキャスト: 10.100.51.255
利用可能範囲: 10.100.48.1 〜 10.100.51.254
具体例
クラウドの VPC 設計やファイアウォールルールなど、CIDR の実用的な使用パターンを示します。
クラウド環境での VPC 設計
AWS VPC や GCP VPC のネットワーク設計では CIDR ブロックの割り当てが基本になります。
VPC 全体: 10.0.0.0/16 (65,534 ホスト)
パブリックサブネット:
ap-northeast-1a: 10.0.0.0/24 (254 ホスト)
ap-northeast-1c: 10.0.1.0/24 (254 ホスト)
プライベートサブネット:
ap-northeast-1a: 10.0.10.0/24 (254 ホスト)
ap-northeast-1c: 10.0.11.0/24 (254 ホスト)
データベースサブネット:
ap-northeast-1a: 10.0.20.0/24 (254 ホスト)
ap-northeast-1c: 10.0.21.0/24 (254 ホスト)
VPC ピアリングや VPN 接続を行う場合、接続先の CIDR と重複しないように設計する必要があります。10.0.0.0/16 と 10.0.0.0/16 は重複するため接続できません。
ファイアウォールのルール設定
CIDR はアクセス制御リスト(ACL)やセキュリティグループのルール定義にも使います。
# 特定のオフィスからの SSH を許可
許可 TCP 22 203.0.113.0/28
# 社内ネットワーク全体からの HTTP/HTTPS を許可
許可 TCP 80,443 10.0.0.0/8
# 特定ホストのみ許可
許可 TCP 3306 10.0.20.5/32
/32 は単一ホストを指定します。/28 は 14 台のホストを含む小さなブロックです。
確認方法
Linux 環境で自分のネットワークインターフェースに割り当てられている CIDR を確認するには ip コマンドを使います。
ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
inet6 fe80::1/64 scope link
inet 192.168.1.100/24 から、このインターフェースが /24 のネットワークに属していることがわかります。
特定の CIDR ブロックに含まれるアドレス範囲を計算するには ipcalc コマンドが便利です。
ipcalc 10.100.50.200/22
Address: 10.100.50.200
Netmask: 255.255.252.0 = 22
Network: 10.100.48.0/22
HostMin: 10.100.48.1
HostMax: 10.100.51.254
Broadcast: 10.100.51.255
Hosts/Net: 1022
DNS の A レコードを引いて、返ってきた IP アドレスがどのネットワークに属するか調べるには、dig と whois を組み合わせます。
dig A example.com +short
whois 93.184.215.14
WHOIS の出力には CIDR や route フィールドが含まれ、そのアドレスが属するネットワークブロックを確認できます。
外部の視点からドメインの A レコードを確認したい場合は、Labee Dev Toolbox の DNS API を使うと、外部の視点から見た結果を取得できます。
curl "https://labee.dev/api/dns?domain=example.com&type=A"
{
"success": true,
"data": {
"domain": "example.com",
"records": {
"A": [
{ "address": "93.184.215.14", "ttl": 300 }
]
}
},
"error": null,
"meta": { "responseTime": 45 }
}
data.records.A フィールドに返された IP アドレスに対して whois を実行すれば、そのアドレスが属する CIDR ブロックを特定できます。
よくある問題
CIDR の設計ミスはネットワーク接続の障害やアドレス不足に直結し、後から修正が困難なケースが多いです。
サブネットの重複
VPC ピアリングや VPN 接続で異なるネットワークを接続する際、CIDR ブロックが重複しているとルーティングが曖昧になり、通信が成立しません。よくあるパターンは、複数の環境で 10.0.0.0/16 をそのまま使い回してしまうケースです。RFC 1918 のプライベートアドレス空間は広いため、環境ごとに異なるレンジ(例: 10.1.0.0/16、10.2.0.0/16)を割り当てて設計します。
プレフィックス長の計算ミス
必要なホスト数に対して適切なプレフィックス長を選ばないと、IP アドレスの不足や無駄が発生します。/24 は 254 台、/25 は 126 台、/26 は 62 台です。将来の拡張を見越して余裕を持たせつつ、大きすぎるブロックを割り当てないバランスが求められます。クラウド環境では後から CIDR を拡張できないサービスもあるため、初期設計が特に重要です。
ルート集約ができない非連続アドレス
ルート集約は連続したアドレスブロックでのみ有効です。192.168.0.0/24 と 192.168.2.0/24 は間に 192.168.1.0/24 が欠けているため、1 つのプレフィックスにまとめられません。IP アドレスの割り当て計画では、将来の集約を考慮して連続したブロックを確保します。
CIDR 表記のホストビット不一致
192.168.1.100/24 のように、ホスト部に 0 以外の値が入った表記はホストアドレスとしては有効ですが、ネットワークアドレスとしては不正確です。ネットワークを指定する場合は 192.168.1.0/24 のようにホスト部を 0 にします。ファイアウォールや ACL の設定ツールによっては、ホストビットが立っている CIDR 表記を受け付けない場合があります。