AWSでNATの設定をしてみよう

本記事では、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でプライベートなネットワークから外部と通信する方法を紹介しました。これを利用すれば、ライブラリをインターネットを介してインストールしたい場合などで使えると思います。