【基礎から学ぶ】VPCのDNSについてまとめてみた

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは、技術3課の紅林です。花粉症なので、最近は花粉にやられて目がしょぼしょぼです。
さて、今回はVPCのDNSの設定/機能についてまとめてみました。目次は以下の通りです。

  • VPCのDNSについて
  • VPCのDNSに関する設定
    • DNS Resolution
    • DNS Hostname
    • DHCP Options Sets
  • VPCのDNSに関する機能
    • AmazonProvidedDNS
    • パブリックDNSホスト名、プライベートDNSホスト名
  • 設定と有効になる機能の関係性
    • 検証
  • まとめ

VPCのDNSについて

VPCにはDNSに関するいくつかの設定/機能があります。まずはそれぞれを簡単に記します。

VPCのDNSに関する設定

VPCのDNSに関する設定として、「DNS Resolution」、「DNS Hostname」、「DHCP Options Sets」がありますので、以下簡単に記載します。

DNS Resolution

VPCの設定として、本設定をtrueまたはfalseで設定できます。trueにすることで、後ほど言及する、AmazonProviedDNSを利用できるようになります。

VPC に対して DNS 解決がサポートされているかどうかを示します。この属性が false の場合、Amazon が提供する VPC の DNS サービス (パブリック DNS ホスト名を IP アドレスに解決します) が有効になりません。この属性が true の場合、Amazon が提供する DNS サーバー (IP アドレス 169.254.169.253) へのクエリ、またはリザーブド IP アドレス (VPC IPv4 ネットワークの範囲に 2 をプラスしたアドレス) へのクエリは成功します。

VPC の DNS サポート

DNS Hostname

VPCの設定として、本設定をtrueまたはfalseで設定できます。trueにすることで、VPC内に起動されるインスタンスに名前解決可能なFQDNが付与されます。

VPC 内に起動されるインスタンスが パブリック DNS ホスト名を取得するかどうかを示します。この属性が true の場合、VPC 内のインスタンスは DNS ホスト名を取得します。それ以外の場合は取得しません。インスタンスが DNS ホスト名を取得するようにする場合は、enableDnsSupport 属性も true に設定する必要があります。

VPC の DNS サポート

DHCP Options Sets

DHCPのオプションフィールドに関するパラメータ(DNSサーバやドメイン名等)を指定する設定項目です。作成したDHCP Options SetsをVPCに関連づけることで設定します。(DHCP Options SetsをVPCに設定しないことも可能)

DHCP (Dynamic Host Configuration Protocol) は、TCP/IP ネットワークのホストに設定情報を渡すための規格です。DHCP メッセージの options フィールドの内容は設定パラメータです。パラメータには、ドメイン名、ドメインネームサーバー、netbios-node-type などがあります。

DHCP オプションセットは AWS アカウントに関連付けられ、すべての Virtual Private Cloud (VPC) で使用できます。

DHCP オプションセットの概要

VPCのDNSに関する機能

VPCのDNSに関する機能として、「AmazonProvidedDNS」、「パブリックDNSホスト名、プライベートDNSホスト名」がありますので、以下簡単に記載します。

AmazonProvidedDNS

VPCで用いることのできるDNSサーバです。デフォルトではVPC内から名前解決を行う時はこのサーバを用いるよう設定されています。VPCのネットワークアドレスに2を加えたアドレスがこのサーバのアドレスとなっています。

AmazonProvidedDNS は Amazon DNS サーバーです。このオプションは、VPC のインターネットゲートウェイを介して通信する必要があるインス> タンスに対して DNS を有効にします。文字列 AmazonProvidedDNS は、リザーブド IP アドレスで実行中の DNS サーバーにマップされ、VPC > IPv4 ネットワークの範囲に 2 をプラスした値です。例えば、10.0.0.0/16 ネットワークの DNS サーバーの位置は 10.0.0.2 となります。

Amazon DNS サーバー

パブリックDNSホスト名、プライベートDNSホスト名

