VPC DNS設定 完全ガイド
enableDnsSupport と enableDnsHostnames — たった2つの設定が、VPCのDNS機能すべてを左右する
たとえ話:VPCは「マンション」、DNSは「管理人室の電話帳」
AWS VPCを大きなマンションだと想像してみましょう。各部屋(EC2インスタンス)には住人(アプリケーション)がいて、お互いに連絡を取り合う必要があります。
現実世界とAWSの対応表
| マンションの世界 | AWSの世界 | ポイント |
|---|---|---|
| マンション全体 | VPC(Virtual Private Cloud) | ネットワークの境界 |
| 各部屋 | EC2インスタンス | 個別のサーバーリソース |
| 管理人室の内線電話帳 | AmazonProvidedDNS(169.254.169.253) | 名前 → IPの変換サービス |
| 電話帳サービスを使う / 使わない | enableDnsSupport(true / false) | DNS解決機能そのもの |
| 部屋のドアに表札を出す / 出さない | enableDnsHostnames(true / false) | パブリックDNS名の自動付与 |
| マンション専用の内線電話帳 | Route 53 プライベートホストゾーン | VPC内だけのカスタムDNS |
2つの設定を詳しく理解する
AWSが提供するDNSサーバー(AmazonProvidedDNS)を使用するかどうかを決定します。マンションでいうと「管理人室の内線電話帳を使えるかどうか」に相当します。
パブリックIPを持つインスタンスに自動的にパブリックDNSホスト名を割り当てるかどうかを決定します。マンションでいうと「ドアに表札を自動で出すかどうか」です。
VPC内のDNS解決フロー
enableDnsSupport = true の場合、EC2インスタンスからのDNS問い合わせがどのように処理されるかを示します。
設定の組合せと動作
2つの設定の組合せは4パターン。マンションのたとえで直感的に理解できます。
Route 53 プライベートホストゾーンの必須条件
プライベートホストゾーンをVPCで使用するには、以下の2つの設定が両方とも true である必要があります。どちらか一方でも false だと、VPC内のインスタンスはプライベートホストゾーンのDNSレコードを解決できません。
= true
= true
利用可能
マンションに例えると:管理人室の電話帳サービスが稼働していて(DnsSupport=true)、かつ全部屋に表札が出ている(DnsHostnames=true)状態で初めて、「マンション専用の内線電話帳」(プライベートホストゾーン)に名前を登録して、他の住人がその名前で電話をかけられるようになります。
どの設定を選ぶべき? 判断フロー
ユースケース別の推奨設定
実装例
# VPC作成時にDNS設定を有効化 aws ec2 create-vpc \ --cidr-block "10.0.0.0/16" \ --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]' # enableDnsSupportを有効化(デフォルトtrue) aws ec2 modify-vpc-attribute \ --vpc-id vpc-0123456789abcdef0 \ --enable-dns-support '{"Value": true}' # enableDnsHostnamesを有効化 aws ec2 modify-vpc-attribute \ --vpc-id vpc-0123456789abcdef0 \ --enable-dns-hostnames '{"Value": true}' # 現在の設定を確認 aws ec2 describe-vpc-attribute \ --vpc-id vpc-0123456789abcdef0 \ --attribute enableDnsSupport aws ec2 describe-vpc-attribute \ --vpc-id vpc-0123456789abcdef0 \ --attribute enableDnsHostnames
AWSTemplateFormatVersion: '2010-09-09' Description: 'VPC with DNS settings enabled' Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: '10.0.0.0/16' # DNS解決を有効化(管理人室の電話帳ON) EnableDnsSupport: true # DNSホスト名を有効化(表札ON) EnableDnsHostnames: true Tags: - Key: Name Value: MyVPC # プライベートホストゾーンの関連付け PrivateHostedZone: Type: AWS::Route53::HostedZone Properties: Name: 'internal.example.com' VPCs: - VPCId: !Ref MyVPC VPCRegion: !Ref 'AWS::Region'
resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" # DNS解決を有効化(管理人室の電話帳ON) enable_dns_support = true # DNSホスト名を有効化(表札ON) enable_dns_hostnames = true tags = { Name = "MyVPC" } } # プライベートホストゾーン resource "aws_route53_zone" "internal" { name = "internal.example.com" vpc { vpc_id = aws_vpc.main.id } } # DNSレコード例 resource "aws_route53_record" "api" { zone_id = aws_route53_zone.internal.zone_id name = "api.internal.example.com" type = "A" ttl = 300 records = ["10.0.2.10"] }
ベストプラクティス & アンチパターン
よくあるトラブルと対処法
FAQ(よくある質問)
VPC内のインスタンスがAWSの内蔵DNSリゾルバ(169.254.169.253)を使えなくなります。マンションでいうと管理人室の電話帳を閉鎖するようなもので、住人は自分で電話番号を調べる手段を持たない限り連絡が取れなくなります。カスタムDNSサーバーを自前で運用するケース以外では、falseにする理由はほぼありません。
デフォルトVPCは「すぐに使える」ことを重視して、enableDnsSupportとenableDnsHostnamesの両方がtrueで作成されます。一方、カスタムVPCはenableDnsHostnamesがfalseで作成されます。これは、セキュリティやコスト最適化のために不要な機能を明示的に有効化してほしいというAWSの設計思想によるものです。
VPCピアリング接続では、ピアリング設定の「DNS解決」オプションを有効にすることで、相手VPCのプライベートDNSホスト名をプライベートIPに解決できるようになります。ただし、両方のVPCでenableDnsSupportとenableDnsHostnamesがtrueになっていることが前提条件です。
AWSがVPC内のインスタンスに提供するDNSリゾルバのIPアドレスです。リンクローカルアドレス(169.254.x.x)を使用しているため、VPC外からはアクセスできません。VPCのCIDRレンジ+2のアドレス(例:10.0.0.2)も同じDNSリゾルバを指します。enableDnsSupport = true の場合のみ機能します。
ANS-C01(Advanced Networking Specialty)では、VPC DNS設定はRoute 53やハイブリッドDNSの文脈で頻出です。特に「プライベートホストゾーンが動かないシナリオ」で、原因として enableDnsSupport / enableDnsHostnames の設定不備が正解選択肢になるパターンが典型的です。また、VPCピアリングやTransit Gatewayと組み合わせたDNS解決の問題にも出題されます。