NAT インスタンス - Amazon Virtual Private Cloud

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

NAT インスタンス

NAT インスタンスはネットワークアドレス変換 (NAT) を提供します。NAT インスタンスを使用すると、プライベートサブネット内のリソースが、インターネットやオンプレミスネットワークなどの仮想プライベートクラウド (VPC) 外部の宛先と通信できます。プライベートサブネット内のリソースは、インターネットへのアウトバウンド IPv4 トラフィックを開始できますが、インターネット上で開始されたインバウンドトラフィックを受信することはできません。

重要

NAT AMI は、2018 年 3 月 31 日に標準サポートが終了し、2023 年 12 月 31 日にメンテナンスサポートが終了した Amazon Linux AMI の最新バージョンに基づいて構築されています。詳細については、ブログ投稿「Amazon Linux AMI のサポート終了」を参照してください。

既存の NAT AMI を使用する場合は、AWS が NATゲートウェイに移行することを推奨します。NAT ゲートウェイでは、可用性と帯域幅に優れ、運用管理の手間を軽減できます。詳細については、「NAT ゲートウェイと NAT インスタンスの比較」を参照してください。

NAT インスタンスが NAT ゲートウェイよりもユースケースに適している場合は、「」で説明されているように、現在のバージョンの Amazon Linux から独自の NAT AMI を作成できますNAT AMI を作成する

NAT インスタンスの基本

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

NAT インスタンスにはインターネットアクセスが必要なため、パブリックサブネット (インターネットゲートウェイへのルートがあるルートテーブルを持つサブネット) に存在し、パブリック IP アドレスまたは Elastic IP アドレスを持っている必要があります。


        NAT インスタンスの設定

NAT インスタンスを使い始めるには、NAT AMI を作成し、NAT インスタンスのセキュリティグループを作成して、NAT インスタンスを VPC で起動します。

NAT インスタンスのクォータは、リージョンのインスタンスのクォータによって異なります。詳細については、「AWS 全般のリファレンス」の「Amazon EC2 Service Quotas」を参照してください。

NAT インスタンス用の VPC を作成する

次の手順を使用して、パブリックサブネットとプライベートサブネットを持つ VPC を作成します。

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

  2. [Create VPC(VPC の作成)] を選択します。

  3. [Resources to create] (作成するリソース) で、[VPC and more] (VPC など) を選択します。

  4. [名前タグの自動生成] に、VPC の名前を入力します。

  5. サブネットを設定するには、次の操作を行います。

    1. [アベイラビリティーゾーンの数] で、ニーズに応じて [1] または [2] を選択します。

    2. [パブリックサブネットの数] で、アベイラビリティーゾーンごとに 1 つのパブリックサブネットがあることを確認します。

    3. [Number of private subnets] (プライベートサブネットの数) で、アベイラビリティーゾーンごとに 1 つのプライベートサブネットがあることを確認します。

  6. [Create VPC(VPC の作成)] を選択します。

NAT インスタンスのセキュリティグループを作成する

次の表で説明されているルールを使用してセキュリティグループを作成します。これらのルールにより、NAT インスタンスは、ネットワークからの SSH トラフィックだけでなく、プライベートサブネット内のインスタンスからインターネットに向かうトラフィックも受信できるようになります。また、NAT インスタンスは、インターネットにトラフィックを送信することもできます。これにより、プライベートサブネットのインスタンスがソフトウェア更新を取得できます。

推奨されるルールを以下に示します。

