【AWS】ネットワーク(ルートテーブル、インターネットゲートウェイ、NATゲートウェイ)設定確認

AWS の VPC でサブネットを作っただけでは、サブネットからインターネットには出られません。この記事では、通信の出口を決めるルートテーブルと、インターネットへの出口になるインターネットゲートウェイ、NAT ゲートウェイの役割を整理し、パブリックサブネットとプライベートサブネットをそれぞれインターネットにつなぐ設定を確かめます。

この記事でわかること
  1. ルートテーブルとサブネットの関係、local ルートとメインルートテーブル
  2. インターネットゲートウェイの役割と、パブリックサブネットの条件
  3. NAT ゲートウェイの役割と、インターネットゲートウェイとの違い
  4. コンソールでの作成とルートテーブルの関連付けの手順
前提の記事

この記事は、次の記事で作った VPC とサブネットの構成を使います。

リージョン(東京:ap-northeast-1)VPC 10.0.0.0/16(MyVPC)アベイラビリティゾーン(ap-northeast-1a)public-subnet10.0.1.0/24private-subnet10.0.2.0/24
図1 前の記事で作った VPC とサブネット

インターネットに公開するサブネットをパブリックサブネット、公開しないサブネットをプライベートサブネットと呼びます。この記事では public-subnet(10.0.1.0/24)をパブリックサブネットにし、private-subnet(10.0.2.0/24)からも NAT ゲートウェイ経由でインターネットに出られるようにします。

ルートテーブル

ルートテーブルは、サブネットから出ていく通信をどこへ転送するかを決めるルールの表です。1行(ルート)ごとに、送信先(宛先の CIDR)とターゲット(転送先のゲートウェイなど)を書きます。宛先に合うルートが複数あるときは、いちばん長いプレフィックスのルートが使われます。

一般的なネットワークではルーティングテーブルはルータが持ちますが、AWS の VPC ではルートテーブルをサブネットに関連付けます。各サブネットには必ず1つのルートテーブルが関連付けられ、1つのルートテーブルを複数のサブネットで共有することもできます。

用語意味
local ルートVPC の CIDR(この記事では 10.0.0.0/16)宛てのルートです。どのルートテーブルにも最初から入っていて、VPC の中のサブネット同士はこのルートで通信できます。
メインルートテーブルVPC を作ると自動でできるルートテーブルです。ほかのルートテーブルを明示的に関連付けていないサブネットは、暗黙にメインルートテーブルを使います。メインルートテーブルは削除できません。
カスタムルートテーブル自分で作るルートテーブルです。サブネットの役割(パブリック、プライベート)ごとに作って関連付けます。

作ったばかりのルートテーブルには local ルートしかありません。このルートテーブルを public-subnet に関連付けると、VPC の中とは通信できますが、VPC の外への経路はありません。

VPC 10.0.0.0/16public-subnet 10.0.1.0/24private-subnet10.0.2.0/24ルートテーブル(作成直後)送信先ターゲット10.0.0.0/16locallocalVPC 内は通信できるVPC の外(0.0.0.0/0)への経路はない
図2 local ルートだけのルートテーブル

メインルートテーブルは最初の状態(local ルートだけ)のまま残し、サブネットごとにカスタムルートテーブルを作って明示的に関連付けるのが安全です。メインルートテーブルにインターネットへのルートを足すと、あとから作ったサブネットまで暗黙にインターネットへ出られるようになってしまうためです。VPC の外へ出るには、0.0.0.0/0(デフォルトルート)のターゲットにインターネットへの出口を指定します。その出口が、次のインターネットゲートウェイです。

インターネットゲートウェイ

インターネットゲートウェイは、VPC とインターネットの間の通信を可能にする VPC のコンポーネントです。AWS が冗長化して運用しているので、可用性や帯域を利用者が気にする必要はなく、料金もかかりません。作成後に VPC にアタッチ(紐付け)して使います。

サブネットのルートテーブルに、0.0.0.0/0 のターゲットとしてインターネットゲートウェイを追加すると、そのサブネットはパブリックサブネットになります。

VPC 10.0.0.0/16public-subnet 10.0.1.0/24Public-subnet-route送信先ターゲット10.0.0.0/16local0.0.0.0/0インターネットゲートウェイInternetinternet-gwVPC にアタッチ
図3 インターネットゲートウェイへのデフォルトルート

