ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

VPC に AWS の DNS サーバーは何台作られるか?

こんにちは。自称インフラエンジニアながら一昨年 CCNA が失効し「自分はネットワークに詳しい。」と胸を張って言えない AWS エンジニアの尾谷です。
今、新試験に移行してさらに難易度が上がったと評判の AWS Certified Advanced Networking - Specialty の資格取得に向けて絶賛勉強中です。

aws.amazon.com

以前、会社で話題になった掲題の件を調査してみました。
認識違いなどあれば、猛者の皆さまよりご指摘いただけますようお願いします。

疑問

Amazon VPC 内にサブネットを作成すると、先頭と末尾のアドレスが AWS にて予約されます。 例えば、192.168.0.0/16 のサブネットに、192.168.0.0/24 のサブネットを作成すると、3 つのアドレスが予約されて、251 が利用可能です。

IP アドレス 備考
192.168.0.0 ネットワークアドレス
192.168.0.1 AWS VPC ルーター
192.168.0.2 AWS DNS サーバー
192.168.0.3 AWS にて予約
192.168.0.255 ブロードキャストアドレス

では、サブネットを複数作成した場合、各サブネットごとに DNS サーバーが起動するのでしょうか。

結論

結論から書きますと、DNS サーバーの IP アドレスは、VPC ネットワーク範囲のベースにプラス 2 したものが割り当てられます。
そして、そもそも、DNS サーバーは VPC 内に作成されるわけではなく、単にアドレスが割り当てられるだけです。

VPC の DNS 属性 - Amazon Virtual Private Cloud

Amazon DNS サーバーは、VPC の特定のサブネットまたはアベイラビリティーゾーン内に存在しません。 アドレス 169.254.169.253 (および VPC IPv4 ネットワーク範囲のベースにある予約済み IP アドレスに 2 を加えたもの) ならびに fd00:ec2::253 にあります。 複数の IPv4 CIDR ブロックを持つ VPC の場合、DNS サーバーの IP アドレスはプライマリ CIDR ブロックにあります。

特定のサブネットまたはアベイラビリティーゾーン内に存在しません。

ドキュメントを参照して、自分の認識が根本的に誤っていたと分かりました。
192.168.0.0/16 の場合は、192.168.0.2 が DNS サーバーとして割り当てされますが、DNS サーバーが起動するわけではなく 169.254.169.253 にルーティングされると理解するのが正しいようです。

DNS サーバーの IP アドレスはプライマリ CIDR ブロックにあります。

また、プライマリ CIDR ブロックに IP アドレスが割り当てられるので、サブネットを複数追加しても都度 DNS サーバーが割り当てられるわけではないようです。

深まる疑問

ここで腑に落ちないのが、以下の画像です。

otani-lab-Public_d には何もインスタンスが起動していないにも関わらず利用可能な IPv4 アドレスは 251 です。(254 ではない。)
VPC ルーターも、DNS サーバーも存在しないサブネットの利用可能な IPv4 アドレスが少ないのはどう説明すれば良いのでしょうか。

検証

実はこっそり 172.16.2.2 に DNS サーバーが参照されているといったことはないのでしょうか。
以下環境を作って試験してみました。
ドキュメントによると、172.16.0.2 が DNS サーバーになるはずですが...。

172.16.2.0/24 のセグメントに起動した Windows Server (172.16.2.203) に NAT インスタンスでポートフォワードして RDP 接続してみました。
そして、Windows Server にて ipconfig コマンドを投入したところ、172.16.0.2 が DNS サーバーが指定されていました。

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>ipconfig /all

Windows IP 構成

(中略)

   リース取得. . . . . . . . . . . . . .: 2022年6月23日 9:37:24
   リースの有効期限. . . . . . . . . . .: 2022年6月23日 10:37:24
   デフォルト ゲートウェイ . . . . . . .: 172.16.2.1
   DHCP サーバー . . . . . . . . . . . .: 172.16.2.1
   DHCPv6 IAID . . . . . . . . . . . . .: 101357883
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-2A-0D-98-01-0E-DA-72-9B-BF-E1
   DNS サーバー. . . . . . . . . . . . .: 172.16.0.2
   NetBIOS over TCP/IP . . . . . . . . .: 有効

(中略)

C:\Users\Administrator>

以上より、サブネットごとに DNS サーバーが作成されるわけではないことが証明できました。

なぜアドレスが予約されているのか?

なぜ DNS サーバーが割り当てされないサブネットであってもアドレスは利用できないのでしょうか。

ドキュメントで見つけることができませんでしたが、仮に先頭のサブネットを削除した場合は、次の先頭になるサブネットで DNS サーバーのアドレスを割り当てしないといけなくなります。そのため、現在は使用していなくてもアドレスを予め予約して空けておく必要があるのではないか? と想定しました。

まとめ

AWS ドキュメントは読んでいて大変勉強になります。
以下の、Amazon DNS サーバーは NACL やセキュリティグループで遮断ができない。という点や、Windows Server 2008 が 169.254.0.0/16 の DNS サーバーを利用できない点なども初めて知りました。

ネットワーク ACL またはセキュリティグループを使用して、Amazon DNS サーバーとの間のトラフィックをフィルタリングすることはできません。 Windows Server 2008 では、リンクローカルアドレス範囲 (169.254.0.0/16) にある DNS サーバーは使用できません。

VPC の DNS 属性 - Amazon Virtual Private Cloud

日々忙しいとついつい読み飛ばしたり、画像やコードが掲載された分かりやすい Qiita などの記事を見て断片的な知識で理解した気になってしまいがちですが、時間を取って AWS ドキュメントを読み込むのも大事だと感じました。

最後までお読みくださりありがとうございました。