メニュー
Amazon Virtual Private Cloud
ユーザーガイド

NAT インスタンス

VPC でパブリックサブネットのネットワークアドレス変換 (NAT) インスタンスを使用し、プライベートサブネットのインスタンスからはインターネットや他の AWS サービスへのアウトバウンドトラフィックを開始できるが、インターネット上で他の人が開始したインバウンドトラフィックはインスタンスで受信しないようにすることができます。

パブリックサブネットとプライベートサブネットの詳細については、「サブネットのルーティング」を参照してください。NAT の詳細については、「NAT」を参照してください。

Note

また、NAT ゲートウェイを使用することもできます。NAT ゲートウェイはマネージド NAT サービスであり、可用性と帯域幅に優れ、運用管理の手間を節約できます。一般的ユースケースには、NAT インスタンスではなく NAT ゲートウェイを使用することをお勧めします。詳細については、「NAT ゲートウェイ」および「NAT インスタンスと NAT ゲートウェイの比較」を参照してください。

NAT インスタンスの基本

次の図は、NAT インスタンスの基本を示しています。メインルートテーブルは、プライベートサブネット内のインスタンスからパブリックサブネット内の NAT インスタンスにトラフィックを送信します。NAT インスタンスは、そのトラフィックを VPC のインターネットゲートウェイに送信します。トラフィックは NAT インスタンスの Elastic IP アドレスによってもたらされます。NAT インスタンスは応答用に大きなポート番号を指定します。応答が戻ってきた場合、NAT インスタンスはそれをプライベートサブネット内のインスタンスに、応答用のポート番号に基づいて送信します。

NAT インスタンスの設定

Amazon では、NAT インスタンスとして実行されるように設定された Amazon Linux AMI を提供しています。これらの AMI の名前には文字列 amzn-ami-vpc-nat が含まれているので、Amazon EC2 コンソールで検索できます。NAT AMI からインスタンスを起動すると、次の設定がインスタンスで発生します。

  • IPv4 転送が有効になり、ICMP リダイレクトが /etc/sysctl.d/10-nat-settings.conf で無効になります

  • /usr/sbin/configure-pat.sh にあるスクリプトが起動時に実行され、iptables IP マスカレードが設定されます

NAT インスタンスの制限は、リージョンのインスタンスタイプの制限によって決まります。詳細については、「EC2 のよくある質問」を参照してください。使用できる NAT AMI のリストについては、「Amazon Linux AMI マトリックス」を参照してください。

NAT インスタンスを設定する

