#背景
以前、EC2から同じサブネット内のEC2に秘密鍵を指定して「ssh」コマンドを実行した際、下記のようにエラーが出力され、SSH接続できないということがありました。
$ ssh -i id_rsa [ユーザー名]@[ホスト名]
ssh: Could not resolve hostname [ホスト名]: Name or service not known
接続先へは公開鍵を配置していて、セキュリティグループにも問題がない状態です。
結果的に、VPCのDNS ホスト名を『有効』にすることで解決したのですが、それまで全くこの機能について意識できていませんでした。
この記事で、VPCのDNS ホスト名を『有効』にするのとしないのとではどう違うのか、簡単に整理します。
#DNS ホスト名が『無効』の場合
まず、VPCを作成すると、デフォルトではDNS 解決のみ『有効』になっており、DNS ホスト名は『無効』になっています。
この状態だと、ホストアドレス「.2」が割り当てられたDNSサーバー(Amazon Route 53 Resolver)はVPCに存在するのですが、名前解決ができません。
そのため、EC2①からEC2②に秘密鍵を指定して「ssh」コマンドを実行しても、エラーになってしまいます。
#DNS ホスト名が『有効』の場合
VPCのDNS ホスト名を『有効』にすると、DNSサーバー(Amazon Route 53 Resolver)が機能し、名前解決を行ってくれるので、秘密鍵を指定して「ssh」コマンドを実行すると、EC2①からEC2②にSSH接続することができます。
#参考ドキュメント
以下、この記事を書く際に使用した公式ドキュメントです。
・Amazon DNS サーバー(Amazon Route 53 Resolver)
・VPC での DNS の使用
・IPv4 用の VPC とサブネットのサイズ設定