[Oracle Cloud] 東京リージョンと大阪リージョンのVCN間で相互に名前解決を行う

# やりたいこと

昨年11月に、Private DNSの機能が追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/5fc808ac-f041-0b7b-4fe1-74c675934125.png)
この機能追加により、異なるVCN間で相互に名前解決を行うことができるようになりました。

東京リージョンと大阪リージョンを使用して災対環境を構築したと仮定し、DNSを利用して相互に名前解決できることを確認してみました。

以下のように設定するとうまくできました。東京-大阪間は、Remote Peeringで接続して検証しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/ddd492bb-49fa-9c78-2e70-dc148edd3159.png)

なお、同一リージョン内でのVCN間相互名前解決であれば、メニュー ⇒ ネットワーキング ⇒ 仮想クラウドネットワーク ⇒ VCN名のリンク ⇒ DNSリゾルバのリンク を押下後、「関連付けられたプライベート・ビュー」の画面でVCNを相互に関連付けてあげるだけでできました。ただし「関連付けられたプライベート・ビュー」では、同一リージョン内のVCNしか関連付けることができませんでした。別リージョン間の場合は、後述するリスニング・エンドポイントと転送エンドポイントを設定することで相互に名前解決することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/ce1fa1f7-6d0a-2899-c5b3-cf61ed69d3cd.png)

# 手順
## 東京側VCNにDNSのリスニング・エンドポイント作成
※リスニング・エンドポイントは内部的にIPを2つ消費しているような動きをしていました。(リスニング・エンドポイント用に割り振られたIPの次のアドレスが予約されて使えなくなった)

まず、DNSのリスニング・エンドポイントを作成します。作成画面への遷移が非常にわかりづらいです。

メニュー ⇒ ネットワーキング ⇒ 仮想クラウドネットワーク ⇒ VCN名のリンク を押下後、
以下図のように、DNSリゾルバのリンクを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/269c9921-0678-4e99-c8ef-f2f725273867.png)

画面左のエンドポイントリンクを押下後、「エンドポイントの作成」画面を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/85a1155f-471c-d8dc-a06b-a3e23d7f791d.png)

名前、リスニング・エンドポイントを作成するサブネットを入力して、リスニング・エンドポイントを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/418a7dc8-dce2-36c2-30fe-5ec2773ed159.png)

リスニング・エンドポイントが作成されたことを確認します。(割り振られたIPアドレスをメモしておきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/1f85f428-0df6-e940-5eee-ce97927a838c.png)

## 東京側VCNにDNSの転送用エンドポイント作成
次に、DNSの転送用エンドポイントを作成します。同画面から続けて、「エンドポイントの作成」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/2ce66dfe-e243-32b0-e116-d846d7073527.png)

名前、転送用エンドポイントを作成するサブネットを入力して、転送用エンドポイントを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/591cb159-7a0d-1362-91c4-a69e8a0bf186.png)

転送用エンドポイントが作成されたことを確認します。(割り振られたIPアドレスをメモしておきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/d2094e72-0c36-e0af-e0ca-7c8faf9ae387.png)


## 大阪側VCNにDNSエンドポイント作成
大阪側でも同じようにDNSのリスニング・エンドポイントと転送用エンドポイントを作成します。

リージョンを大阪に変更後、
メニュー ⇒ ネットワーキング ⇒ 仮想クラウドネットワーク ⇒ VCN名のリンク を押下後、
以下図のように、DNSリゾルバのリンクを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/f7da2767-9292-7fc8-848a-3d03170b4315.png)

画面左のエンドポイントリンクを押下後、「エンドポイントの作成」画面を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/f782a11f-17dc-ee53-8733-432ac8c55bda.png)

名前、リスニング・エンドポイントを作成するサブネットを入力して、リスニング・エンドポイントを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/282c4993-3401-b97b-7ce0-7173af38f186.png)

リスニング・エンドポイントが作成されたことを確認します。(割り振られたIPアドレスをメモしておきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a57b544f-47ed-b21a-6f60-85851444960f.png)

## 大阪側VCNにDNSの転送用エンドポイント作成
次に、東京と同じようにDNSの転送用エンドポイントを作成します。同画面から続けて、「エンドポイントの作成」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/297bc484-64c1-19f0-f5d4-5a5519d65839.png)

名前、転送用エンドポイントを作成するサブネットを入力して、転送用エンドポイントを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a53e1770-b4bf-f885-efdf-abd5288aac02.png)

転送用エンドポイントが作成されたことを確認します。(割り振られたIPアドレスをメモしておきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/6cf8d691-bbcd-abd0-9247-f207af1dbd40.png)

## 東京側VCNにセキュリティ・グループの作成とアタッチ
各リスニング・エンドポイントにDNSリクエストを送信するためには、ネットワーク・セキュリティ・グループを使用して、各転送用エンドポイントからのDNS通信(53/TCP・53/UDP)を許可する必要があります

