0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI VCN Inside:VCNのDNSを調べてみた

Last updated at Posted at 2025-07-06

久々に基本設計していて、そういやこれってどういうときに使うんだっけと小一時間。
せっかくなんで、いろいろ調べてみました。

この話のゴール

使い道を見つける。
いやね、こういうことできます!って話は分かるんだけど、だからそれはどういうときに嬉しいの?と思うことってありません?

調査開始

仕様の理解。

まずはドキュメントから

Virtual Cloud NetworkのDNS

えっと。つまり。

  • DNSサーバは、OCIで用意したものを利用するパターンと、ユーザが用意したものを利用するパターンの二つがある。
  • OCIが用意したものは、インターネットで公開されているホスト名が解決できるインターネット・リゾルバとVCN内のホスト名が解決できるVCNリゾルバの二つで構成される。
  • ユーザが用意したものは、同一VCN内のものでも、LPG経由の他VCNのものでも、DRG経由のオンプレのものでも、インターネットGW経由のインターネット上のものでも何でもよい。
  • DNSサーバの指定はDHCPオプションで指定する。

という理解で大丈夫かしら。

実際にVCNを作ってみよう

そういえば、Redwood、プレビュー版の時のもっさり感がだいぶ緩和されてますよね。

まずは作成画面。赤枠の部分のスイッチで、デフォルトのDNSドメインを使うかどうかを選択できる様子。

image.png

使わないを選択した場合はこうなる。

image.png

使わない場合は、サブネット作成時に「このサブネットでDNSホスト名を使用」が選択できなくなりますね。

image.png

選択できないだけで、サブネットも作れますし、そのサブネット上でコンピュートも作れます。
次の検証用にDNSサーバを作っておきます。DNS関連が全部空なのがちょっと新鮮。

image.png

ちなみにインスタンスのresolv.confやhostsはこんな感じ。
どうも、DNS指定していなくても、インターネット・リゾルバは使える設定にはなるみたいですね。

/etc/resolv.conf
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
nameserver 169.254.169.254
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.13

コンピュートにはbind入れてDNSサーバ化しておきましょうか。ルート表やセキュリティリストとかの設定は割愛。

[opc@testdns01 ~]$ sudo dnf install bind
Last metadata expiration check: 0:01:48 ago on Sat 05 Jul 2025 01:50:40 PM GMT.
Dependencies resolved.
================================================================================
 Package             Arch      Version                    Repository       Size
================================================================================
Installing:
 bind                aarch64   32:9.16.23-29.0.1.el9_6    ol9_appstream   528 k
Upgrading:
 bind-libs           aarch64   32:9.16.23-29.0.1.el9_6    ol9_appstream   1.2 M
 bind-license        noarch    32:9.16.23-29.0.1.el9_6    ol9_appstream    12 k
 bind-utils          aarch64   32:9.16.23-29.0.1.el9_6    ol9_appstream   222 k
Installing dependencies:
 bind-dnssec-doc     noarch    32:9.16.23-29.0.1.el9_6    ol9_appstream    57 k
 python3-bind        noarch    32:9.16.23-29.0.1.el9_6    ol9_appstream   104 k
Installing weak dependencies:
 bind-dnssec-utils   aarch64   32:9.16.23-29.0.1.el9_6    ol9_appstream   122 k

Transaction Summary
================================================================================
Install  4 Packages
Upgrade  3 Packages

Total download size: 2.2 M
Is this ok [y/N]: y

bindの設定とか何年ぶりだろうか。

DNSを指定してみよう

ドキュメントを見る限りはDHCPオプションで設定するようなので、DHCPオプションを作ってみます。
挙動を確認するために、2種類作ってみました。

image.png

以下の挙動になると想像します。

DNSタイプ 挙動
カスタム・リゾルバ 指定したDNSサーバに問い合わせ
インターネットおよびVCNリゾルバ VCNのDNSリゾルバに問い合わせ

それぞれのDHCPオプションを使ったサブネットを作ります。DHCPオプションを切り替えても「このサブネットでDNSホスト名を使用」は有効にならないですね。ここは最初にサブネット作成したときの設定に従うようです。

image.png

では、両方のサブネットにインスタンスも作ってみましょう。
作成そのものはどちらのサブネットも特に問題なく。想像通り、カスタム・リゾルバのサブネットに作ったコンピュートからのみ、ガンガン問い合わせが来てます。

05-Jul-2025 15:21:28.091 queries: info: client @0xffffb45c5bf8 10.0.0.28#39148 (28.0.0.10.in-addr.arpa): query: 28.0.0.10.in-addr.arpa IN PTR + (10.0.0.13)
05-Jul-2025 15:21:28.571 queries: info: client @0xffffb45c5bf8 10.0.0.28#53075 (testresolv1.test-vcn3.test): query: testresolv1.test-vcn3.test IN A + (10.0.0.13)

インターネットおよびVCNリゾルバ側はも予想通りですね。こんなところで先日実装されたばかりのDNSリゾルバログが役に立つとは。

