IPアドレスの範囲からCIDRを計算する


動機

プライベートアドレス(RFC1918)の範囲ではないCIDRを知りたかった。
AWS のセキュリティグループで指定できるのがCIDRなので計算しなくてはならなかった。

要件

IPv4 のアドレス範囲(0.0.0.0 - 255.255.255.255)のうち、
プライベートアドレス(クラスA:10.0.0.0/8、クラスB:172.16.0.0/12、クラスC:192.168.0.0/16)を除いたもの。
つまり、
- 0.0.0.0 - 9.255.255.255
- 11.0.0.0 - 172.15.255.255
- 172.32.0.0 - 192.167.255.255
- 192.169.0.0 - 255.255.255.255(クラスE[240.0.0.0 - 255.255.255.255]も含めてます)

やり方

ipcalc コマンドを利用する。

ipcalc -r ${FROM_IP} ${TO_IP}
# または
ipcalc ${FROM_IP} - ${TO_IP}

結果

$ ipcalc -r 0.0.0.0 9.255.255.255
deaggregate 0.0.0.0 - 9.255.255.255
0.0.0.0/5
8.0.0.0/7

$ ipcalc -r 11.0.0.0 172.15.255.255
deaggregate 11.0.0.0 - 172.15.255.255
11.0.0.0/8
12.0.0.0/6
16.0.0.0/4
32.0.0.0/3
64.0.0.0/2
128.0.0.0/3
160.0.0.0/5
168.0.0.0/6
172.0.0.0/12

$ ipcalc -r 172.32.0.0 192.167.255.255
deaggregate 172.32.0.0 - 192.167.255.255
172.32.0.0/11
172.64.0.0/10
172.128.0.0/9
173.0.0.0/8
174.0.0.0/7
176.0.0.0/4
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13

$ ipcalc -r 192.169.0.0 255.255.255.255
deaggregate 192.169.0.0 - 255.255.255.255
192.169.0.0/16
192.170.0.0/15
192.172.0.0/14
192.176.0.0/12
192.192.0.0/10
193.0.0.0/8
194.0.0.0/7
196.0.0.0/6
200.0.0.0/5
208.0.0.0/4
224.0.0.0/3

CIDR -> Ip range したい場合

ipcalc ${CIDR}

で出来ます。

$ ipcalc 192.168.0.0/24
Address:   192.168.0.0          11000000.10101000.00000000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

感想

ipcalc コマンドは今回のようにIP range -> CIDR だけではなく、CIDR -> IP range もできるので便利に使えそうです。

調べた後にこれと同じことができるページ1があることを知りました...