IAM AWS User クラウドサービスをフル活用しよう！番外編2[VPC作成時にCIDRブロックを指定するのはなんで？]

みなさん，AWSサービスを触っていますか？VPCを作成する際にCIDRブロックを指定すると思いますけど..「CIDRブロック」という言葉に戸惑ったことはありませんか？本記事はCIDRブロックの指定をする理由について深ぼっていこうと思います！

## シリーズ IAM AWS User クラウドサービスをフル活用しよう！
**Part1** バックエンドとは何なのか？クラウドコンピューティングとバックエンド開発の関係性を知ろう！

https://qiita.com/JavaLangRuntimeException/items/371a334f5a6e07035db5

**Part2** クラウドとは？ & ネットワーク編その1(VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイント)

https://qiita.com/JavaLangRuntimeException/items/c9641c0908795467104a

**番外編1** PrivateSubnet上のRDSに踏み台EC2のSSHトンネル経由でローカルからアクセスする方法

https://qiita.com/JavaLangRuntimeException/items/3a716d9fb59a632af3bd

# 他のシリーズ記事
**AWS UserのGCP浮気日記**
GCPの様子をAWSと比較して考えてみるシリーズ

https://qiita.com/JavaLangRuntimeException/items/527d99e774165a763180

**チートシート**
様々な言語，フレームワーク，ライブラリなど開発技術の使用方法，基本事項，応用事例を網羅し，手引書として記載したシリーズ

https://qiita.com/JavaLangRuntimeException/items/f038fbaccdd92fb0308a

> この記事はSQLのチートシートで，インフラ触るエンジニアならぜひ知っておいた方がいい言語(?)です．
git/gh，lazygit，docker，vim，typescript，プルリクエスト/マークダウン，ステータスコード，ファイル操作，OpenAI AssistantsAPI，Ruby/Ruby on Rails のチートシートがあります．以下の記事に遷移した後，各種チートシートのリンクがあります.

**TypeScriptで学ぶプログラミングの世界**
プログラミング言語を根本的に理解するシリーズ

https://qiita.com/JavaLangRuntimeException/items/cadf49bb419076819963

**情報処理技術者試験合格への道[IP・SG・FE・AP]**
情報処理技術者試験に出題されるコンピュータサイエンス用語の紹介や単語集

https://qiita.com/JavaLangRuntimeException/items/991be402099542ccb936

**Project Gopher: Unlocking Go’s Secrets**
Go言語や標準ライブラリの深掘り調査レポート

https://qiita.com/JavaLangRuntimeException/items/dc45b412d3fbd2ccb9e8


## VPCってそもそも何？

まずVPC（Virtual Private Cloud）について簡単に説明しよう．VPCは，AWS上で自分だけの仮想的なネットワーク空間を作るサービスだ．まるで広大な都市の中に自分専用の街区を持つようなものだ．この街区の中で，自由に建物（サーバー）を配置したり，道路（ネットワーク）を引いたりできる．

![スクリーンショット 2024-12-22 21.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/27aa5364-f192-6333-9ebf-a1a768d9a5f2.png)

## CIDRとは？

CIDR（Classless Inter-Domain Routing）とは，IPアドレスの割り当てとルーティングを効率的に行うための方法で，従来のクラスA，B，Cといった固定的なネットワーククラスに依存しない柔軟なIPアドレスの指定方法だ．つまり，従来の決まりきったサイズの土地（ネットワーク）ではなく，自分の必要に応じて土地の大きさを自由に決められるようになったのだ．

## CIDRブロックとは？

CIDRブロックは，このCIDR方式を用いて表現されるIPアドレスの範囲を示す．CIDR表記では，IPアドレスとサブネットマスクの長さを組み合わせてネットワークの範囲を指定する．例えば，「192.168.1.0/24」のように書く．この「/24」という部分がサブネットマスクの長さを示しており，ネットワークのサイズを決める重要な要素だ．

:::note info
**サブネットマスクって何？**

サブネットマスクは，IPアドレスの中でネットワーク部分とホスト部分を区切るための情報だ．IPアドレスは32ビットの数字で構成されており，その中で上位何ビットがネットワークを識別し，残りのビットがホスト（個々の端末）を識別するかを決める．例えば，「/8」なら上位8ビットがネットワーク部分，残りの24ビットがホスト部分となる．
![スクリーンショット 2024-11-18 0.22.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/4d69e667-9f15-37b4-0ddc-e645fd647758.png)
:::

## AWSでのCIDRブロックの指定範囲

AWSでは，VPCのCIDRブロックは「/16」から「/28」まで指定可能だ．そのため，「/8」のCIDRブロックをVPCに割り当てることはできない．この範囲内で，自分のネットワークの規模に合わせてCIDRブロックを選ぶ必要がある．

## 具体的にはどう指定するの？

VPCを作成するときに，CIDRブロックとして「10.0.0.0/16」を指定するとしよう．これにより，そのVPC内で「10.0.0.0」から「10.0.255.255」までのIPアドレスが使用可能になる．つまり，約65,536個のIPアドレスを使えることになる．一方，「10.0.0.0/24」を指定すると，「10.0.0.0」から「10.0.0.255」までの256個のIPアドレスが使える．