パブリックサブネットに置いたインスタンスがインターネットと通信するには、ルートのほかに、パブリック IPv4 アドレスか Elastic IP アドレスを持っていることと、セキュリティグループやネットワーク ACL で通信を許可していることが必要です。インスタンス自身はプライベート IP アドレスしか知りませんが、インターネットゲートウェイが1対1の NAT を行い、送信元をインスタンスのパブリック IP アドレスに変換します。インターネットからパブリック IP アドレス宛てに来た通信も、セキュリティグループで許可していればインスタンスに届きます。

一方で、データベースのように、インターネットへ出られればよく、インターネットからの接続は受けたくないサーバもあります。この場合は、プライベートサブネットに置き、NAT ゲートウェイ経由でインターネットに出します。

NAT ゲートウェイ

NAT ゲートウェイは、プライベートサブネットのインスタンスが VPC の外のサービスに接続できるようにする NAT のサービスです。インスタンスからの接続はできますが、外から NAT ゲートウェイの先のインスタンスに接続を始めることはできません。

インターネットに出るためのパブリック NAT ゲートウェイは、パブリックサブネットに作り、Elastic IP アドレスを割り当てます。プライベートサブネットのルートテーブルでは 0.0.0.0/0 のターゲットを NAT ゲートウェイにします。NAT ゲートウェイは送信元を自分のアドレスに変換し、そこから先はパブリックサブネットのルートテーブルに従って、インターネットゲートウェイからインターネットに出ます。

VPC 10.0.0.0/16public-subnet 10.0.1.0/24private-subnet 10.0.2.0/24Public-subnet-route送信先ターゲット10.0.0.0/16local0.0.0.0/0internet-gwPrivate-subnet-route送信先ターゲット10.0.0.0/16local0.0.0.0/0NAT-gwここで送信元を NAT ゲートウェイのアドレスに変換するInternetinternet-gwNAT-gwインスタンス(プライベート)
図4 NAT ゲートウェイを使ったプライベートサブネットからの通信
インターネットゲートウェイNAT ゲートウェイ(パブリック)
作る場所VPC にアタッチ(1つの VPC に1つ)パブリックサブネットの中に作る
ルートを向けるサブネットパブリックサブネットプライベートサブネット
インターネットからの接続パブリック IP アドレスを持つインスタンスに届く(セキュリティグループで許可した場合)受けられない
必要なものインスタンスのパブリック IPv4 アドレスか Elastic IP アドレスNAT ゲートウェイの Elastic IP アドレスと、VPC のインターネットゲートウェイ
料金かからない(データ転送料はかかる)時間単位の料金と、処理したデータ量の料金

NAT ゲートウェイは、作成した AZ の中で冗長化されています。複数の AZ にインスタンスがあって1つの NAT ゲートウェイを共有していると、その AZ に障害が起きたときに、ほかの AZ のインスタンスもインターネットに出られなくなります。本番では AZ ごとに NAT ゲートウェイを作り、同じ AZ の NAT ゲートウェイを使うようにルートテーブルを分けます。

現在の状況

この記事で作る NAT ゲートウェイは、1つの AZ に作る従来の形です。2025年11月から、VPC の AZ をまたいで自動で広がる「リージョナル」の可用性モードも選べるようになりました。リージョナルの NAT ゲートウェイは、パブリックサブネットに置く必要がなく、AZ が増えるたびに NAT ゲートウェイやルートテーブルを作り直す手間も省けます。

設定確認

インターネットゲートウェイを作って VPC にアタッチする

VPC ›› インターネットゲートウェイ ›› インターネットゲートウェイの作成 を開きます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。AWS のコンソールは画面の構成や表記がよく変わるので、今の画面とは違う場合があります。VPC、サブネット、ゲートウェイなどの ID は省いています。

VPC コンソール(インターネットゲートウェイの作成)画面イメージ
インターネットゲートウェイの設定
1名前タグinternet-gw
タグ – オプション
キー/値Name internet-gw
キャンセル2インターネットゲートウェイの作成
図5 インターネットゲートウェイの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前タグ任意の名前です。この記事では internet-gw にします。入れた名前は、キー Name のタグとして下に自動で入ります。
2インターネットゲートウェイの作成クリックすると作成されます。

作成した直後のインターネットゲートウェイは、まだどの VPC にもアタッチされていません。画面上部の「VPC へアタッチ」をクリックし、MyVPC を選んでアタッチします。

