背景
NATゲートウェイというものを理解したかった。
前提(NATゲートウェイとは)
EC2側からネットワークを使いたいがクライアントから通信したくないというときに利用する。パブリックなサーバー(踏み台サーバー)を介してインターネットを利用できる。
準備
VPCを準備する。
パブリックサブネットとプライベートサブネットを持つVPCを用意しよう!最終的にはこんな感じの構成になります。
プライベートIPアドレスに172.31を指定した意味は特にないです。10.0.0.0/16とかでも大丈夫です。
ポイントはIGW(インターネットゲートウェイ)の付いたルートテーブルとNATゲートウェイをくっつけたルートテーブルを作ることです。
まずはパブリックのルートテーブルの定義です。IGWとローカルでの通信ができるようにします。
続いてプライベート用のルートテーブルを作ります。ローカルでの通信とNATゲートウェイでの通信がしたいのでNATゲートウェイを作ります。
ここでの注意はパブリックのサブネットに置きます。また、Elastic IPも割り当てます。
作ったらこれをルート編集でプライベートのルートテーブルに付け加えます。
最終的にはこんな感じになります。
NATゲートウェイは文頭にnatが付きます。わかりやすい!
あとはEC2をパブリックとプライベートに置きます。もちろんパブリックのEC2にはパブリックIPを付けます。
キーペアはパブリック、サブネットで同じにするとスムーズです。今回はamazon linuxで作っておきます。
SSH接続
まずはパブリックサブネットに入りましょう。
$ ssh -i xxxxxxxxx.pem ec2-user@xx.xx.xx.xx(public-ip)
パブリックのEC2に、ローカルにあるキーペアをコピペしましょう。
$ vim xxxxxxxxx.pem
コピペしましょう
$ chmod 600 xxxxxxxxx.pem
権利を変更します。
次にパブリックサブネットからプライベートサブネットにssh接続しましょう。この時に使うのはプライベートIPです。
$ ssh -i xxxxxxxxx.pem ec2-user@xx.xx.xx.xx(private-ip)
これでプライベートサブネット内のEC2に入れます。
試しにgoogleにアクセスしてみましょう
curl https://www.google.com/
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head>...
たくさん文字列が表示されたら成功です。インターネットゲートウェイを付けずにインターネットに接続できました。
所感
VPCウィザードでなんとなく一緒に定義していたNATゲートウェイですが、プライベート性を保持しつつインターネットに接続できる便利な機能だというのが理解できました。AWSは箱庭みたいで楽しいです。