東京VCNにネットワークセキュリティ・グループを作成し、大阪の転送用エンドポイントからの53/tcpおよび53/udpの通信を許可します。# 詳細は割愛します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/634ca72d-f1ca-857e-4ee3-54a4aef62509.png)

メニュー⇒ネットワーキング⇒仮想クラウドネットワーク⇒VCN名のリンク⇒DNSリゾルバのリンク⇒画面左の「エンドポイント」リンクを押下後、以下図のように上述の手順で作成した、リスニング・エンドポイントのリンクを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/5fc34797-a625-25bd-479f-e7a2d916870c.png)

「ネットワーク・セキュリティ・グループの追加」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/4b806cc9-ebd1-bec1-d079-0f9f6e58d541.png)

上述の手順で作成したネットワーク・セキュリティ・グループを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/639cbbac-b374-cb30-eea8-7f0139968c45.png)

## 大阪側VCNにセキュリティ・グループの作成とアタッチ
東京側と同じ用に、大阪VCNにネットワークセキュリティ・グループを作成し、東京の転送用エンドポイントからの53/tcpおよび53/udpの通信を許可します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/c2c02b29-570e-a797-1147-6cb1db63bba3.png)

メニュー⇒ネットワーキング⇒仮想クラウドネットワーク⇒VCN名のリンク⇒DNSリゾルバのリンク⇒ 画面左の「エンドポイント」リンクを押下後、以下図のように上述の手順で作成した、リスニング・エンドポイントのリンクを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/73635775-2505-2a82-1d48-1834ea7af996.png)

「ネットワーク・セキュリティ・グループの追加」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/da9f0157-aaba-b4e2-bf9e-ad8bb911690b.png)

上述の手順で作成したネットワーク・セキュリティ・グループを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a0ba7b08-fcac-6b03-a5ab-23f59adf718d.png)

## 東京側VCNに転送ルールを設定
東京側に、転送ルールを追加します。

メニュー ⇒ ネットワーキング ⇒ 仮想クラウドネットワーク ⇒ VCN名のリンク ⇒ DNSリゾルバのリンク ⇒ 画面左の「ルール」リンクを押下後、「ルールの管理」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/d10157fb-1994-8cb4-66d1-85ccbcc9d13c.png)

大阪側VCNのドメイン「osaka01.oraclevcn.com」への名前解決を大阪側のリスニング・エンドポイントに転送するように設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/431107ac-b623-161d-1947-6d2342476e9c.png)

転送ルールが設定されたことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/8262db4d-3465-8705-bb5d-e500af04da2e.png)

この時点で、東京⇒大阪への名前解決ができるはずです。pingをうって確認します。

```CONSOLE
※わかりづらい名前を付けてしまいましたが、dns02は大阪側Computeのホスト名です
# ping -c3 dns02.public.osaka01.oraclevcn.com
PING dns02.public.osaka01.oraclevcn.com (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2 (192.168.2.2): icmp_seq=1 ttl=62 time=8.41 ms
64 bytes from 192.168.2.2 (192.168.2.2): icmp_seq=2 ttl=62 time=8.46 ms
64 bytes from 192.168.2.2 (192.168.2.2): icmp_seq=3 ttl=62 time=8.41 ms

--- dns02.public.osaka01.oraclevcn.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 8.411/8.428/8.460/0.108 ms
```

※設定を間違えて1回名前解決に失敗してしまうと、設定を正しく修正してもしばらく名前解決できない事象が発生しました。一定期間、ネガティブ・キャッシュを保持してしまうのかもしれません

## 大阪側VCNに転送ルールを設定
続いて、大阪側に、転送ルールを追加します。

メニュー ⇒ ネットワーキング ⇒ 仮想クラウドネットワーク ⇒ VCN名のリンク ⇒ DNSリゾルバのリンク ⇒ 画面左の「ルール」リンクを押下後、「ルールの管理」ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/1bbe41cc-d94b-890f-a580-bc92bf2d0c33.png)

東京側VCNのドメイン「tokyo.oraclevcn.com」への名前解決を東京側のリスニング・エンドポイントに転送するように設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/c3bd226c-f03a-3fda-c99e-a58096d523d4.png)

転送ルールが設定されたことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/98069448-4436-4dce-013d-cdfb1467f650.png)

この時点で、大阪⇒東京への名前解決ができるはずです。pingをうって確認します。

```CONSOLE
※わかりづらい名前を付けてしまいましたが、dns01は東京側Computeのホスト名です
# ping -c3 dns01.public.tokyo.oraclevcn.com
PING dns01.public.tokyo.oraclevcn.com (10.1.0.2) 56(84) bytes of data.
64 bytes from 10.1.0.2 (10.1.0.2): icmp_seq=1 ttl=62 time=8.15 ms
64 bytes from 10.1.0.2 (10.1.0.2): icmp_seq=2 ttl=62 time=8.15 ms
64 bytes from 10.1.0.2 (10.1.0.2): icmp_seq=3 ttl=62 time=8.24 ms

--- dns01.public.tokyo.oraclevcn.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.151/8.182/8.242/0.112 ms
```