こんにちは!エンタープライズクラウド部技術2課の日高です。
「Amazon VPCとサブネットの設計のポイントについて」ブログを執筆している際に、DNS解決とDNSホスト名の有効/無効の組み合わせにより、実際にどのように名前解決に動作するのか気になったので検証してみました。
※よければ「Amazon VPCとサブネットの設計のポイントについて」のブログも合わせてご覧ください
VPCのDNS属性について
DNS解決(enableDnsSupport)
VPC が Amazon 提供の DNS サーバーを介した DNS 解決策をサポートするかどうかを指定する項目です。
DNSホスト名(enableDnsHostnames)
VPC 内に起動されるインスタンスが パブリック DNS ホスト名を取得するかどうかを指定する項目です。
補足
DNS解決とDNSホスト名を指定しないでVPCを新規作成するとデフォルトでは以下の設定値になります。
- VPCの新規作成時に「VPCなど」を選び作成した場合=「DNS解決」「DNSホスト名」ともに有効になっています。
- VPCの新規作成時に「VPCのみ」を選び作成した場合=「DNS解決」が有効に、「DNSホスト名」が無効になっています。
- VPCの新規作成時にCloudFormationで作成した場合=「DNS解決」が有効に、「DNSホスト名」が無効になっています。
検証
検証内容
DNS解決(enableDnsSupport)とDNSホスト名(enableDnsHostnames)の有効/無効の組み合わせにより、実際にどのように名前解決に動作するのか検証しました。
具体的には、上記検証環境を準備して下記の条件で検証をしました。
- Transit Gateway:DNSサポートを有効
- vpc-a :「DNS解決」「DNSホスト名」ともに有効
- vpc-b:「DNS解決」「DNSホスト名」を変更していく
- EC2-A および EC2-Bにて
nslookup (EC2のパブリック IPv4 DNS ホスト名)
を使い名前解決の結果を確認する
検証条件と結果
今回の検証条件は以下の4つです。
こちらの検証内容をまとめていきます。
- vpc-bの「DNS解決」「DNSホスト名」がともに有効
- vpc-bの「DNS解決」が有効、「DNSホスト名」が無効
- vpc-bの「DNS解決」が無効「DNSホスト名」が有効
- vpc-bの「DNS解決」「DNSホスト名」がともに無効
vpc-bの「DNS解決」「DNSホスト名」がともに有効
【EC2-A での名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP (10.0.13.119)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP(172.16.13.204) が返されました
【EC2-Bでの名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP (10.0.13.119)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP(172.16.13.204) が返されました
【補足】
EC2-AからEC2-Bにdig (EC2-Bのパブリック IPv4 DNS ホスト名)
を打った結果、vpc-a にあるRoute53 resolverからAレコードが返されていることが確認出来ました。
また、ローカルのPowerShellから、EC2-Bの パブリック IPv4 DNS ホスト名の名前解決を行ったところ、パブリック IP(52.195.36.37) が返されました。
vpc-bの「DNS解決」が有効、「DNSホスト名」が無効効
【EC2-A での名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP (10.0.13.119)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP(172.16.13.204) が返されました
【EC2-Bでの名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は パブリック IP (52.193.33.8)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は パブリック IP(52.195.36.37) が返されました
vpc-bの「DNS解決」が無効「DNSホスト名」が有効
【EC2-A での名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP (10.0.13.119)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP(172.16.13.204) が返されました
【EC2-Bでの名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決を行うことはできませんでした
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決を行うことはできませんでした
vpc-bの「DNS解決」「DNSホスト名」がともに無効
【EC2-A での名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP (10.0.13.119)が返されました
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決は、プライベート IP(172.16.13.204) が返されました
【EC2-Bでの名前解決】
- EC2-A の パブリック IPv4 DNS ホスト名の名前解決を行うことはできませんでした
- EC2-B の パブリック IPv4 DNS ホスト名の名前解決を行うことはできませんでした
検証のまとめ
vpc-b 側で 「DNS解決」「DNSホスト名」を変更した場合、影響が出たのは、あくまでも vpc-b のEC2から名前解決を行う場合でした。(EC2-A側では常にプライベートIPが返されていた)
つまり、本検証からVPC の DNS 関連の設定は、その VPC 内のリソース からの名前解決時にのみ影響することが分かりました。
また、「DNS解決」を無効にするとRoute53 resolverでの名前解決ができなくなり、「DNSホスト名」を無効にするとプライベートIPでの名前解決ができなくなることが分かりました。
ただ、この検証と同時に新しい疑問が生まれました。
それは、Route53 resolverの名前解決の動作です。
EC2-Aにて名前解決を行う場合の流れとしては、vpc-a に存在する Route53 resolver はAmazon-provided private DNS hostnames に再帰的問い合わせを行うと思います。
Amazon-provided private DNS hostnamesにはVPCに閉じたプライベートネットワーク内のDNSドメインのレコードを管理しているので、vpc-a のAmazon-provided private DNS hostnames に、vpc-bのリソースに関連するレコードがあるのはなぜなのでしょうか。
サポートに問い合わせたところ、内部機構に関わる情報となるため公開情報がないと教えていただきました。
個人的な仮説ではありますが、 Transit GatewayのDNSサポートを有効にするといい感じに裏側でVPC間のレコードを同期しているのかなと考えています。
まとめ
本検証で、VPC の DNS 関連の設定は、その VPC 内のリソース からの名前解決時にのみ影響することが分かりました。
本記事が誰かの助けになれば幸いです。
日高 僚太(執筆記事の一覧)
2024 Japan AWS Jr. Champions / 2024 Japan AWS All Certifications Engineers
EC部クラウドコンサルティング課所属。2022年IT未経験でSWXへ新卒入社。
記事に関するお問い合わせや修正依頼⇒ hidaka@serverworks.co.jp