Cloud DNSで限定公開のプライベートゾーンを作成して指定したVPCだけで名前解決できるか検証してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
概要
Cloud DNSでゾーンを作成する時には一般公開のゾーン以外にGoogle Cloud内部でのみ名前解決できるプライベートゾーンも作成することができます。
プライベートゾーンでは下記のオプションを選択することができます。
| オプション名 | 概要 |
|---|---|
| 限定公開 | 特定のVPCネットワーク内でのみ名前解決を行うためのDNSゾーン |
| クエリを別のサーバに転送する | フォワーディングゾーン・DNSゾーン転送。特定のDNSクエリを他のDNSサーバーに転送するために使用するゾーン |
| DNSピアリング | Google Cloud内の異なるVPCネットワーク間でDNSクエリを共有するために使用するゾーン |
| マネージド逆引き参照ゾーン | IPアドレスからホスト名(FQDN)を解決するためのゾーン |
| Service Directoryの名前空間を使用する | Google Cloud ベースのサービスが DNS を介して Service Directory の名前空間に対してクエリを実行できるゾーン |
今回は特定のVPCネットワーク内でのみ名前解決ができる限定公開のプライベートゾーンを作成して、実際に指定したVPCのみだけで名前解決できるかどうか確認してみます。
限定公開のプライベートゾーンのイメージとしては以下となります。

やってみる
用意するものは以下です。
| リソース | 用途 |
|---|---|
| VPC(名前解決できるVPC) | 名前解決できるかどうかの確認用 |
| VPC(名前解決できないVPC) | 名前解決できないかどうかの確認用 |
| GCE(名前解決できるVPC内) | 名前解決できるかどうかの確認用 |
| GCE(名前解決できないVPC内) | 名前解決できないかどうかの確認用 |
| 限定公開のプライベートゾーン | 今回の検証の本丸 |
つまりは2つのVPCと2つのGCEと1つのゾーンを用意します。
VPCですが、ブラウザまたはローカルからGCEへSSHできるようにFWに穴を開けておきましょう。
※VPC、GCE作成手順は省略します。GCEはdigするだけなのでe2-microなどのスペックで問題ないです。
限定公開のプライベートゾーンを作成する
Cloud DNSのコンソールからゾーンを作成を押下し、以下の設定をして作成を押下します。
| 設定 | 設定値 |
|---|---|
| ゾーンのタイプ | プライベート |
| ゾーン名 | 管理用なので好きな値 |
| DNS名 | 任意のドメイン名 |
| オプション | デフォルト(限定公開) |
| ネットワーク | 名前解決させたいVPC |
ネットワークで名前解決(ゾーン参照許可)させたいVPCを選択することがポイントです。

※DNS名は任意のドメイン名を使用することができますが、すでに外部で使用されているドメインを用いてしまうと外部のパブリックDNSと衝突するリスクがあるので.internalなどTLDに設定されることがない値を組み合わせて設定したほうが安全かもしれません。test.会社名.internalなどのようなイメージです。
問題なく作成できた場合、種類が限定公開となっているゾーンの画面が表示されます。

名前解決できたか確認のためにTXTレコードを登録しておきます。私は"This zone is private!"という文字列を登録しました。コマンドでの登録に興味がある方は以下もご参照ください。
ゾーン参照許可されているVPCで確認する
まずはGCEインスタンスを立ち上げてSSHで接続します。接続するインスタンスは先ほどのゾーン作成時にネットワークで指定しているVPCに立ち上げる必要があります。
以下の図の赤枠のインスタンスです。

私はGCEのイメージをDebian GNU/Linux 12 (bookworm)にして立ち上げましたが、デフォルトではdigコマンドがインストールされていないのでSSH接続後にdnsutilsパッケージをインストールします(dnsutilsパッケージにdigも含まれています)。
sudo apt-get install -y dnsutils
インストールできたらdigします。
dig プライベートDNS名 TXT
以下のようにANSWER SECTIONで"This zone is private!"と出力されているかと思います。

以上よりゾーン参照許可されているVPC内のGCEから名前解決ができることが確認できました。
続いてゾーン参照許可していないVPC内のGCEから名前解決ができないことを確認してみます。
ゾーン参照許可されていないVPCで確認する
まずはGCEインスタンスを立ち上げてSSHで接続します。接続するインスタンスは先ほどのゾーン作成時にネットワークで指定しているVPC以外に立ち上げる必要があります。
以下の図の青枠のインスタンスです。

立ち上げて先ほどと同じくdigコマンドをインストールしたらdigを実行します。
そうすると今回は以下のようにstatus: NXDOMAIN = 指定されたドメイン名が存在しないという回答が返ってきます。

ゾーン参照許可されていないVPCでは名前解決できないことが確認できました。
おまけ:他の環境でも試してみる
自宅のローカルPC: status: NXDOMAIN
Cloud Shell:status: NXDOMAIN
でした。
まとめ
結果をまとめると以下となります。
| 環境 | 結果 |
|---|---|
| ゾーン参照許可されているVPC | 名前解決可能 |
| ゾーン参照許可されていないVPC | 名前解決不可能 |
| ローカルPC(Google Cloud NW外部) | 名前解決不可能 |
| Cloud Shell | 名前解決不可能 |
以上の結果より限定公開のプライベートゾーンを作成した場合、名前解決できるのはゾーン参照許可したVPCだけということが確認できました。
リファレンス上ではわかっていることではありますが改めて自分で試してみると手順なども明確になり面白いなと思いました。
Cloud DNSにはまだまだ面白い機能がたくさんあるのでこれからもどんどん記事にしていきたいと思ってます。
それではまた。ナマステー