VPC ウィザードを使用すると、NAT インスタンスで VPC を設定できます。詳細については、「シナリオ 2: パブリックサブネットとプライベートサブネットを持つ VPC(NAT)」を参照してください。ウィザードは、NAT インスタンスの起動やルーティングのセットアップなどの多くの設定ステップを実行します。 ただし、必要に応じて、次のステップを使用して VPC と NAT インスタンスを手動で作成および設定することができます。

  1. 2 つのサブネットを持つ VPC を作成します。

    Note

    次のステップは、手動で VPC を作成および設定するためです。VPC ウィザードを使用する VPC の作成ではありません。

    1. VPC を作成する(「VPC を作成する」を参照)

    2. 2 つのサブネットを作成する(「サブネットを作成する」を参照)

    3. インターネットゲートウェイを VPC にアタッチする(「インターネットゲートウェイをアタッチする」を参照)

    4. VPC の外部あてのトラフィックをインターネットゲートウェイに送信するカスタムルートテーブルを作成し、1 つのサブネットに関連付けて、パブリックサブネットにする(「カスタムルートテーブルを作成する」を参照)

  2. NATSG セキュリティグループを作成します(「NATSG セキュリティグループを作成する」を参照)。このセキュリティグループは、NAT インスタンスの起動時に指定します。

  3. NAT インスタンスとして実行されるように設定された AMI からパブリックサブネット内にインスタンスを起動します。Amazon では、NAT インスタンスとして実行されるように設定された Amazon Linux AMI を提供しています。これらの AMI の名前には文字列 amzn-ami-vpc-nat が含まれているので、Amazon EC2 コンソールで検索できます。

    1. Amazon EC2 コンソールを開きます。

    2. ダッシュボードで、[インスタンスの作成] ボタンを選択し、次のようにウィザードを実行します。

      1. [Amazon マシンイメージ (AMI)] ページで、[コミュニティ AMI] カテゴリを選択し、amzn-ami-vpc-nat を探します。結果のリストでは、各 AMI の名前には、最新の AMI を選択することができるバージョンが含まれています(2013.09 など)。[選択] を選択します。

      2. [インスタンスタイプの選択] ページでインスタンスタイプを選択し、[次の手順: インスタンスの詳細の設定] を選択します。

      3. [インスタンスの詳細の設定] ページで、[ネットワーク] のリストから作成した VPC を選択し、[サブネット] のリストからパブリックサブネットを選択します。

      4. (オプション)[パブリック IP] チェックボックスをオンにして、NAT インスタンスがパブリック IP アドレスを受け取るように指定します。ここでパブリック IP アドレスを割り当てない場合、Elastic IP アドレスを割り当てて、インスタンスの起動後にそのアドレスをインスタンスに割り当てることができます。起動時のパブリック IP の割り当ての詳細については、「起動中のパブリック IP アドレスの割り当て」を参照してください。[次の手順: ストレージの追加] を選択します。

      5. インスタンスにストレージを追加することができます。次のページでは、タグを追加できます。完了したら、[次の手順: セキュリティグループの設定] を選択します。

      6. [セキュリティグループの設定] ページで、[既存のセキュリティグループを選択する] オプションを選択し、作成した NATSG セキュリティグループを選択します。[確認と作成] を選択します。

      7. 選択した設定を確認します。必要な変更を行い、[作成] を選択し、キーペアを選択してインスタンスを起動します。

  4. (オプション)NAT インスタンスに接続し、必要に応じて修正を加え、NAT インスタンスとして実行されるように設定された独自の AMI を作成します。この AMI は、次回 NAT インスタンスを起動する必要があるときに使用できます。AMI の作成の詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Amazon EBS-Backed AMI の作成」を参照してください。

  5. NAT インスタンスの SrcDestCheck 属性を無効にします(「送信元/送信先チェックを無効にする」を参照)。

  6. 起動時に NAT インスタンスにパブリック IP アドレスを割り当てていない場合(手順 3)、Elastic IP アドレスをそのインスタンスに関連付ける必要があります。

    1. https://console.aws.amazon.com/vpc/にある Amazon VPC コンソールを開きます。

    2. ナビゲーションペインで [Elastic IP] を選択し、[新しいアドレスの割り当て] を選択します。

    3. [新しいアドレスの割り当て] ダイアログボックスの [ネットワークプラットフォーム] のリストで [EC2-VPC] を選択し、[はい、割り当てる] を選択します。

    4. リストで Elastic IP アドレスを選択し、[Associate Address] ボタンを選択します。

    5. [Associate Address] ダイアログボックスで、NAT インスタンスのネットワークインターフェイスを選択します。[プライベート IP アドレス] のリストから、EIP を関連付けるアドレスを選択し、[はい、関連付ける] を選択します。

  7. メインルートテーブルを更新して、NAT インスタンスにトラフィックを送信します。詳細については、「メインルートテーブルを更新する」を参照してください。

コマンドラインを使用した NAT インスタンスの起動

サブネット内に NAT インスタンスを起動するには、次のいずれかのコマンドを使用します。これらのコマンドラインインターフェイスの詳細については、「Amazon VPC へのアクセス」を参照してください。

NAT インスタンスとして実行するように設定された AMI の ID を取得するには、イメージの詳細を確認するためのコマンドを使用し、Amazon が所有する AMI に関連した結果(名前に文字列 amzn-ami-vpc-nat が含まれています)のみを返すフィルタを使用します。次の例では、AWS CLI を使用します。

