本記事では、AWSでNATを使い、プライベートサブネットからインターネットへの通信のみを許可する方法を紹介します。
NATとは
NATは、プライベートなIPアドレス(家庭内LANなど)をパブリックなIPアドレスに変換する技術です。この技術は例えば、インターネットと接続不可能なネットワークの中にあるサーバに、ソフトウェアをインストールすることなどに用いることができます。
今回は、AWSを使ってプライベートネットワークの中のサーバにMySQLをインストールします。
VPCの設定
VPCの作成
VPCは、基本的に以下の設定で作成しました。
プライベートサブネットの作成
次に、先ほど作成したVPCの中にプライベートサブネットを作成します。
設定は以下のようにしました。
EC2インスタンスの作成
プライベートサブネット内にインスタンスを作成
EC2を使ってインスタンスを作成します。AMIなど、基本的に無料利用枠の種類しか使いません。特に、ネットワーク周りの設定は以下のようにしました。
- ネットワークに先ほど作成したVPCを設定
- サブネットはプライベートサブネット
- 自動割り当てパブリックIPは無効
踏み台用のサーバを構築
こちらでは、プライベートサブネット内に作成したサーバにSSH接続するためのサーバを作成します。最初に、以下の作業を行う必要があります。
- パブリックサブネットを構築
- インターネットゲートウェイの作成
- ルートテーブルの作成
これらを済ませた後、パブリックサブネット内にインスタンスを作成します。主に以下のように設定する必要があります。
秘密鍵の送信
プライベートサブネット内にサーバを作成した際にダウンロードした(もしくは既存の)秘密鍵を、scpコマンドなどを使って送ります。
その後、パブリックサブネット内に作成したサーバから、SSH接続できることを確認します。
pingコマンドを用いた通信の確認
次に、プライベートサブネット内に作成したサーバが本当に外部と通信ができないのかをpingコマンドを用いて確認します。
この際、あらかじめICMPプロトコルをプライベートサブネットのセキュリティグループに追加しておくことに注意してください。これがないとそもそもpingが許可されていないことになってしまいます。
設定したら、pingコマンドを使って確認します。
上の画像のように、pingコマンドを実行してもサーバと通信できてないことがわかります。これより、先ほど作成した仮想サーバは閉じられたネットワークの中にあることがわかります。
NATの構築
最後にNATを作成します。
NATは以下の設定で作成します。
サブネットにはパブリックサブネットを選択します。
ルートテーブルの編集
パブリックではないルートテーブルに以下のように設定を加えます。
これは、「0.0.0.0/0」に流れてきたデータを、先ほど作成したNATに送るように設定します。
通信の確認
NATを設定したら最後に、本当に外部と通信できるようになったのかを確認しましょう。先ほどと同じようにpingコマンドを実行して確認します。
実行すると以下のようになります。
しっかり通信できていることがわかりますね。
まとめ
本記事では、AWSでプライベートなネットワークから外部と通信する方法を紹介しました。これを利用すれば、ライブラリをインターネットを介してインストールしたい場合などで使えると思います。