インバウンド
送信元 プロトコル ポート範囲 コメント
プライベートサブネット CIDR TCP 80 プライベートサブネットのサーバーからのインバウンド HTTP トラフィックを許可する
プライベートサブネット CIDR TCP 443 プライベートサブネットのサーバーからのインバウンド HTTPS トラフィックを許可する
ネットワークのパブリック IP アドレスの範囲 TCP 22 ネットワークから NAT インスタンスへのインバウンド SSH アクセス (インターネットゲートウェイ経由) を許可する
アウトバウンド
送信先 プロトコル ポート範囲 コメント
0.0.0.0/0 TCP 80 インターネットへのアウトバウンド HTTP アクセスを許可する
0.0.0.0/0 TCP 443 インターネットへのアウトバウンド HTTPS アクセスを許可する
セキュリティグループを作成するには
  1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. ナビゲーションペインで、[Security Groups] (セキュリティグループ) を選択します。

  3. セキュリティグループの作成 を選択します。

  4. セキュリティグループの名前と説明を入力します。

  5. [VPC] には、NAT インスタンスの VPC の ID を選択します。

  6. 次のように、[インバウンドルール] でインバウンドトラフィックのルールを追加します。

    1. [ルールを追加] を選択します。[種類] で [HTTP] を選択し、[送信元] にプライベートサブネットの IP アドレス範囲を入力します。

    2. [ルールを追加] を選択します。[種類] で [HTTPS] を選択し、[送信元] にプライベートサブネットの IP アドレス範囲を入力します。

    3. [ルールを追加] を選択します。[種類] に [SSH] を選択し、[送信元] にネットワークの IP アドレス範囲を入力します。

  7. 次のように、[アウトバウンドルール] でアウトバウンドトラフィックのルールを追加します。

    1. [ルールを追加] を選択します。[種類] に [HTTP] を選択し、[送信先] に「0.0.0.0/0」と入力します。

    2. [ルールを追加] を選択します。[種類] に [HTTPS] を選択し、[送信先] に「0.0.0.0/0」と入力します。

  8. [セキュリティグループの作成] を選択します。

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

NAT AMI を作成する

NAT AMI は、EC2 インスタンスで NAT を実行するように設定されます。NAT AMI を作成した後、NAT AMI を使用して NAT インスタンスを起動する必要があります。

NAT AMI に Amazon Linux 以外のオペレーティングシステムを使用する予定の場合は、そのオペレーティングシステムのドキュメントを参照して NAT の設定方法を確認します。インスタンスの再起動後も維持されるように、これらの設定を保存するようにしてください。

Amazon Linux 用の NAT AMI を作成するには
  1. AL2023 または Amazon Linux 2 を実行する EC2 インスタンスを起動します。必ず NAT インスタンス用に作成したセキュリティグループを指定してください。

  2. インスタンスに接続し、次のコマンドをそのインスタンスで実行して、iptables を有効にします。

    sudo yum install iptables-services -y sudo systemctl enable iptables sudo systemctl start iptables
  3. 再起動後も維持されるように IP 転送を有効にするには、インスタンスで次の操作を行います。

    1. テキストエディタ (nanovim) を使用し、設定ファイル (/etc/sysctl.d/custom-ip-forwarding.conf) を作成します。

    2. 設定ファイルに次の行を追加します。

      net.ipv4.ip_forward=1
    3. 設定ファイルを保存し、テキストエディタを終了します。

    4. 次のコマンドを実行し、設定ファイルを適用します。

      sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf
  4. インスタンスで次のコマンドを実行して、プライマリネットワークインターフェイスの名前を書き留めます。この情報は、次のステップで必要になります。

    netstat -i

    次の出力例では、docker0 は Docker が作成したネットワークインターフェイス、eth0 はプライマリネットワークインターフェイス、lo はループバックインターフェイスです。

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg docker0 1500 0 0 0 0 0 0 0 0 BMU eth0 9001 7276052 0 0 0 5364991 0 0 0 BMRU lo 65536 538857 0 0 0 538857 0 0 0 LRU

    次の出力例では、プライマリネットワークインターフェイスは enX0 です。

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enX0 9001 1076 0 0 0 1247 0 0 0 BMRU lo 65536 24 0 0 0 24 0 0 0 LRU

    次の出力例では、プライマリネットワークインターフェイスは ens5 です。

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens5 9001 14036 0 0 0 2116 0 0 0 BMRU lo 65536 12 0 0 0 12 0 0 0 LRU
  5. 次のコマンドをインスタンスで実行して、NAT を設定します。プライマリネットワークインターフェイスが eth0 でない場合は、eth0 を、前のステップでメモしたプライマリネットワークインターフェイスに置き換えます。

    sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo /sbin/iptables -F FORWARD sudo service iptables save
  6. EC2 インスタンスから NAT AMI を作成します。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「インスタンスからの Linux AMI の作成」を参照してください。

NAT インスタンスの作成

以下の手順に従って、作成した VPC、セキュリティグループ、NAT AMI を使用し、NAT インスタンスを起動します。

