Azure プライベートDNS を使い仮想ネットワーク内に作成された仮想マシンのレコードを自動登録する
今回はAzure プライベートDNS の機能の1つである仮想マシンの自動登録機能を使い、仮想ネットワーク内に作成された仮想マシンのプライベートIP アドレスのレコードを自動で登録します。
実施環境
Azure CLI | 2.56.0 |
---|
前提条件
今回Azure リソース作成に利用するAzure CLI はAzure Cloud Shell からコマンドを実行したものとなります。また仮想マシン作成時にSSH 鍵を利用するため、「~/.ssh」配下にSSH 鍵がない場合は以下のコマンドで事前に作成をお願いします。
# 仮想マシン用のSSH鍵を作成する
ssh-keygen -m PEM -t rsa -b 4096
Azure プライベートDNS の自動登録機能とは
Azure プライベートDNS の自動登録機能は、仮想ネットワーク内の新規または既存の仮想マシンのプライベートIP アドレスを自動でプライベートDNS のレコードに登録できる機能です。自動登録は仮想マシンのみ対象となっているため、仮想マシン以外のリソースについては登録されません。自動登録で登録されるレコードはA レコードとPTR レコード (プライベートDNS には表示されない) であり、レコードは仮想ネットワークリンクの作成時または自動登録の設定時となります。自動登録されたレコードの削除は、特定のレコードのみ削除したい場合は手動で削除を行い、自動登録した全てのレコードを削除する場合はプライベートDNS の仮想ネットワークリンクの自動登録を無効にします。ただし、仮想マシンと同じ名前のレコードを手動で作成した場合は自動登録の対象とならず、自動登録設定を無効にしても削除されません。
自動登録はいくつかの制約があります。仮想マシンでDHCP を利用しているプライマリのNIC のみ登録されること、複数の仮想ネットワークリンクで自動登録を同時に設定する (片方のプライベートDNS ゾーンの仮想ネットワークリンクで自動登録を有効にし、もう一方の仮想ネットワークリンクでは自動登録を無効にする、はOK) ことはできません。
自動登録についてはプライベートDNS のリンク先仮想ネットワークのアドレス帯に関係なく作成できますが、同じアドレス帯の仮想ネットワーク同士で仮想ネットワークを行うと複数の仮想マシン名で同じIP アドレスが登録される可能性があるため、複数の仮想ネットワークで自動登録を行う場合は注意が必要です。
今回の構成
今回は以下の構成のリソースで仮想ネットワークリンク作成前と作成後の自動登録機能を試します。vm-test-dev-001 を仮想ネットワークリンク作成前、vm-test-dev-002 を仮想ネットワークリンク作成後とします。
リソースグループの作成、変数定義
初めに各種Azure リソース用のリソースグループ作成と各種変数の定義を行います。
# 各種変数を定義する
RESOURCE_GROUP_NAME="rg-test-dev-001"
LOCATION="japaneast"
TAGS="Environment=development"
VNET_NAME="vnet-test-dev-001"
VNET_PREFIX="192.168.0.0/16"
SUBNET_NAME="snet-test-dev-001"
SUBNET_PREFIX="192.168.0.0/24"
VM1_NAME="vm-test-dev-001"
VM2_NAME="vm-test-dev-002"
VM_USER="autoregistdemo"
PRIVATE_DNS_ZONE_NAME="privatednstest.com"
PRIVATE_DNS_LINK_NAME="privatednstest-link"
# リソースグループを作成する
az group create -n $RESOURCE_GROUP_NAME -l $LOCATION
仮想ネットワーク、サブネットの作成
リソースグループ作成後、プライベートDNS を設定する仮想ネットワークと仮想マシン用のサブネットを作成します。
# 仮想ネットワークとサブネットを作成する
az network vnet create \
--name $VNET_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--tags $TAGS \
--address-prefix $VNET_PREFIX \
--subnet-name $SUBNET_NAME \
--subnet-prefixes $SUBNET_PREFIX
仮想ネットワークリンク作成前の仮想マシンを作成
仮想ネットワークとサブネットを作成したら仮想ネットワークリンク作成前の仮想マシンを作成します。
# 仮想ネットワークリンク作成前の仮想マシンを作成
# 今回パブリックIPアドレスは使用しないため空欄とする
# 利用しないが不正ログインを避けるためSSH鍵登録とする
az vm create \
--name $VM1_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--tags $TAGS \
--image Ubuntu2204 \
--vnet-name $VNET_NAME \
--subnet $SUBNET_NAME \
--public-ip-address "" \
--admin-username $VM_USER \
--generate-ssh-keys
プライベート DNS を作成、仮想ネットワークにリンク
リンク前の仮想マシン作成後、仮想ネットワークで利用するプライベートDNS を作成します。プライベートDNS を作成後は仮想ネットワークにプライベートDNS をリンクさせます。
# プライベートDNSを作成する
az network private-dns zone create \
--name $PRIVATE_DNS_ZONE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--tags $TAGS
# プライベートDNSを仮想ネットワークにリンクする
# 「--registration-enabled(-e)」で自動登録の有効、向こうを設定する
az network private-dns link vnet create \
--name $PRIVATE_DNS_LINK_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--virtual-network $VNET_NAME \
--zone-name $PRIVATE_DNS_ZONE_NAME \
--registration-enabled true
リンクが完了後、プライベートDNS のゾーンを確認しリンク前に作成した仮想マシンのレコードが登録され、自動登録済みが真であることを確認します。
# プライベートDNSのAレコードを確認する
# vm-test-dev-001のAレコードが表示されることを確認する
az network private-dns record-set a list \
--zone-name $PRIVATE_DNS_ZONE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--output table
自動登録でレコードを作成した場合の初期値は以下の通りとなります。
名前 | VM の名前 (ここではvm-test-dev-001 となる) |
---|---|
種類 | A レコード |
TTL | 10 |
値 | 仮想マシンのプライベートIP アドレス |
また、自動登録で登録したレコードの削除は可能ですが編集はできないため、上記の設定を変えることはできません。
リンク後の仮想マシンを作成
プライベートDNS、仮想マシンへのリンク完了後、仮想マシンを新規で作成します。
# 仮想ネットワークリンク作成後の仮想マシンを作成
# 今回パブリックIPアドレスは使用しないため空欄とする
# 利用しないが不正ログインを避けるためSSH鍵登録とする
az vm create \
--name $VM2_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--tags $TAGS \
--image Ubuntu2204 \
--vnet-name $VNET_NAME \
--subnet $SUBNET_NAME \
--public-ip-address "" \
--admin-username $VM_USER \
--generate-ssh-keys
設定確認
リンク後の仮想マシンを作成したら再度プライベートDNS のレコードを確認します。
# プライベートDNSのAレコードを確認する
# vm-test-dev-001、vm-test-dev-002のAレコードが表示されることを確認する
az network private-dns record-set a list \
--zone-name $PRIVATE_DNS_ZONE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--output table
リソースのクリーンアップ
自動登録を確認できたら作成したリソースを削除します。リソースを残しておきたい方はこの作業をスキップしてください。
# リソースグループを作成する
az group delete --name $RESOURCE_GROUP_NAME
まとめ
- Azure プライベートDNS の自動登録は仮想ネットワーク内の仮想マシンのレコードを自動で作成してくれる機能
- 手動で仮想マシン名と同じレコードを作成した場合、自動登録の対象とならない
- 自動登録されたレコードの削除はできるが編集はできない