EC2からapt updateできなかったので、調べたらまたしてもルートテーブルだった

前回書いた、EC2上に開発環境をたてる話の続き。

timtoronto634.hatenablog.com

今回の結論

最後に「送信先」を自分のIPに設定して、もう一度sshできるかを確認した めでたしめでたし

と書いたのだが、これは間違いで、「送信先」は0.0.0.0のままでよかった

経緯

さて、続きやるか、と思って最初のコマンドを叩いたときのことである。

$ sudo apt update

Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease Cannot initiate the connection to security.ubuntu.com:80
..
...

とエラーが帰ってきてしまった。

最初、/etc/apt/sources.list がいけないのかと思った。EC2のために特殊な設定が書いてあっていけないのかと。

しかしながら、ちゃんと調べると、ネットに繋がってないのでは?という説が浮上した。

stackoverflow.com

pingしてみる

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
33 packets transmitted, 0 received, 100% packet loss, time 32773ms

あー。繋がってないですね

自分のインスタンスがpublic subnet or private subnet どちらか、以下の記述を参考にする。

If a subnet is associated with a route table that has a route to an internet gateway, it's known as a public subnet. If a subnet is associated with a route table that does not have a route to an internet gateway, it's known as a private subnet

インスタンス→サブネット→ルートテーブルで見ると、igw は書いてある。ならばpublic subnetになってるはず

セキュリティグループの設定が行けないのかと思い、全てのインバウンドトラフィックを許可してみるが、解決しない。

ヘルプページを再びよく読むと、

Add a route to your subnet's route table that directs internet-bound traffic to the internet gateway.

とあったので、ルートテーブルで自分のIPからしか許可してなかったトラフィックを、全て許可するようにした。→ping成功

ということで、文字で書くよりも苦戦したが、解決。 過程でヘルプページを読み込んだりしたので、学びもあった。

学び

インターネットゲートウェイは、2つの目的を遂行する:

  1. インターネットとのトラフィックに対して、VPC内の目標を与える
  2. public IPv4 アドレスを与えられたインスタンスにとってのNetwork Address Translation を行う

VPC内のインスタンスに対しての外からの通信を割り振ってあげるのもIGWの役割となる。

今回は、VPCに紐付いているルートテーブルで自分のIP以外の通信に対してルートを設定していなかったので、帰ってきた通信がIGWにたどり着けなかったということになる。

今の理解は以下のよう

f:id:timtoronto634:20220203081508p:plain
EC2, VPC, IGW, route tableの関係