NAT インスタンスを起動するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ダッシュボードで、[Launch Instance (インスタンスの起動)] を選択します。

  3. [名前] に、NAT インスタンスの名前を入力します。

  4. [アプリケーションと OS イメージ] で、NAT AMI を選択します ([その他の AMI を参照][My AMI] を選択します)。

  5. [インスタンスタイプ] で、NAT インスタンスに必要なコンピューティング、メモリ、ストレージリソースを持つインスタンスタイプを選択します。

  6. [キーペア] で、既存のキーペアを選択するか、[新しいキーペアの作成] を選択します。

  7. [Network settings] (ネットワーク設定) で、次の操作を行います。

    1. [編集] を選択します。

    2. [VPC ] で、作成した VPC を選択します。

    3. [サブネット] で、作成済みのパブリックサブネットを選択します。

    4. [Auto-assign public IP] (パブリック IP の自動割り当て) で、[Enable] (有効化) を選択します。または、NAT インスタンスを起動した後、Elastic IP アドレスを割り振り、それを NAT インスタンスに割り当てます。

    5. [ファイアウォール][既存のセキュリティグループの選択] を選択してから、作成済みのセキュリティグループを選択します。

  8. [Launch instance(インスタンスの起動) ] を選択します。インスタンス ID を選択して、インスタンスの詳細ページを開きます。インスタンスの状態が [実行中] に変わり、ステータスチェックが成功するまで待ちます。

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

  10. ルートテーブルを更新して、NAT インスタンスにトラフィックを送信します (ルートテーブルを更新する を参照)。

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

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

送信元/送信先チェックを無効にするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

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

  3. NAT インスタンスを選択します。

  4. [アクション][ネットワーキング][送信元/送信先チェックの変更] の順にクリックします。

  5. [送信元/宛先を確認] には、[停止] を選択します。

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

  7. NAT インスタンスにセカンダリネットワークインターフェイスがある場合は、[Networking] (ネットワーキング) のタブで [Network interfaces] (ネットワークインタフェイス) から選択します。インターフェイス ID を選択して、ネットワークインタフェイスのページに移動します。[Actions] (アクション)、[Change source/dest. check] (送信元/送信先の変更チェック) の順に選択し、[Enable] (有効化) をクリアし、[Save] (保存) を選択します。

ルートテーブルを更新する

プライベートサブネットのルートテーブルには、インターネットトラフィックを NAT インスタンスに送信するルートが必要です。

ルートテーブルを更新するには
  1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. ナビゲーションペインで、[Route tables] (ルートテーブル) を選択します。

  3. プライベートサブネットのルートテーブルを選択します。

  4. [ルート] タブで、[ルートの編集] 、[ルートの追加] の順に選択します。

  5. [送信先] には「0.0.0.0/0」、[ターゲット] には NAT インスタンスのインスタンス ID を入力します。

  6. [変更の保存] をクリックします。

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

NAT インスタンスをテストする

NAT インスタンスを起動して上記の設定手順を完了したら、テストを行い、NAT インスタンスを踏み台サーバーとして使うことで、NAT インスタンス経由でプライベートサブネットのインスタンスからインターネットにアクセスできるかどうかを確認します。

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

プライベートサブネットのインスタンスが NAT インスタンスに ping トラフィックを送信できるようにするには、インバウンドとアウトバウンドの ICMP トラフィックを許可するルールを追加します。NAT インスタンスを踏み台サーバーとして機能させるには、プライベートサブネットへのアウトバウンド SSH トラフィックを許可するルールを追加します。

NAT インスタンスのセキュリティグループを更新するには
  1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. ナビゲーションペインで、[Security Groups] (セキュリティグループ) を選択します。

  3. NAT インスタンスに関連付けられているセキュリティグループのチェックボックスをオンにします。

  4. [インバウンドルール] タブで、[インバウンドルールの編集] を選択します。

  5. [Add rule] を選択します。[Type] (タイプ) で [All ICMP - IPv4] (すべての ICMP - IPv4) を選択します。[送信元] で [カスタム] を選択し、プライベートサブネットの IP アドレス範囲を入力します。[Save Rules] (ルールの保存) を選択します。

  6. [Outbound rules] (アウトバウンドルール) タブで [Edit outbound rules] (アウトバウンドルールの編集) を選択します。

  7. [Add rule] を選択します。[Type] (タイプ) で [SSH] を選択します。[送信先] で [カスタム] を選択し、プライベートサブネットの IP アドレス範囲を入力します。

  8. [Add rule] を選択します。[Type] (タイプ) で [All ICMP - IPv4] (すべての ICMP - IPv4) を選択します。送信先として、Anywhere - IPv4 を選択します。[Save Rules] (ルールの保存) を選択します。

