📦 パケットの気持ちになって辿る
Amazon VPC のルーティング

「僕はパケット。宛先に届くために、VPCの道案内(ルートテーブル)を頼りに旅をする。」
パケットの視点で VPC ルーティングの仕組みを理解しよう!

🚚 たとえ話:配達ドライバーが道路標識を見て届ける物流

🎯 結論ファースト:3分で掴む VPC ルーティングの核心

VPC ルーティングを理解するために、まずこの4つのポイントだけ押さえてください。

ルートテーブル=道路標識

パケットは「宛先IPアドレス」を見て、ルートテーブル(道路標識)に従い、次にどこへ行くか決めます。

最長プレフィックスマッチが鉄則

ルートが複数マッチする場合、最も具体的な(CIDRが長い)ルートが優先されます。住所が詳しい標識ほど優先!

サブネットごとに1つのルートテーブル

各サブネットには必ず1つのルートテーブルが紐づきます。明示的に設定しないとメインルートテーブルが使われます。

ターゲット=次の出口

ルートの「ターゲット」は、パケットが次に通過するゲートウェイやENIです。目的地への「出口」のこと。

🚚 たとえ話:VPCルーティング = 配達ドライバーの道案内

あなたは配達ドライバー(パケット)です。荷物(データ)を届けるために、 街(VPC)の中を道路標識(ルートテーブル)を見ながら走ります。 この対応表を覚えれば、VPCルーティングはもう怖くありません!

VPC(Virtual Private Cloud) = あなたが走る「街」全体

自分だけの専用ネットワーク空間。街の境界線(CIDRブロック)で範囲が決まっています。

サブネット = 街の中の「地区・町内」

VPCを区切った小さなネットワーク。各地区(サブネット)ごとに道路標識(ルートテーブル)が設置されています。

ルートテーブル = 交差点にある「道路標識」

「この宛先に行くなら、この道を通れ」という案内板。すべてのサブネットに必ず1つ設置されます。

ターゲット(IGW, NAT-GW等) = 「出口」や「中継所」

IGW(Internet Gateway)は「街の正面玄関」で、VPC自体にアタッチされます(サブネットの外)。NAT-GWは「パブリックサブネット内に配置された、代理で外出してくれる受付」です。

🗺️ パケットの旅:全体構造を図で見る

パケットがサブネットから出発するとき、まずルートテーブルを確認します。 下の図は VPC 内の基本的な構造と、パケットがどのようにルーティングされるかを示しています。

🏙️ VPC(10.0.0.0/16)= 街全体 🏘️ パブリックサブネット(10.0.1.0/24) 🏘️ プライベートサブネット(10.0.2.0/24) 🖥️ EC2 10.0.1.10 📦 パケット 🪧 ルートテーブル 10.0.0.0/16→local 0.0.0.0/0 →IGW 参照 🔄 NAT-GW NATゲートウェイ 📍 パブリックSN内に配置 🖥️ EC2 10.0.2.20 🪧 ルートテーブル 10.0.0.0/16→local 0.0.0.0/0→NAT-GW (↑パブリックSN内のNAT-GWへ) NAT-GWへ (パブリックSN内) 🔗 VPC Peering 他のVPCへ 🚪 IGW Internet Gateway ⚡ VPCにアタッチ 🌍 インターネット (VPCの外) 🏙️ 別のVPC 0.0.0.0/0 → IGW IGW経由で外出 ↗ ⚠️ 配置ルール: IGW → VPCにアタッチ(サブネットの外、VPC境界) NAT-GW → パブリックサブネット内に配置(パブリックIPを持つ)

図1:VPC全体構造 ─ IGWはVPCにアタッチ(サブネット外)、NAT-GWはパブリックサブネット内に配置

📦 パケットが辿る 3つのステップ

宛先を確認

パケットは自分のヘッダーにある「宛先IPアドレス」を確認します。「この荷物はどこ行き?」

ルートテーブル参照

所属するサブネットのルートテーブル(道路標識)で、宛先に最もマッチするルートを探します。

ターゲットへ転送

マッチしたルートの「ターゲット」(出口)にパケットが送り出されます。IGW? NAT-GW? local?

🛤️ シナリオ別:パケットの旅を追体験

基本

シナリオ1:同じVPC内の通信(local ルート)

