AWSでNAT構成を自前で用意する
現時点ではAWSで新たにNAT Gatewayが用意されており、簡単にNAT構成が建てられますが、VPNに課金されるので、自前で復讐も兼ねてNATインスタンスを作成する工程を忘れないように記載しておきます。
Public Subnetの構築
1. VPCの作成
項目 | 設定値 | 説明 |
---|---|---|
ネームタグ | my-vpc | 分かりやすい名前を設定 |
CIDRブロック | 10.0.0.0/16 | VPCのアドレス範囲を設定(例で10.0.0.0/16を設定し以下これに沿って説明) |
テナンシー | デフォルト | シングルテナントの専用ハードウェアのVPCでインスタンスを実行できる |
2. Public Subnetの作成
サブネット > サブネットの作成
項目 | 設定値 | 説明 |
---|---|---|
ネームタグ | public-subnet | 分かりやすい名前を設定 |
VPC | 作成したVPCを選択 | このサブネットに使用するVPC |
アベイラビリティゾーン | us-east-a1 | このサブネットが存在するアベイラビリティゾーン。自動的に選択する場合は指定なし |
CIDRブロック | 10.0.0.0/24 | サブネットのアドレス範囲を設定。ブロックのサイズは/16~/28の間 |
3. Internet Gatewayの作成
インターネットゲートウェイ > インターネットゲートウェイの作成
ネームタグに分かりやすい名前を設定
4. Internet Gatewayのアタッチ
5. ルートテーブルの作成
ルートテーブル > ルートテーブルの作成
項目 | 設定値 | 説明 |
---|---|---|
ネームタグ | public-subnet | 分かりやすい名前を設定 |
VPC | 作成したVPCを選択 | このルートテーブルに使用するVPC |
6. ルートテーブルにInternet Gatewayを追加
- 5で作成したルートテーブルを選択
- 下タブのルートを選択
- 編集を選択
- 送信先を
0.0.0.0/0
、ターゲットを4で作成したInternet Gatewayを選択 - 保存
7. Public Subnetにルートテーブルを設定
- 2で作成したPublic Subnetを選択
- 下メニューのルートテーブルを選択
- 編集を選択
- 変更先に5で作成したルートテーブルを選択
Private Subnetの構築
1. Private Subnetの作成
サブネット > サブネットの作成
項目 | 設定値 | 説明 |
---|---|---|
ネームタグ | private-subnet | 分かりやすい名前を設定 |
VPC | 作成したVPCを選択 | このサブネットに使用するVPC |
アベイラビリティゾーン | us-east-a1 | このサブネットが存在するアベイラビリティゾーン。自動的に選択する場合は指定なし |
CIDRブロック | 10.0.1.0/24 | サブネットのアドレス範囲を設定。ブロックのサイズは/16~/28の間 |
2. NATインスタンスの作成
EC2 > インスタンスの作成
- コミュニティAMIから
nat
を検索 - AMIを選択
- インスタンスタイプの選択
- インスタンス詳細の設定
ネットワークで作成したVPCを選択
サブネットにPublic Subnetを選択 - ストレージは特に変更なし(お好みに合わせて)
- タグに分かりやすい名前を設定
- セキュリティグループの作成
SSH : 10.0.0.0/16
SSH : my ip(connection用)
HTTP : 10.0.0.0/16
HTTPS : 10.0.0.0/16
以上の設定で作成
ソース/宛先チェックの無効化
- 作成したインスタンスを選択
- アクション > ネットワーキング > 送信元/送信先の変更チェック
- 無効化する
3. Elastic IPの割当
Elastic IP > 新しいアドレスのの割り当て > 関連付ける
作成したIPの選択 > アクション > アドレスの関連付け
インスタンスに2で作成したNATインスタンスを指定して関連付ける
4. Private Route Tableの作成
VPC > ルートテーブル > ルートテーブルの作成
項目 | 設定値 | 説明 |
---|---|---|
ネームタグ | private-subnet | 分かりやすい名前を設定 |
VPC | 作成したVPCを選択 | このルートテーブルに使用するVPC |
5. ルートテーブルにNATインスタンスを追加
- 4で作成したルートテーブルを選択
- 下タブのルートを選択
- 編集を選択
- 送信先を
0.0.0.0/0
、ターゲットを2で作成したNATインスタンスを選択 - 保存
6. Private Subnetにルートテーブルを設定
- 1で作成したPublic Subnetを選択
- 下メニューのルートテーブルを選択
- 編集を選択
- 変更先に4で作成したルートテーブルを選択
Private Network内にインスタンスを作成
インスタンスの詳細
セキュリティグループ
インバウンド
タイプ | ポート | 送信元 |
---|---|---|
HTTP | 80 | 10.0.0.0/16 |
HTTPS | 443 | 10.0.0.0/16 |
SSH | 22 | 10.0.0.0/16 |
アウトバウンド
タイプ | ポート | 送信元 |
---|---|---|
ALL Traffic | ALL | 0.0.0.0/0 |
疎通確認
NATへSSH接続
$ ssh -i <ec2-user-key> ec2-user@<Elastic IP>
インターネット接続確認
$ ping google.com $ curl google.com
Private Instance へSSH接続
$ ssh -i <ec2-user-key> ec2-user@<Private IP>
インターネット接続確認
$ ping google.com $ curl google.com
ハマった部分
主にセキュリティグループの設定で、Private Subnet(10.0.1.0/16)に設定しており、Private Instanceでネットワークに接続が出来なくて半日ぐらいハマってしまったorz
ネットワークの復讐をしないとな...