Azure 仮想マシンの名前解決を理解する ~ Azure が提供する名前解決 ~

Azure では仮想ネットワーク (VNet) 内に配置されたリソースの名前解決を行う方法として、以下の 4 つの方法が用意されています。
  1. Azure が提供する名前解決
  2. プライベート DNS ゾーンによる名前解決
  3. カスタム DNS サーバーによる名前解決
  4. DNS Private Resolver による名前解決
本稿では、「Azure が提供する名前解決」の動作についてAzure 仮想マシン (VM) に注目して確認します。

同じ VNet に配置された VM を名前解決する

次の構成を用意して、同じ VNet に配置された VM の名前解決動作を確認します。

Windows VM からの名前解決とその設定を確認する

Windows VM win-vm-1 から正引き/逆引きでの名前解決動作を確認してみます。
 

正引きの名前解決

正引き (前方参照) の名前解決を行うと、Azure 提供 DNS 168.63.129.16 が参照され各 VM のホスト名に対応する IP アドレスを応答します。
  • ホスト名で要求すると自動的に DNS サフィックス *.internal.cloudapp.net が付与されて名前解決が行われています。
  • この前方参照ゾーン *.internal.cloudapp.net は特にこちらでは構成しておらず MS によって自動作成され管理されています。

逆引きの名前解決

逆引きの名前解決を行うと、こちらも Azure 提供 DNS 168.63.129.16 が参照され各 VM の IP アドレスに対応するホスト名を応答します。
  • IP アドレスで要求すると対応する逆引きレコード x.x.x.x.in-addr.arpa が参照されて名前解決が行われています。
  • この逆引きレコード x.x.x.x.in-addr.arpa は特にこちらでは構成しておらず MS によって自動作成され管理されています。

DNS 参照設定の確認

Windows 上で DNS 参照設定がどのように構成されているかを確認します。
まずは、NIC の設定がどのように構成されているか確認します。
  • IP アドレスや DNS 設定は DHCP から自動的に配布されたものを利用する設定になっています。
  • DNS サフィックスは明示的に設定されていません。

続いて、 NIC に実際に反映された設定を確認します。

  • IP アドレスや DNS 設定は Azure 提供 DHCP 168.63.129.16 から配布されており、自動的に設定されています。
  • DNS サフィックスも NIC の Connection-specific DNS Suffix に MS 管理のゾーン *.internal.cloudapp.net が DHCP から配布されています。
  • Windows IP ConfigurationDNS Suffix Search ListConnection-specific DNS Suffix の値が反映されています。

Linux VM からの名前解決とその設定を確認する

Linux VM lin-vm-1 から正引き/逆引きでの名前解決を確認してみます。
 

正引きの名前解決

正引き(前方参照)の名前解決を行うと、スタブリゾルバ 127.0.0.53#53 が参照され各 VM のホスト名に対応する IP アドレスを応答します。
  • ホスト名で要求すると自動的に DNS サフィックス *.internal.cloudapp.net が付与されて名前解決が行われています。
  • この前方参照ゾーン *.internal.cloudapp.net は特にこちらでは構成しておらず MS によって自動作成され管理されています。

逆引きの名前解決

逆引きの名前解決を行うと、こちらもスタブリゾルバ 127.0.0.53#53 が参照され各 VM の IP アドレスに対応するホスト名を応答します。
  • IP アドレスで要求すると対応する逆引き参照ゾーン x.x.x.x.in-addr.arpa が参照されて名前解決が行われています。
  • この逆引き参照ゾーン x.x.x.x.in-addr.arpa は特にこちらでは構成しておらず MS によって自動作成され管理されています。

DNS 参照設定の確認

Linux (Ubuntu 24.04 LTS) 上で DNS 参照設定がどのように構成されているかを確認します。
まずは、NIC の設定がどのように構成されているか確認します。
  • IP アドレスや DNS 設定は、DHCP から自動的に配布されたものを利用する設定になっています。
  • DNS サフィックスは明示的に設定されていません。

続いて、 NIC に実際に反映された設定を確認します。

  • IP アドレスや DNS 設定は Azure 提供 DHCP 168.63.129.16 から配布されており、自動的に設定されています。
  • DNS サフィックスも NIC の DNS Domain に MS 管理のゾーン *.internal.cloudapp.net が DHCP から配布されています。
  • /etc/resolv.confsearchDNS Domain の値が反映されています。

Ubuntu では、ローカルクライアントを systemd-resolved 内部の DNS スタブリゾルバに接続し、スタブリゾルバが名前解決を中継します。このため、nslookup の結果ではスタブリゾルバのアドレス 127.0.0.53#53 が表示されますが、実際にはスタブリゾルバは resolvectl status で出力されている通り、DHCP から配布された DNS 参照先として Azure 提供 DNS 168.63.129.16 を参照しています。

DNS レコードの更新動作を確認する

新しい VM を作成する

新しい VM を作成した際に DNS レコードが自動的に登録されるかを確認します。

  • win-subnet に新しい Windows VM win-vm-2 を作成する
  • lin-subnet に新しい Linux VM lin-vm-2 を作成する

Windows VM win-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが追加されます。

Linux VM lin-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが追加されます。

IP アドレスを変更する

既存の VM の IP アドレスを変更した際に、DNS レコードが自動的に更新されるかを確認します。
  • Windows VM win-vm-2 の IP アドレスを 10.1.0.5 から 10.1.0.15 に変更する
  • Linux VM lin-vm-2 の IP アドレスを 10.1.1.5 から 10.1.1.15 に変更する

