この状況に直面したことがあるエンジニアは多いはずです。AzureのデフォルトDNSはVNet内の自動名前解決をある程度サポートしますが、カスタムドメイン名や複数VNetにまたがる構成になると途端に限界を迎えます。
この記事では、azure private dns ゾーンの作成からVNetへのリンク、AレコードのCLI追加、オートレジストレーションによるVM自動登録まで、azコマンドを使って実際に構成する手順を解説します。Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・azure private dns zoneはVNet専用の非公開ゾーンで外部から参照できない
・az network private-dns zone create でゾーン作成、vnet linkでVNetに接続する
・オートレジストレーションを有効にするとVM作成時にAレコードが自動登録される
・dig/nslookupで名前解決を確認し、失敗時はVNetリンクとDNS設定を確認する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AzureのPrivate DNSゾーンとは — VNet内専用の名前解決を担う仕組み
Azure Private DNSゾーンは、VNet内部だけで有効な完全非公開のDNSゾーンです。AWSでいうRoute 53のPrivate Hosted Zoneに相当します。標準のAzureパブリックDNSとは完全に独立しており、VNetにリンクしたサブスクリプション外からは参照できません。主な特徴を整理します。
・外部から参照不可:インターネット上のDNSサーバーから解決できない
・VNet単位でリンク:1つのゾーンを複数のVNetに紐づけることが可能
・オートレジストレーション:VMを作成・削除するとAレコードが自動で更新される
・カスタムドメイン名:「corp.internal」など任意のドメイン名を使える
AWSとの比較を表にまとめます。
| 比較軸 | Azure Private DNS | AWS Route 53 Private Hosted Zone |
|---|---|---|
| VNとの紐づけ | VNet Link(az CLIで設定) | VPC Association |
| 自動登録 | オートレジストレーション(オプション) | なし(手動またはLambda連携) |
| コスト | ゾーン/月 + クエリ課金 | ゾーン/月 + クエリ課金 |
| デフォルトDNSとの併用 | Azureデフォルト(168.63.129.16)と共存 | Route 53 Resolver と共存 |
AzureのデフォルトDNS(168.63.129.16)は同一VNet内の基本的な名前解決を提供しますが、カスタムドメイン名の付与や複数VNetをまたぐ構成には対応していません。その場合にPrivate DNSゾーンが必要になります。
作業環境と事前準備(Azureサブスクリプション・az CLI)
以下の環境で動作確認しています。・Azureサブスクリプション:有効なサブスクリプション(無料試用版でも可)
・az CLIバージョン:2.50以上(az --version で確認)
・Linux操作端末:Rocky Linux 9 または Ubuntu 24.04 LTS
az CLIのインストールは以下のコマンドで行います(Ubuntu/Debian系の場合)。
# az CLIのインストール(Ubuntu/Debian系) curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash # バージョン確認 az --version # Azureアカウントへのログイン az login
az login --use-device-code を使用してください。リソースグループとVNetを準備する(前提構成)
Private DNSゾーンを設定するには、先にリソースグループとVNetが存在している必要があります。すでに構築済みの場合はこのセクションをスキップしてください。# 変数を定義しておく RG="rg-dns-lab" LOCATION="japaneast" VNET="vnet-main" SUBNET="subnet-private" # リソースグループの作成 az group create --name $RG --location $LOCATION # VNetとサブネットの作成 az network vnet create --resource-group $RG --name $VNET --address-prefix 10.0.0.0/16 --subnet-name $SUBNET --subnet-prefix 10.0.1.0/24 # 実行結果(抜粋) # "provisioningState": "Succeeded"
provisioningState: "Succeeded" の出力が返ります。オンプレミスとAzureのDNS設定の違いを把握しておくと理解が深まります。Linuxのオンプレ側のDNS設定については「Linux DNS 設定の基本」を参照してください。Private DNSゾーンを作成してVNetにリンクする
ここが本記事のコアとなる手順です。ゾーン名は「corp.internal」として進めます。1. Private DNSゾーンを作成する
# Private DNSゾーンの作成(ゾーン名はカスタムドメイン名) az network private-dns zone create --resource-group $RG --name "corp.internal" # 実行結果(抜粋) # { # "location": "global", # "name": "corp.internal", # "provisioningState": "Succeeded" # }
2. VNetにリンクする
ゾーンを作成しただけではVMからは参照できません。VNetにリンクする手順が必要です。# VNetリンクを作成(オートレジストレーションは後で有効化する) az network private-dns link vnet create --resource-group $RG --zone-name "corp.internal" --name "link-vnet-main" --virtual-network $VNET --registration-enabled false # リンク状態の確認 az network private-dns link vnet list --resource-group $RG --zone-name "corp.internal" --output table # 期待する出力 # Name ProvisioningState VirtualNetworkLinkState # link-vnet-main Succeeded Completed
VirtualNetworkLinkState が Completed になればリンク完了です。InProgress の場合はしばらく待ってから再確認してください。AレコードをCLIで追加してLinux VMから名前解決を確認する
1. Aレコードを手動で追加する
# vmapp01.corp.internal → 10.0.1.4 を登録する例 az network private-dns record-set a add-record --resource-group $RG --zone-name "corp.internal" --record-set-name "vmapp01" --ipv4-address "10.0.1.4"
2. 登録されたレコードを確認する
# ゾーン内の全レコードを一覧表示 az network private-dns record-set list --resource-group $RG --zone-name "corp.internal" --output table # 出力例 # Name Type Ttl # vmapp01 A 10
3. Linux VMからdigコマンドで名前解決を確認する
同一VNet内のLinux VMにSSH接続して確認します。# DNSクエリツールのインストール(Rocky Linux 9の場合) sudo dnf install -y bind-utils # digで名前解決を確認 dig vmapp01.corp.internal # 出力例(正常時) # ;; ANSWER SECTION: # vmapp01.corp.internal. 10 IN A 10.0.1.4 # nslookupでの確認 nslookup vmapp01.corp.internal
ANSWER SECTION に A 10.0.1.4 が返ってくれば成功です。dig コマンドの詳しい使い方は「dig コマンドで DNS を調べる」を参照してください。
Azure対応セミナーの詳細を見る >>
オートレジストレーションでVMのホスト名を自動登録する
毎回手動でAレコードを追加するのは運用負荷が高くなります。VNetリンクの--registration-enabled を true に設定すると、VM作成時に自動でAレコードが追加されます。1. 既存VNetリンクのオートレジストレーションを有効化する
# updateコマンドでオートレジストレーションを有効化 az network private-dns link vnet update --resource-group $RG --zone-name "corp.internal" --name "link-vnet-main" --registration-enabled true
2. テスト用VMを作成して自動登録を確認する
# テスト用VMを作成(Rocky Linux 9ベースのRHELイメージ使用) az vm create --resource-group $RG --name vmtest02 --image RedHat:RHEL:9-lvm-gen2:latest --vnet-name $VNET --subnet $SUBNET --admin-username azureuser --generate-ssh-keys --public-ip-sku Standard # VM作成後にAレコードを確認 az network private-dns record-set list --resource-group $RG --zone-name "corp.internal" --output table # vmtest02.corp.internalのAレコードが自動登録されているはず
vmtest02.corp.internal というAレコードが自動で追加されているはずです。VMを削除するとAレコードも自動で消えます。【注意】オートレジストレーションを使う場合、1つのVNetに対してオートレジストレーションが有効なゾーンは1つだけです。複数のPrivate DNSゾーンを同じVNetにリンクする場合、オートレジストレーションを有効化できるゾーンは1つに限られます。
名前解決できない時のトラブルシュート
1. VNetリンクの状態を確認する
最も多い原因がVNetリンクの未設定または不完全な状態です。# VNetリンクの一覧と状態を確認 az network private-dns link vnet list --resource-group $RG --zone-name "corp.internal" --output table # 期待する出力 # Name ProvisioningState VirtualNetworkLinkState # link-vnet-main Succeeded Completed
2. VMのDNSリゾルバ設定を確認する
AzureのPrivate DNSゾーンを参照するには、VMのDNSリゾルバがAzureデフォルトDNS(168.63.129.16)を向いている必要があります。カスタムDNSサーバーに変更している場合は要注意です。# Rocky Linux 9でのDNSリゾルバ確認 cat /etc/resolv.conf # Azureデフォルトリゾルバが含まれているか確認 # nameserver 168.63.129.16 # nmcliで現在のDNS設定を確認 nmcli dev show | grep DNS
3. NSGのDNSポートを確認する
NSG(ネットワークセキュリティグループ)のルールでUDP 53番ポートがブロックされているケースがあります。# NSGのルール一覧を確認 az network nsg list --resource-group $RG --output table # 特定NSGのルールを詳細確認(NSG名はAzureポータルまたは上記コマンドで取得) az network nsg rule list --resource-group $RG --nsg-name
--output table
まとめ:azure private dns の運用ポイント
Azure Private DNSゾーンの設定手順をまとめます。| やりたいこと | azコマンド(操作内容) |
|---|---|
| Private DNSゾーンを作成する | az network private-dns zone create --resource-group RG --name "corp.internal" |
| VNetにリンクする | az network private-dns link vnet create --zone-name "corp.internal" --virtual-network vnet-main --registration-enabled false |
| AレコードをCLIで追加する | az network private-dns record-set a add-record --zone-name "corp.internal" --record-set-name "vmapp01" --ipv4-address "10.0.1.4" |
| オートレジストレーションを有効化する | az network private-dns link vnet update --zone-name "corp.internal" --registration-enabled true |
| 登録済みレコードを確認する | az network private-dns record-set list --zone-name "corp.internal" --output table |
| VNetリンクの状態を確認する | az network private-dns link vnet list --zone-name "corp.internal" --output table |
Azure Private DNSゾーンを使えば、VNet内のVMをIPアドレスではなくホスト名で管理できます。特にオートレジストレーションを活用すると、VMのスケールアウト時の名前登録が自動化され、手動ミスによる障害を防ぎやすくなります。
Linuxサーバーを使ったクラウド実務スキルをさらに深めたい方は、下のリンクからAzure対応のセミナー内容をご確認ください。
Azure対応セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:AzureのVNetピアリングを設定する方法|ハブアンドスポーク構成とazコマンドによる実践手順
- 前のページへ:AzureのBlob StorageとManaged DiskをLinuxから操作する方法|azコマンドとストレージ設計の基礎
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます