All Articles

【AWS】VPC のプライベートサブネットでも、インターネットからパケットは届く

AWS の VPC にふれていて、「プライベートサブネットでもインターネットからパケットが届いているのでは?」と思ったので確認してみました。

結論

プライベートサブネットでも、パブリック IP があればインターネットからパケットが届きます

背景

AWS の VPC では、サブネットをパブリックサブネットとプライベートサブネットと呼び分けたりします。

そして、

  • パブリックサブネットはインターネットに面する
  • パブリックサブネットはインターネットから直接アクセスできる

などと説明がされる場合があります。

この説明を踏まえて、「プライベートサブネットであれば、インターネットからパケットは届かない」と思ってしまう方も少なくないと思います。

実際にどうなのか、試してみました。

パケットが到達するか確認する

プライベートサブネットに EC2 インスタンスを起動して、踏み台サーバを経由して SSH でアクセスしてみます。

このとき、プライベートサブネットの EC2 インスタンスに、パブリック IP アドレスを割り当てるようにします

※ セキュリティグループでは、すべてのプロトコルを許可しています。

パケットが届くか ping で確認するため、EC2 インスタンスの内部で tcpdump を実行しておきます。

$ sudo tcpdump -n icmp

この状態で、別のマシンから EC2 インスタンスのパブリック IP アドレスに ping を打つと…

$ sudo tcpdump -n icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
04:44:34.651927 IP 203.0.113.10 > 10.0.129.69: ICMP echo request, id 63224, seq 0, length 64
04:44:34.651953 IP 10.0.129.69 > 203.0.113.10: ICMP echo reply, id 63224, seq 0, length 64
04:44:35.654127 IP 203.0.113.10 > 10.0.129.69: ICMP echo request, id 63224, seq 1, length 64
04:44:35.654154 IP 10.0.129.69 > 203.0.113.10: ICMP echo reply, id 63224, seq 1, length 64

※ ping を実行したマシンの IP アドレスは例示用の値に書き換えてあります。

このように、EC2 インスタンスにインターネットからパケットが届いていることが分かります。 (ちなみに、ping コマンドは応答を得られません)

つまり、EC2 インスタンスに対してインターネットからパケットが到達するかどうかは、パブリックサブネットかどうかではなく、パブリック IP があるかどうかで決まります

NAT Gateway を置くとどうなる?

NAT Gateway があれば、応答も得られるのでは?と思ったので試してみましたが、NAT Gateway を作成してルートテーブルに設定しても、ping コマンドに応答はありませんでした。

この理由はすぐに分からず、これ以上深掘りしていません。 (もし分かる方は教えていただきたいです)

そもそもパブリックサブネットとは?

ここで、そもそもパブリックサブネットの定義を確認しておきます。

AWS のドキュメントだと、以下のような説明を見つけられました。

パブリックサブネットは、インターネットゲートウェイへのルートが含まれているルートテーブルに関連付けられているサブネットです。

また、以下のような文言もありました。

パブリックサブネットのインスタンスはアウトバウンドトラフィックを直接インターネットに送信できますが、プライベートサブネットのインスタンスはできません。

パブリックサブネットは、アウトバウンドのトラフィックが直接インターネットに送信されないだけで、インバウンドについては関係ないように読めます

この記事で試した結果とも一致します。

まとめ

AWS の VPC について、

  • パブリックサブネットはインターネットに面する
  • パブリックサブネットはインターネットから直接アクセスできる

といった説明は不正確で、

  • パブリックサブネットでは、アウトバウンドのトラフィックが直接インターネットに送信される
  • パブリック IP があれば (たとえプライベートサブネットでも)、インバウンドのトラフィックが直接インターネットから届く

ということでした。