パブリックサブネットの EC2(10.0.1.10)から、プライベートサブネットの EC2(10.0.2.20)へ通信する場合。 同じ街の中での配達のようなものです。

「宛先は 10.0.2.20 だな。ルートテーブルを見ると… 10.0.0.0/16 → local だ!同じ街の中だから、直接届けに行こう!」

パブリックサブネットのルートテーブル
宛先(Destination) ターゲット(Target) 説明
10.0.0.0/16 local ✅ マッチ!VPC内で直接配達
0.0.0.0/0 igw-xxxxxxxx インターネットへの出口
🖥️ EC2 10.0.1.10 パブリックSN 📦→ 🪧 RT 10.0.0.0/16 → local ✅ 直接配達 🖥️ EC2 10.0.2.20 プライベートSN

図2:VPC内通信 ─ local ルートで直接配達。ゲートウェイは通らない

💡 ポイント

local ルートはVPC作成時に自動追加され、削除できません。 これは「同じ街の中なら、標識がなくても直接届けられる」という基本ルールです。 VPC内のすべてのサブネット間は、この local ルートで通信可能です。

基本

シナリオ2:パブリックサブネットからインターネットへ

パブリックサブネットの EC2 から Google(8.8.8.8)にアクセスする場合。 街の外に荷物を届けるには、正面玄関(Internet Gateway)を通る必要があります。

「宛先は 8.8.8.8 だ。ルートテーブルを見ると… 10.0.0.0/16 にはマッチしない。0.0.0.0/0 → IGW がある!正面玄関からインターネットの世界へ出よう!」

パブリックサブネットのルートテーブル
宛先(Destination) ターゲット(Target) 説明
10.0.0.0/16 local VPC内通信(今回はマッチしない)
0.0.0.0/0 igw-xxxxxxxx ✅ マッチ!インターネットへの出口
🏘️ パブリックサブネット 🖥️ EC2 10.0.1.10 + パブリックIP 📦→ 🪧 RT 10.0.0.0/16→local 0.0.0.0/0→IGW ✅ 🚪 IGW Internet Gateway ⚡ VPCにアタッチ 🌍 Internet

図3:パブリックサブネット → IGW(VPCにアタッチ)→ インターネット

ℹ️ 補足:IGWの配置とパブリックサブネットの条件

IGW はサブネットではなく VPC にアタッチされます。街の「正面玄関」は特定の地区内にあるのではなく、街の境界に設置されるイメージです。 サブネットが「パブリック」と呼ばれるには、ルートテーブルに IGW へのルート(0.0.0.0/0 → igw-xxx)があり、 EC2 インスタンスにパブリック IP が割り当てられている必要があります。 道路標識に「正面玄関はこっち」と書いてあっても、入館証(パブリックIP)がないと外に出られません。

中級

シナリオ3:プライベートサブネットからインターネットへ(NAT Gateway)

プライベートサブネットの EC2 は直接インターネットに出られません。 代わりに NAT Gateway(代理で外出してくれる受付)を通じてインターネットにアクセスします。

「宛先は 8.8.8.8 だけど、僕はプライベートサブネットにいる。直接外には出られない…。ルートテーブルを見ると 0.0.0.0/0 → NAT-GW だ!受付さんに代わりに外に出てもらおう!」

プライベートサブネットのルートテーブル
宛先(Destination) ターゲット(Target) 説明
10.0.0.0/16 local VPC内通信
0.0.0.0/0 nat-xxxxxxxx ✅ マッチ!NAT-GW経由で外出
🏘️ プライベートサブネット 🖥️ EC2 10.0.2.20 📦 パケット 🪧 RT 10.0.0.0/16→local 0.0.0.0/0→NAT ✅ 🏘️ パブリックサブネット 🔄 NAT-GW 代理で外出してくれる受付 📍 パブリックSN内に配置 ※ NAT-GWはパブリックIPを持ち   IGW経由でインターネットに出る NAT-GWへ 🚪 IGW VPCにアタッチ ⚡ サブネット外 🌍 Internet

図4:プライベートSN → NAT-GW(パブリックSN内)→ IGW(VPCにアタッチ)→ インターネット

⚠️ NAT Gateway の重要な特性