image.png

カスタム・リゾルバ側のコンピュートをよく見てみよう

やはり確認するのはここですね。

/etc/resolv.conf
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
search test-vcn3.test
nameserver 10.0.0.13
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.28

nameserverが10.0.0.13を直接さすようになってますね。/etc/hostsの10.0.0.28のエントリが空なのは、DNSで名前解決できなかったからかな?DNSエントリ追加して、コンピュートを再起動してみます。

/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.28

変わらないですね、、、謎。
もちろん、ちゃんと名前解決できます。

[opc@testresolv1 ~]$ nslookup testresolv1
Server:         10.0.0.13
Address:        10.0.0.13#53

Name:   testresolv1.test-vcn3.test
Address: 10.0.0.28

[opc@testresolv1 ~]$ nslookup 10.0.0.28
28.0.0.10.in-addr.arpa  name = testresolv1.test-vcn3.test.

[opc@testresolv1 ~]$

VCNリゾルバ側のコンピュートをよく見てみよう

こちらもrecolv.confとhostsを確認します。

/etc/resolv.conf
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
search test-vcn3.test
nameserver 169.254.169.254
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.39

カスタム・リゾルバの場合と違うのは、nameserverが指しているIPアドレスですね。

このままでは名前解決できないので、プライベートゾーンを作ります。

image.png

ここで一つ注意が必要なことが。
プライベート・ビューは、VCNデフォルトのもの(VCN名と同じもの)ではなく、新しく作ってます。
というのも、0.0.10.in-addr.arpaゾーンは、コンソール上から確認はできませんが、どうも内部的に作られているようで。すでに存在すると怒られて作れないので、別のビューを作って、そこにゾーンを作成し、リゾルバに関連付けて検索対象にするのが良さそうです。

image.png

これで名前解決も可能。

[opc@testdomain1 ~]$ nslookup testdomain1
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   testdomain1.test-vcn3.test
Address: 10.0.0.39

[opc@testdomain1 ~]$ nslookup 10.0.0.39
39.0.0.10.in-addr.arpa  name = testdomain1.test-vcn3.test.

Authoritative answers can be found from:

[opc@testdomain1 ~]$

/etc/hostsの挙動に関しては、カスタム・リゾルバと場合と同じ。

/etc/hostsの挙動を確認しよう

DNS登録しても/etc/hostsの内容が変わらない(正確には一度消えて、また登録される)のがどうも腑に落ちないので、試しに以下を登録。

/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.28   testresolv1 testresolv1.test-vcn3.test
10.0.0.13   testdns1    testdns1.test-vcn3.test
10.0.0.39   testdomain1 testdomain1.test-vcn3.test

その後、再起動。

/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.13   testdns1    testdns1.test-vcn3.test
10.0.0.39   testdomain1 testdomain1.test-vcn3.test
10.0.0.28 testresolv1 testresolv1.test-vcn3.test

あー、一度エントリ書いたらOK?
/etc/oci-hostname.confの変更が必要かなと思ってたのですが、そこまでしなくても大丈夫そう。

デフォルトのDNSドメインが有効なVCNと比較しよう

ここまで試して、「このVCNでDNSホスト名を使用」って、もしかして、インスタンス作成時などに自動でデフォルトのプライベート・ゾーンにレコードが登録される機能のON/OFFしか影響しないのでは?ということに気が付きました。

やってみましょう。以下のようにサブネットを作り、それぞれにインスタンスを作ります。DNSサーバは先ほど作ったものを流用。

サブネット このサブネットでDNSホスト名を使用 DHCPオプション
Default-Subnet Default DHCP Options
Custom-Resolver-Subnet × Custom-Resolver DHCP Options
Custom-Domain-Subnet × Custom-Domain DHCP Options

それでは、それぞれのresolv.conf、hostsを見てみましょう。

/etc/resolv.conf (Default-Subnet)
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
search testvcn4.oraclevcn.com defaultsubnet.testvcn4.oraclevcn.com
nameserver 169.254.169.254
/etc/hosts (Default-Subnet)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.1.8 testdefault2.defaultsubnet.testvcn4.oraclevcn.com testdefault2
/etc/resolv.conf (Custom-Resolver-Subnet)
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
search test-vcn4.test
nameserver 10.0.0.13
/etc/hosts (Custom-Resolver-Subnet)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.1.26
/etc/resolv.conf (Custom-Domain-Subnet)
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
# Generated by NetworkManager
search test-vcn4.test
nameserver 169.254.169.254
/etc/hosts (Custom-Domain-Subnet)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.1.44

うん。想定通りですね。「このVCNでDNSホスト名を使用」自体は何も影響していなさそうです。

では、プライベート・ゾーンも確認。

image.png

image.png

image.png

「このサブネットでDNSホスト名を使用」が有効なサブネットのホストのみ追加されていますね。

サブネットの設定を変更してみよう

