AWS EC2インスタンスへのping疎通にはセキュリティグループ(ICMP)の設定が必要!

pingが通らない!

AWSで2つのEC2インスタンスを作成/起動させてpingで疎通確認したのですが、通りません。疎通確認した環境としては、EC2インスタンスにそれぞれセキュリティグループを設定済み。私の端末のTeraTermからそれぞれのEC2インスタンスにはSSH接続は出来ているという環境です。

ICMPというプロトコルの存在

なぜなのか検討が付かなかったのでWebで情報を収集すると、どうやらAWS EC2はSSHの設定をしてもping応答しません

なぜかというと、pingはICMPというプロトコルなんですね。あまり聞かないですが正式名称は Internet Control Message Protocol(インターネット制御通知プロトコル) という名前で、SSHとは違うプロトコルなのです。
参考1:ICMPとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
参考2:TCP/IP – ICMPとは

セキュリティグループでICMPの設定をする

このICMPも、SSHと同様にセキュリティグループで設定することができます。ですので、ping応答させるには ICMP をセキュリティグループで設定 する必要があるのです。色々な設定を見直したりして1時間程度ハマってしまいました。みなさんが同じ轍を踏まないように、実際のコマンドを載せて詳細を書いていきます。

ICMP設定前の状態確認

ICMP を設定してオープンする前はこんな感じです。

$ ping 192.168.10.238
PING 192.168.10.238 (192.168.10.238) 56(84) bytes of data.
^C

応答しないので途中で止めました。

ICMP 設定

セキュリティグループでICMP を設定します。タイプにすべてのICMPを選択し、ソースにpingで疎通したいIPv4アドレス範囲を記載します。

ICMP設定後の状態確認

上記でping疎通のための設定は完了しました。これでICMP でアクセスするための穴が空きました。pingを打つとこんな感じになります。

$ ping 192.168.10.238
PING 192.168.10.238 (192.168.10.238) 56(84) bytes of data.
64 bytes from 192.168.10.238: icmp_seq=1 ttl=128 time=1.04 ms
64 bytes from 192.168.10.238: icmp_seq=2 ttl=128 time=0.668 ms
64 bytes from 192.168.10.238: icmp_seq=3 ttl=128 time=0.692 ms
64 bytes from 192.168.10.238: icmp_seq=4 ttl=128 time=7.05 ms
^C

無事にpingでの疎通確認をすることが出来ました。

さらに詳細な情報はAWSサイトの セキュリティグループのルールのリファレンス インスタンスへの Ping の実行 に記載されています。