PROMPT> aws ec2 describe-images --filter Name="owner-alias",Values="amazon" --filter Name="name",Values="amzn-ami-vpc-nat*" 

NATSG セキュリティグループを作成する

次の表に示すように NATSG セキュリティグループを定義し、NAT インスタンスを有効にして、インターネットに接続されたトラフィックを、プライベートサブネットのインスタンスから受け取ります。また、SSH トラフィックをネットワークから受け取ります。また、NAT インスタンスは、ネットワークにトラフィックを送信することもできます。これにより、プライベートサブネットのインスタンスがソフトウェア更新を取得できます。

NATSG: 推奨ルール

インバウンド
送信元 プロトコル ポート範囲 コメント

10.0.1.0/24

TCP

80

プライベートサブネットのサーバーからのインバウンド HTTP トラフィックを許可する

10.0.1.0/24

TCP

443

プライベートサブネットのサーバーからのインバウンド HTTPS トラフィックを許可する

ホームネットワークのパブリック IP アドレスの範囲

TCP

22

ホームネットワークから NAT インスタンスへのインバウンド SSH アクセス(インターネットゲートウェイ経由)を許可する

アウトバウンド

送信先 プロトコル ポート範囲 コメント

0.0.0.0/0

TCP

80

インターネットへのアウトバウンド HTTP アクセスを許可する

0.0.0.0/0

TCP

443

インターネットへのアウトバウンド HTTPS アクセスを許可する


NATSG セキュリティグループを作成するには

  1. https://console.aws.amazon.com/vpc/にある Amazon VPC コンソールを開きます。

  2. ナビゲーションペインで [Security Groups] を選択して、[Create Security Group] を選択します。

  3. [Create Security Group] ダイアログボックスで、セキュリティグループ名として NATSG を指定し、説明を入力します。[VPC] リストで VPC の ID を選択し、[Yes, Create] を選択します。

  4. 先ほど作成した NATSG セキュリティグループを選択します。詳細ペインに、セキュリティグループの詳細と、インバウンドルールおよびアウトバウンドルールを操作するためのタブが表示されます。

  5. 次に示すように、[Inbound Rules] タブを使用して、インバウンドトラフィックのルールを追加します。

    1. [Edit] を選択します。

    2. [Add another rule] を選択し、[Type] リストから [HTTP] を選択します。[Source] フィールドで、プライベートサブネットの IP アドレス範囲を指定します。

    3. [Add another rule] を選択し、[Type] リストから [HTTPS] を選択します。[Source] フィールドで、プライベートサブネットの IP アドレス範囲を指定します。

    4. [Add another rule] を選択し、[Type] リストから [SSH] を選択します。[Source] フィールドで、ネットワークのパブリック IP アドレス範囲を指定します。

    5. [Save] を選択します。

  6. 次に示すように、[Outbound Rules] タブを使用して、アウトバウンドトラフィックのルールを追加します。

    1. [Edit] を選択します。

    2. [Add another rule] を選択し、[Type] リストから [HTTP] を選択します。[Destination] フィールドで、[0.0.0.0/0] と指定します。

    3. [Add another rule] を選択し、[Type] リストから [HTTPS] を選択します。[Destination] フィールドで、[0.0.0.0/0] と指定します。

    4. [Save] を選択します。

セキュリティグループの詳細については、VPC のセキュリティグループ を参照してください。

送信元/送信先チェックを無効にする

EC2 インスタンスは、送信元/送信先チェックをデフォルトで実行します。つまり、そのインスタンスは、そのインスタンスが送受信する任意のトラフィックの送信元または送信先である必要があります。しかし、NAT インスタンスは、送信元または送信先がそのインスタンスでないときにも、トラフィックを送受信できなければなりません。したがって、NAT インスタンスでは送信元/送信先チェックを無効にする必要があります。

