{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/aws-vpc-inbound-packet","result":{"data":{"markdownRemark":{"id":"fd03591a-2a00-59bd-8bfc-d61647fee7b9","html":"<p>AWS の VPC にふれていて、「プライベートサブネットでもインターネットからパケットが届いているのでは？」と思ったので確認してみました。</p>\n<h2 id=\"結論\" style=\"position:relative;\"><a href=\"#%E7%B5%90%E8%AB%96\" aria-label=\"結論 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>結論</h2>\n<p><strong>プライベートサブネットでも、パブリック IP があればインターネットからパケットが届きます</strong>。</p>\n<h2 id=\"背景\" style=\"position:relative;\"><a href=\"#%E8%83%8C%E6%99%AF\" aria-label=\"背景 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>背景</h2>\n<p>AWS の VPC では、サブネットをパブリックサブネットとプライベートサブネットと呼び分けたりします。</p>\n<p>そして、</p>\n<ul>\n<li>パブリックサブネットはインターネットに面する</li>\n<li>パブリックサブネットはインターネットから直接アクセスできる</li>\n</ul>\n<p>などと説明がされる場合があります。</p>\n<p>この説明を踏まえて、「プライベートサブネットであれば、インターネットからパケットは届かない」と思ってしまう方も少なくないと思います。</p>\n<p>実際にどうなのか、試してみました。</p>\n<h2 id=\"パケットが到達するか確認する\" style=\"position:relative;\"><a href=\"#%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%81%8C%E5%88%B0%E9%81%94%E3%81%99%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B\" aria-label=\"パケットが到達するか確認する permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>パケットが到達するか確認する</h2>\n<p>プライベートサブネットに EC2 インスタンスを起動して、踏み台サーバを経由して SSH でアクセスしてみます。</p>\n<p>このとき、プライベートサブネットの EC2 インスタンスに、<strong>パブリック IP アドレスを割り当てるようにします</strong>。</p>\n<p>※ セキュリティグループでは、すべてのプロトコルを許可しています。</p>\n<p>パケットが届くか ping で確認するため、EC2 インスタンスの内部で tcpdump を実行しておきます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo tcpdump -n icmp</code></pre></div>\n<p>この状態で、別のマシンから EC2 インスタンスのパブリック IP アドレスに ping を打つと…</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo tcpdump -n icmp\ntcpdump: verbose output suppressed, use -v[v]... for full protocol decode\nlistening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes\n04:44:34.651927 IP 203.0.113.10 &gt; 10.0.129.69: ICMP echo request, id 63224, seq 0, length 64\n04:44:34.651953 IP 10.0.129.69 &gt; 203.0.113.10: ICMP echo reply, id 63224, seq 0, length 64\n04:44:35.654127 IP 203.0.113.10 &gt; 10.0.129.69: ICMP echo request, id 63224, seq 1, length 64\n04:44:35.654154 IP 10.0.129.69 &gt; 203.0.113.10: ICMP echo reply, id 63224, seq 1, length 64</code></pre></div>\n<p>※ ping を実行したマシンの IP アドレスは例示用の値に書き換えてあります。</p>\n<p>このように、EC2 インスタンスにインターネットからパケットが届いていることが分かります。\n(ちなみに、ping コマンドは応答を得られません)</p>\n<p>つまり、<strong>EC2 インスタンスに対してインターネットからパケットが到達するかどうかは、パブリックサブネットかどうかではなく、パブリック IP があるかどうかで決まります</strong>。</p>\n<h2 id=\"nat-gateway-を置くとどうなる？\" style=\"position:relative;\"><a href=\"#nat-gateway-%E3%82%92%E7%BD%AE%E3%81%8F%E3%81%A8%E3%81%A9%E3%81%86%E3%81%AA%E3%82%8B%EF%BC%9F\" aria-label=\"nat gateway を置くとどうなる？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>NAT Gateway を置くとどうなる？</h2>\n<p>NAT Gateway があれば、応答も得られるのでは？と思ったので試してみましたが、NAT Gateway を作成してルートテーブルに設定しても、ping コマンドに応答はありませんでした。</p>\n<p>この理由はすぐに分からず、これ以上深掘りしていません。\n(もし分かる方は教えていただきたいです)</p>\n<h2 id=\"そもそもパブリックサブネットとは？\" style=\"position:relative;\"><a href=\"#%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%EF%BC%9F\" aria-label=\"そもそもパブリックサブネットとは？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>そもそもパブリックサブネットとは？</h2>\n<p>ここで、そもそもパブリックサブネットの定義を確認しておきます。</p>\n<p><a href=\"https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Scenario2.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AWS のドキュメント</a>だと、以下のような説明を見つけられました。</p>\n<blockquote>\n<p>パブリックサブネットは、インターネットゲートウェイへのルートが含まれているルートテーブルに関連付けられているサブネットです。</p>\n</blockquote>\n<p>また、以下のような文言もありました。</p>\n<blockquote>\n<p>パブリックサブネットのインスタンスはアウトバウンドトラフィックを直接インターネットに送信できますが、プライベートサブネットのインスタンスはできません。</p>\n</blockquote>\n<p>パブリックサブネットは、<strong>アウトバウンドのトラフィックが直接インターネットに送信されないだけで、インバウンドについては関係ないように読めます</strong>。</p>\n<p>この記事で試した結果とも一致します。</p>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>AWS の VPC について、</p>\n<ul>\n<li>パブリックサブネットはインターネットに面する</li>\n<li>パブリックサブネットはインターネットから直接アクセスできる</li>\n</ul>\n<p>といった説明は不正確で、</p>\n<ul>\n<li>パブリックサブネットでは、アウトバウンドのトラフィックが直接インターネットに送信される</li>\n<li>パブリック IP があれば (たとえプライベートサブネットでも)、インバウンドのトラフィックが直接インターネットから届く</li>\n</ul>\n<p>ということでした。</p>","fields":{"slug":"/posts/aws-vpc-inbound-packet","tagSlugs":["/tag/aws/","/tag/network/"],"autoRecommendPosts":["how-to-study-aws-basics","aws-copilot-v0-1-0","4295010650","udemy-aws-container"]},"frontmatter":{"date":"2023-02-24T05:31:24.962Z","description":"AWS の VPC にふれていて、「プライベートサブネットでもインターネットからパケットが届いているのでは？」と思ったので確認してみました。","tags":["aws","network"],"title":"【AWS】VPC のプライベートサブネットでも、インターネットからパケットは届く","socialImage":null,"recommendPosts":null}}},"pageContext":{"slug":"/posts/aws-vpc-inbound-packet"}},"staticQueryHashes":["251939775","3942705351","401334301"]}