Windows VM win-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが更新されます。

 

Linux VM lin-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが更新されます。

ホスト名を変更する

既存の VM のホスト名を変更した際に、DNS レコードが自動的に更新されるかを確認します。

  • Windows VM win-vm-2 のホスト名を win-vm-2 から win-vm-2x に変更する
  • Linux VM lin-vm-2 のホスト名を lin-vm-2 から lin-vm-2x に変更する

Windows VM win-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが更新されます。(要再起動)

Linux VM lin-vm-2 のレコード

  • 正引き/逆引きともに自動的にレコードが更新されます。(要再起動)

仮想マシンを停止する

既存の VM を停止した際に DNS レコードがどうなるかを確認します。
  • Windows VM win-vm-2 を停止する
  • Linux VM lin-vm-2 を停止する

Windows VM win-vm-2 のレコード

  • 正引き/逆引きともに名前解決ができなくなります。

Linux VM lin-vm-2 のレコード

  • 正引き/逆引きともに名前解決ができなくなります。

異なる VNet に配置された VM を名前解決する

次の構成を用意して、異なる VNet に配置された VM の名前解決動作を確認します。

VNet vnet-1 の VM から名前解決する

VNet vnet-1 の Windows VM win-vm-1 から VNet vnet-1 の名前解決を確認します。
  • 同じ VNet の VM は正引き/逆引きともに名前解決できます。
VNet vnet-1 の Windows VM win-vm-1 から VNet vnet-2 の名前解決を確認します。
  • 異なる VNet の VM は正引き/逆引きともに名前解決できません。

VNet vnet-2 の VM から名前解決する

VNet vnet-2 の Windows VM win-vm-2 から VNet vnet-2 の名前解決を確認します。
  • 同じ VNet の VM は正引き/逆引きともに名前解決できます。

VNet vnet-2 の Windows VM win-vm-2 から VNet vnet-1 の名前解決を確認します。
  • 異なる VNet の VM は正引き/逆引きともに名前解決できません。

FQDN を指定して名前解決する

VNet 毎に DNS ゾーンが異なることで、ホスト名 (サフィックスなし) での名前解決ができない可能性があるため、FQDN を指定して名前解決してみます。
VNet vnet-1 の VM win-vm-1 から VNet vnet-2 の VM を FQDN で名前解決してみます。
  • FQDN 指定でも異なる VNet の VM は名前解決できません。

VNet vnet-2 の VM win-vm-2 から VNet vnet-1 の VM を FQDN で名前解決してみます。
  • FQDN 指定でも異なる VNet の VM は名前解決できません。

カスタム DNS サーバーを中継して名前解決を試みる

これまでの確認により、DNS 参照のスコープが VNet であり、異なる VNet 間での名前解決はできないことがわかりました。ここからは蛇足となりますが、異なる VNet に配置した DNS サーバーを中継することで名前解決ができるかを確認します。

VNet vnet-2 の Windows VM を DNS サーバーにして VNet vnet-1 の VM から名前解決する

次のような構成で、VNet を跨いで名前を参照できるか確認します。
VNet vnet-1 の Windows VM win-vm-1 から VNet vnet-2 の VM の名前解決を行います。
  • ホスト名 (DNS サフィックスなし) /FQDN ともに名前解決できません。

VNet または NIC の DNS 設定で、カスタム DNS サーバーを参照させると、DHCP から配布される DNS サフィックスは reddog.microsoft.com という存在しないゾーンになります。
 

VNet vnet-2 の Windows VM を DNS サーバーにして VNet vnet-1 の VM から名前解決する
(DNS フォワーダーあり)

次に、すべてのリクエストを Azure 既定の DNS 168.63.129.16 に転送するように DNS サーバーを構成します。

VNet vnet-1 の Windows VM win-vm-1 から VNet vnet-2 の VM の名前解決を行います。

  • FQDN の場合は、正引きの名前解決ができます。

続いて、逆引きの名前解決についても確認します。

  • DNS サーバー自身の IP アドレスは逆引きに失敗します。
  • DNS サーバー以外の VM は、逆引きの名前解決ができます。

恐らく DNS サーバー自身の IP アドレスはフォワードせずに、自身のもつ逆引きゾーンで解決しようとして、ゾーンがないためエラーになる動きをしているように思えますが、本稿の本質ではないためここまでの確認とします。

まとめ

本稿では、Azure が提供する名前解決により、VM の名前解決がどのように行われるかを確認しました。
追加の構成や管理を行うことなく、正引き/逆引きともに名前解決することができ DNS レコードの更新も自動的に行われるため、とても便利で手軽ですが、VNet を跨いで名前解決を行うことができないことや VM 停止時には DNS レコードが参照できないなどの制約があることから、利用可能なシナリオが限定されることがわかりました。
特に、エンタープライズシナリオにおいて一般的な Hub & Spoke 型のネットワークトポロジーにおいては、DNS リゾルバを Hub VNet に配置して集中管理することが一般的ですが、このとき Azure が提供する名前解決では DNS リゾルバが存在する Hub VNet の VM しか名前解決できないことがネックになってくると思います。
Azure が提供する名前解決の特徴や考慮事項は次の公式ドキュメントにもまとめられています。

今回は以上です。次回は、プライベート DNS ゾーンによる VM の名前解決動作を確認してみたいと思います。

タイトルとURLをコピーしました