VPCにインスタンスを構築した際、VPCの設定に応じてインスタンスのにDNSホスト名が割り当てられます。パブリックに名前解決可能なホスト名とプライベート(VPC内)のみに名前解決可能なホスト名が割り当てられることがあります。

デフォルト VPC 内にインスタンスを起動すると、パブリック IPv4 アドレスとプライベート IPv4 アドレスに対応するパブリック DNS ホスト名およびプライベート DNS ホスト名がインスタンスに割り当てられます。デフォルト以外の VPC 内にインスタンスを起動すると、プライベート DNS ホスト名がインスタンスに割り当てられ、VPC およびインスタンスに指定した設定に応じてパブリック DNS ホスト名が割り当てられる可能性があります。

DNS ホスト名

設定と有効になる機能の関係性

さて、上記いくつか、VPCのDNSに関するリソースや設定を記載しましたが、それぞれの設定の関係性について確認したいと思います。
AWSドキュメントに以下の記載があり、基本的にはこちらの内容を理解すれば問題無いかと思います。

If both attributes[enableDnsHostnames, enableDnsSupport] are set to true, the following occurs:

・ Your instance receives a public DNS hostname.
・ The Amazon-provided DNS server can resolve Amazon-provided private DNS hostnames.
If either or both of the attributes is set to false, the following occurs:

・Your instance does not receive a public DNS hostname.
・The Amazon-provided DNS server cannot resolve Amazon-provided private DNS hostnames.
・Your instance receives a custom private DNS hostname if you’ve specified a custom domain name in your DHCP options set. If you are not using the Amazon-provided DNS server, your custom domain name servers must resolve the hostname as appropriate.
DNS Support in Your VPC

すなわち、既に記した「DNS Resolution」と「DNS Hostname」を両方有効にすると、

  • パブリックDNSホスト名が付与される
  • AmazonProvidedDNSを使用可能となる

となり、どちらかの設定が無効または両方無効の場合、

  • パブリックDNSホスト名は付与されない
  • DHCPオプションセットで指定した場合、プライベートDNSホスト名は付与されるが、AmazonProvidedDNSによる名前解決はできないため、そのホスト名を適切に解決できるよう設定しなければならない

ということになるかと思います。
大抵の場合は上記の説明で事足りると思いますが、細かい部分の機能を調整したい場合に、上記の3つの設定(「DNS Resolution」、「DNS Hostname」、「DHCP Options Sets」)と、それらに伴って有効化される3つの機能(「AmazonProvidedDNS」、「パブリックDNSホスト名」、「プライベートDNSホスト名」)について、どのように設定したらどの機能が使えるのか把握する必要があるため、各設定のパターンを検証して確かめてみました。

検証

DHCP Options Setsについては、DNSに関連して以下4パターンを想定しました。

そして、VPCの「DNS Hostname」と「DNS Resolution」をそれぞれ有効、無効にした場合とで、「パブリックDNSホスト名」、「プライベートDNSホスト名」、「AmazonProvidedDNS」の利用が可能か確かめてみた結果が以下になります。
例えば、No.1であれば、DNS HostnameとDNS Resolution両方を有効化し、VPCへのDHCP Options Setsは無しの場合、パブリックDNSホスト名、プライベートDNSホスト名は両方付与され、AmazonProvidedDNSの利用も可能、という結果になります。
AmazonProvidedDNSはVPC内のインスタンスからインターネット上のFQDNおよびVPC内のインスタンスのDNSホスト名の名前解決が可能かどうかを確認しています。

注意が必要なのが、※と記載したパターンです。VPC HostnameまたはVPC Resolutionは無効ですが、DHCP Options Setsでドメインを付与しているため、マネジメントコンソール等で確認すると、プライベートDNSホスト名が付与されているような形に見えますが、AmazonProvidedDNSで名前解決できないため、VPC内でそのDNSホスト名を利用することはできないようです。

まとめ

今回、VPCのDNSの機能について、まとめてみました。花粉症の人には辛い季節ですが、何とか乗り切っていきたいものです。

AWS運用自動化サービス「Cloud Automator」