59189


> プライベートIPアドレスの範囲はRFC
> 1918で規定されており、通常はその範囲内で設定をする。範囲はクラスAからCに分けられており、クラスAは10.0.0.0～10.255.255.255
> （10.0.0.0/8）、クラスBは172.16.0.0～172.31.255.255
> （172.16.0.0/12）、クラスCは192.168.0.0～192.168.255.255 （192.168.0.0/16）となる。

いくつか疑問があります。

  1. `172.16.0.0/12`を`172.16.0.0/8`とすると不都合があるとすれば、プライベートネットワーク内で例えば`172.0.0.1`にアクセスした時に、プライベートIPとして解決されるために、グローバルなIPに接続できなくなってしまうという認識であっていますか？

  2. `172.16.0.0/8`を`172.16.0.0/16`あるいは`192.168.0.0/16`を`192.168.0.0/8`とすることに何か問題があるんでしょうか？どちらも範囲は同じでは・・？

  3. クラウドベンダーで設定する時に、`10.0.0.0/8`がもっとも使える範囲が多い中、わざわざクラスBやクラスCを選択する理由（メリット）はあるんでしょうか？


CC BY-SA 4.0
2019-09-20T08:38:18.957
59180
2021-04-22T15:05:25.360
30817
question
network
プライベートIPアドレスの範囲指定について疑問があります


1.はその通りです。172.から始まるIPは日本国内には割り当ていなかったと思いますが、米国などでは普通に割り当てられています。組織内からある海外のサイトにだけアクセスできないから調べてくれという話で調べたら、172.0.0.0/8の範囲をプライベートアドレスとして使っていたという事例を聞いたことがあります。

2.はちょっと質問の意味がわかりません。RFC1918範囲外をプライベートアドレス扱いにする問題は1.に書いたとおりです。

3.についてはちょっと歴史的な経緯を理解する必要があります。詳しく書きます。

TCP/IPは現在におけるインターネット、つまり、これまで組織毎に独立して作れていたネットワーク間を結ぶために作られたプロトコルです。IPアドレス全体は0.0.0.0～255.255.255.255が使えますが、これを各組織に振り分ける必要がありました。そこで考えたのがクラスという考えです。クラスという単位でIPアドレスを分割し、組織の大きさによってクラスA(ネットワークアドレス長8)、クラスB(同16)、クラスC(同24)という単位で振り分けていきました。また、どのIPアドレスがどのクラスかわかるように第一オクテットでわかるようにしました。0-127がクラスA、128-191がクラスB、192-223がクラスC、224-239がクラスD(マルチキャスト用)、240-255がクラスE(将来の予約領域)という風にです。

インターネットがネットワークのデファクトスタンダートになっていき、対応した機器やソフトウェアも増えていくと、インターネットに接続しないが、インターネットと同じ仕組み、つまりはTCP/IPを使用してプライベートなネットワークを構築したいという要望が出てきました。そこで、各クラスにインターネットでは割り当てない、プライベートなアドレスを用意することにしました。クラスAは1個、クラスBは16個、クラスCは256個用意し、ネットワークの大きさによって使い分けるようにしたのです。

ここで重要なことは、クラスA、クラスB、クラスCはそれぞれネットワークアドレス長が固定であったと言うことです。第一オクテットでどのクラスか判別できるため、ネットワークアドレス長の設定(言わばネットマスクのような設定)が不要であったとも言えます。だから、クラス毎にプライベートアドレスを用意する必要があったと言えます。

やがてインターネットの需要が高まるとクラス毎にネットワークアドレス長を固定化することは柔軟な運用を妨げることがわかってきました。クラス毎固定をやめ、可変長で割り当てられるように可変長サブネットマスクやCIDRというものが提案され、使われていくことになります。

さて、上の話を踏まえて答えましょう。10.0.0.0/8だけを使えばいいと言いますが、組織内でもネットワークを複数に分けたい場合があります。しかし、クラスに従っていた(CIDRが無かった)ときは10.0.0.0/8を分割することはできません。10.1.1.0/24と10.2.2.0/24を使おうというのができなかったのです(現在は、CIDRに対応していない機器やソフトはぼぼ存在しないのでできますが)。つまりは、クラスCで十分な小さいネットワークが二つなら、192.168.1.0/24と192.168.2.0/24を使うとせざるを得ませんでした。

