NAT インスタンス
重要
NAT AMI は、2020 年 12 月 31 日に標準サポートが終了した Amazon Linux の最新バージョン 2018.03 に基づいて構築されています。詳細については、ブログ投稿「Amazon Linux AMI のサポート終了
既存の NAT AMI を使用する場合は、AWS が NATゲートウェイに移行することを推奨します。NAT ゲートウェイでは、可用性と帯域幅に優れ、運用管理の手間を軽減できます。NAT インスタンスがユースケースに合致している場合は、独自の NAT AMI を作成できます。詳細については、「NAT ゲートウェイと NAT インスタンスの比較」を参照してください。
ネットワークアドレス変換を提供する独自の AMI を作成し、AMI を使用して NAT インスタンスとして EC2 インスタンスを起動できます。パブリックサブネットで NAT インスタンスを起動して、プライベートサブネットのインスタンスがインターネットまたは他の AWS サービスへのアウトバウンド IPv4 トラフィックを開始できるようにしますが、インスタンスがインターネットで開始したインバウンドトラフィックを受信しないようにすることができます。
NAT インスタンスのクォータは、リージョンのインスタンスのクォータによって異なります。キーペアの詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 のサービスクォータ」を参照してください。
内容
NAT インスタンスの基本
次の図は、NAT インスタンスの基本を示しています。メインルートテーブルはプライベートサブネットと関連付けられ、プライベートサブネットのインスタンスからパブリックサブネット内の NAT インスタンスにトラフィックを送信します。次に、NAT インスタンスは、そのトラフィックを VPC のインターネットゲートウェイに送信します。トラフィックは NAT インスタンスの Elastic IP アドレスによってもたらされます。NAT インスタンスは応答用に大きなポート番号を指定します。応答が戻ってきた場合、NAT インスタンスはそれをプライベートサブネット内のインスタンスに、応答用のポート番号に基づいて送信します。
プライベートサブネット内のインスタンスからのインターネットトラフィックは NAT インスタンスにルーティングされ、NAT インスタンスはインターネットと通信します。したがって、NAT インスタンスはインターネットにアクセスできる必要があります。また、パブリックサブネット (インターネットゲートウェイへのルートを持つルートテーブルを持つサブネット) に存在し、パブリック IP アドレスまたは Elastic IP アドレスを持っている必要があります。