実行中または停止している NAT インスタンスの SrcDestCheck 属性は、コンソールまたはコマンドラインを使用して無効にできます。

コンソールを使用して、送信元/送信先チェックを無効にするには

  1. https://console.aws.amazon.com/ec2/)にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. NAT インスタンスを選択して、[Actions] を選択し、次に [Networking] を選択して、[Change Source/Dest.Check] を選択します。

  4. NAT インスタンスの場合は、この属性が無効になっていることを確認します。それ以外の場合は、[Yes, Disable] を選択します。

コマンドラインを使用して送信元/送信先チェックを無効にするには

次のコマンドの 1 つを使用できます。これらのコマンドラインインターフェイスの詳細については、Amazon VPC へのアクセス を参照してください。

メインルートテーブルを更新する

メインルートテーブルを以下の手順にしたがって更新します。デフォルトでは、メインルートテーブルによって、VPC 内のインスタンスはお互いに通信することができます。その他のすべてのサブネットトラフィックを NAT インスタンスに送信するルートが追加されます。

メインルートテーブルを更新するには

  1. https://console.aws.amazon.com/vpc/にある Amazon VPC コンソールを開きます。

  2. ナビゲーションペインで、[Route Tables] を選択します。

  3. VPC 用のメインルートテーブルを選択します。詳細ペインには、ルート、関連付け、ルートのプロパゲーションを操作するタブが表示されます。

  4. [Routes] タブで [Edit] を選択し、[0.0.0.0/0Destination] ボックスに [] と指定します。次に、[Target] リストから NAT インスタンスのインスタンス ID を選択して、[Save] を選択します。

  5. [Subnet Associations] タブで [Edit] を選択し、サブネットの [Associate] チェックボックスをオンにします。[Save] を選択します。

ルートテーブルの詳細については、「ルートテーブル」を参照してください。

NAT インスタンスの設定のテスト

NAT インスタンスを起動して上記の設定手順を完了したら、テストを実行し、NAT インスタンスを踏み台サーバーとして使うことで、NAT インスタンス経由でプライベートサブネットのインスタンスからインターネットにアクセスできるかどうかを確認できます。これを行うには、インバウンドおよびアウトバウンドの ICMP トラフィックとアウトバウンドの SSH トラフィックを許可するように NAT インスタンスのセキュリティグループルールを更新し、プライベートサブネットでインスタンスを起動します。次に、プライベートサブネットのインスタンスにアクセスするように SSH エージェント転送を設定し、インスタンスに接続して、インターネット接続をテストします。

NAT インスタンスのセキュリティグループを更新するには

  1. https://console.aws.amazon.com/ec2/)にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Security Groups] を選択します。

  3. NAT インスタンスに関連付けられたセキュリティグループを探し、[Inbound] タブで [Edit] を選択します。

  4. [Add Rule] を選択し、[Type] リストから [All ICMP] を、[Source] リストから [Custom IP] を選択します。プライベートサブネットの IP アドレス範囲(例: 10.0.1.0/24)を入力します。[Save] を選択します。

  5. [Outbound] タブで、[Edit] を選択します。

  6. [Add Rule] を選択し、[Type] リストから [SSH] を、[Source] リストから [Custom IP] を選択します。プライベートサブネットの IP アドレス範囲(例: 10.0.1.0/24)を入力します。[Save] を選択します。

  7. [Add Rule] を選択し、[Type] リストから [All ICMP] を、[Source] リストから [Custom IP] を選択します。「0.0.0.0/0」と入力し、[Save] を選択します。

