AWS の VPC でサブネットを作っただけでは、サブネットからインターネットには出られません。この記事では、通信の出口を決めるルートテーブルと、インターネットへの出口になるインターネットゲートウェイ、NAT ゲートウェイの役割を整理し、パブリックサブネットとプライベートサブネットをそれぞれインターネットにつなぐ設定を確かめます。
- ルートテーブルとサブネットの関係、local ルートとメインルートテーブル
- インターネットゲートウェイの役割と、パブリックサブネットの条件
- NAT ゲートウェイの役割と、インターネットゲートウェイとの違い
- コンソールでの作成とルートテーブルの関連付けの手順
インターネットに公開するサブネットをパブリックサブネット、公開しないサブネットをプライベートサブネットと呼びます。この記事では 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 の外への経路はありません。
メインルートテーブルは最初の状態(local ルートだけ)のまま残し、サブネットごとにカスタムルートテーブルを作って明示的に関連付けるのが安全です。メインルートテーブルにインターネットへのルートを足すと、あとから作ったサブネットまで暗黙にインターネットへ出られるようになってしまうためです。VPC の外へ出るには、0.0.0.0/0(デフォルトルート)のターゲットにインターネットへの出口を指定します。その出口が、次のインターネットゲートウェイです。
インターネットゲートウェイ
インターネットゲートウェイは、VPC とインターネットの間の通信を可能にする VPC のコンポーネントです。AWS が冗長化して運用しているので、可用性や帯域を利用者が気にする必要はなく、料金もかかりません。作成後に VPC にアタッチ(紐付け)して使います。
サブネットのルートテーブルに、0.0.0.0/0 のターゲットとしてインターネットゲートウェイを追加すると、そのサブネットはパブリックサブネットになります。
パブリックサブネットに置いたインスタンスがインターネットと通信するには、ルートのほかに、パブリック 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 ゲートウェイは送信元を自分のアドレスに変換し、そこから先はパブリックサブネットのルートテーブルに従って、インターネットゲートウェイからインターネットに出ます。
| インターネットゲートウェイ | 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 は省いています。
| 1名前タグ | internet-gw |
| キー/値 | Name internet-gw |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前タグ | 任意の名前です。この記事では internet-gw にします。入れた名前は、キー Name のタグとして下に自動で入ります。 |
| 2 | インターネットゲートウェイの作成 | クリックすると作成されます。 |
作成した直後のインターネットゲートウェイは、まだどの VPC にもアタッチされていません。画面上部の「VPC へアタッチ」をクリックし、MyVPC を選んでアタッチします。
| インターネットゲートウェイ ID | 状態 | VPC ID | 所有者 |
|---|---|---|---|
| igw-… | 1 Detached | – | (伏せています) |
| 3使用可能な VPC | MyVPC |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 状態 | 灰色の Detached は、まだ VPC にアタッチされていないことを表します。 |
| 2 | VPC へアタッチ | クリックすると、アタッチする VPC を選ぶ画面に移ります。 |
| 3 | 使用可能な VPC | MyVPC を選びます。 |
| 4 | インターネットゲートウェイのアタッチ | クリックするとアタッチされます。 |
| Name | 状態 | VPC |
|---|---|---|
| internet-gw | 1 Attached | MyVPC |
状態が緑の Attached になり、VPC に MyVPC が表示されていれば完了です。
パブリックサブネット用のルートテーブルを作る
VPC ›› ルートテーブル ›› ルートテーブルを作成 を開き、名前を Public-subnet-route、VPC を MyVPC にして作成します。
| 1名前 – オプション | Public-subnet-route |
| 2VPC | MyVPC |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意の名前です。この記事では Public-subnet-route にします。 |
| 2 | VPC | ルートテーブルを使う VPC(MyVPC)を選びます。 |
| 3 | ルートテーブルを作成 | クリックすると作成されます。 |
作成したルートテーブルの「ルート」タブには、10.0.0.0/16 のターゲット local(ステータスはアクティブ)だけがあります。「ルートを編集」から「ルートを追加」をクリックし、送信先 0.0.0.0/0、ターゲット「インターネットゲートウェイ」を選びます。候補に STEP 1 の internet-gw が出るので、選んで「変更を保存」をクリックします。
| 送信先 | ターゲット | ステータス |
|---|---|---|
| 10.0.0.0/16 | local | アクティブ |
| 10.0.0.0/0 | 2インターネットゲートウェイ ›› igw-…(internet-gw) | – |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 送信先 | 0.0.0.0/0(デフォルトルート)を入れます。 |
| 2 | ターゲット | 種類の一覧から「インターネットゲートウェイ」を選び、候補の internet-gw を選びます。 |
| 3 | 変更を保存 | クリックするとルートが追加されます。 |
保存すると、ルートが2つになります。10.0.0.0/16 宛ては VPC の中(local)、それ以外はインターネットゲートウェイに転送されます。
| 送信先 | ターゲット | ステータス | 伝播済み |
|---|---|---|---|
| 10.0.0.0/16 | local | アクティブ | いいえ |
| 10.0.0.0/0 | igw-…(internet-gw) | アクティブ | いいえ |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 0.0.0.0/0 → igw-… | インターネットゲートウェイへのデフォルトルートです。緑の「アクティブ」は、ルートが使える状態であることを表します。伝播済み「いいえ」は、手で追加した静的なルートであることを表します。 |
| 2 | サブネットの関連付け | このタブで、ルートテーブルを使うサブネットを決めます。 |
まだルートテーブルはどのサブネットにも関連付けられていないので、「サブネットの関連付け」タブで「サブネットの関連付けを編集」をクリックし、public-subnet を選んで「関連付けを保存」をクリックします。
| 名前 | IPv4 CIDR | |
|---|---|---|
| ☐ | private-subnet | 10.0.2.0/24 |
| 1☑ | public-subnet | 10.0.1.0/24 |
| public-subnet × |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 利用可能なサブネット | public-subnet(10.0.1.0/24)にチェックを入れます。 |
| 2 | 関連付けを保存 | クリックすると、public-subnet が Public-subnet-route を使うようになります。 |
これで、public-subnet は図3の状態になり、インターネットゲートウェイ経由でインターネットに出られるパブリックサブネットになりました。
NAT ゲートウェイを作る
VPC ›› NAT ゲートウェイ ›› NAT ゲートウェイを作成 を開きます。
| 1名前 – オプション | NAT-gw |
| 2サブネット | public-subnet |
| 3接続タイプ | ◉ パブリック○ プライベート |
| 4Elastic IP 割り当て ID | eipalloc-… Elastic IP の割り当て |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意の名前です。この記事では NAT-gw にします。 |
| 2 | サブネット | NAT ゲートウェイを作るサブネットです。パブリックサブネットの public-subnet を選びます。 |
| 3 | 接続タイプ | インターネットに出るので パブリック を選びます。プライベートは、ほかの VPC やオンプレミスにだけつなぐ場合に使い、Elastic IP アドレスは割り当てられません。 |
| 4 | Elastic IP 割り当て ID | NAT ゲートウェイに割り当てる Elastic IP アドレスを選びます。まだない場合は「Elastic IP の割り当て」で新しく割り当てます。 |
| 5 | NAT ゲートウェイを作成 | クリックすると作成が始まります。 |
プライベートサブネット用のルートテーブルを作る
STEP 2 と同じ手順で、名前 Private-subnet-route、VPC MyVPC のルートテーブルを作ります。「ルートを編集」でルートを追加し、送信先 0.0.0.0/0、ターゲット「NAT ゲートウェイ」を選ぶと、STEP 3 の NAT-gw が候補に出ます。選んで「変更を保存」をクリックします。
| 送信先 | ターゲット | ステータス | 伝播済み |
|---|---|---|---|
| 10.0.0.0/16 | local | アクティブ | いいえ |
| 10.0.0.0/0 | nat-…(NAT-gw) | アクティブ | いいえ |
ルートテーブルのターゲットの種類には、インターネットゲートウェイと NAT ゲートウェイのほか、インスタンス、ネットワークインターフェイス、ピアリング接続、Egress Only インターネットゲートウェイなどがあります。プライベートサブネットでは、デフォルトルートのターゲットを NAT ゲートウェイにします。
最後に「サブネットの関連付け」タブで「サブネットの関連付けを編集」をクリックし、private-subnet を選んで「関連付けを保存」をクリックします。
| 名前 | IPv4 CIDR | ルートテーブル ID | |
|---|---|---|---|
| 1☑ | private-subnet | 10.0.2.0/24 | 2メイン(rtb-…) |
| ☐ | public-subnet | 10.0.1.0/24 | rtb-… / Public-subnet-route |
| 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-gw | MyVPC にアタッチ |
| ルートテーブル(パブリック) | Public-subnet-route | 0.0.0.0/0 → internet-gw、public-subnet に関連付け |
| NAT ゲートウェイ | NAT-gw | public-subnet に作成、接続タイプはパブリック、Elastic IP を割り当て |
| ルートテーブル(プライベート) | Private-subnet-route | 0.0.0.0/0 → NAT-gw、private-subnet に関連付け |
パブリックサブネットとプライベートサブネットの違いは、ルートテーブルの 0.0.0.0/0 のターゲットで決まります。インターネットゲートウェイに向ければパブリック、NAT ゲートウェイに向ければ外からは届かないプライベートになります。メインルートテーブルは local だけのまま残し、サブネットごとにルートテーブルを明示的に関連付けておくと、意図しない経路を防げます。
コメント