【EC2】プライベートネットワークのec2インスタンスにSSH接続するとconnect to host 192.0.2.1 port 22: connection refusedとなった【natゲートウェイ】

先日AWSでサーバーを構築していた際に発生した。パブリックな踏み台サーバーからプライベートなEC2インスタンスへのSSHログインを試みると

connect to host 192.0.2.1 port 22: connection refused

と表示されログインできない自体になった。最初はセキュリティグループの設定を疑って、ポート番号空いているかを確認したが特に問題はなさそう。
なんでだろうな…と思っていたら突然ログインできるようになった。httpアクセスもできるし一体何だったのだろうか、インスタンスの不具合かなぁ…と思っていた。ただ何度インスタンスを立ち上げても再現する。
最初はhttpアクセスもsshも受け付けないが30分ほどで可能となる。んーやっぱりインスタンスの不具合かな?と思ってなんどいろんなインスタンスを試したが治らない…。

ひとつ気になったになったのはターゲットグループのヘルスチェックがunhealtyではなくinitialなのだ。インスタンスの生成はとっくに済んでいて、healtyかunhealtyが表示されるはずなのにinitialなのだ。EC2インスタンス一覧からはインスタンスの初期化はやはり終わっているのだが…。

なんかしらec2インスタンスの初期化がおかしいのかと思ってインスタンスのシステムログを見ると、おかしなところが

Loaded plugins: priorities, update-motd, upgrade-helper
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
http://packages.ap-northeast-1.amazonaws.com/2018.03/main/c31535f74c6e/x86_64/repodata/repomd.xml?instance_id=i-0708a8a776d63fed0&region=ap-northeast-1: [Errno 12] Timeout on http://packages.ap-northeast-1.amazonaws.com/2018.03/main/c31535f74c6e/x86_64/repodata/repomd.xml?instance_id=i-0708a8a776d63fed0&region=ap-northeast-1: (28, 'Connection timed out after 10000 milliseconds')
Trying other mirror.
...
...
(省略)

どうやらyum周りでタイムアウトエラーが発生しているようだ。ここからは推測も混じるんですが、yum周りが終わらないので、この後のsshdの立ち上げなども遅くなっている。このタイムアウトエラーが全部終わるのが30分ほど時間がかかっているのでは。そういう意味で状態はしばらくinitial、ただAWS的にはインスタンス自体は立ち上げられているのでEC2のステータスとしては問題がない。

ではどうしてyumがタイムアウトしているのか。これは外部にアクセスできないからが原因ではないかと考え、pingやcurlを試したがやはりその通り、全部結果が帰ってこなかった。つまり外部からはアクセスできるのだが、内部から外部へはアクセスできない状態だったのだ。

プライベートインスタンスが外部と通信するのにnatゲートウェイが必要だ。natゲートウェイの設定を確認したところ確かにサブネットの設定が間違っていた。具体的にはプライベートインスタンスが属するサブネットにnatゲートウェイを紐付けるはずが全然別のものに紐づけていた。これを修正したところ問題なくインスタンスが起動 、httpアクセス、SSHログインができるようになった。

時間が経てばhttpアクセスもSSHログインも問題なかったのでインスタンスの不調や設定ミスを疑ったのだが、最終的にはネットワーク設定の問題だった。

ちょっとした確認ミスで大きく時間を奪われてしまった…この辺うまいことできないかなぁとつくづく思ってしまった。

この記事が気に入ったらサポートをしてみませんか?