NAT インスタンスをセットアップする
以下の手順を使用して VPC と NAT インスタンスをセットアップします。
要件
開始する前に、NAT インスタンスで実行するように設定する AMI を作成します。インスタンスの再起動後も維持されるように、これらの設定を保存するようにしてください。NAT の設定方法については、インスタンスで使用されている特定のオペレーティングシステムに関するドキュメントを参照してください。
NAT インスタンスをセットアップするには
-
2 つのサブネットを持つ VPC を作成します。
-
VPC を作成する (「VPC を作成する」を参照)
-
2 つのサブネットを作成する (「サブネットの作成」を参照)
-
インターネットゲートウェイを VPC にアタッチする (「インターネットゲートウェイの作成とアタッチ」を参照)
-
VPC の外部を送信先とするトラフィックをインターネットゲートウェイに送信するカスタムルートテーブルを作成し、1 つのサブネットに関連付けて、パブリックサブネットにする (「カスタムルートテーブルを作成する」を参照)
-
-
NATSG セキュリティグループを作成します (「NATSG セキュリティグループの作成」を参照)。このセキュリティグループは、NAT インスタンスの起動時に指定します。
-
NAT インスタンスとして実行されるように設定された AMI からパブリックサブネット内にインスタンスを起動します。
-
Amazon EC2 コンソールを開きます。
-
ダッシュボードで、[インスタンスの作成] ボタンを選択し、次のようにウィザードを実行します。
-
[Choose an Amazon Machine Image (AMI)] (Amazon マシンイメージ (AMI)) ページで、フィルターを [Owned by me] (自己所有) に設定し、AMI を選択します。
-
[インスタンスタイプの選択] ページでインスタンスタイプを選択し、[次の手順: インスタンスの詳細の設定] を選択します。
-
[インスタンスの詳細の設定] ページで、[ネットワーク] のリストから作成した VPC を選択し、[サブネット] のリストからパブリックサブネットを選択します。
-
(オプション) [パブリック IP] チェックボックスをオンにして、NAT インスタンスがパブリック IP アドレスを受け取るように指定します。ここでパブリック IP アドレスを割り当てない場合、Elastic IP アドレスを割り当てて、インスタンスの起動後にそのアドレスをインスタンスに割り当てることができます。[Next: Add Storage] (次の手順: ストレージの追加) をクリックします。
インスタンスにストレージを追加することができます。次のページでは、タグを追加できます。完了したら、[次の手順: セキュリティグループの設定] を選択します。
-
[セキュリティグループの設定] ページで、[既存のセキュリティグループを選択する] オプションを選択し、作成した NATSG セキュリティグループを選択します。[Review and Launch] を選択します。
-
選択した設定を確認します。必要な変更を行い、[Launch] を選択し、キーペアを選択してインスタンスを起動します。
-
-
-
NAT インスタンスの
SrcDestCheck
属性を無効にします (「送信元/送信先チェックを無効にする」を参照)。 -
起動時に NAT インスタンスにパブリック IP アドレスを割り当てていない場合(手順 3)、Elastic IP アドレスをそのインスタンスに関連付ける必要があります。
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 ナビゲーションペインで [Elastic IPs] を選択し、[Allocate new address] を選択します。
-
[割り当て] を選択します。
-
リストから Elastic IP アドレスを選択し、[Actions]、[Associate address] を選択します。
ネットワークインターフェイスリソースを選択し、NAT インスタンスのネットワークインターフェイスを選択します。[Private IP] リストから Elastic IP アドレスを関連付けるアドレスを選択して、[Associate] を選択します。
-
メインルートテーブルを更新して、NAT インスタンスにトラフィックを送信します。詳細については、「」を参照してくださいメインルートテーブルの更新
コマンドラインを使用した NAT インスタンスの起動
サブネット内に NAT インスタンスを起動するには、次のいずれかのコマンドを使用します。詳細については、「」を参照してくださいAmazon EC2 の使用 NAT インスタンスとして実行するように設定した AMI の AMI ID を使用できます。Amazon Linux 2 での AMI の作成方法の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EBS-backed AMI の作成」をご参照ください。
run-instances (AWS CLI)
New-EC2Instance (AWS Tools for Windows PowerShell)
NATSG セキュリティグループの作成
次の表に示すように NATSG セキュリティグループを定義し、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 アクセスを許可する |
NATSG セキュリティグループを作成するには
-
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
ナビゲーションペインで [Security Groups] を選択して、[Create Security Group] を選択します。
-
[Create Security Group] ダイアログボックスで、セキュリティグループ名として
NATSG
を指定し、説明を入力します。[VPC] リストで VPC の ID を選択し、[Yes, Create] を選択します。 -
先ほど作成した NATSG セキュリティグループを選択します。詳細ペインに、セキュリティグループの詳細と、インバウンドルールおよびアウトバウンドルールを操作するためのタブが表示されます。
-
次に示すように、[Inbound Rules] タブを使用して、インバウンドトラフィックのルールを追加します。
-
[Edit] を選択します。
-
[Add another rule] を選択し、[Type] リストから [HTTP] を選択します。[Source] フィールドで、プライベートサブネットの IP アドレス範囲を指定します。
-
[Add another rule] を選択し、[Type] リストから [HTTPS] を選択します。[Source] フィールドで、プライベートサブネットの IP アドレス範囲を指定します。
-
[Add another rule] を選択し、[Type] リストから [SSH] を選択します。[Source] フィールドで、ネットワークのパブリック IP アドレス範囲を指定します。
-
[Save] を選択します。
-
-
次に示すように、[Outbound Rules] タブを使用して、アウトバウンドトラフィックのルールを追加します。
-
[Edit] を選択します。
-
[Add another rule] を選択し、[Type] リストから [HTTP] を選択します。[Destination] フィールドで、[
0.0.0.0/0
] と指定します。 -
[Add another rule] を選択し、[Type] リストから [HTTPS] を選択します。[Destination] フィールドで、[
0.0.0.0/0
] と指定します。 -
[Save] を選択します。
-
詳細については、「セキュリティグループ」を参照してください。
送信元/送信先チェックを無効にする
EC2 インスタンスは、送信元/送信先チェックをデフォルトで実行します。つまり、そのインスタンスは、そのインスタンスが送受信する任意のトラフィックの送信元または送信先である必要があります。しかし、NAT インスタンスは、送信元または送信先がそのインスタンスでないときにも、トラフィックを送受信できなければなりません。したがって、NAT インスタンスでは送信元/送信先チェックを無効にする必要があります。
実行中または停止している NAT インスタンスの SrcDestCheck
属性は、コンソールまたはコマンドラインを使用して無効にできます。
コンソールを使用して、送信元/送信先チェックを無効にするには
-
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択します。
-
NAT インスタンスを選択し、[Actions] (アクション)、[Networking] (ネットワーキング)、[Change source/destination check] (送信元/送信先チェックの変更) を選択します。
-
送信元/送信先のチェックが停止していることを確認します。それ以外の場合は、[Stop] (停止) を選択します。
-
[Save] を選択します。
-
NAT インスタンスにセカンダリネットワークインターフェイスがある場合は、[Networking] (ネットワーキング) のタブで [Network interfaces] (ネットワークインタフェイス) から選択します。インターフェイス ID を選択して、ネットワークインタフェイスのページに移動します。[Actions] (アクション)、[Change source/dest. check] (送信元/送信先の変更チェック) の順に選択し、[Enable] (有効化) をクリアし、[Save] (保存) を選択します。
コマンドラインを使用して送信元/送信先チェックを無効にするには
次のいずれかのコマンドを使用できます。詳細については、「」を参照してくださいAmazon EC2 の使用
modify-instance-attribute (AWS CLI)
Edit-EC2InstanceAttribute (AWS Tools for Windows PowerShell)
メインルートテーブルの更新
VPC 内のプライベートサブネットはカスタムルートテーブルに関連付けられないため、メインルートテーブルを使用します。デフォルトでは、メインルートテーブルによって、VPC 内のインスタンスはお互いに通信することができます。その他のすべてのサブネットトラフィックを NAT インスタンスに送信するルートを追加する必要があります。
メインルートテーブルを更新するには
-
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
ナビゲーションペインで、[Route Tables] を選択します。
-
VPC のメインルートテーブルを選択します ([Main] 列に [Yes)] と表示されます)。詳細ペインには、ルート、関連付け、ルートのプロパゲーションを操作するタブが表示されます。
-
[Routes] (ルート) タブで、次の手順を実行します。
[Edit routes] (ルートの編集) タブを選択し、[Add route] (ルートの追加) を選択します。
[Destination] (送信先) には「
0.0.0.0/0
」を指定し、[Target] (ターゲット) には NAT インスタンスのインスタンス ID を指定します。[Save changes] (変更の保存) をクリックします。
-
[Subnet Associations] (サブネットの関連付け) タブで、 [Edit subnet associations] (サブネットの関連付けの編集) を選択します。プライベートサブネットのチェックボックスをオンにして、[Save associations] (関連付けの保存) を選択します。
詳細については、「ルートテーブルを設定する」を参照してください。
NAT インスタンスの設定のテスト
NAT インスタンスを起動して上記の設定手順を完了したら、テストを実行し、NAT インスタンスを踏み台サーバーとして使うことで、NAT インスタンス経由でプライベートサブネットのインスタンスからインターネットにアクセスできるかどうかを確認できます。これを行うには、インバウンドおよびアウトバウンドの ICMP トラフィックとアウトバウンドの SSH トラフィックを許可するように NATSG のセキュリティグループルールを更新し、プライベートサブネットでインスタンスを起動します。次に、プライベートサブネットのインスタンスにアクセスするように SSH エージェント転送を設定し、インスタンスに接続して、インターネット接続をテストします。
NAT インスタンスのセキュリティグループを更新するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 ナビゲーションペインで、[Security Groups] を選択します。
NAT インスタンスに関連付けられている NATSG セキュリティグループのチェックボックスをオンにします。
[Inbound rules] (インバウンドルール) タブで、[Edit inbound rules] (インバウンドルールの編集) を選択します。
[Add rule] を選択します。[Type] (タイプ) で [All ICMP - IPv4] (すべての ICMP - IPv4) を選択します。[Source] (送信元) で [Custom] (カスタム) を選択し、プライベートサブネットの IP アドレス範囲を入力します (例:
10.0.1.0/24
)。[Save Rules (ルールの保存)] を選択します。-
[Outbound rules] (アウトバウンドルール) タブで [Edit outbound rules] (アウトバウンドルールの編集) を選択します。
-
[Add rule] を選択します。[Type] (タイプ) で [SSH] を選択します。[Destination] (送信先) で [Custom] (カスタム) を選択し、プライベートサブネットの IP アドレス範囲を入力します (例:
10.0.1.0/24
)。 -
[Add rule] を選択します。[Type] (タイプ) で [All ICMP - IPv4] (すべての ICMP - IPv4) を選択します。送信先として、Anywhere - IPv4 を選択します。[Save Rules (ルールの保存)] を選択します。
プライベートサブネット内にインスタンスを起動するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 ナビゲーションペインで、[インスタンス] を選択します。
プライベートサブネット内にインスタンスを起動します。起動ウィザードの次のオプションを必ず設定し、[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 エージェント転送を設定するには
ローカルマシンから、認証エージェントにプライベートキーを追加します。
Linux の場合、次のコマンドを使用します。
ssh-add -c
mykeypair
.pemOS X の場合、次のコマンドを使用します。
ssh-add -K
mykeypair
.pem-A
オプションを使用して NAT インスタンスに接続し、SSH エージェント転送を有効にします。その例を次に示します。ssh -A ec2-user@
54.0.0.123
Windows (PuTTY) 用に SSH エージェント転送を設定するには
既にインストールされていない場合は、PuTTY のダウンロードページ
から Pageant をダウンロードしてインストールします。 -
プライベートキーを .ppk 形式に変換します。詳細については、「PuTTYgen を使用してプライベートキーを変換する」を参照してください。
-
Pageant を起動し、タスクバーの Pageant アイコン (非表示の場合があります) を右クリックして、[Add Key] を選択します。作成した .ppk ファイルを選択し、必要に応じてパスフレーズを入力して、[Open] を選択します。
-
PuTTY セッションを開始して NAT インスタンスに接続します。[Auth] カテゴリで、必ず [Allow agent forwarding] オプションを選択し、[Private key file for authentication] フィールドは空のままにします。
インターネット接続をテストするには
ICMP が有効なウェブサイトに対して
ping
コマンドを実行して、NAT インスタンスがインターネットと通信できることをテストします。次に例を示します。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 を押します。NAT インスタンスから、プライベート IP アドレスを使用してプライベートサブネットのインスタンスに接続します。例:
ssh ec2-user@
10.0.1.123
プライベートインスタンスから
ping
コマンドを実行して、インターネットに接続できることをテストします。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
コマンドを実行します。
-
(オプション)必要がなくなった場合は、プライベートインスタンスを終了します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスの終了」を参照してください。