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

NAT インスタンス

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

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

NAT は IPv6 トラフィックには対応していないため、Egress-Only インターネットゲートウェイを使用します。詳細については、「Egress-Only インターネットゲートウェイ」を参照してください。

注記

また、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. Create a VPC with two subnets.

    注記

    The steps below are for manually creating and configuring a VPC; not for creating a VPC using the VPC wizard.

    1. Create a VPC (see VPC を作成する)

    2. Create two subnets (see サブネットを作成する)

    3. Attach an Internet gateway to the VPC (see インターネットゲートウェイをアタッチする)

    4. Create a custom route table that sends traffic destined outside the VPC to the Internet gateway, and then associate it with one subnet, making it a public subnet (see カスタムルートテーブルを作成する)

  2. Create the NATSG security group (see NATSG セキュリティグループを作成する). You'll specify this security group when you launch the NAT instance.

  3. Launch an instance into your public subnet from an AMI that's been configured to run as a NAT instance. Amazon provides Amazon Linux AMIs that are configured to run as NAT instances. These AMIs include the string amzn-ami-vpc-nat in their names, so you can search for them in the Amazon EC2 console.

    1. Open the Amazon EC2 console.

    2. On the dashboard, choose the Launch Instance button, and complete the wizard as follows:

      1. On the Choose an Amazon Machine Image (AMI) page, select the Community AMIs category, and search for amzn-ami-vpc-nat. In the results list, each AMI's name includes the version to enable you to select the most recent AMI, for example, 2013.09. Choose Select.

      2. On the Choose an Instance Type page, select the instance type, then choose Next: Configure Instance Details.

      3. On the Configure Instance Details page, select the VPC you created from the Network list, and select your public subnet from the Subnet list.

      4. (Optional) Select the Public IP check box to request that your NAT instance receives a public IP address. If you choose not to assign a public IP address now, you can allocate an Elastic IP address and assign it to your instance after it's launched. For more information about assigning a public IP at launch, see インスタンス起動時のパブリック IPv4 アドレスの割り当て. Choose Next: Add Storage.

      5. You can choose to add storage to your instance, and on the next page, you can add tags. Choose Next: Configure Security Group when you are done.

      6. On the Configure Security Group page, select the Select an existing security group option, and select the NATSG security group that you created. Choose Review and Launch.

      7. Review the settings that you've chosen. Make any changes that you need, and then choose Launch to choose a key pair and launch your instance.

  4. (Optional) Connect to the NAT instance, make any modifications that you need, and then create your own AMI that's configured to run as a NAT instance. You can use this AMI the next time that you need to launch a NAT instance. For more information about creating an AMI, see Creating Amazon EBS-Backed AMIs in the Linux インスタンス用 Amazon EC2 ユーザーガイド.

  5. Disable the SrcDestCheck attribute for the NAT instance (see 送信元/送信先チェックを無効にする)

  6. If you did not assign a public IP address to your NAT instance during launch (step 3), you need to associate an Elastic IP address with it.

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

    2. In the navigation pane, choose Elastic IPs, and then choose Allocate new address.

    3. Choose Allocate.

    4. Select the Elastic IP address from the list, and then choose Actions, Associate address.

    5. Select the network interface resource, then select the network interface for the NAT instance. Select the address to associate the Elastic IP with from the Private IP list, and then choose Associate.

  7. Update the main route table to send traffic to the NAT instance. For more information, see メインルートテーブルを更新する.

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

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

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

Copy
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 アクセスを許可する

To create the NATSG security group

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

  2. In the navigation pane, choose Security Groups, and then choose Create Security Group.

  3. In the Create Security Group dialog box, specify NATSG as the name of the security group, and provide a description. Select the ID of your VPC from the VPC list, and then choose Yes, Create.

  4. Select the NATSG security group that you just created. The details pane displays the details for the security group, plus tabs for working with its inbound and outbound rules.

  5. Add rules for inbound traffic using the Inbound Rules tab as follows:

    1. Choose Edit.

    2. Choose Add another rule, and select HTTP from the Type list. In the Source field, specify the IP address range of your private subnet.

    3. Choose Add another rule, and select HTTPS from the Type list. In the Source field, specify the IP address range of your private subnet.

    4. Choose Add another rule, and select SSH from the Type list. In the Source field, specify the public IP address range of your network.

    5. Choose Save.

  6. Add rules for outbound traffic using the Outbound Rules tab as follows:

    1. Choose Edit.

    2. Choose Add another rule, and select HTTP from the Type list. In the Destination field, specify 0.0.0.0/0

    3. Choose Add another rule, and select HTTPS from the Type list. In the Destination field, specify 0.0.0.0/0

    4. Choose Save.

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

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

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

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

