[OCI]別のVCNにあるDBシステムにDNS名（FQDN）でアクセスできる環境を構築してみた

# はじめに

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

そこで、[Oracle A-Team Chronicles:Provisioning Custom DNS Resolvers for FQDN Resolution](https://www.ateam-oracle.com/provisioning-custom-dns-resolvers-for-fqdn-resolution)の情報をもとに、ピアリングしたVCN上のサーバからもDNS名（FQDN）でDBシステムにアクセスできるような構成を検証しました。

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

![スクリーンショット 2020-11-25 16.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0ad70350-7e25-0833-6225-9981c238ec16.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|

名前：**RT-AP-DNS-Subnet**

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

##  1-5. Security Listの作成
**AP-VCN**にSecurity Listを作成します。
名前：**SL-AP-DNS-Subnet**

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

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

|**エグレスルール1**||
|:-:|:-:|
|宛先タイプ|CIDR|
|ソースCIDR|0.0.0.0/0|
|IPプロトコル|全てのプロトコル|

## 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|

DNSサーバを配置するSubnet（**AP-DNS-Subnet**）

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

# 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|

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

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


## 2-6. Security Listの作成
**DB-VCN**にSecurity Listを作成します。

名前：**SL-DB-DNS-Subnet**

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

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

|**エグレスルール1**||
|:-:|:-:|
|宛先タイプ|CIDR|
|ソースCIDR|0.0.0.0/0|
|IPプロトコル|全てのプロトコル|


## 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|

DNSサーバを配置するSubnet（**DB-DNS-Subnet**）

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

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

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

AP-VCN用DNSサーバ

|||
|:-:|:-:|
|名前|**AP-DNS**|
|OS|Oracle Linux 7.9|
|サブネット|AP-DNS-Subnet|
|IPアドレス|10.1.2.100|
|ホスト名|ap-dns|

DB-VCN用DNSサーバ

|||
|:-:|:-:|
|名前|**DB-DNS**|
|OS|Oracle Linux 7.9|
|サブネット|DB-DNS-Subnet|
|IPアドレス|10.2.2.100|
|ホスト名|db-dns|

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

|||
|:-:|:-:|
|名前|**DB1**|
|サブネット|DB-Subnet|
|ホスト名|db1|

# 5. dnsmsqとncのインストール
AP-DNSにSSHクライアントからopcユーザでログインします。

dnsmsqとncをインストールします。

```
[opc@ap-dns ~]$ sudo su -
[root@ap-dns ~]# yum install -y dnsmasq nc
Loaded plugins: langpacks, ulninfo
ol7_UEKR6                                                  | 2.8 kB  00:00:00     
ol7_addons                                                 | 2.8 kB  00:00:00     
ol7_developer                                              | 2.8 kB  00:00:00     
ol7_developer_EPEL                                         | 3.4 kB  00:00:00     
ol7_ksplice                                                | 2.8 kB  00:00:00     
ol7_latest                                                 | 3.4 kB  00:00:00     
ol7_oci_included                                           | 2.9 kB  00:00:00     
ol7_optional_latest                                        | 2.8 kB  00:00:00     
ol7_software_collections                                   | 2.8 kB  00:00:00     
(1/19): ol7_UEKR6/x86_64/updateinfo                        |  56 kB  00:00:00     
(2/19): ol7_developer/x86_64/primary_db                    | 657 kB  00:00:00     
(3/19): ol7_developer_EPEL/x86_64/group_gz                 |  87 kB  00:00:00     
(4/19): ol7_developer_EPEL/x86_64/updateinfo               | 6.3 kB  00:00:00     
(5/19): ol7_addons/x86_64/updateinfo                       |  94 kB  00:00:00     
(6/19): ol7_ksplice/updateinfo                             | 6.1 kB  00:00:00     
(7/19): ol7_developer/x86_64/updateinfo                    | 7.9 kB  00:00:00     
(8/19): ol7_ksplice/primary_db                             | 1.2 MB  00:00:00     
(9/19): ol7_latest/x86_64/group_gz                         | 134 kB  00:00:00     
(10/19): ol7_latest/x86_64/updateinfo                      | 3.1 MB  00:00:00     
(11/19): ol7_addons/x86_64/primary_db                      | 163 kB  00:00:00     
(12/19): ol7_oci_included/x86_64/primary_db                | 405 kB  00:00:00     
(13/19): ol7_optional_latest/x86_64/updateinfo             | 1.2 MB  00:00:00     
(14/19): ol7_developer_EPEL/x86_64/primary_db              |  12 MB  00:00:00     
(15/19): ol7_optional_latest/x86_64/primary_db             | 5.2 MB  00:00:00     
(16/19): ol7_software_collections/x86_64/updateinfo        | 8.6 kB  00:00:00     
(17/19): ol7_UEKR6/x86_64/primary_db                       | 8.4 MB  00:00:00     
(18/19): ol7_latest/x86_64/primary_db                      |  29 MB  00:00:00     
(19/19): ol7_software_collections/x86_64/primary_db        | 5.2 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package dnsmasq.x86_64 0:2.76-16.el7 will be installed
---> Package nmap-ncat.x86_64 2:6.40-19.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================
 Package           Arch           Version                Repository          Size
==================================================================================
Installing:
 dnsmasq           x86_64         2.76-16.el7            ol7_latest         279 k
 nmap-ncat         x86_64         2:6.40-19.el7          ol7_latest         206 k

Transaction Summary
==================================================================================
Install  2 Packages

Total download size: 485 k
Installed size: 1.0 M
Downloading packages:
(1/2): dnsmasq-2.76-16.el7.x86_64.rpm                      | 279 kB  00:00:00     
(2/2): nmap-ncat-6.40-19.el7.x86_64.rpm                    | 206 kB  00:00:00     
----------------------------------------------------------------------------------
Total                                                1.4 MB/s | 485 kB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : dnsmasq-2.76-16.el7.x86_64                                     1/2 
  Installing : 2:nmap-ncat-6.40-19.el7.x86_64                                 2/2 
  Verifying  : 2:nmap-ncat-6.40-19.el7.x86_64                                 1/2 
  Verifying  : dnsmasq-2.76-16.el7.x86_64                                     2/2 

Installed:
  dnsmasq.x86_64 0:2.76-16.el7           nmap-ncat.x86_64 2:6.40-19.el7          

Complete!
[root@ap-dns ~]# 
```
firewalldにUDP 53番ポートを許可する設定を追加します。

```
[root@ap-dns ~]# firewall-cmd --add-port=53/udp
success
[root@ap-dns ~]# firewall-cmd --permanent --add-port=53/udp
success
```
dnsmsqの設定ファイルにログファイルとキャッシュの設定を追加し、dnsmsqを起動します。

```
[root@ap-dns ~]# echo "log-queries" >>/etc/dnsmasq.conf
[root@ap-dns ~]# echo "log-facility=/var/log/dnsmasq.log" >>/etc/dnsmasq.conf
[root@ap-dns ~]# echo "cache-size=0" >>/etc/dnsmasq.conf
[root@ap-dns ~]# dnsmasq --test
dnsmasq: syntax check OK.
[root@ap-dns ~]# systemctl enable dnsmasq
Created symlink from /etc/systemd/system/multi-user.target.wants/dnsmasq.service to /usr/lib/systemd/system/dnsmasq.service.
[root@ap-dns ~]# systemctl restart dnsmasq
[root@ap-dns ~]# systemctl status dnsmasq
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-25 00:51:27 GMT; 4s ago
 Main PID: 13449 (dnsmasq)
   Memory: 656.0K
   CGroup: /system.slice/dnsmasq.service
           └─13449 /usr/sbin/dnsmasq -k

Nov 25 00:51:27 ap-dns systemd[1]: Started DNS caching server..
[root@ap-dns ~]# 
```
同様の手順で、DB-DNSにもdnsmsqとncをインストールし、dnsmsqの設定ファイルにログファイルとキャッシュの設定を追加してdnsmsqを起動します。

AP1にncをインストールします。

```
[opc@ap1 ~]$ sudo yum install -y nc
Loaded plugins: langpacks, ulninfo
ol7_UEKR6                                                  | 2.8 kB  00:00:00     
ol7_addons                                                 | 2.8 kB  00:00:00     
ol7_developer                                              | 2.8 kB  00:00:00     
ol7_developer_EPEL                                         | 3.4 kB  00:00:00     
ol7_ksplice                                                | 2.8 kB  00:00:00     
ol7_latest                                                 | 3.4 kB  00:00:00     
ol7_oci_included                                           | 2.9 kB  00:00:00     
ol7_optional_latest                                        | 2.8 kB  00:00:00     
ol7_software_collections                                   | 2.8 kB  00:00:00     
(1/19): ol7_UEKR6/x86_64/updateinfo                        |  56 kB  00:00:00     
(2/19): ol7_developer/x86_64/primary_db                    | 657 kB  00:00:00     
(3/19): ol7_developer_EPEL/x86_64/group_gz                 |  87 kB  00:00:00     
(4/19): ol7_developer_EPEL/x86_64/updateinfo               | 6.3 kB  00:00:00     
(5/19): ol7_addons/x86_64/primary_db                       | 163 kB  00:00:00     
(6/19): ol7_ksplice/updateinfo                             | 6.1 kB  00:00:00     
(7/19): ol7_addons/x86_64/updateinfo                       |  94 kB  00:00:00     
(8/19): ol7_latest/x86_64/group_gz                         | 134 kB  00:00:00     
(9/19): ol7_ksplice/primary_db                             | 1.2 MB  00:00:00     
(10/19): ol7_UEKR6/x86_64/primary_db                       | 8.4 MB  00:00:00     
(11/19): ol7_developer/x86_64/updateinfo                   | 7.9 kB  00:00:00     
(12/19): ol7_latest/x86_64/updateinfo                      | 3.1 MB  00:00:00     
(13/19): ol7_oci_included/x86_64/primary_db                | 405 kB  00:00:00     
(14/19): ol7_optional_latest/x86_64/updateinfo             | 1.2 MB  00:00:00     
(15/19): ol7_software_collections/x86_64/updateinfo        | 8.6 kB  00:00:00     
(16/19): ol7_developer_EPEL/x86_64/primary_db              |  12 MB  00:00:00     
(17/19): ol7_latest/x86_64/primary_db                      |  29 MB  00:00:00     
(18/19): ol7_optional_latest/x86_64/primary_db             | 5.2 MB  00:00:00     
(19/19): ol7_software_collections/x86_64/primary_db        | 5.2 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-19.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================
 Package           Arch           Version                Repository          Size
==================================================================================
Installing:
 nmap-ncat         x86_64         2:6.40-19.el7          ol7_latest         206 k

Transaction Summary
==================================================================================
Install  1 Package

Total download size: 206 k
Installed size: 423 k
Downloading packages:
nmap-ncat-6.40-19.el7.x86_64.rpm                           | 206 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:nmap-ncat-6.40-19.el7.x86_64                                 1/1 
  Verifying  : 2:nmap-ncat-6.40-19.el7.x86_64                                 1/1 

Installed:
  nmap-ncat.x86_64 2:6.40-19.el7                                                  

Complete!
[opc@ap1 ~]$ 
```
同様の手順で、DB1にもncをインストールします。

# 6. DNSサーバへの接続確認
ncコマンドでAP1からAP-DNSへの接続を確認します。

```
[opc@ap1 ~]$ nc -v -u -i 2 10.1.2.100 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.2.100:53.
Ncat: Idle timeout expired (2000 ms).
[opc@ap1 ~]$ 
```

ncコマンドでDB1からDB-DNSへの接続を確認します。

```
[root@ap-dns ~]# nc -v -u -i 2 10.2.2.100 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.2.2.100:53.
Ncat: Idle timeout expired (2000 ms).
[root@ap-dns ~]#
```

# 7. Security ListへのIngress Ruleの追加
**Default Security List for AP-VCN**

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

**Default Security List for DB-VCN**

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

# 8. DHCPオプションの作成
**AP-VCN**
「DHCPオプション」→「DHCPオプションの作成」をクリック

|||
|:-:|:-:|
|名前|DHCP Option for AP-Subnet|
|DNSタイプ|カスタム・リゾルバ|
|DNSサーバー|10.1.2.100|

**DB-VCN**
「DHCPオプション」→「DHCPオプションの作成」をクリック

|||
|:-:|:-:|
|名前|DHCP Option for DB-Subnet|
|DNSタイプ|カスタム・リゾルバ|
|DNSサーバー|10.2.2.100|


# 9. SubnetのDHCPオプションの変更
**AP-Subnet**
「編集」をクリック

|||
|:-:|:-:|
|DHCPオプション|DHCP Option for AP-Subnet|
**DB-Subnet**
「編集」をクリック

|||
|:-:|:-:|
|DHCPオプション|DHCP Option for DB-Subnet|


#1 0. dnsmasqの設定追加
**AP-DNS**
DB-VCN（dbvcn.oraclevcn.com）の名前解決をDB-DNS（10.2.2.100）に転送する設定を追加します。

```
[root@ap-dns ~]# echo "server=/dbvcn.oraclevcn.com/10.2.2.100" >>/etc/dnsmasq.conf
[root@ap-dns ~]# systemctl restart dnsmasq
[root@ap-dns ~]# systemctl status dnsmasq
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-25 03:21:55 GMT; 5s ago
 Main PID: 19673 (dnsmasq)
   Memory: 684.0K
   CGroup: /system.slice/dnsmasq.service
           └─19673 /usr/sbin/dnsmasq -k

Nov 25 03:21:55 ap-dns systemd[1]: Started DNS caching server.. 
```
**DB-DNS**
 AP-VCN（apvcn.oraclevcn.com）の名前解決をAP-DNS（10.1.2.100）に転送する設定を追加します。

```
[root@db-dns ~]# echo "server=/apvcn.oraclevcn.com/10.1.2.100" >>/etc/dnsmasq.conf
[root@db-dns ~]# systemctl restart dnsmasq
[root@db-dns ~]# systemctl status dnsmasq
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-25 03:22:34 GMT; 9s ago
 Main PID: 19839 (dnsmasq)
   Memory: 720.0K
   CGroup: /system.slice/dnsmasq.service
           └─19839 /usr/sbin/dnsmasq -k

Nov 25 03:22:34 db-dns systemd[1]: Started DNS caching server..
```
# 11.名前解決の確認
nslookupでAP1からDB1（db1.dbsubnet.dbvcn.oraclevcn.com）の名前解決ができるか確認します。

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

Non-authoritative answer:
Name:	db1.dbsubnet.dbvcn.oraclevcn.com
Address: 10.2.1.2

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

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

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

Non-authoritative answer:
Name:	ap1.apsubnet.apvcn.oraclevcn.com
Address: 10.1.1.100

[opc@db1 ~]$
```

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

# 参考情報
[Oracle A-Team Chronicles:Provisioning Custom DNS Resolvers for FQDN Resolution](https://www.ateam-oracle.com/provisioning-custom-dns-resolvers-for-fqdn-resolution)
[Oracle Cloud：OCIにオンプレミスのDNSと同期するDNSキャッシュサーバーを構成してみてみた](https://qiita.com/shirok/items/3dca93db8face93944e0)