AzureのPrivate DNSゾーンを設定する方法|VNet内の名前解決をazコマンドで構成する

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Azure > AzureのPrivate DNSゾーンを設定する方法|VNet内の名前解決をazコマンドで構成する
「AzureでLinux VMを複数台立ち上げたら、IPアドレスではなくホスト名でサーバー同士を呼び合いたい。でもデフォルトのDNSでは解決できない」
この状況に直面したことがあるエンジニアは多いはずです。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設定を確認する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

ログインするとブラウザが起動してAzureアカウントの認証を求めます。サーバー環境でブラウザが使えない場合は 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

VirtualNetworkLinkStateCompleted になればリンク完了です。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 SECTIONA 10.0.1.4 が返ってくれば成功です。dig コマンドの詳しい使い方は「dig コマンドで DNS を調べる」を参照してください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Azure対応セミナーの詳細を見る >>

オートレジストレーションでVMのホスト名を自動登録する

毎回手動でAレコードを追加するのは運用負荷が高くなります。VNetリンクの --registration-enabledtrue に設定すると、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レコードが自動登録されているはず

VM作成後、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

/etc/resolv.confの詳しい設定方法は「Linux DNS 設定の基本」を参照してください。VNetのDNSサーバー設定を変更した場合、168.63.129.16を条件転送先として追加するか、カスタムDNSサーバーからAzureデフォルト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

DNSはUDP/TCP 53番ポートを使います。ポートの開放状況はLinux VM上からも確認できます。ssコマンドやlsofコマンドを使ったポート確認の方法は「Linux ポート確認の全コマンド」を参照してください。

まとめ: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対応のセミナー内容をご確認ください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Azure対応セミナーの詳細を見る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。