![Wondershare Uniconverter 15_000002.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/7535496a-032d-ab92-5e96-c991c73c5374.gif)

## なぜCIDRブロックが重要なの？

では，なぜCIDRブロックが重要なのか，具体的なシチュエーションをもとに詳しく説明していこう．

### シチュエーション1：オンプレミス環境との接続

**背景**

ある会社では，自社のデータセンター（オンプレミス環境）とAWSのVPCを接続して，システムを統合しようとしている．オンプレミスのネットワークは「192.168.1.0/24」を使用している．これは一般的なプライベートIPアドレスで，多くの企業や家庭でも使われている．

**問題発生**

ここで，AWSのVPCにも同じ「192.168.1.0/24」のCIDRブロックを割り当ててしまったとする．この場合，オンプレミスとVPCの双方に「192.168.1.10」といった同じIPアドレスを持つサーバーやデバイスが存在することになる．

![Wondershare Uniconverter 15_000003.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/6d436f14-7ab4-6fb5-c137-f062de68d742.gif)

**何が問題か**

この状態で，VPNやAWS Direct Connectを使ってオンプレミス環境とVPCを接続すると，ネットワーク上では「192.168.1.10」というIPアドレスが複数存在することになる．あなたのパソコンから「192.168.1.10」にアクセスしようとしたとき，それがオンプレミス側のサーバーを指すのか，それともVPC内のサーバーを指すのか，ネットワーク機器（ルータやファイアウォール）は判断できない．

**具体的な影響**

- **通信の混乱**：データが間違ったサーバーに送られる可能性がある．
- **セキュリティリスク**：意図しないサーバーに接続してしまい，機密情報が漏洩する危険がある．
- **トラブルシューティングの難航**：問題の原因が特定しづらく，システムの安定性が損なわれる．

**解決策**

最初からVPCのCIDRブロックをオンプレミスのネットワークと重ならないように設計することが必要だ．例えば，VPCのCIDRを「10.0.0.0/16」などに設定する．

---

### シチュエーション2：VPCピアリングによる複数VPC間の接続

**背景**

あなたはAWS上で複数のVPCを持っており，それぞれ異なるプロジェクトや環境（開発環境，本番環境など）で使用している．例えば，VPC AとVPC Bがある．

**問題発生**

VPC AもVPC Bも「10.0.0.0/16」という同じCIDRブロックを使用している．あるとき，これらのVPC間でサービス連携が必要になり，VPCピアリングを設定しようとする．

![Wondershare Uniconverter 15_000004.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3aec3a0c-f6a6-b524-5b79-612bd265b13f.gif)

**何が問題か**

AWSのVPCピアリングは，接続するVPC間でCIDRブロックが重複している場合，設定を許可しない．これは，IPアドレスの重複による通信障害を防ぐためだ．

仮に無理やり接続できたとしても，「10.0.0.10」というIPアドレスが両方のVPCに存在する可能性があり，ネットワーク機器はどちらに通信を送れば良いのか混乱する．

**具体的な影響**

- **VPCピアリングの失敗**：接続自体ができないため，サービス連携が不可能になる．
- **開発遅延**：新たにVPCを作り直す，またはIPアドレスを変更する必要があり，時間とコストがかかる．

**解決策**

VPCを作成する際に，各VPCのCIDRブロックが重ならないように設計することが重要だ．例えば，VPC Aを「10.0.0.0/16」，VPC Bを「10.1.0.0/16」と設定する．

---

### シチュエーション3：サードパーティサービスとの接続

**背景**

あなたの会社は，外部のサービスプロバイダーやパートナー企業のシステムと連携する必要がある．相手のネットワークは「172.16.0.0/16」のCIDRブロックを使用している．

**問題発生**

偶然にも，自分のVPCも「172.16.0.0/16」のCIDRブロックを使用していた．この状態で相手のネットワークと接続すると，IPアドレスが重複することになる．

![Wondershare Uniconverter 15_000005.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2d4c70c0-a2db-7e1a-0fd2-4ebd3b93d9e4.gif)

**何が問題か**

あなたが相手のシステム内のサーバー（例えば，「172.16.0.10」）にアクセスしようとしても，自分のVPC内の同じIPアドレスのサーバーにアクセスしてしまう．逆もまた然りで，相手もあなたのサーバーにアクセスできない．

**具体的な影響**

- **通信の失敗**：必要なサービスにアクセスできず，業務に支障が出る．
- **ビジネス上の問題**：取引先やパートナーとの信頼関係に影響を与える可能性がある．

**解決策**

事前に相手のネットワークのCIDRブロックを確認し，自分のVPCのCIDRブロックが重ならないように設計する．例えば，自分のVPCを「10.2.0.0/16」など，相手と重複しない範囲に設定する．

---

## プライベートIPアドレスの重複がなぜ問題なのか？