次に、以下のようにサブネットの設定を変えた場合にどうなるかを見てみました。サブネット自体は作り直しが必要になります。

サブネット このサブネットでDNSホスト名を使用 DHCPオプション
Custom-Resolver-Subnet × Custom-Resolver DHCP Options

サブネット このサブネットでDNSホスト名を使用 DHCPオプション
Custom-Resolver-Subnet Custom-Resolver DHCP Options

結果としては、

  • resolv.confやhostsの設定には影響なし
  • プライベート・ゾーンにサブネットのゾーンと、そこに属するコンピュートの逆引きが登録された

でした。

image.png

今回はカスタム・リゾルバを利用しているので、コンピュートには影響はないですが、それ以外のサブネットのリソースから逆引きする場合に答えが変わります。もっとも、先ほどみたいに新しくプライベート・ビュー作って上書きしちゃえば影響なしにできます。

使い道

検証結果からいろいろ考えてみました。

このVCNでDNSホスト名を使用

サブネットにて制御可能なので、基本的には有効で良いと思います。
どうしてもoraclevcn.comを見たくない!って場合であれば無効かなと思いますが、OCI使っている以上はそこは気にしない方が幸せじゃないかなと思います。まあ、紛らわしいと感じる時も多いんですけどね。

このサブネットでDNSホスト名を使用

カスタム・リゾルバやカスタム・ドメインを使う場合は無効で良いでしょう。
、、、と書いたところで分かったのですが、最近実装された「予約済IPv4アドレスの追加」を利用するには、この項目が有効である必要がありました。ははーん。IPの予約ってDNSレコード抑えることで実現してるのね。完全修飾ドメイン名に表示されているホスト名が変なのはご愛敬。oracle.comってw

image.png

カスタム・リゾルバかカスタム検索ドメインか

作成するドメインに関してだけであれば話は簡単なのですが、作成するドメイン以外の名前解決も考えなければいけないのが難しいところ。だいたい以下のパターンになると思います。

全部VCNリゾルバ&インターネット・リゾルバで解決パターン

image.png

  1. コンピュートはVCNリゾルバに問い合わせ。VCNリゾルバは関連付けされたビュー、デフォルトビューの順に検索して回答
  2. VCNリゾルバが解決できなかったものはOCI内のインターネット・リゾルバに問い合わせ
  3. OCI内のインターネット・リゾルバは問い合わせをインターネット上のDNSにフォワード

一部のみオンプレDNSで解決パターン

オンプレ側のDNSが冗長化されてなければNLBは不要ですが、念のため。
image.png

  1. コンピュートはVCNリゾルバに問い合わせ。VCNリゾルバは関連付けされたビュー、デフォルトビューの順に検索して回答
  2. 一部のルールにマッチした問い合わせのみオンプレ側に問い合わせ
  3. VCNリゾルバが解決できなかったものはOCI内のインターネット・リゾルバに問い合わせ
  4. OCI内のインターネット・リゾルバは問い合わせをインターネット上のDNSにフォワード

一部のみVCNリゾルバで解決パターン

image.png

  1. コンピュートはVCNリゾルバに問い合わせ。VCNリゾルバは関連付けされたビュー、デフォルトビューの順に検索して回答
  2. VCNリゾルバが解決できなかったものはルールを使ってオンプレDNSに問い合わせ
  3. オンプレDNSが解決できなかったものはオンプレDNSからインターネット上のDNSにフォワード

全部オンプレDNSで解決パターン

image.png

  1. オンプレDNSに問い合わせ
  2. オンプレDNSが解決できなかったものはオンプレDNSからインターネット上のDNSにフォワード

このうち、「全部オンプレDNSで解決パターン」のみ「カスタム・リゾルバ」、それ以外は「カスタム検索ドメイン」を使うことになると思います。

注意点

「カスタム・リゾルバ」の場合の注意点は、利用しようとしているサービスが、「カスタム・リゾルバ」に対応しているかどうかの確認ですね。例えば「Exadata Database Service on Dedicated Infrastructure」(以下、ExaDB-D)の場合、SCANはDNS登録が必要になるので、「カスタム・リゾルバ」ではデプロイに失敗しそうな気がします。

ExaDB-Dのドキュメントを見る限りでもVCNリゾルバ利用は必須のように見えますね。

ノードが通信するには、VCNでInternet and VCN Resolverを使用する必要があります。インターネットおよびVCNリゾルバにより、ノードへのホスト名の割当て、およびVCN内のリソースごとのこれらのホストのDNS解決が可能になります。

デプロイ後にDHCP Optionsを切り替える、というのはできるかもしれませんが、検証してみないとなんとも。個人で試すには高額すぎる(10万は吹っ飛ぶ)し、実構築でこんな検証はさすがに無理ですねw

最後に

挙動自体はイメージどおりでしたが、やっぱり実際に動かしてみないと理解は深まらないですよね。
新機能のDNSログやIPv4の予約も試せたし。よかったよかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?