ステップ 2: プライベートサブネット内でインスタンスを起動する

プライベートサブネット内にインスタンスを起動します。NAT インスタンスからの SSH アクセスを許可する必要があります。また、NAT インスタンスに使用したのと同じキーペアを使用する必要があります。

プライベートサブネット内でテストインスタンスを起動するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ダッシュボードで、[Launch Instance (インスタンスの起動)] を選択します。

  3. プライベートサブネットを選択します。

  4. このインスタンスにパブリック IP アドレスを割り当てないでください。

  5. このインスタンスのセキュリティグループが、NAT インスタンスまたはパブリックサブネットの IP アドレス範囲からのインバウンド SSH アクセス、およびアウトバウンド ICMP トラフィックを許可していることを確認します。

  6. NAT インスタンスの起動に使用したのと同じキーペアを選択します。

ステップ 3: ICMP が有効なウェブサイトに ping を送信する

プライベートサブネットのテストインスタンスが NAT インスタンスを使用してインターネットと通信できることを検証するには、ping コマンドを実行します。

プライベートインスタンスからインターネット接続をテストするには
  1. ローカルコンピュータから SSH エージェント転送を設定して、NAT インスタンスを踏み台サーバーとして使用できるようにします。

    Linux and macOS
    ssh-add key.pem
    Windows

    まだインストールされていない場合は、Pageant をダウンロードしてインストールします

    PuTTYgen を使用してプライベートキーを .ppk 形式に変換します

    Pageant を起動し、タスクバーの Pageant アイコン (非表示の場合があります) を右クリックして、[Add Key] を選択します。作成した .ppk ファイルを選択し、必要に応じてパスフレーズを入力して、[Open] を選択します。

  2. ローカルコンピュータから、NAT インスタンスに接続します。

    Linux and macOS
    ssh -A ec2-user@nat-instance-public-ip-address
    Windows

    PuTTY を使用して NAT インスタンスに接続します。[Auth] については、[Allow agent forwarding] を選択します。[Private key file for authentication] は空白のままにしてください。

  3. NAT インスタンスから、ICMP が有効なウェブサイトを指定して、ping コマンドを実行します。

    [ec2-user@ip-10-0-4-184]$ ping ietf.org

    NAT インスタンスがインターネットにアクセスできることを確認するため、次のような出力を受け取ったことを確認してから、Ctrl+C キーを押して ping コマンドをキャンセルします。または、NAT インスタンスがパブリックサブネットにある (そのルートテーブルにインターネットゲートウェイへのルートがある) ことを確認します。

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=7.88 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.09 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=7.97 ms ...
  4. NAT インスタンスから、プライベート IP アドレスを使用してプライベートサブネットのインスタンスに接続します。

    [ec2-user@ip-10-0-4-184]$ ssh ec2-user@private-server-private-ip-address
  5. プライベートインスタンスから ping コマンドを実行して、インターネットに接続できることをテストします。

    [ec2-user@ip-10-0-135-25]$ ping ietf.org

    プライベートインスタンスが NAT インスタンスを介してインターネットにアクセスできることを確認するため、次のような出力を受け取ったことを確認してから、Ctrl+C キーを押して ping コマンドをキャンセルします。

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=8.76 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.26 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=8.27 ms ...
トラブルシューティング

プライベートサブネットのサーバーから ping コマンドが失敗した場合は、次の手順を使用して問題のトラブルシューティングを行います。

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

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

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

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

ステップ 4: クリーンアップする

プライベートサブネットのテストサーバーが不要になった場合、インスタンスを終了し、今後料金を請求されないようにします。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスの終了」を参照してください。

NAT インスタンスが不要になった場合は、そのインスタンスを停止または終了して、料金を請求されないようにできます。NAT AMI を作成した場合は、必要なときにいつでも新しい NAT インスタンスを作成できます。