「2つのネットワークは同じプライベートIPでも，グローバルIPは違うのではないか？なので問題はない気がする」と思うかもしれない．しかし，ネットワーク同士を直接接続する場合，プライベートIPアドレスの重複は大きな問題を引き起こす．

**理由**

- **直接通信ではプライベートIPを使用する**：VPNやDirect Connectなどでネットワークを直接接続する際，通信はプライベートIPアドレスを使う
- **ルーティングの混乱**：同じIPアドレスが複数存在すると，どちらのネットワークにパケットを送るべきかルータが判断できない

自宅と隣の家が全く同じ住所だったら，郵便物がどちらに届くか分からなくなるよね．郵便局（ルータ）は混乱し，正しく配達できない．ネットワークでも同じことが起こる．

## VPCのCIDRブロックは他のVPCのCIDRブロックと同じ値でVPCを作成できちゃうけどどうなの？

![スクリーンショット 2024-12-22 22.39.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2d5c3fa8-ab2f-13e3-7eab-8c490262d0fa.png)

AWSでは，他のVPCと同じCIDRブロックを持つVPCを作成することが可能だ．これは，VPC自体が論理的に隔離された独立したネットワークであり，デフォルトでは他のVPCと通信しないためだ．そのため，同一のCIDRブロックでも衝突することなくVPCを作成できる．

しかし，この設計が問題となるのは，**将来的にVPC間で接続を行いたい場合**や，**オンプレミス環境や他のネットワークと接続する可能性がある場合**だ．

### VPC間の接続を行う場合

AWSでは，VPCピアリングやAWS Transit Gatewayを使用してVPC間を接続できる．しかし，これらの接続を設定する際，**CIDRブロックが重複しているVPC同士は接続できない**という制約がある．これは，IPアドレスの重複が通信の混乱を引き起こすためだ．

つまり，同じCIDRブロックを持つVPC同士を後から接続しようとしても，それは不可能であり，ネットワークの再設計が必要になる．

### オンプレミス環境や他のネットワークとの接続

将来的に自社のオンプレミス環境や，パートナー企業のネットワークと接続する場合，これらのネットワークのCIDRブロックと重複していると，通信に問題が発生する．

例えば，オンプレミス環境が「10.0.0.0/16」を使用しており，AWSのVPCも同じ「10.0.0.0/16」を使用している場合，VPN接続を行うとIPアドレスが重複し，どちらのネットワーク宛ての通信なのか判別できなくなる．

### 問題がないケース

一方で，**他のネットワークと接続する予定がなく，完全に独立した環境としてVPCを使用する場合**は，CIDRブロックが重複していても実質的な問題は発生しない．それぞれのVPCは独立しており，ネットワーク的に隔離されているからだ．

しかし，AWS環境は動的に変化することが多く，後からネットワーク連携の必要性が出てくることも珍しくない．その際にCIDRブロックが重複していると，再設計や再構築が必要となり，時間とコストがかかる．

### ベストプラクティス

そのため，たとえ現時点で接続の予定がなくても，最初から他のVPCやオンプレミス環境とCIDRブロックが重ならないように設計することが推奨される．

- **将来的な拡張性の確保**：ビジネスやシステムの成長に伴い，ネットワーク連携が必要になる可能性がある．
- **運用の効率化**：CIDRブロックが整理されていると，管理やトラブルシューティングが容易になる．
- **セキュリティの向上**：ネットワーク設計が明確であると，セキュリティリスクの低減につながる．

## CIDRブロックの重複を避けるには？

このような問題を避けるためには，以下のポイントに注意しよう．

- **事前にIPアドレスの計画を立てる**：ネットワーク全体で使用するIPアドレス範囲を整理し，重複がないようにする．
- **接続先のネットワークを確認**：オンプレミス環境やパートナー企業のネットワークのCIDRブロックを事前に確認する．
- **適切なプライベートIP範囲を選択**：RFC1918で定義されたプライベートIPアドレス空間から，重ならない範囲を選ぶ．


CIDRブロックは，AWS VPC内で使用するIPアドレスの範囲を決める重要な要素だ．他のネットワークと重複しないよう適切に設計することで，通信の混乱を防ぎ，ネットワークを効率的に管理できる．

プライベートIPアドレスの重複は，郵便物がどちらの家に届くべきかを配達員が分からなくなるのと同じであり，ネットワークの通信を混乱させる原因となる．この問題を避けるために，CIDRブロックを正しく理解し，ネットワーク設計に活かそう．

具体的なシチュエーションをもとに，CIDRブロックの重要性や重複するときの問題点を理解できただろうか？適切なネットワーク設計は，システムの安定性と拡張性に直結するのでよく理解して設定しましょう.

それではQiitaアドカレ.24企画の今日のクリスマスツリーです．

> 詳しくは[こちら](https://qiita.com/JavaLangRuntimeException/items/1f4a6febf957f522ba45)の記事から

![Wondershare Uniconverter 15_000014.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/df0b1ee1-d395-8feb-7618-54760b940b72.gif)