では、現代においてどうなのかというと、クラスにこだわる必要は全くありません。ただ、歴史的に192.168.1.0/24あたりから始めている場合は、ネットワークを増やすにしても192.168.2.0/24・・・と増やしていく傾向にあると思います。これは内部にあるシステムが組織内か組織外かの区別するのに192.168.0.0/16であるかどうかでしか設定していない場合があったりするからです(実際に172.16.0.0/12を使い始めたら、見えないサーバーが出てきたというトラブルに遭ったことが私はあります)。既存が存在しない、全くの新規であれば、10.0.0.0/8を分割していく形でも良いでしょう。ただ、最近はdocker等サーバー内部でプライベートアドレスを使っている場合も増えてきていますので、それらと被らないように慎重に選択する必要はあります。


CC BY-SA 4.0
2019-09-20T23:35:48.887
59189
2019-09-20T23:35:48.887
7347
59180
answer


> 最近はdocker等サーバー内部でプライベートアドレスを使っている場合も増えてきていますので、それらと被らないように慎重に選択する必要はあります。

色々理解が膨らんだところでこれに自分なりの回答をしてみたいです。間違いや改善があったら指摘していただきたいです。  
（「回答」として投稿するのは不適切かもしれませんが、文章が長すぎてコメントで投稿できませんでした...）

DockerやKubernetesなどプライベートIPをどんどん食っていきそうなので、これらを運用するサブネットは大きく範囲を切っておいたほうがいいと思う。以下思考回路

VPC:192.168.0.0/16において、  
Subnet:192.168.1.0/24にKubernetesなどを、  
Subnet:192.168.2.0/24にはDBなどを置こう。  
でもこれだとそれぞれのサブネットで256こまでしかプライベートIP使えないから枯渇しそう。  
DBのあるサブネットはそれでもいいけど、Kubernetesを置くサブネットは広く取りたい。

↓

  * 11000000.10101000.00000000.00000000 = 192.168.0.0/16 → VPC
  * 11000000.10101000.00000100.00000000 = 192.168.0.4/22 → Subnet (Kubernetes)
  * 11000000.10101000.00001000.00000000 = 192.168.0.8/22 → Subnet (DB)

/22だと22-16=6, 2^6で64サブネットまで作れる。  
2^10でそれぞれのサブネットでは1024個のIPアドレスが使える。  
1024でも心配だからKubernetesサブネットだけはもっと多めに取っておきたい（10000くらい）  
逆にDBのサブネットはこんなにIP要らない。

↓

CIDRを同じにしないでそれぞれ変える

  * 11000000.10101000.00000000.00000000 = 192.168.0.0/16 → VPC
  * 11000000.10101000.01000000.00000000 = 192.168.64.0/18 → Subnet (Kubernetes)
  * 11000000.10101000.00000001.00000000 = 192.168.1.0/24 → Subnet (DB)

/18だと18-16=2, 2^4で4サブネットしか作れない。  
2^14でそれぞれのサブネットでは16384個のIPアドレスが使える。  
Kubernetesサブネットはこれで問題ないが一方のDBサブネットは、  
IP Range255個となったのでこれでいい気がする。  
それぞれのサブネットがかぶっていないようにしないといけない。  
今後のサブネット追加は、256個で事足りるものは192.168.2.0/24, 192.168.3.0/24
...と切っていき、大きいものは192.168.128.0/18,
192.168.192.0/18と切る（残り2個までしかきれないからこれは設計がよくないのか）。


CC BY-SA 4.0
2019-09-22T05:28:36.957
59199
2019-09-22T05:39:23.097
2019-09-22T05:39:23.097
30817
30817
59180
answer


>
> 172.16.0.0/12を172.16.0.0/8とすると不都合があるとすれば、プライベートネットワーク内で例えば172.0.0.1にアクセスした時に、プライベートIPとして解決されるために、グローバルなIPに接続できなくなってしまうという認識であっていますか？

まず、不都合があります。  
ネットワークプレフィックス長が異なれば、ネットワーク部、ホスト部とも異なるからです。  
また、RFCで定義されているプライベートの範囲は172.16.であって、172.0.はGIPです。

>
> 172.16.0.0/8を172.16.0.0/16あるいは192.168.0.0/16を192.168.0.0/8とすることに何か問題があるんでしょうか？どちらも範囲は同じでは・・？

上記と同様。

>
> クラウドベンダーで設定する時に、10.0.0.0/8がもっとも使える範囲が多い中、わざわざクラスBやクラスCを選択する理由（メリット）はあるんでしょうか？

ホスト部の範囲が異なるからです。ホスト部の割当範囲に応じてクラスの使い分けをします。

基礎をもう少し学習しましょう。


CC BY-SA 4.0
2021-04-22T15:05:25.360
75453
2021-04-22T15:05:25.360
44960
59180
answer