Fallback to internet on Private DNS Zones を試してみた
はじめに
2024/11/19のAzureアップデートで、Private DNS ZonesのFallback to internetがGAしました。
過去にハマった事がある事象が解決できる機能だったので、試してみました!
Fallback to internet on Private DNS Zonesとは
Private DNS Zoneで名前解決した結果がNXDOMAIN(ゾーンにリソースレコードが存在しない)だった場合に、その問合せをインターネットに再帰する機能です。
2024/11現在はパブリックプレビューとして使用できます。
Makabeさんもポストされていますが、AzureのPaaSを複数VNETに引き込む場合に課題となることがあり、これを解消できる機能です。
試してみる
どのような場合に、この機能が嬉しいのか実際に試してみます。
通常のPrivate Endpointでの名前解決
まずは、ストレージアカウントのBLOBに接続するためのPrivate Endpointを作成し、Private DNS ZoneでPrivate EndpointのIPアドレスで名前解決される構成を作ります。
Virtual Machines(vm001)からBLOB(azpoc001)のエンドポイントをdigしてみます。
$ dig azpoc001.blob.core.windows.net
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> azpoc001.blob.core.windows.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4185
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;azpoc001.blob.core.windows.net.INA
;; ANSWER SECTION:
azpoc001.blob.core.windows.net.60 INCNAMEazpoc001.privatelink.blob.core.windows.net.
azpoc001.privatelink.blob.core.windows.net. 10 IN A 192.168.0.5
Private EndpointのプライベートIPアドレス(192.168.0.5)で名前解決されます。
通常のPrivate Endpointの動作です。
通常のService Endpointでの名前解決
次に、新しいサブシステムが追加された事にしてVNET(vnet002)とVirtual Machines(vm002)を追加します。
VNET(vnet002)から、先ほどと同じBLOB(azpoc001)に対してService Endpointで接続します。
新しく追加したVirtual Machines(vm002)からBLOB(azpoc001)のエンドポイントをdigしてみます。
$ dig azpoc001.blob.core.windows.net
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> azpoc001.blob.core.windows.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63695
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;azpoc001.blob.core.windows.net.INA
;; ANSWER SECTION:
azpoc001.blob.core.windows.net.60 INCNAMEazpoc001.privatelink.blob.core.windows.net.
azpoc001.privatelink.blob.core.windows.net. 60 IN CNAMEblob.sjc20prdstr20a.store.core.windows.net.
blob.sjc20prdstr20a.store.core.windows.net. 59 IN A 20.60.80.43
パブリックエンドポイントのパブリックIPアドレス(20.60.80.43)で名前解決されます。
こちらも通常のService Endpointの動作ですね。
Private Endpoint利用時に名前解決できないパターン
新しいストレージアカウント(azpoc002)を追加し、Private Endpointも新しく追加したVNET(vnet002)に設置してみます。
Virtual Machines(vm002)から新しく追加したBLOB(azpoc002)のエンドポイントをdigしてみます。
$ dig azpoc002.blob.core.windows.net
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> azpoc002.blob.core.windows.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50398
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;azpoc002.blob.core.windows.net.INA
;; ANSWER SECTION:
azpoc002.blob.core.windows.net.60 INCNAMEazpoc002.privatelink.blob.core.windows.net.
azpoc002.privatelink.blob.core.windows.net. 10 IN A 192.168.101.5
Private EndpointのプライベートIPアドレス(192.168.101.5)で名前解決されます。ここまでは問題ありませんね。
続けて、Virtual Machines(vm002)からBLOB(azpoc001)のエンドポイントをdigしてみます。
~$ dig azpoc001.blob.core.windows.net
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> azpoc001.blob.core.windows.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 64989
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;azpoc001.blob.core.windows.net.INA
;; ANSWER SECTION:
azpoc001.blob.core.windows.net.60 INCNAMEazpoc001.privatelink.blob.core.windows.net.
;; AUTHORITY SECTION:
privatelink.blob.core.windows.net. 10 IN SOAazureprivatedns.net. azureprivatedns-host.microsoft.com. 1 3600 300 2419200 10
前回同様、パブリックエンドポイントのパブリックIPアドレスで名前解決して欲しいところでしたが、
こちらはNXDOMAIN(ゾーンにリソースレコードが存在しない)となりました。
理由はVNET(vnet002)にリンクされたPrivate DNS Zone(privatelink.blob.core.windows.net)にはazpoc002のAレコードしか登録されていないため、azpoc001を名前解決できずNXDOMAINとなっています。
vnet01からBLOB(azpoc002)の名前解決をする際にも同様の事象となります。
Fallback to internet on Private DNS Zonesを有効化して解決
ここで、新機能のFallback to internet on Private DNS Zonesを使います。
Azure PortalでVNET(vnet002)にリンクしているPrivate DNS Zoneを開き、「仮想ネットワークリンク」を選択します。
仮想ネットワークリンクの一覧に「Fallback to Internet」列が表示されており、「Disabled」であることが確認できます。
右の鉛筆アイコンをクリックし、仮想ネットワーク リンクの編集画面を開きます。
「Enable fallback to internet」のチェックボックスをオンにして保存します。
Fallback to internet on Private DNS Zonesが有効化されたので、
再びVirtual Machines(vm002)からBLOB(azpoc001)のエンドポイントをdigしてみます。
$ dig azpoc001.blob.core.windows.net
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> azpoc001.blob.core.windows.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28568
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;azpoc001.blob.core.windows.net.INA
;; ANSWER SECTION:
azpoc001.blob.core.windows.net.60 INCNAMEazpoc001.privatelink.blob.core.windows.net.
azpoc001.privatelink.blob.core.windows.net. 60 IN CNAMEblob.sjc20prdstr20a.store.core.windows.net.
blob.sjc20prdstr20a.store.core.windows.net. 57 IN A 20.60.80.43
NXDOMAINが解消し、パブリックエンドポイントのパブリックIPアドレスで名前解決されるようになりました!
VNETにリンクされているPrivateEndpoint用のPrivate DNS Zoneに該当レコードがなく名前解決結果がNXDOMAINとなったため、その問合せがインターネットに再帰され、無事名前解決に成功しています!
最後に
Microsoft Ignite 2024期間中に発表された地味だけど、刺さる人には刺さる良いアップデートでした!今後のアップデートも楽しみです!
Discussion