EC2にSSHでログインできているのにping が通らない?
AWSの勉強を始めたての頃、よく引っかかっていたトラップですが、久しぶりに「あれ?」っとなって一瞬つまずいたので、改めて備忘録を兼ねて記しておきたいと思います。
筆者はプロトタイプなどをラフに開発したい時や、未知のツールを雑にインストールしてお試しする時の為の、使い捨てEC2向けに、特定のVPNからの全てのTCP接続を許可するセキュリティグループを作っています。大抵はHTTPSとSSHが開いていれば事足りるので、このセキュリティグループは普段はあまり使用しませんが、たまに使うと「全部開いているはず」という思い込みがトラップになります。
なぜpingが通らないか?
ping は 、ICMPプロトコルだから!
これです。SSHやHTTPSなどのサービスポートはTCP/IPです。
そのため、EC2のTCPポートを全て許可してもpingは通りません。
以下のようにタイプの選択にも ping は出てきません。
ping を許可するにはICMPプロトコルの接続を許可する必要があります。
解決策:ICMP接続を許可する
セキュリティグループにICMP接続許可を追加する
「セキュリティグループの編集」画面から、インバウンドルールで「すべてのICMP-IPv4」を追加して保存します。
このように設定してから、改めてpingを試してみます。
これで問題なくpingが通るようになりました。
まとめ
pingがTCP/IPではなくICMPであることをつい忘れがちですね。
理解していればセキュリティグループに追加するだけなので簡単に解決します。
なお、TCP/IP、ICMPにかかわらず、全てのIPからの全アクセスを許可することは危険を伴いますので、接続元を特定IPからに制限するなど、注意が必要です。