0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ネットワーク基礎~インフラ知識0からAWSデプロイ学習記録~

0
Last updated at Posted at 2026-06-03

はじめに

この記事はAWSに自作アプリをデプロイするための学習記録です。

筆者の自己紹介

  • 異業種、実務未経験からフルスタックエンジニアを目指して転職活動中
  • 2024年10月から学習を開始、オンラインスクール卒業を経て、現在も学習を継続中

ポートフォリオアプリ:https://github.com/geek-3340/Fameal_app/tree/main

前回までの記事:

今回の内容

前回まではLinuxコマンドの基礎・応用についてまとめてきました。
今回はAWSのVPC(仮想ネットワーク)設計をする上で必須の基礎知識となるネットワーク基礎(IPアドレス・サブネット・CIDR・NATなど)について

特にCIDR記法は、AWSでVPCを作る時に10.0.0.0/16みたいな表記が大量に出てくるんですが、ここを理解せずに進めると「呪文を写経している」状態になりかねないので、理解できるように丁寧に解説していきます。

学習記録

IPアドレスについて

IPアドレスとは、ネットワーク上における機器の住所

インターネット上の全てのPC・スマホ・サーバー・ルーターなどは固有のIPアドレスを持っており、これがないと「どこに通信を送ればいいか」が決まらない

現在主流のIPv4192.168.1.1のように4つの数字をドットで区切った形式で表現される

192 . 168 . 1 . 1
 ↑     ↑   ↑   ↑
8bit  8bit 8bit 8bit  = 合計32bit

各数字は0〜255の範囲(8ビット = 2の8乗 = 256通り)で表現され、合計約43億通りのアドレスが作れる

43億通りでは世界中の機器をカバーできないため、NAT(後述)やIPv6が登場した、という背景がある

自分のIPを確認

wsl
ip addr

出力例

1: lo: <LOOPBACK,UP,LOWER_UP> ...
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
    inet 172.x.x.x/20 scope global eth0

注目すべきは以下の2つ

  • lo (loopback): 自分自身を指す特殊なIPアドレスで、IPは常に127.0.0.1。よくあるhttp://localhost:8000などにアクセスする時のlocalhostがこれ
  • eth0: メインのネットワークインターフェース。私(Windows→WSL)の場合ここに表示されているIPがWSL2のIP

プライベートIPとパブリックIP

IPアドレスは大きく分けて2種類ある

パブリックIP

インターネット上で世界に1つだけの一意なIP
ICANNという組織が管理しており、ISP(インターネットプロバイダ)経由で割り当てられる

自分の自宅のグローバルIPは以下のコマンドで確認可能

wsl
curl ifconfig.me

プライベートIP

特定のネットワーク内だけで使えるIP
家のWi-Fiに繋がってる機器は全部プライベートIPを持っている

プライベートIPに使える範囲は3つだけ予約されている

範囲 CIDR表記(後述) 主な用途
10.0.0.010.255.255.255 10.0.0.0/8 大規模ネットワーク、AWS VPCでよく使う
172.16.0.0172.31.255.255 172.16.0.0/12 Docker、WSL2のデフォルト
192.168.0.0192.168.255.255 192.168.0.0/16 家庭用ルーター等

例として、

  • 先ほどのip addrで見えたWSL2のIP(172.x.x.x)は、仮想ネットワークの中のプライベートIP
  • 家のWi-FiからPCへの参照するアドレスは192.168.x.xになっているはず

なぜ分けるのか

