web-dev-qa-db-ja.com

AWS VPC:インターネットゲートウェイvs NAT

これこれこれは私の質問にかなり関連しています。多くの人々の疑問に答えたようですが、このセットアップがAWSに固有のものなのか、それとも一般的なネットワークに固有のものなのか、私はまだ理解に苦労しています。後者の場合は、基本を再確認する必要があります。私はそれをすでに疑っています、そしてそれ故に質問。

私の理解

プライベートネットワークがインターネットに接続されている場合、そのホストはインターネット上で一意に識別できるようにパブリックIPを持っている必要があります。インバウンドまたはアウトバウンドのインターネットへのすべてのトラフィックは、このパブリックIPアドレスで発生します。このネットワークからのホストは、インターネットに接続するとパブリックIPを取得します。このホストから発信されたwww.google.comのパケットは、パケット内にホストのプライベートアドレスが含まれ、最終的にNATデバイス(ルーター/デフォルトゲートウェイ)これは、次のように表示されます ここ これは、ほとんどのインターネット(IPV6を除く)が動作する方法です。

今、AWSで

  • Public Subnetを作成してauto-assign Public IPsを有効にすると、EC2インスタンスのプライベートアドレスを次のパブリックIPアドレスに切り替えるようにインターネットゲートウェイに通知しますインターネット上でリクエストをルーティングする際にこのEC2インスタンスから発信されるリクエストパケット内のEC2インスタンス。その逆も同様です。私の理解は正しいですか?
  • プライベートサブネットを作成して、インターネットゲートウェイに接続しないことで)、それをプライベートに保ちます。次に、意識的にauto-assign Public IPを無効にしたままにします。このプライベートサブネット内でEC2インスタンスを起動しても、EC2コンソールでパブリックIPを確認することはできません。これは、このサブネットのインスタンスがインターネットから見えないことも意味します。ここで、このプライベートサブネットをNATデバイス(もちろん、パブリックサブネット上にあります)に接続する場合)(私をaと混同しないでくださいNAT現時点でゲートウェイの方が優れています)次に、本質的に、NATデバイスに割り当ててパブリックIPを把握するパブリックIPとしてインターネットとの通信を要求したプライベートサブネットからの特定のホストX isインターネットとの通信に必要です。

    さて、

    • これはルーター/(インターネット)ゲートウェイがAWSや一般的なネットワークですでに行っていることではありませんか?ネットワーク上のホストへのパブリックIPの割り当てではなく、インターネットへの経路上で(このネットワーク上のホストから発信される)パケット内のプライベートIPアドレスをパブリックIPアドレスに置き換え続けることは、実行されるものです。ルーターでアウト?
    • NATデバイスは、プライベートサブネットのこのホストに割り当てられるIP 1.2.3.4を計算します。「どういうわけか」、このIPがインターネット上で既知になった場合、 NATデバイスが何らかのトリックを引っ張らない限り、プライベートサブネットもインターネットから到達可能になるはずです(フォローアップの質問を参照してください私の理解は正しいですか?今、AWSはNATデバイスはインバウンド通信を許可しないと言っています。それはパブリックIP 1.2.3.4(NATデバイスがこのプライベートサブネットのホストに割り当てる)が既知になった場合でも、受信接続は強制的に制限されますか?または、NATデバイスは、プライベートネットワークのホストに代わって独自のIPアドレスを使用するだけです(これは、a NATデバイスが理想的に行うべきことではありません。aNATデバイスは割り当てられたプライベートIPを取得し、パケット上のパブリックIPに置き換えますか?
    • また、AWSではプライベートサブネットでauto-assign Public IPsを有効にすることもできます。また、パブリックIPを使用してプライベートサブネット上のEC2インスタンスを表示できることを確認できます。つまり、プライベートIPサブネット(がルーティングテーブルのインターネットゲートウェイに接続されていないため)と、パブリックIPを持つインスタンス(-パブリックIPの自動割り当てプライベートサブネット上)。それはどのように解釈されるべきですか?
3
Sheel Pancholi

NATゲート​​ウェイの機能を誤解していると思いますが、それが他のすべての混乱につながります。

  • NATは内部/プライベートホストにランダムにアドレスを割り当てません。

  • NATデバイスには通常、プライベートIPを持つ2つのインターフェース-internalがあります。 10.0.0.1。そしてexternalはパブリックIP、例えば1.2.3.4。

  • たとえば、いくつかの10.0.0.xアドレスを持つ(パブリックなし)内部ネットワークからのホストは、すべての送信トラフィックをNATゲートウェイに送信し、そのNATゲート​​ウェイがソースを置き換えますIPパケット内(たとえば、10.0.0.123)と独自のpublic IP(つまり、1.2.3.4)。次に、インターネット上の宛先にパケットを送信します。グーグルへ。

  • TCPパケットには、送信元と宛先addressesだけでなく、送信元と宛先portsもあります。複数のホストが同じ送信元ポートと通信しようとしたときに衝突を回避するために、送信元ポートをNATゲート​​ウェイで置き換えることもできます。

NATの説明:

内部ホスト10.0.0.123google.comから216.58.203.110でHTTPS経由で何かをダウンロードしようとしています(ポート443など)。

  1. 送信元10.0.0.123:12345(アドレス:ランダムなローカルポート)と宛先216.58.203.110:443(アドレス:httpsポート)を含むパケットをNATゲート​​ウェイに送信します。これがすべてにとって最良の次ホップであるためですnot10.0.0.xであるアドレス。

  2. NATゲート​​ウェイは、10.0.0.123:12345からのソースを独自のパブリックIPおよびいくつかのランダムポート1.2.3.4:54321に置き換えます。

  3. 10.0.0.123:12345から216.58.203.110:443への接続が1.2.3.4:54321に変換されたことを接続追跡テーブルに記録します。

  4. Googleからの返信パケットがNATゲート​​ウェイに宛先1.2.3.4:54321で到着すると、ゲートウェイはそのレコード(アドレス:ポート)を検索し、それを10.0.0.123:12345に変換して、そのホストに送信する必要があることを確認します。そのポート。

同時にローカルネットワークの別のホスト(10.0.0.99など)がGoogleから何かをダウンロードしようとすると、次のようになります。

  1. NATゲート​​ウェイは、ソースIPを独自のパブリックIPに再度変換します1.2.3.4butソースポートは以前とは異なるものになります。 56789

  2. これで、GoogleはNATゲート​​ウェイからの2つの接続を認識します

    • 1.2.3.4:54321-to-216.58.203.110:443(ここで、NATゲート​​ウェイは、元のソースが実際に10.0.0.123:12345であることを認識しています)
    • 1.2.3.4:56789-to-216.58.203.110:443(NAT GWは、元のソースが10.0.0.99:12345であることを認識しています)。

両方の接続appearはNATゲート​​ウェイからのものですが、実際には内部ネットワークで開始されました異なるホストから。 NATゲート​​ウェイのみがマッピングを認識しています。

一言で言えばそれだけです。


ここでいくつかの注意事項:

  • 開始接続外部から NATの背後にあるホストに接続することはできません。内部から開始されたパケットに対してのみ返信を送信できます。

    これは、内部ホストが最初のパケットを送信するときに、内部IP:portとNATゲート​​ウェイIP:portの間のマッピングが行われるためです。

    外部から10.0.0.123:22にSSHで接続したい場合、どうすればよいでしょうか? SSHパケットをNATゲート​​ウェイIP 1.2.3.4に送信できますが、what port?を参照してください。マッピングがないため、外部から接続を開始することはできません。

  • ルーター一方、IPやポートは変更しません(NATゲート​​ウェイとは異なります)。それらはパケットをほとんど変更せずに通過させます。

  • AWSコンテキストではRouterIGW = Internet Gatewayです。 NATはNATゲートウェイまたはNATインスタンスのいずれかであり、同じことを行います。

それが説明されることを願っています:)

1
MLu

これは、インターネットゲートウェイとNATデバイスがAWSで行うことを明らかにする公式のAWSドキュメントからの関連スニペットを引用して、上記の@MLuの回答に対する(大きな)サポートコメントの詳細です。

NATデバイス(NATインスタンスまたはNATゲートウェイ)

から AWSドキュメント"Amazon VPC"ユーザーガイド"VPCネットワークコンポーネント"NAT

NATデバイスの実際の役割はアドレス変換とポートアドレス変換(PATの両方ですが、このドキュメントではNAT )。

A NATデバイスは、PATを実行するNATデバイスを介して、プライベートネットワーク内のホストが外部ネットワーク(インターネット)にアクセスできるようにすることを具体的に意味します。

したがって、プライベートサブネットに10.0.1.1/32のIPを持つホストがあり、リクエストがgoogle.com(216.58.211.174/32)に送信される場合、NAT =デバイスは10.0.1.1:SOMESOURCEPORTから216.58.211.174:SOMEDESTPORTへのマッピングを記録し、リクエスト(パケット)のソースIPをパブリックNAT-PUB-IP:SOMERANDOMPORTのソースIPに変更します。

記録されるマッピングは次のようになります:10.0.1.1:SOMESOURCEPORT --❯ NAT-PUB-IP:SOMERANDOMPORT

NAT-PUB-IP:SOMERANDOMPORTで応答を受信すると、記録されたマッピングのルックアップにより、応答が10.0.1.1に戻る必要があることがわかります。

すべての内部IPは、NATデバイスに割り当てられた単一のパブリックIPに変換されます。接続の多重化は、NAT SOMERANDOMPORTで。

これはまた、内部ホストにパブリックIPが割り当てられている場合、NATデバイスの場合、内部IPアドレスでのみPATを実行するため、これは無関係です。

インターネットゲートウェイ(IGW)

これもNATを実行しますが、上記とは異なり、静的NATを実行します。簡単に言えば、次のような静的レコードがあります。

Internal Host IP <-> Public IP Assigned to the Internal Host

AWS VPC内のホストは、VPC内の独自のプライベートIPのみを認識していることに注意してください。割り当てられたパブリックIPは、インターネットゲートウェイでのみ使用されます。

上記と同じリクエスト(google.comへの内部ホスト)の場合、

  1. ホストはパブリックサブネット内にあります(つまり、パブリックサブネットは、すべての非VPCトラフィックをIGWにリダイレクトするためのquad-cidrルートエントリを持つルートテーブルに関連付けられています)。
  2. これにはパブリックIPアドレスが割り当てられており、内部ホストから宛先がVPCの外部にあるパケットがIGWにルーティングされます。IGWは、パケット内のソースIPを、それが持つマップに従って変換します。

10.0.1.1 -> Public_IP_Of_Internal_Host

そして、Public_IP_Of_Internal_Hostの宛先で応答を受信すると、10.0.1.1に変換されます。


https://docs.aws.Amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html から

インターネットゲートウェイは、インターネットルーティング可能なトラフィック用のVPCルートテーブルにターゲットを提供すること、およびインスタンスのネットワークアドレス変換(NAT)を実行するという2つの目的を果たしますパブリックIPv4アドレスが割り当てられています。

前述のように、割り当てられたパブリックIPが必要な理由は、IGWは静的NATしか実行できないため、そのIPと内部IP間のマッピングを作成するためにパブリックIPが必要であるためですホストの。

0
Ashutosh Jindal