NAT Gateway は「代理で外出してくれる受付」です。外出はできますが、外からの訪問者が直接プライベートサブネットに入ることはできません。 これにより、プライベートサブネットの EC2 はインターネットにアクセスしつつ、外部からのアクセスを遮断できます。 NAT Gateway 自体はパブリックサブネットに配置される点に注意してください。

応用

シナリオ4:別のVPCへの通信(VPC Peering)

別のVPC(172.16.0.0/16)のリソースにアクセスする場合。 これは「隣の街への専用トンネル」を通るイメージです。

「宛先は 172.16.1.50 だな。うちの街(10.0.0.0/16)ではない。ルートテーブルを見ると… 172.16.0.0/16 → pcx-xxxxxxxx だ!隣の街への専用トンネルが使えるぞ!」

ルートテーブル(VPC Peering設定済み)
宛先(Destination) ターゲット(Target) 説明
10.0.0.0/16 local 自分のVPC内通信
172.16.0.0/16 pcx-xxxxxxxx ✅ マッチ!VPC Peering経由
0.0.0.0/0 igw-xxxxxxxx インターネットへの出口
💡 VPC Peering のルートは両方に設定が必要

VPC Peering は「双方向の専用トンネル」です。トンネルを掘っただけでは不十分で、 両方のVPCのルートテーブルに相手方への道路標識を追加する必要があります。 片側だけに標識があっても、帰り道がわかりません!

🔍 最長プレフィックスマッチ:なぜ「詳しい住所」が優先されるのか

ルートテーブルに複数のルートがマッチする場合、最も具体的な(CIDRの範囲が狭い=プレフィックスが長い)ルートが勝ちます。 配達で例えると「東京都」と「東京都渋谷区神宮前1-1-1」の両方の標識がある場合、より詳しい住所の標識が優先されるのと同じです。

例:宛先が 10.0.1.50 の場合

0.0.0.0/0
プレフィックス長:0ビット

「地球上のどこか」レベルの大雑把さ

❌ 負け(広すぎる)
10.0.0.0/16
プレフィックス長:16ビット

「この街のどこか」レベル

❌ 負け(まだ広い)
10.0.1.0/24
プレフィックス長:24ビット

「この地区のこの通り」レベル

✅ 勝ち!(最も具体的)
ℹ️ 最長プレフィックスマッチのルール

AWSでは、ルートテーブル内で宛先にマッチする全ルートの中から、プレフィックスが最も長い(CIDR範囲が最も狭い)ルートを選びます。 /24 は /16 より具体的で、/16 は /0 より具体的です。 これは「より詳しい住所を知っている道路標識に従え」というルールです。 同じプレフィックス長のルートが複数ある場合は、静的ルートが伝播ルートより優先されます。

📋 ルートテーブルの種類と使い分け

VPCには「メインルートテーブル」と「カスタムルートテーブル」の2種類があります。

🏛️ メインルートテーブル

VPC作成時に自動で作られるデフォルトのルートテーブルです。

明示的にルートテーブルを関連付けていないサブネットは、自動的にこのメインルートテーブルを使います。 「地区ごとの標識がなければ、街全体の共通標識に従う」というイメージです。

ベストプラクティス:メインルートテーブルはデフォルト(local のみ)のままにし、各サブネットにカスタムルートテーブルを使うのが安全です。

🎨 カスタムルートテーブル

自分で作成して、特定のサブネットに関連付けるルートテーブルです。

パブリックサブネット用にはIGWルートを、プライベートサブネット用にはNAT-GWルートを設定するなど、 目的に応じた道路標識を設置できます。 「繁華街エリアには専用の道路標識を設置する」というイメージです。

ベストプラクティス:サブネットの役割(パブリック/プライベート/VPN専用)ごとに別のカスタムルートテーブルを作成しましょう。

🚪 ターゲット早見表:パケットの出口一覧

ルートテーブルで指定できる主なターゲット(パケットの次の行き先)をまとめます。

ターゲット たとえ話 主な用途
local 同じ街の中で直接配達 VPC内通信(自動設定・削除不可)
igw-xxx 🚪 街の正面玄関 インターネットとの双方向通信(VPCにアタッチ・サブネット外)
nat-xxx 🔄 代理で外出してくれる受付 プライベートSNからのインターネットアクセス(パブリックSN内に配置)
pcx-xxx 🔗 隣の街への専用トンネル VPC Peeringでの他VPC通信
tgw-xxx 🚉 複数の街をつなぐ中央駅 Transit Gatewayで多数VPCを接続
vgw-xxx 🏢 オフィスへの専用回線 VPN接続でオンプレミスと通信
vpce-xxx 📮 街の中の専用ポスト VPCエンドポイント(S3等にプライベート接続)
eni-xxx 👤 特定の担当者に直接渡す ネットワークインターフェイス(ファイアウォール等)