プライベートサブネット内にインスタンスを起動するには

  1. https://console.aws.amazon.com/ec2/)にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. プライベートサブネット内にインスタンスを起動します。詳細については、「サブネット内にインスタンスを起動する」を参照してください。起動ウィザードの次のオプションを必ず設定し、[Launch] を選択します。

    • [Choose an Amazon Machine Image (AMI)] ページで、[Quick Start] カテゴリから [Amazon Linux AMI] を選択します。

    • [Configure Instance Details] ページで、[Subnet] リストからプライベートサブネットを選択します。このときに、インスタンスにパブリック IP アドレスを割り当てないでください。

    • [Configure Security Group] ページで、NAT インスタンスのプライベート IP アドレスからの SSH アクセス、またはパブリックサブネットの IP アドレス範囲からの SSH アクセスを許可するインバウンドルールがセキュリティグループに含まれていて、アウトバウンド ICMP トラフィックを許可するアウトバウンドルールがあることを確認します。

    • [Select an existing key pair or create a new key pair] ダイアログボックスで、NAT インスタンスの起動に使用したのと同じキーペアを選択します。

Linux または OS X の SSH エージェント転送を設定するには

  1. ローカルマシンから、認証エージェントにプライベートキーを追加します。

    Linux の場合、次のコマンドを使用します。

    PROMPT> ssh-add -c mykeypair.pem

    OS X の場合、次のコマンドを使用します。

    PROMPT> ssh-add -K mykeypair.pem
  2. -A オプションを使用して NAT インスタンスに接続し、SSH エージェント転送を有効にします。その例を次に示します。

    ssh -A ec2-user@54.0.0.123

Windows(PuTTY)用に SSH エージェント転送を設定するには

  1. 既にインストールされていない場合は、PuTTY のダウンロードページから Pageant をダウンロードしてインストールします。

  2. プライベートキーを .ppk 形式に変換します。詳細については、「PuTTYgen を使用したプライベートキーの変換」を参照してください。

  3. Pageant を起動し、[Add Key] を選択します。作成した .ppk ファイルを選択し、必要に応じてパスフレーズを入力します。次に [OK] を選択し、[Pageant Key List] ウィンドウを閉じます。

  4. PuTTY セッションを開始して NAT インスタンスに接続します。[Auth] カテゴリで、必ず [Allow agent forwarding] オプションを選択し、[Private key file for authentication] フィールドは空のままにします。

インターネット接続をテストするには

  1. ICMP が有効なウェブサイトに対して ping コマンドを実行して、NAT インスタンスがインターネットと通信できることをテストします。例:

    PROMPT> ping ietf.org
    
    PING ietf.org (4.31.198.44) 56(84) bytes of data.
    64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=48 time=74.9 ms
    64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=48 time=75.1 ms
    ...

    ping コマンドをキャンセルするには、Ctrl + C を押します。

  2. NAT インスタンスから、プライベート IP アドレスを使用してプライベートサブネットのインスタンスに接続します。例:

    PROMPT> ssh ec2-user@10.0.1.123
  3. プライベートインスタンスから ping コマンドを実行して、インターネットに接続できることをテストします。

    PROMPT> ping ietf.org
    
    PING ietf.org (4.31.198.44) 56(84) bytes of data.
    64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=47 time=86.0 ms
    64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=47 time=75.6 ms
    ...

    ping コマンドをキャンセルするには、Ctrl + C を押します。

    ping コマンドが失敗した場合、次の情報を確認します。

    • NAT インスタンスのセキュリティグループルールで、プライベートサブネットからのインバウンド ICMP トラフィックを許可していることを確認します。許可していない場合、NAT インスタンスはプライベートインスタンスから ping コマンドを受け取ることができません。

    • ルートテーブルが正しく設定されていることを確認します。詳細については、「メインルートテーブルを更新する」を参照してください。

    • NAT インスタンスの送信元/送信先チェックを無効にしたことを確認します。詳細については、「送信元/送信先チェックを無効にする」を参照してください。

    • ICMP を有効にしたウェブサイトに対して ping を実行していることを確認します。そうでない場合、応答パケットを受け取ることはできません。これをテストするには、自分のコンピュータのコマンドラインターミナルから同じ ping コマンドを実行します。

  4. (オプション)必要がなくなった場合は、プライベートインスタンスを終了します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスの終了」を参照してください。