プライベートアドレスをもう一度ちゃんと理解してみる


tl; dr

  • ipアドレスが何かなんとなく知っている人対象
  • 実践で参考になる用
  • 文字ばかりになってしまったので若干読みにくいかも。。

アドレスの範囲

プライベートアドレスは、以下の範囲で使うことができます

10.0.0.0 ~ 10.255.255.255 (約1677万アドレス)
172.16.0.0 ~ 172.31.255.255 (約104万アドレス)
192.168.0.0 ~ 192.168.255.255 (約6万アドレス)

CIDR表記

たまーに、192.168.10.4/24 みたいな表現をみることがあります
このipに/24の部分を足した形式が、CIDR表記になります

範囲はサブネットマスクによって分けられます
例えば、

255.255.255.0(10進数)
=
(2進数)11111111.11111111.11111111.00000000
ですが、

例えば、こんな定義があったとします。
inet 192.168.10.4 netmask 0xffffff00
というのが自分のアドレスだっとします。

ちなみに
0xffffff00(16進数) = 255.255.255.0 = 11111111 11111111 11111111 00000000 = 256(10進数)
になります。

この場合範囲表記として以下
192.168.10.0/24
ネットワークアドレスとして以下になります
192.168.10.0

/24はサブネットマスクの左からの1の数をを表してます。
ちなみにこの1の部分は「ネットワーク部」と呼びます。

このサブネットをみて、254個(※256-2をする)がipaddressとして使える範囲で使っているとわかることができます。

ネットワーク範囲
192.168.10.0 - 192.168.10.255

※256-2
先頭のアドレスは「ネットワークアドレス」
最終のアドレスは「ブロードキャストアドレス」
になるため利用できないため

応用した使い方

例えば、nginxのip制限とかでこの表記を使うことができます。

下記みたいな表記があったとします。
location /check {
allow 10.6.0.0/16;
}

/16 = 255.255.0.0 = 65,536 = 0xffff0000 = 11111111 11111111 00000000 00000000
なので、
10.6.0.0 - 10.6.255.255
の範囲で許容することがわかります。

では、10.x.x.x全て許可したいという場合はなんと書けばいいでしょうか?

考え方としては、ネットワーク部の左8個は変えないので、それ以外が0
11111111 00000000 00000000 00000000
となる。 これが /8として表現できる
なので正解は
10.0.0.0/8
になります。

以上です

参考)
https://www.bungu-do.jp/tools/netmask
https://wa3.i-3-i.info/word11990.html