VPC コンソール(internet-gw)画面イメージ
詳細
インターネットゲートウェイ ID状態VPC ID所有者
igw-…1 Detached–(伏せています)
2VPC へアタッチ
VPC にアタッチ
3使用可能な VPCMyVPC
キャンセル4インターネットゲートウェイのアタッチ
図6 VPC へのアタッチ(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1状態灰色の Detached は、まだ VPC にアタッチされていないことを表します。
2VPC へアタッチクリックすると、アタッチする VPC を選ぶ画面に移ります。
3使用可能な VPCMyVPC を選びます。
4インターネットゲートウェイのアタッチクリックするとアタッチされます。
VPC コンソール(インターネットゲートウェイ)画面イメージ
Name状態VPC
internet-gw1 AttachedMyVPC
図7 アタッチ後のインターネットゲートウェイ(実際の画面ではなく、表示のポイントを示したイメージです)

状態が緑の Attached になり、VPC に MyVPC が表示されていれば完了です。

パブリックサブネット用のルートテーブルを作る

VPC ›› ルートテーブル ›› ルートテーブルを作成 を開き、名前を Public-subnet-route、VPC を MyVPC にして作成します。

VPC コンソール(ルートテーブルを作成)画面イメージ
ルートテーブル設定
1名前 – オプションPublic-subnet-route
2VPCMyVPC
キャンセル3ルートテーブルを作成
図8 ルートテーブルの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意の名前です。この記事では Public-subnet-route にします。
2VPCルートテーブルを使う VPC(MyVPC)を選びます。
3ルートテーブルを作成クリックすると作成されます。

作成したルートテーブルの「ルート」タブには、10.0.0.0/16 のターゲット local(ステータスはアクティブ)だけがあります。「ルートを編集」から「ルートを追加」をクリックし、送信先 0.0.0.0/0、ターゲット「インターネットゲートウェイ」を選びます。候補に STEP 1 の internet-gw が出るので、選んで「変更を保存」をクリックします。

VPC コンソール(ルートを編集)画面イメージ
送信先ターゲットステータス
10.0.0.0/16local アクティブ
10.0.0.0/02インターネットゲートウェイ ›› igw-…(internet-gw)–
ルートを追加キャンセルプレビュー3変更を保存
図9 インターネットゲートウェイへのルートの追加(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1送信先0.0.0.0/0(デフォルトルート)を入れます。
2ターゲット種類の一覧から「インターネットゲートウェイ」を選び、候補の internet-gw を選びます。
3変更を保存クリックするとルートが追加されます。

保存すると、ルートが2つになります。10.0.0.0/16 宛ては VPC の中(local)、それ以外はインターネットゲートウェイに転送されます。

VPC コンソール(Public-subnet-route)画面イメージ
ルート 2サブネットの関連付け Edge の関連付け ルート伝播 タグ
送信先ターゲットステータス伝播済み
10.0.0.0/16local アクティブいいえ
10.0.0.0/0igw-…(internet-gw) アクティブいいえ
図10 追加後のルート(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
10.0.0.0/0 → igw-…インターネットゲートウェイへのデフォルトルートです。緑の「アクティブ」は、ルートが使える状態であることを表します。伝播済み「いいえ」は、手で追加した静的なルートであることを表します。
2サブネットの関連付けこのタブで、ルートテーブルを使うサブネットを決めます。

まだルートテーブルはどのサブネットにも関連付けられていないので、「サブネットの関連付け」タブで「サブネットの関連付けを編集」をクリックし、public-subnet を選んで「関連付けを保存」をクリックします。

VPC コンソール(サブネットの関連付けを編集)画面イメージ
利用可能なサブネット
名前IPv4 CIDR
☐private-subnet10.0.2.0/24
1☑public-subnet10.0.1.0/24
選択されたサブネット
public-subnet ×
キャンセル2関連付けを保存
図11 public-subnet への関連付け(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1利用可能なサブネットpublic-subnet(10.0.1.0/24)にチェックを入れます。
2関連付けを保存クリックすると、public-subnet が Public-subnet-route を使うようになります。

これで、public-subnet は図3の状態になり、インターネットゲートウェイ経由でインターネットに出られるパブリックサブネットになりました。

NAT ゲートウェイを作る

VPC ›› NAT ゲートウェイ ›› NAT ゲートウェイを作成 を開きます。

VPC コンソール(NAT ゲートウェイを作成)画面イメージ
NAT ゲートウェイの設定
1名前 – オプションNAT-gw
2サブネットpublic-subnet
3接続タイプ◉ パブリック○ プライベート
4Elastic IP 割り当て IDeipalloc-…
Elastic IP の割り当て
キャンセル5NAT ゲートウェイを作成
図12 NAT ゲートウェイの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意の名前です。この記事では NAT-gw にします。
2サブネットNAT ゲートウェイを作るサブネットです。パブリックサブネットの public-subnet を選びます。
3接続タイプインターネットに出るので パブリック を選びます。プライベートは、ほかの VPC やオンプレミスにだけつなぐ場合に使い、Elastic IP アドレスは割り当てられません。
4Elastic IP 割り当て IDNAT ゲートウェイに割り当てる Elastic IP アドレスを選びます。まだない場合は「Elastic IP の割り当て」で新しく割り当てます。
5NAT ゲートウェイを作成クリックすると作成が始まります。

プライベートサブネット用のルートテーブルを作る

STEP 2 と同じ手順で、名前 Private-subnet-route、VPC MyVPC のルートテーブルを作ります。「ルートを編集」でルートを追加し、送信先 0.0.0.0/0、ターゲット「NAT ゲートウェイ」を選ぶと、STEP 3 の NAT-gw が候補に出ます。選んで「変更を保存」をクリックします。

VPC コンソール(Private-subnet-route)画面イメージ
送信先ターゲットステータス伝播済み
10.0.0.0/16local アクティブいいえ
10.0.0.0/0nat-…(NAT-gw) アクティブいいえ
図13 NAT ゲートウェイへのデフォルトルート(実際の画面ではなく、表示のポイントを示したイメージです)

ルートテーブルのターゲットの種類には、インターネットゲートウェイと NAT ゲートウェイのほか、インスタンス、ネットワークインターフェイス、ピアリング接続、Egress Only インターネットゲートウェイなどがあります。プライベートサブネットでは、デフォルトルートのターゲットを NAT ゲートウェイにします。

最後に「サブネットの関連付け」タブで「サブネットの関連付けを編集」をクリックし、private-subnet を選んで「関連付けを保存」をクリックします。

VPC コンソール(サブネットの関連付けを編集)画面イメージ
利用可能なサブネット
名前IPv4 CIDRルートテーブル ID
1☑private-subnet10.0.2.0/242メイン(rtb-…)
☐public-subnet10.0.1.0/24rtb-… / Public-subnet-route
選択されたサブネット
private-subnet ×
キャンセル3関連付けを保存
図14 private-subnet への関連付け(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1利用可能なサブネットprivate-subnet(10.0.2.0/24)にチェックを入れます。
2ルートテーブル ID今使っているルートテーブルです。private-subnet は、ここまでどのルートテーブルにも明示的に関連付けていないので「メイン」(メインルートテーブル)を使っています。public-subnet は STEP 2 で関連付けた Public-subnet-route です。
3関連付けを保存クリックすると、private-subnet が Private-subnet-route を使うようになります。

これで図4の構成になりました。public-subnet はインターネットゲートウェイ経由で、private-subnet は NAT ゲートウェイ経由で、インターネットに接続できます。この先、作ったサブネットに仮想マシン(EC2 インスタンス)を作ります。

うまくいかないとき

状態よくある原因確認すること
パブリックサブネットのインスタンスがインターネットに出られないパブリック IP アドレスがない、ルートテーブルを関連付けていない、セキュリティグループやネットワーク ACL で止めているインスタンスのパブリック IPv4 アドレス、サブネットの関連付け、0.0.0.0/0 → インターネットゲートウェイのルート
プライベートサブネットからインターネットに出られないNAT ゲートウェイをプライベートサブネットに作った、NAT ゲートウェイのサブネットにインターネットゲートウェイへのルートがないNAT ゲートウェイを作ったサブネットと、そのサブネットのルートテーブル
ターゲットにインターネットゲートウェイが出てこないVPC にアタッチしていない、別の VPC にアタッチしているインターネットゲートウェイの状態(Attached)と VPC
新しいサブネットの通信が想定と違うどのルートテーブルにも関連付けておらず、メインルートテーブルを使っているサブネットの関連付けと、メインルートテーブルのルート

まとめ

作ったものこの記事の名前設定のポイント
インターネットゲートウェイinternet-gwMyVPC にアタッチ
ルートテーブル(パブリック)Public-subnet-route0.0.0.0/0 → internet-gw、public-subnet に関連付け
NAT ゲートウェイNAT-gwpublic-subnet に作成、接続タイプはパブリック、Elastic IP を割り当て
ルートテーブル(プライベート)Private-subnet-route0.0.0.0/0 → NAT-gw、private-subnet に関連付け

パブリックサブネットとプライベートサブネットの違いは、ルートテーブルの 0.0.0.0/0 のターゲットで決まります。インターネットゲートウェイに向ければパブリック、NAT ゲートウェイに向ければ外からは届かないプライベートになります。メインルートテーブルは local だけのまま残し、サブネットごとにルートテーブルを明示的に関連付けておくと、意図しない経路を防げます。

コメント