パブリックIPの枯渇問題が一番の理由
43億個では世界中の機器を賄えないので、以下のような運用になっている

  1. 家庭・社内ではプライベートIPを使う(自由に何個でも振れる
  2. インターネットに出る時だけ、ルーターがパブリックIPに変換する(NATを用いる、後述)

これで「1つのパブリックIPで、家中の機器が同時にインターネットに出られる」状態が実現する

CIDR記法を理解する

ここがAWSのVPC設計で呪文に見えるか、意味が見えるかの分かれ目

CIDR (Classless Inter-Domain Routing) とは、IPアドレスの範囲を表す記法
192.168.1.0/24のように、IPアドレス + スラッシュ + 数字で書く

スラッシュの後の数字はプレフィックス長と呼ばれ、「先頭から何ビットがネットワーク部か」を示している

プレフィックス長の意味

IPv4は32ビットなので、プレフィックス長は0〜32の範囲を取る

192.168.1.0/24
              ↑
              「先頭24ビットがネットワーク部、残り8ビットがホスト部」
  • ネットワーク部: 「どのネットワークに属するか」を示す共通部分
  • ホスト部: 「そのネットワーク内のどの機器か」を示す個別部分

例えば192.168.1.0/24の場合

192   .   168   .   1   .   0
└────ネットワーク部────┘ └ホスト部┘
   (先頭24ビット固定)    (8ビット自由)

ネットワーク部は固定となるため
このネットワークでは192.168.1.0192.168.1.255256個のIPが使える

プレフィックス長 → IP個数の対応表

プレフィックス ホストビット数 IP個数
/16 16 65,536個 10.0.0.0/16 = 10.0.0.010.0.255.255
/24 8 256個 192.168.1.0/24 = 192.168.1.0192.168.1.255
/32 0 1個 単一IPを指す

計算式: IP個数 = 2のホストビット数乗

/24なら2の8乗 = 256、/16なら2の16乗 = 65,536、というように計算できる

AWSのVPC設計を解読してみる

AWSのVPC構築では以下のような構成がよく出てくる

VPC: 10.0.0.0/16
├── パブリックサブネット 1: 10.0.1.0/24
├── パブリックサブネット 2: 10.0.2.0/24
├── プライベートサブネット 1: 10.0.11.0/24
└── プライベートサブネット 2: 10.0.12.0/24

CIDRの知識をベースに翻訳すると以下のようになる

  • VPC 10.0.0.0/16: 10.0.0.010.0.255.25565,536個のIP空間を確保
  • サブネット 10.0.1.0/24: VPCのCIDR範囲内から10.0.1.010.0.1.255の256個の領域を割り当て
  • 同様に10.0.2.0/24は次の256個、10.0.11.0/24はちょっと離れた範囲の256個

つまり、「大きい入れ物(VPC)の中を、用途別に小さく区切る(サブネット)」 という設計

/16/24の関係を絵にするとこんな感じ

    VPC /16 (65536個のIP)
    
    ┌─────────────────────────────────────────────┐
    │ 10.0.0.0 ─────────────────── 10.0.255.255   │
    │                                             │
    │  ┌──/24──┐  ┌──/24──┐    ┌──/24──┐ ...      │
    │  │10.0.1 │  │10.0.2 │    │10.0.11│          │
    │  │ .0 ~  │  │ .0 ~  │    │ .0 ~  │          │
    │  │ .255  │  │ .255  │    │ .255  │          │
    │  └───────┘  └───────┘    └───────┘          │
    └─────────────────────────────────────────────┘

なぜ「11、12」と離れた番号を使うかというと、「将来 .3 .4 .5 ... を別の用途で追加できるよう余裕を残している」 という設計思想によるもの

ルーティング

ルーティングとは、パケットがどの経路を通って宛先に届くかを決める仕組み

https://google.comにアクセスする時の通信は、以下のような旅をしている

あなたのPC
   ↓
家のルーター (192.168.x.x ネットワークの出口)
   ↓
ISPのルーター
   ↓
インターネット上の複数のルーター (世界中をホップ)
   ↓
GoogleのデータセンターのIP

各ルーターは「この宛先IPなら、次はあのルーターに渡せばいい」というルートテーブル(経路表) を持っていて、それを見てパケットを次へ次へとバトンタッチしている

自分の経路を見てみる

wsl
ip route

出力例

default via 172.x.x.1 dev eth0
172.x.x.0/20 dev eth0 proto kernel scope link src 172.x.x.x

読み方

  • default via 172.x.x.1: 「どこに送るか決まらないパケットは、172.x.x.1(= デフォルトゲートウェイ)に送る」
  • 172.x.x.0/20 dev eth0: 「同じネットワーク(自分と同じ172.x.x.0/20の範囲)宛なら、eth0から直接送る」

デフォルトゲートウェイ = 「自分のネットワーク外への出口となるルーター」のこと
家庭で言えばWi-Fiルーターがコレに該当する

tracerouteで経路を可視化

wsl
sudo apt install -y traceroute
traceroute google.com

各行が「経由したルーター」を表しており、自分からGoogleまで何ホップかかってるかが見える
だいたい10〜20ホップくらいになるはず

各行の*は「応答返してくれないルーター」(セキュリティ上、応答しない設定が多い)

tracerouteを使うと「インターネットは無数のルーターの中継で成り立っている」というイメージが視覚化されて理解が深まる

NAT (Network Address Translation)

家には10台の機器があるのに、パブリックIPは1個しかない。どうやって全機器がインターネットに出るのか?」これを解決するのがNATである

NATの動き

[PC1: 192.168.1.10] ─┐
[PC2: 192.168.1.11] ─┼─→ [ルーター: 内側 192.168.1.1, 外側 203.0.113.5] ─→ インターネット
[Phone: 192.168.1.12]┘

PC1がGoogleにリクエストを送る時の流れ

  1. PC1が「送信元 192.168.1.10 → 宛先 google.com」のパケットを送る
  2. ルーターが「192.168.1.10はプライベートIPだからインターネットに出せない」と判断し、送信元を自分のパブリックIP 203.0.113.5に書き換える
  3. ルーターは「レスポンスが返ってきた時、それがPC1宛だと分かるように、変換表(NATテーブル)に記録
  4. Googleからのレスポンスは203.0.113.5宛で返ってくる
  5. ルーターが変換表を見て「このレスポンスはPC1宛てだ」と判断、宛先を192.168.1.10に書き換えてPC1に渡す

これがNAT (Network Address Translation) の仕組み

AWSでのNAT

後ほどのWeekで出てくるNATゲートウェイは、これのAWSマネージドサービス版

[プライベートサブネットのEC2] → [NATゲートウェイ] → [インターネットゲートウェイ] → インターネット

プライベートサブネットのEC2にNATが必要な理由

プライベートサブネットの機器は、セキュリティのためインターネットから直接アクセスできないようにしてある
でも、こちら側からOSアップデートや外部APIに繋ぎたい時はある
そういう「出る時だけ通る出口」がNATゲートウェイ

ちなみにNATゲートウェイは月50ドル近くかかるため、学習中の地味なコストの主犯だったりする

ゲートウェイ

ここまで何度か出てきた言葉の整理

ゲートウェイとは、ネットワーク間の出入り口のこと

  • 家庭: Wi-Fiルーターが、家庭内ネットワーク(192.168.x.x)とインターネットの間のゲートウェイ
  • AWS VPC:
    • インターネットゲートウェイ (IGW): VPCとインターネットの間のゲートウェイ
    • NATゲートウェイ: プライベートサブネットからインターネット方向への片道ゲートウェイ
    • VPC Endpoint: VPCとAWSサービス(S3など)の間のゲートウェイ

「ゲートウェイ」という言葉自体は概念的なもので、具体的な実装は文脈によって違うという認識でOK

ポートのおさらい

ポートとは、1台のサーバーで複数のプログラムを区別するための番号

http://example.com:80
                    ↑
                ポート番号

1台のサーバー(1つのIPアドレス)に対して通信を行う際

  • Webサーバーは80番(HTTP)または443番(HTTPS)
  • AWSのEC2やDockerコンテナなどへのリモート接続(SSH)は22番
  • DBは5432番

のように窓口を分けることで、1つのサーバー(IPアドレス)から同時に複数のサービスを提供できる

よく出るポート番号

ポート プロトコル 用途
22 SSH リモートログイン
80 HTTP Web(暗号化なし)
443 HTTPS Web(暗号化あり)
3306 MySQL DB
5432 PostgreSQL DB
6379 Redis キャッシュ・セッション
8000, 8080, 3000 - 開発用によく使う

ssコマンドで、自分のマシンで開いてるポートが確認できる

wsl
sudo ss -tlnp
オプション 意味
-t TCPだけ
-l LISTEN状態(受付中)のものだけ
-n 数字表記(名前解決しない)
-p どのプロセスが使ってるか表示

本番サーバーで「80番ポートで何が動いているか確認」したい時に使えるコマンド

おわりに

今回はネットワーク基礎についての解説でした!
特にCIDR記法はAWSのVPC設計で頻出するので、ここを押さえておくと今後の理解が一気に進みそうな手応えがあります。

この領域は奥が深く、書籍などで学習をしてより深く理解することをお勧めします。
最後に筆者が現在読み進めている、ネットワークについて分かりやすく解説した書籍を照会します!

「ネットワークはなぜつながるのか 第2版」
image.png

ご覧いただきありがとうございました🔥

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?