🔧 トラブルシューティング:パケットが迷子になったら

ルーティングのトラブルで最もよくある原因と対処法をまとめます。

😵 EC2からインターネットに出られない

ルートテーブルに 0.0.0.0/0 → IGW のルートがない、またはパブリックIPが付与されていない可能性があります。

✅ サブネットのルートテーブルにIGWルートがあるか確認し、EC2にパブリックIP / Elastic IPが割り当てられているか確認

😵 プライベートSNからapt/yumが使えない

NAT Gateway のルートが設定されていない、またはNAT Gateway自体がパブリックSNに配置されていない可能性があります。

✅ プライベートSNのルートテーブルに 0.0.0.0/0 → nat-xxx があるか確認。NAT-GW がパブリックSN内にあるかも確認

😵 VPC Peeringで通信できない

片方のVPCにしかルートを追加していない。両方のVPCのルートテーブルに相手方CIDRへのルートが必要です。

✅ 両方のVPCのルートテーブルに相手方CIDRのルートがあるか確認。セキュリティグループとNACLも確認

😵 意図しないルートが使われる

最長プレフィックスマッチにより、より具体的なルートが意図せず優先されている可能性があります。

✅ ルートテーブルの全ルートを確認し、宛先CIDRの粒度(プレフィックス長)を見直す

❓ よくある質問(FAQ)

ルートテーブルの local ルートは削除できる?

削除できません。 local ルートはVPC内通信を保証する基本ルールで、すべてのルートテーブルに自動的に存在します。 ただし、より具体的なルート(例:10.0.1.0/24 → 特定のENI)を追加することで、 localルートの一部を上書きすることは可能です(ミドルボックスルーティングなど)。

1つのサブネットに複数のルートテーブルを関連付けられる?

1つのサブネットに関連付けられるルートテーブルは1つだけです。 ただし、1つのルートテーブルを複数のサブネットに関連付けることはできます。 「各地区に設置できる道路標識は1セットだけ。でも同じ標識を複数の地区で共有はOK」というイメージです。

ルートテーブルにマッチするルートが1つもない場合、パケットはどうなる?

パケットは破棄(ドロップ)されます。 マッチするルートがなければ、パケットは行き場を失い、宛先に届きません。 「道路標識にない場所には行けない」ということです。 だからこそ、0.0.0.0/0(デフォルトルート)を設定して「それ以外はここへ」と指定することが重要です。

ルートテーブルの変更はすぐに反映される?

はい、ルートテーブルの変更は即座に反映されます。 道路標識を書き換えた瞬間から、新しいルートに従ってパケットが転送されます。 ただし、既存のコネクションが突然切れる場合があるため、本番環境での変更は慎重に行いましょう。

セキュリティグループや NACL とルートテーブルはどう違う?

ルートテーブルは「道順」、セキュリティグループと NACL は「検問所」です。 ルートテーブルはパケットの行き先を決めるもの。セキュリティグループはインスタンスレベルのファイアウォール(入口の警備員)、 NACLはサブネットレベルのファイアウォール(地区の入口ゲート)です。 パケットは「道順を調べる → 検問所を通過 → 配達」の順で処理されます。

🎓 まとめ

パケットは標識に従う

ルートテーブル(道路標識)が唯一の道案内。宛先IPとルートを照合して次のターゲットを決定

詳しい住所が優先

最長プレフィックスマッチにより、最も具体的なルートが常に勝つ。/24 > /16 > /0

サブネットと1対1

各サブネットに1つのルートテーブル。目的別にカスタムルートテーブルを作成するのがベスト

パケットの気持ちになれば、VPCルーティングは怖くない!
「宛先を確認 → 標識(ルートテーブル)を見る → 出口(ターゲット)へ進む」
この3ステップを常に意識してネットワーク設計を行いましょう 🎉

Created by SSuzuki1063

AWS SAP Learning Resources