はじめに
AWS のリージョナル NAT Gateway を作成すると、自動的にルートテーブルが生成されます。このルートテーブルの役割がわかりにくかったため、AWS サポートに確認した内容を整理しました。
本記事では、自動作成されるルートテーブルと、自分で設定するルートテーブルの違いについて解説します。
結論
- 自動作成されるルートテーブルは NAT Gateway 自身が使うものであり、基本的にユーザーが編集する必要はない
- プライベートサブネットのリソースから NAT Gateway 経由でインターネットに出るには、サブネットのルートテーブルを自分で設定する必要がある
- ただし、Network Firewall 等のミドルボックスを利用する構成では、自動作成されたルートテーブルにも編集が必要になるケースがある
ルートテーブルの整理
自動作成されるルートテーブル(NAT Gateway 用)
リージョナル NAT Gateway を作成すると、AWS が自動的にルートテーブルを作成します。
このルートテーブルには、インターネットゲートウェイ(IGW)への事前設定されたルートが含まれており、NAT Gateway 自身がインターネットと通信するために使われます。
リージョン NAT ゲートウェイを作成すると、AWS は自動的にそのルートテーブルを作成します。このテーブルには、インターネットゲートウェイへの事前設定されたルートが付属しています。
通常の構成では、このルートテーブルを意識する必要はありません。
サブネットのルートテーブル(自分で設定が必要)
プライベートサブネット内の EC2 インスタンス等からリージョナル NAT Gateway を経由してインターネットに接続するには、そのサブネットに紐づくルートテーブルに、手動でルートを追加する必要があります。
設定例
| 送信先 | ターゲット |
|---|---|
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | nat-gateway-id |
0.0.0.0/0(デフォルトルート)のターゲットにリージョナル NAT Gateway を指定することで、サブネット内のリソースからのインターネット向け通信が NAT Gateway を経由するようになります。
構成イメージ
┌─────────────────────────────────────────────────┐
│ VPC │
│ │
│ ┌──────────────────────┐ │
│ │ プライベートサブネット │ │
│ │ │ │
│ │ EC2 インスタンス │ │
│ │ │ │ │
│ │ │ ルートテーブル(★手動設定) │
│ │ │ 0.0.0.0/0 → NAT Gateway │
│ └───────┼──────────────┘ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ リージョナル NAT GW │ │
│ │ │ │ │
│ │ │ ルートテーブル(自動作成) │
│ │ │ 0.0.0.0/0 → IGW │
│ └───────┼──────────────┘ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ インターネットGW (IGW) │ │
│ └───────┼──────────────┘ │
└──────────┼──────────────────────────────────────┘
▼
インターネット
自動作成されたルートテーブルの編集が必要になるケース
基本的には触る必要のない自動作成のルートテーブルですが、Network Firewall 等のミドルボックスを利用する場合は例外です。
ミドルボックスへの戻りルート(リターンルート)を追加する必要があります。具体的な設定例は、以下の AWS 公式ブログの Figure 2 が参考になります。
まとめ
| ルートテーブル | 作成者 | 用途 | 編集の要否 |
|---|---|---|---|
| 自動作成されるもの | AWS(NAT GW 作成時) | NAT Gateway → IGW の経路 | 通常は不要。ミドルボックス利用時のみ必要 |
| サブネットに紐づくもの | ユーザー(手動) | EC2 等 → NAT Gateway の経路 | 必須 |
リージョナル NAT Gateway を利用する際は、自動作成されるルートテーブルに惑わされず、プライベートサブネットのルートテーブルに NAT Gateway へのルートを手動で追加することを忘れないようにしましょう。