IPサブネット計算はすべての開発者とインフラエンジニアが理解しなければならない基礎知識です。AWSのVPC設定、社内ネットワークの分割、2台のホスト間の疎通問題のデバッグなど、あらゆる場面でサブネット計算が必要です。このガイドでは、CIDR表記、サブネットマスク、ネットワークパラメーターの計算方法を解説し、オンラインツールで簡単に計算する方法を紹介します。
サブネット分割とは
サブネット(サブネットワーク)はIPネットワークを論理的に分割したものです。大きなIPアドレスブロックを小さなセグメントに分割することで、以下のメリットがあります:
- 分離 — サブネット内のトラフィックはローカルに留まり、サブネット間のトラフィックはゲートウェイを経由
- セキュリティ — ファイアウォールとACLでサブネット境界にルールを適用
- 効率性 — 小さなブロードキャストドメインで不要なトラフィックを削減
- アドレス管理 — 各セグメントに必要なだけのアドレスを割り当て
CIDR表記の解説
CIDR(クラスレス・ドメイン間ルーティング)はIPアドレスとルーティングプレフィックスを一緒に表現します:
192.168.1.0/24
│ │
└─ ネットワーク └─ プレフィックス長(ビット数)
アドレス
/24は最初の24ビットがネットワーク部分であることを意味します。残りの8ビットがホスト部分です。これがサブネット内に存在できるホストの数を決定します。
プレフィックス長とホスト数の対応
| CIDR | サブネットマスク | 使用可能ホスト数 | 一般的な用途 |
|---|---|---|---|
/8 | 255.0.0.0 | 16,777,214 | 大規模ISPブロック |
/16 | 255.255.0.0 | 65,534 | 企業ネットワーク |
/24 | 255.255.255.0 | 254 | 典型的なオフィスLAN |
/25 | 255.255.255.128 | 126 | /24を半分に分割 |
/26 | 255.255.255.192 | 62 | 小規模セグメント |
/27 | 255.255.255.224 | 30 | VLANセグメント |
/28 | 255.255.255.240 | 14 | 小チーム |
/29 | 255.255.255.248 | 6 | ポイントツーポイントリンク |
/30 | 255.255.255.252 | 2 | ルーター間接続 |
/31 | 255.255.255.254 | 0(特殊) | ポイントツーポイント(RFC 3021) |
/32 | 255.255.255.255 | 1 | ホストルート |
使用可能ホスト数 = 2^(32 - プレフィックス長) - 2(ネットワークアドレスとブロードキャストアドレスを引く)
主要なサブネットパラメーター
192.168.10.64/26を例にとると:
| パラメーター | 値 | 計算方法 |
|---|---|---|
| ネットワークアドレス | 192.168.10.64 | IPとサブネットマスクのAND演算 |
| サブネットマスク | 255.255.255.192 | 26個の1、6個の0(2進数) |
| ブロードキャストアドレス | 192.168.10.127 | ホストビットをすべて1に設定 |
| 最初の使用可能ホスト | 192.168.10.65 | ネットワークアドレス + 1 |
| 最後の使用可能ホスト | 192.168.10.126 | ブロードキャストアドレス - 1 |
| 使用可能ホスト数 | 62 | 2^6 - 2 |
| ワイルドカードマスク | 0.0.0.63 | サブネットマスクの反転 |
2進数の分析
IP: 11000000.10101000.00001010.01000000 (192.168.10.64)
マスク: 11111111.11111111.11111111.11000000 (255.255.255.192)
ネットワーク: 11000000.10101000.00001010.01000000 (192.168.10.64)
ブロードキャスト: 11000000.10101000.00001010.01111111 (192.168.10.127)
最初の26ビットは固定(ネットワーク部分)、最後の6ビットが可変(ホストスペース)です。
実践的なサブネット設計
AWS VPCの設計
AWSでは各VPCとサブネットにCIDRブロックを指定する必要があります。典型的な3層構成:
VPC: 10.0.0.0/16 (65,536アドレス)
├─ パブリック: 10.0.1.0/24 (254使用可能 — インターネット向け)
├─ プライベート: 10.0.2.0/24 (254使用可能 — アプリ層)
└─ データベース: 10.0.3.0/24 (254使用可能 — RDS、隔離)
AWSは各サブネットに5つのアドレスを予約します(最初の4つ+ブロードキャスト)。/24あたり実際に使用できるのは251個です。
Kubernetes Pod CIDR
K8sクラスターはノード、Pod、Serviceに重複しないCIDRが必要です:
# kubeadm設定スニペット
networking:
podSubnet: 10.244.0.0/16 # Pod IP
serviceSubnet: 10.96.0.0/12 # ClusterIPサービス
これらがノードネットワークやVPC CIDRと重複しないことを確認してください。
Dockerカスタムネットワーク
# カスタムブリッジネットワークの作成
docker network create \
--driver bridge \
--subnet 172.20.0.0/24 \
--gateway 172.20.0.1 \
my-network
docker network lsとip routeを使って既存ネットワークとの重複を確認してください。
コードでのサブネット計算
Python(ipaddressモジュール)
Pythonの標準ライブラリはすべてのサブネット計算を処理します:
import ipaddress
net = ipaddress.IPv4Network('192.168.10.64/26', strict=False)
print(net.network_address) # 192.168.10.64
print(net.broadcast_address) # 192.168.10.127
print(net.netmask) # 255.255.255.192
print(net.num_addresses) # 64
print(list(net.hosts())[:3]) # [192.168.10.65, .66, .67]
# IPがサブネット内にあるか確認
ip = ipaddress.IPv4Address('192.168.10.80')
print(ip in net) # True
# /28サブネットに分割
for subnet in net.subnets(new_prefix=28):
print(subnet)
# 192.168.10.64/28
# 192.168.10.80/28
# 192.168.10.96/28
# 192.168.10.112/28
Goのnetパッケージ
import "net"
_, ipNet, err := net.ParseCIDR("192.168.10.64/26")
if err != nil {
panic(err)
}
fmt.Println(ipNet.IP) // 192.168.10.64(ネットワークアドレス)
fmt.Println(ipNet.Mask) // ffffffc0(16進マスク)
// 包含チェック
testIP := net.ParseIP("192.168.10.80")
fmt.Println(ipNet.Contains(testIP)) // true
プライベートIPアドレス範囲
以下の範囲は内部使用のために予約されています(RFC 1918):
| 範囲 | CIDR | サイズ |
|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 約1,677万アドレス |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 約104万アドレス |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 65,536アドレス |
内部インフラには常にプライベート範囲を使用してください。パブリックIPはインターネット上でルーティングされますが、プライベートIPはルーティングされません。
よくあるサブネット計算ミス
予約アドレスの忘れ: すべてのサブネットはネットワークアドレスとブロードキャストアドレスの2つを失います。/29は合計8アドレスですが、使用できるのは6個のみです。
サブネットの重複: 10.0.1.0/24と10.0.0.0/16は重複しています。/24のすべてのアドレスは/16にも含まれ、ルーティングが曖昧になります。
ホスト範囲のオフバイワン: 最初の使用可能ホストはネットワーク+1、最後はブロードキャスト-1です。/24のホストは.1から.254であり、.0から.255ではありません。
CIDRの境界整合: サブネットはプレフィックス長に対して整合した境界から始まる必要があります。10.0.0.1/24は有効なCIDRではありません(ホストビットが設定されている)。正しい形式は10.0.0.0/24です。
オンラインサブネット計算機の使い方
任意のIPv4アドレスとCIDR表記を入力して即座に取得:
- ネットワークアドレスとブロードキャストアドレス
- サブネットマスクとワイルドカードマスク
- 最初と最後の使用可能ホスト
- 総ホスト数と使用可能ホスト数
- 全フィールドの2進数表現
登録不要、広告なし、ブラウザで動作。VPC設計の素早い確認、ネットワークデバッグ、アーキテクチャレビュー中のサブネット割り当てに役立ちます。