時々、CIDR形式で書かれたIPアドレスの計算で、サブネットマスクやネットワークアドレスがぱっと出てこないことがある。
いちいちコンソールから別のウィンドウに移動して…とやるのも面倒。そんなときは、コンソール上でIPアドレスの計算をさせてしまうとよいだろう。

Linuxでは、コンソール上でIPアドレス計算を行えるコマンドがいくつか用意されている。

1.ipcalc

コンソール上でIPアドレスの計算を行う際に、一番よく使われているだろうコマンドがこのipcalc。
CIDRやネットマスク、ネットワークアドレスの計算などを行ってくれるので、チェックスクリプトに組み込んだりと使い道はいろいろだ。

手元のマシンで確認した限り、CentOS 7についてはバンドルされている。
Ubuntuの場合だと、以下のコマンドでインストールを行う。

sudo apt-get install ipcalc

バージョン等によってそれぞれ動きが違い、少なくとも手元で確認した限りはCentOS 7とUbuntu 14.04 LTSでは挙動が違うことが確認できている。
ここでは、CentOSにバンドルされている方での使い方を一部紹介する。

[root@BS-PUB-CENT7-01 ~]# ipcalc --help
Usage: ipcalc [OPTION...]
  -c, --check         Validate IP address for specified address family
  -4, --ipv4          IPv4 address family (default)
  -6, --ipv6          IPv6 address family
  -b, --broadcast     Display calculated broadcast address
  -h, --hostname      Show hostname determined via DNS
  -m, --netmask       Display default netmask for IP (class A, B, or C)
  -n, --network       Display network address
  -p, --prefix        Display network prefix
  -s, --silent        Don't ever display error messages

Help options:
  -?, --help          Show this help message
  --usage             Display brief usage message
[root@BS-PUB-CENT7-01 ~]# # ブロードキャストアドレスの確認
[root@BS-PUB-CENT7-01 ~]# ipcalc -b 192.168.0.100/24
BROADCAST=192.168.0.255
[root@BS-PUB-CENT7-01 ~]# # ネットマスクの確認
[root@BS-PUB-CENT7-01 ~]# ipcalc -m 192.168.0.100/24
NETMASK=255.255.255.0
[root@BS-PUB-CENT7-01 ~]# # ネットワークアドレスの確認
[root@BS-PUB-CENT7-01 ~]# ipcalc -n 192.168.0.100/24
NETWORK=192.168.0.0
[root@BS-PUB-CENT7-01 ~]# # CIDRの確認
[root@BS-PUB-CENT7-01 ~]# ipcalc -p 192.168.0.100 255.255.255.0
PREFIX=24

2.iptab

iptabは、各ネットマスクのIPアドレス数、マスク表記の一覧を出力してくれるコマンドだ。
perlで作られており、以下のコマンドでインストールできる。

yum install perl-Net-IP.noarch

[root@BS-PUB-CENT7-01 ~]# iptab
+----------------------------------------------+
| addrs   bits   pref   class  mask            |
+----------------------------------------------+
|     1      0    /32          255.255.255.255 |
|     2      1    /31          255.255.255.254 |
|     4      2    /30          255.255.255.252 |
|     8      3    /29          255.255.255.248 |
|    16      4    /28          255.255.255.240 |
|    32      5    /27          255.255.255.224 |
|    64      6    /26          255.255.255.192 |
|   128      7    /25          255.255.255.128 |
|   256      8    /24      1C  255.255.255.0   |
|   512      9    /23      2C  255.255.254.0   |
|    1K     10    /22      4C  255.255.252.0   |
|    2K     11    /21      8C  255.255.248.0   |
|    4K     12    /20     16C  255.255.240.0   |
|    8K     13    /19     32C  255.255.224.0   |
|   16K     14    /18     64C  255.255.192.0   |
|   32K     15    /17    128C  255.255.128.0   |
|   64K     16    /16      1B  255.255.0.0     |
|  128K     17    /15      2B  255.254.0.0     |
|  256K     18    /14      4B  255.252.0.0     |
|  512K     19    /13      8B  255.248.0.0     |
|    1M     20    /12     16B  255.240.0.0     |
|    2M     21    /11     32B  255.224.0.0     |
|    4M     22    /10     64B  255.192.0.0     |
|    8M     23     /9    128B  255.128.0.0     |
|   16M     24     /8      1A  255.0.0.0       |
|   32M     25     /7      2A  254.0.0.0       |
|   64M     26     /6      4A  252.0.0.0       |
|  128M     27     /5      8A  248.0.0.0       |
|  256M     28     /4     16A  240.0.0.0       |
|  512M     29     /3     32A  224.0.0.0       |
| 1024M     30     /2     64A  192.0.0.0       |
| 2048M     31     /1    128A  128.0.0.0       |
| 4096M     32     /0    256A  0.0.0.0         |
+----------------------------------------------+

3.ipcount

先ほどのiptabと一緒にインストールされるipcountコマンドは、ネットワークアドレスとCIDRを指定してやることで作成できるIPアドレスの範囲を出力してくれるコマンドだ。

[root@BS-PUB-CENT7-01 ~]# ipcount 192.168.0.4/30
    192.168.0.4/30        192.168.0.4 - 192.168.0.7     [4]

とりあえず3つ記述しているが、基本的にはipcalcコマンドがあれば大体のことは事足りると思う。