[OCI]Private DNS Resolverを利用して別のVCNにあるDBシステムにDNS名（FQDN）でアクセスしてみた

# はじめに

OCIのDatabase Cloud ServiceのDBシステムは、プライベートIPアドレスがDHCPによる割り当てとなっていて固定できないため、DNS名（FQDN）でアクセスすることが推奨されています。
同一VCNでのアクセスの場合はVCNのDNSリゾルバが名前解決をしてくれますが、ローカルピアリング、リモートピアリングなどでピアリングしたVCNからはデフォルトではDNS名を使用してアクセスすることができません。

今回は先日リリースされたPrivate DNS Resolverの機能を利用して、ピアリングされている異なるVCN内のサーバからDNS名（FQDN）でDBシステムにアクセスできるような構成を検証しました。
（[こちら](https://qiita.com/500InternalServerError/items/5fc668ccadf366537c7d)の記事はわずか1日の命でした。。。）

検証した構成は以下の図のようになります。

![スクリーンショット 2020-11-26 18.51.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ff90feb8-3417-da5f-3a48-f4bbed3c9e7c.png)



# 1. APサーバ側VCNの設定

## 1-1. VCNの作成
VCNを作成します。

|||
|:-:|:-:|
|名前|**AP-VCN**|
|CIDRブロック|10.1.0.0/16|
|このVCNでDNSホスト名を使用|チェックをオン|

## 1-2. Local Peering Gatewayの作成
**AP-VCN**にLocal Peering Gatewayを作成します

|||
|:-:|:-:|
|名前|**LPG-AP-VCN**|

## 1-3. Internet Gatewayの作成
**AP-VCN**にInternet Gatewayを作成します。

|||
|:-:|:-:|
|名前|**IG-AP-VCN**|

## 1-4. Route Tableの作成
**AP-VCN**にRoute Tableを作成します。
名前：**RT-AP-Subnet**

|ターゲット・タイプ|宛先|ターゲット|
|:-:|:-:|:-:|
|インターネット・ゲートウェイ|0.0.0.0/0|IG-AP-VCN|
|ローカル・ピアリング・ゲートウェイ|10.2.0.0/16|LPG-AP-VCN|

## 1-5. Network Security Groupの作成
**AP-VCN**にPrivate DNS Endpoint用のNetwork Security Groupを作成します。

名前：**NSG for DNS_AP_VCN**

|**イングレスルール1**||
|:-:|:-:|
|ソース・タイプ|CIDR|
|ソースCIDR|10.1.1.0/24|
|IPプロトコル|UDP|
|ソースポート範囲|入力しない|
|宛先ポート範囲|53|

|**イングレスルール2**||
|:-:|:-:|
|ソース・タイプ|CIDR|
|ソースCIDR|10.2.1.0/24|
|IPプロトコル|UDP|
|ソースポート範囲|入力しない|
|宛先ポート範囲|53|

## 1-6. Subnetの作成
**AP-VCN**にSubnetを作成します。
APサーバを配置するSubnet（**AP-Subnet**）

|||
|:-:|:-:|
|名前|AP-Subnet|
|サブネット・タイプ|リージョナル|
|CIDRブロック|10.1.1.0/24|
|ルート表|RT-AP-Subnet|
|サブネット・アクセス|パブリック・サブネット|
|DNS解決|「このSUBNETでDNSホスト名を使用」のチェックをオン|
|DNSのDHCPオプション|Default DHCP Options for AP-VCN|
|セキュリティ・リスト|Default Security List for AP-VCN|

## 1-7. Private DNSエンドポイントの作成

DNSリゾルバ名をクリックします。
![スクリーンショット 2020-11-26 19.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/84c84368-9e5b-da29-d005-40f72374da08.png)
リソース欄の「エンドポイント」をクリックします。
![スクリーンショット 2020-11-26 11.55.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a8df1af6-2d7c-5710-de8e-9f914c7a2e1d.png)
「エンドポイントの作成」をクリックします。
![スクリーンショット 2020-11-26 11.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/28babef7-82e8-fbd3-5455-4acd2e730fdb.png)
エンドポイントを作成します。

|||
|:-:|:-:|
|名前|DNS_AP_VCN|
|サブネットの選択|AP-Subnet|
|エンドポイント・タイプ|リスニング|
|ネットワーク・セキュリティ・グループを使用してトラフィックを制御|チェックをオン|
|ネットワーク・セキュリティ・グループ|NSG for DNS_AP_VCN|
「エンドポイントの作成」をクリック
![スクリーンショット 2020-11-26 12.04.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1f3a26d4-3133-349a-842a-bd6fc4f93844.png)

# 2. DBサーバ側VCNの設定

## 2-1. VCNの作成
VCNを作成します。

|||
|:-:|:-:|
|名前|**DB-VCN**|
|CIDR|10.2.0.0/16|
|このVCNでDNSホスト名を使用|チェックをオン|

## 2-2. Local Peering Gatewayの作成
**DB-VCN**にLocal Peering Gatewayを作成します。

|||
|:-:|:-:|
|名前|**LPG-DB-VCN**|

## 2-3. ピアリング接続の確立
LPG-DB-VCNの「…」から「ピアリング接続の確立」をクリックします。

|||
|:-:|:-:|
|ローカル・ピアリング・ゲートウェイの指定|「下を選択」を選択|
|仮想クラウド・ネットワーク|「AP-VCN」を選択|
|ピア・ゲートウェイ|「LPG-AP-VCN」を選択|

## 2-4. Internet Gatewayの作成
**DB-VCN**にInternet Gatewayを作成します。

|||
|:-:|:-:|
|名前|**IG-DB-VCN**|

## 2-5. Route Tableの作成
**DB-VCN**にRoute Tableを作成します。

名前：**RT-DB-Subnet**

|ターゲット・タイプ|宛先|ターゲット|
|:-:|:-:|:-:|
|インターネット・ゲートウェイ|0.0.0.0/0|IG-DB-VCN|
|ローカル・ピアリング・ゲートウェイ|10.1.0.0/16|LPG-DB-VCN|

## 2-6. Network Security Groupの作成
**DB-VCN**にPrivate DNS Endpoint用のNetwork Security Groupを作成します。

名前：**NSG for DNS_DB_VCN**

|**イングレスルール1**||
|:-:|:-:|
|ソース・タイプ|CIDR|
|ソースCIDR|10.1.1.0/24|
|IPプロトコル|UDP|
|ソースポート範囲|入力しない|
|宛先ポート範囲|53|

|**イングレスルール2**||
|:-:|:-:|
|ソース・タイプ|CIDR|
|ソースCIDR|10.2.1.0/24|
|IPプロトコル|UDP|
|ソースポート範囲|入力しない|
|宛先ポート範囲|53|

**DB-VCN**にDBアクセス用のNetwork Security Groupを作成します。

名前：**NSG for DB1**

|**イングレスルール1**||
|:-:|:-:|
|ソース・タイプ|CIDR|
|ソースCIDR|10.1.1.0/24|
|IPプロトコル|TCP|
|ソースポート範囲|入力しない|
|宛先ポート範囲|1521|

## 2-7. Subnetの作成
**DB-VCN**にSubnetを作成します。
DBサーバを配置するSubnet（**DB-Subnet**）

|||
|:-:|:-:|
|名前|DB-Subnet|
|サブネット・タイプ|リージョナル|
|CIDRブロック|10.2.1.0/24|
|ルート表|RT-DB-Subnet|
|サブネット・アクセス|パブリック・サブネット|
|DNS解決|「このSUBNETでDNSホスト名を使用」のチェックをオン|
|DNSのDHCPオプション|Default DHCP Options for DB-VCN|
|セキュリティ・リスト|Default Security List for DB-VCN|

## 2-8. Private DNSエンドポイントの作成
DNSリゾルバ名をクリックします。
![スクリーンショット 2020-11-26 14.18.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/914cd68e-1c93-c538-ac59-7dfda674b16e.png)
リソース欄の「エンドポイント」をクリックします。
![スクリーンショット 2020-11-26 14.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9e43f6a0-0bc4-2a30-86f8-6b3f8d9cf351.png)
「エンドポイントの作成」をクリックします。
![スクリーンショット 2020-11-26 14.19.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/926061f9-a9a7-d91d-c7c3-ef7dda73389c.png)
エンドポイントを作成します。

|||
|:-:|:-:|
|名前|DNS_DB_VCN|
|サブネットの選択|DB-Subnet|
|エンドポイント・タイプ|リスニング|
|ネットワーク・セキュリティ・グループを使用してトラフィックを制御|チェックをオン|
|ネットワーク・セキュリティ・グループ|NSG for DNS_DB_VCN|
「エンドポイントの作成」をクリック
![スクリーンショット 2020-11-26 14.19.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/6576f99a-8f24-c8ee-708d-5858ad41b25b.png)

# 3. AP-VCNのPrivate DNS Resolverの設定
## 3-1. AP-VCNへのプライベート・ビューの追加
「プライベート・ビューの管理」をクリックします。
![スクリーンショット 2020-11-26 19.22.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f47ce418-230b-3155-f2b0-a6fa6ae720a8.png)
「DB-VCN」を選択し、「変更の保存」をクリックします。
![スクリーンショット 2020-11-26 19.23.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/391b210d-14d7-f265-6c01-9d38b0078a29.png)
プライベート・ビュー「DB-VCN」が関連づけられました。
![スクリーンショット 2020-11-26 19.23.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/10426b6c-d6ac-4314-2d01-2717371919ba.png)
##3-2. AP-VCNへのDHCPオプションの追加

リソース欄の「DHCPオプション」をクリックします。
![スクリーンショット 2020-11-26 19.35.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8f0439a8-60f6-53ad-5b61-ae454af9dfe7.png)
「DHCPオプションの作成」をクリックします。
![スクリーンショット 2020-11-26 19.39.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2aa8383d-3cea-350f-902a-2db6f81c63e1.png)
DHCPオプションを作成します。

|||
|:-:|:-:|
|名前|DHCP Option for AP-Subnet|
|DNSタイプ|カスタム・リゾルバ|
|DNSサーバー|10.1.1.254|
![スクリーンショット 2020-11-26 19.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/705ea386-8d3e-2693-384f-476773d78b4d.png)
##3-3. AP-SubnetのDHCPオプションの変更
「編集」をクリックします。
![スクリーンショット 2020-11-26 19.44.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c1a67ed6-a2b8-ce17-a8c4-abf280a83d57.png)
DHCPオプションを「DHCP Option for AP-Subnet」に変更して、「変更を保存」をクリックします。

|||
|:-:|:-:|
|DHCPオプション|DHCP Option for AP-Subnet|
![スクリーンショット 2020-11-26 19.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4aad2b79-a3a3-9b3f-3cdf-543f7d30bae2.png)

# 4. DB-VCNのPrivate DNS Resolverの設定
## 4-1. DB-VCNへのプライベート・ビューの追加

DNSリゾルバ名をクリックします。
![スクリーンショット 2020-11-26 20.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/93a56aaf-50ca-5f47-ed61-7c1587bb971c.png)
「プライベート・ビューの管理」をクリックします。
![スクリーンショット 2020-11-26 20.24.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/6a076c68-563c-cd47-eded-01a5216b2daa.png)
「AP-VCN」を選択して、「変更の保存」をクリックします。
![スクリーンショット 2020-11-26 20.24.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8071f027-428f-a2a1-9b73-3276a8d2425b.png)
##4-2. DB-VCNへのDHCPオプションの追加
リソース欄の「DHCPオプション」をクリックします。
![スクリーンショット 2020-11-26 20.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7931bbd7-cdaa-fe27-7a3a-05c783e76267.png)
「DHCPオプションの作成」をクリックします。
![スクリーンショット 2020-11-26 20.46.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5fb9d8f2-5ccb-89fb-b5c3-11dc4c50c299.png)
DHCPオプションを作成します。

|||
|:-:|:-:|
|名前|DHCP Option for DB-Subnet|
|DNSタイプ|カスタム・リゾルバ|
|DNSサーバー|10.2.1.254|
![スクリーンショット 2020-11-26 20.29.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/795edd8d-e99f-9e3d-07b3-e6e0c73e5c9f.png)
##4-3. DB-SubnetのDHCPオプションの変更
「編集」をクリックします。
![スクリーンショット 2020-11-26 20.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a2dbf06b-3ee3-c992-f513-b775d7932f07.png)
DHCPオプションを「DHCP Option for DB-Subnet」に変更して、「変更の保存」をクリックします。

|||
|:-:|:-:|
|DHCPオプション|DHCP Option for DB-Subnet|
![スクリーンショット 2020-11-26 20.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/036e65f2-bff1-2fa3-2694-eafaeb34b688.png)

以上でPrivate DNS Resolverの設定とPrivate DNS Resolverを使用するためのDHCPの設定が完了しました。

# 5. コンピュート・インスタンスの作成
APサーバ

|||
|:-:|:-:|
|名前|**AP1**|
|OS|Oracle Linux 7.9|
|サブネット|AP-Subnet|
|IPアドレス|10.1.1.100|
|ホスト名|ap1|

# 6. DBCSインスタンスの作成
DBサーバ

|||
|:-:|:-:|
|名前|**DB1**|
|サブネット|DB-Subnet|
|ネットワーク・セキュリティ・グループ|NSG for DB|
|ホスト名|db1|

# 7. 名前解決の確認
nslookupでAP1からDB1（db1.dbsubnet.dbvcn.oraclevcn.com）の名前解決ができるか確認します。

```
[opc@ap1 ~]$ nslookup db1.dbsubnet.dbvcn.oraclevcn.com
Server:		10.1.1.254
Address:	10.1.1.254#53

Name:	db1.dbsubnet.dbvcn.oraclevcn.com
Address: 10.2.1.2

[opc@db1 ~]$
```
AP-VCNにあるAP1から、DB-VCNにあるDB1の名前解決ができました。

同様に、DB1からAP1（ap1.apsubnet.apvcn.oraclevcn.com）の名前解決ができるか確認します。

```
opc@db1 ~]$ nslookup ap1.apsubnet.apvcn.oraclevcn.com
Server:		10.2.1.254
Address:	10.2.1.254#53

Name:	ap1.apsubnet.apvcn.oraclevcn.com
Address: 10.1.1.100

[opc@db1 ~]$
```

DB-VCNにあるDB1から、AP-VCNにあるAP1の名前解決ができました。

# 8. SQL*PlusでのDB接続確認

AP1にSSHクライアントからopcユーザでログインします。

Oracle Instant Clientをインストールします。

```
sudo yum -y install oracle-release-el7
sudo yum install -y oracle-instantclient19.6-sqlplus.x86_64
```
Oralce Client用の環境変数の設定を/etc/profileに追加します。

```
sudo vi /etc/profile
```
以下の内容をファイルの末尾に追加します。

```/etc/profile
export ORACLE_HOME=/usr/lib/oracle/19.6/client64/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=/usr/lib/oracle/19.6/client64/bin:$PATH
```

環境変数の設定を有効化します。

```
source /etc/profile
```
tnsnames.oraファイルを作成し、DB1の$ORACLE_HOME/network/admin/tnsmanes.oraファイルの内容をコピー＆ペースとします。
tnsnames.ora内の接続記述子でのホストの指定は、DNS名での指定となっています。

```
sudo vi $ORACLE_HOME/network/admin/tnsnames.ora
```

```tnsnames.ora
DB1_NRT1M2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db1.dbsubnet.dbvcn.oraclevcn.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB1_nrt1m2.dbsubnet.dbvcn.oraclevcn.com)
    )
  )
```
SQL*PlusでDB1のCDBにsysユーザで接続してみます。

```
opc@ap1 ~]$ sqlplus sys/Demo#1Demo#1@DB1_NRT1M2 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 木 11月 26 12:03:06 2020
Version 19.6.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.



Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
に接続されました。
SQL>
```

無事、接続できました。
めでたし、めでたし。

# 参考情報
[DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/en-us/iaas/Content/Network/Concepts/dns.htm)
[Oracle A-Team Chronicles:Provisioning Custom DNS Resolvers for FQDN Resolution](https://www.ateam-oracle.com/provisioning-custom-dns-resolvers-for-fqdn-resolution)