tl;dr
- Azureは内部ネットワーク向けのDNSを持っており、リソースはこれを見て名前解決することができる
- Azureの同一VNet内に存在するVirtualMachine(VM)であれば、VM名のみでプライベートIPを解決できる
- ただし、Application GatewayはVM名のみでは解決できず、DNSサフィックスを付け足す必要がある
未調査
- VNetピアリングした場合にVNetをまたいだリソースの名前解決(できない?)
- App Service(WebApp,Functions)やAzure Database等も内部向けのFQDNを持っているかどうか(VNetで管理できないからなさそう?)
やりたいこと
VMのプライベートなFQDNでプライベートIPの名前解決を行いたい。
VM作成のパブリックIP割り当て時にFQDNを指定することができるので、パブリックIPの名前解決ができるが、プライベートIPにはないのかどうなのかわからなかった。
プライベート向けのFQDNがあると嬉しい事例としては、APサーバ用のVMとDBサーバ用のVMを作り、APからDBに接続するときの接続情報を決め打ちにできるとか、プライベート接続なので多少早いんじゃないか、とか。プライベートIPを調べて手で設定をやっても多分困らないんだろうけど、なんか嫌だった。
調査
Azure VM プライベートIP 名前解決
辺りの単語で調べても、Azure DNSサービスのプライベート対応の話が多く出てきて、欲しい情報が見つからなかった。
「こりゃできないな!あきらめて手でやろう!」って思い、別の調査でARMテンプレートの再利用性について調べてたところ、NICのリソース定義の部分で、以下の定義を見つける。
"dnsSettings": {
"dnsServers": [],
"appliedDnsServers": [],
"internalDomainNameSuffix": "xxxxx.lx.internal.cloudapp.net"
},
※xxxxxの部分は伏字です
ここの"internalDomainNameSuffix": "xxxxx.lx.internal.cloudapp.net"
ってなんだろう?
サフィックスということはもしかして、vmname.xxxxx.lx.internal.cloudapp.net
とすれば参照できるのでは?と思い、試したらできた。
$ nslookup vm-db.xxxxx.lx.internal.cloudapp.net
Server: 168.63.129.16
Address: 168.63.129.16#53
Name: vm-db.xxxxx.lx.internal.cloudapp.net
Address: 10.0.1.4
168.63.129.16はMicrosoftが持つDNSサーバらしい。
で、RHEL系のLinuxなら、/etc/resolve.confにDNS回りの事を書くので覗きに行くと以下のようになっていた。
; generated by /usr/sbin/dhclient-script
search xxxxx.lx.internal.cloudapp.net
nameserver 168.63.129.16
search(DNSサフィックス)が定義されているので、省略しても見に行くはず。
$ nslookup vm-db
Server: 168.63.129.16
Address: 168.63.129.16#53
Name: vm-db.xxxxx.lx.internal.cloudapp.net
Address: 10.0.1.4
これで完全なFQDN名を知らなくても、VM作成時につけた名前さえわかれば名前解決ができそう。
自動化が少し楽になりますね。
残念なところ
分かっている範囲では、Application GatewayはDNSサフィックスを知らないので、バックエンドプールやカスタムプローブを登録する際はDNSサフィックスを含めたFQDNで登録する必要があります。
ただAzure Resource ManagerでTemplateとして管理すれば、reference
等からFQDNを取り出せそうなので自動化は出来そうかな?
関連資料
internal.cloudapp.net
あたりで調べるといろいろ出ますので、そちらを調べると良いかも。
公式なら「VM とロール インスタンスの名前解決」 が一番詳しい・・・詳しい?