AWS NAT構成の作り方(NATゲートウェイ編)

AWSでのNAT接続を実現する方法を備忘を兼ねて記載。

[NATインスタンス編はこちら](http://qiita.com/TK1989/items/ece84500ee87d2d96c4b)

#NAT構成の必要性
簡単にいうと、
インターネットから接続される必要のないインスタンスについて、
インターネットからの接続を遮断しつつ、
自身はインターネットに接続を出来るようにするため。
外部から接続される危険性を減らすことと、
ライブラリの取得などで必要になる外部への接続の両立が可能となる。

#参考
シナリオ 2: パブリックサブネットとプライベートサブネットを持つ VPC（NAT）
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

NATゲートウェイ
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html

#注意
NATゲートウェイはAWSの12ヶ月無料利用枠の対象外です。
(2016/10/23 現在)


#NAT構成の作り方(NATゲートウェイ)
マネジメントコンソール(GUI)にて作成


##VPC

| 項目名 | 設定値 |
|:--|:--|
| ネームタグ | nat-test-vpc |
| CIDRブロック | 192.168.0.0/24 |
| テナンシー | デフォルト |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/a964ce9f-4382-7904-bbd0-592fe8a4e77a.png)


##サブネット作成

###パブリック用サブネット作成

| 項目名 | 設定値 |
|:--|:--|
| ネームタグ | nat-test-public-1a-subnet |
| VPC | nat-test-vpc|
| アベイラビリティーゾーン | ap-northeast-1a |
| CIDRブロック | 192.168.0.0/25 |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/bf101be0-100a-432a-b865-dc7bc254395c.png)


###プライベート用サブネット作成

| 項目名 | 設定値 |
|:--|:--|
| ネームタグ | nat-test-private-1a-subnet |
| VPC | nat-test-vpc|
| アベイラビリティーゾーン | ap-northeast-1a |
| CIDRブロック | 192.168.0.128/25 |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/c71b5753-a662-3141-01f9-e20fbb0322c0.png)


##IGW(インターネットゲートウェイ)作成
###インターネットゲートウェイ作成
| 項目名 | 設定値 |
|:--|:--|
| ネームタグ | nat-test-igw |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/cd8b6132-c21f-04b2-c539-dd18c7b60667.png)


###インターネットゲートウェイをVPCにアタッチ
| 項目名 | 設定値 |
|:--|:--|
| VPC | nat-test-vpc |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/85c6b2b7-1ee1-c2b1-08b2-bfb4c4c26134.png)


##NATゲートウェイ

| 項目名 | 設定値 |
|:--|:--|
| サブネット | nat-test-public-1a-subnet |
| Elastic IP 割り当て ID | 新しいEIPの作成 |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/31f85644-1a31-4a61-0f3f-a0c5224e07fd.png)


##ルートテーブル作成
###カスタムルートテーブル作成

| 項目名 | 設定値 |
|:--|:--|
| ネームタグ | nat-test-public-rt |
| VPC | nat-test-vpc |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/d1147368-e511-b83d-9b98-02436a92a9fc.png)


###メインルートテーブル編集

####ルート追加
ルートにNATゲートウェイを追加

| 送信先 | ターゲット |
|:-:|:-:|
| 0.0.0.0/0 |  nat-test-igw |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/eb4a3935-5877-eae0-0a0b-315174cd1601.png)


####プライベート用サブネット割り当て
サブネットの関連付けで、
**nat-test-private-1a-subnet**
を関連付ける。

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/cfadca89-01ac-f3ef-5e00-a22d65e3e0c5.png)


####ネームタグ変更
変更ついでにネームタグを
**nat-test-private-rt**
に変更して、
ルートテーブルの役割を名前から判別しやすくしておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/ebee1b2c-e680-f758-748d-c5abca859cec.png)


###カスタムルートテーブル編集

####パブリック用サブネット割り当て
サブネットの関連付けで、
**nat-test-public-1a-subnet**
を関連付ける。

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/20b4d7d1-b5d9-ee0d-3f0c-cbe519eb1a8d.png)


####ルート追加
ルートにインターネットゲートウェイを追加

| 送信先 | ターゲット |
|:-:|:-:|
| 0.0.0.0/0 |  nat-test-igw |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/7a3a7a81-4bc4-dfdf-dab4-3ed85ffe7f00.png)


##セキュリティグループ

NAT接続インスタンス用セキュリティグループ

| 項目名 | 設定値 |
|:--|:--|
| セキュリティグループ名 | nat-test-ap-sg |
| 説明 | security group for ap |
| VPC | nat-test-vpc |

インバウンド

| タイプ | プロトコル | ポート範囲 | 送信元 |
|:--|:--|:--|:--|
| SSH | TCP | 22 | 踏み台サーバーのIP or セキュリティグループ |

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/6e82ad87-0194-7ed7-30a2-b4b19093e2cb.png)


##EC2作成

設定値(重要な箇所のみ抜粋)

| 項目名 | 設定値 |
|:--|:--|
| AMI | なんでも<br>(検証ではAmazon Linux：ami-1a15c77b <br>(2016/10時点の東京リージョン最新Amazon Linux用AMI)を使用) |
| ネットワーク | nat-test-vpc |
| サブネット | nat-test-private-1a-subnet |
| 自動割り当てパブリックIP | 無効 |
| セキュリティグループ | nat-test-ap-sg |


##動作確認

踏み台サーバーからNAT接続するインスタンスにログインし、
pingやcurlでインターネットに接続できることを確認する。

`ping google.co.jp`
`curl http://google.co.jp/`

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/8a9d33bc-e7a7-a793-8a3b-b3fcf10dbaee.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/143854/d20d7ce9-6410-43b7-549f-1caad1c3b3f1.png)

#最後に
NATゲートウェイを作成することで、
NATインスタンスを使用するより(若干)簡単にNAT接続を行うことができます。

またAWSが用意するサービスであるので、
デフォルトで冗長性が担保されています。

では、NAT接続をすべてNATゲートウェイで行えばいいのかというと、
そういうわけでもないようです。

NAT インスタンスと NAT ゲートウェイの比較
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpc-nat-comparison.html
によると、監視やカスタマイズを柔軟に行おうとするとNATインスタンスのほうが良いようです。(※よくわかっていない)

結局、双方のメリット・デメリットを見て、
どちらを選択するのかということになるようです。

※記述ミス・認識違いなどがあれば、ご指摘いただけると幸いです。