To disable source/destination checking using the console

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

  2. In the navigation pane, choose Instances.

  3. Select the NAT instance, choose Actions, select Networking, and then select Change Source/Dest. Check.

  4. For the NAT instance, verify that this attribute is disabled. Otherwise, choose Yes, Disable.

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

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

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

VPC 内のプライベートサブネットはカスタムルートテーブルに関連付けられないため、メインルートテーブルを使用します。デフォルトでは、メインルートテーブルによって、VPC 内のインスタンスはお互いに通信することができます。その他のすべてのサブネットトラフィックを NAT インスタンスに送信するルートを追加する必要があります。

To update the main route table

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

  2. In the navigation pane, choose Route Tables.

  3. Select the main route table for your VPC (the Main column displays Yes) . The details pane displays tabs for working with its routes, associations, and route propagation.

  4. On the Routes tab, choose Edit, specify 0.0.0.0/0 in the Destination box, select the instance ID of the NAT instance from the Target list, and then choose Save.

  5. On the Subnet Associations tab, choose Edit, and then select the Associate check box for the subnet. Choose Save.

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

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

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

To update your NAT instance's security group

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

  2. In the navigation pane, choose Security Groups.

  3. Find the security group associated with your NAT instance, and choose Edit in the Inbound tab.

  4. Choose Add Rule, select All ICMP from the Type list, and select Custom IP from the Source list. Enter the IP address range of your private subnet, for example, 10.0.1.0/24. Choose Save.

  5. In the Outbound tab, choose Edit.

  6. Choose Add Rule, select SSH from the Type list, and select Custom IP from the Source list. Enter the IP address range of your private subnet, for example, 10.0.1.0/24. Choose Save.

  7. Choose Add Rule, select All ICMP from the Type list, and select Custom IP from the Source list. Enter 0.0.0.0/0, and then choose Save.

To launch an instance into your private subnet

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

  2. In the navigation pane, choose Instances.

  3. Launch an instance into your private subnet. For more information, see サブネット内にインスタンスを起動する. Ensure that you configure the following options in the launch wizard, and then choose Launch:

    • On the Choose an Amazon Machine Image (AMI) page, select an Amazon Linux AMI from the Quick Start category.

    • On the Configure Instance Details page, select your private subnet from the Subnet list, and do not assign a public IP address to your instance.

    • On the Configure Security Group page, ensure that your security group includes an inbound rule that allows SSH access from your NAT instance's private IP address, or from the IP address range of your public subnet, and ensure that you have an outbound rule that allows outbound ICMP traffic.

    • In the Select an existing key pair or create a new key pair dialog box, select the same key pair you used to launch the NAT instance.

To configure SSH agent forwarding for Linux or OS X

  1. From your local machine, add your private key to the authentication agent.

    For Linux, use the following command:

    Copy
    ssh-add -c mykeypair.pem

    For OS X, use the following command:

    Copy
    ssh-add -K mykeypair.pem
  2. Connect to your NAT instance using the -A option to enable SSH agent forwarding, for example:

    Copy
    ssh -A ec2-user@54.0.0.123

To configure SSH agent forwarding for Windows (PuTTY)

  1. Download and install Pageant from the PuTTY download page, if not already installed.

  2. Convert your private key to .ppk format. For more information, see Converting Your Private Key Using PuTTYgen.

  3. Start Pageant, right-click the Pageant icon on the taskbar (it may be hidden), and choose Add Key. Select the .ppk file you created, enter the passphrase if required, and choose Open.

  4. Start a PuTTY session to connect to your NAT instance. In the Auth category, ensure that you select the Allow agent forwarding option, and leave the Private key file for authentication field blank.

To test the Internet connection

  1. Test that your NAT instance can communicate with the Internet by running the ping command for a website that has ICMP enabled; for example:

    Copy
    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
    ...

    Press Ctrl+C on your keyboard to cancel the ping command.

  2. From your NAT instance, connect to your instance in your private subnet by using its private IP address, for example:

    Copy
    ssh ec2-user@10.0.1.123
  3. From your private instance, test that you can connect to the Internet by running the ping command:

    Copy
    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
    ...

    Press Ctrl+C on your keyboard to cancel the ping command.

    If the ping command fails, check the following information:

    • Check that your NAT instance's security group rules allow inbound ICMP traffic from your private subnet. If not, your NAT instance cannot receive the ping command from your private instance.

    • Check that you've configured your route tables correctly. For more information, see メインルートテーブルを更新する.

    • Ensure that you've disabled source/destination checking for your NAT instance. For more information, see 送信元/送信先チェックを無効にする.

    • Ensure that you are pinging a website that has ICMP enabled. If not, you will not receive reply packets. To test this, perform the same ping command from the command line terminal on your own computer.

  4. (Optional) Terminate your private instance if you no longer require it. For more information, see Terminate Your Instance in the Linux インスタンス用 Amazon EC2 ユーザーガイド.