Oracle Cloud: Private DNSで PeeringしたVCNどうしホスト名(FQDN)で通信できるようにしてみてみた

# ■ 目的
プライベートDNSは、VCN内およびVCN間で実行されるアプリケーション、およびオンプレミスまたはその他のプライベートネットワークにホスト名解決を提供できます。
ということで、プライベートDNSを使用して、Remote PeeringしたVCN インスタンスどうしが名前解決してホスト名(FQDN)で通信できるようにしてみてみます。

オンプレミスとのプライベート接続については前回の記事を参考します。
・参考: [オンプレミスとOCIをVPN接続してオンプレミスからPrivate DNSで名前解決してみてみた](https://qiita.com/shirok/items/ac97cf48154c59c9a87e)

# ■ 構成
![構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/19717fb0-ec21-a289-f9be-09591be2b841.png)
今回は、Private DNSの設定から行います。
図のようにRemote Peeringしてインスタンス間通信できるようにしておきます。
・参考: 
　　- 旧Remote Peering: [Oracle Cloud：リージョン間をRemote Peering(バックボーン接続) してみた](https://qiita.com/shirok/items/b00deaa462c279314848)
　　- Remote Peering: [リージョン間を Remote VCN Peering してみてみた](https://qiita.com/shirok/items/192674aa6e903ea6694a)
　　- Trunsit Peering: [DRGで東京リージョンを経由して、オンプレミスと 大阪リージョンを接続してみてみた](https://qiita.com/shirok/items/90cff318816fbf2a802d)

同じリージョン内のVCNは、互いのプライベート・ビューを使用して要求を解決できます。
・参考: [https://docs.oracle.com/en/learn/oci_private_dns/#introduction](https://docs.oracle.com/en/learn/oci_private_dns/#view-automatically-generated-records)



# ● VCNのDNSについて
#### ・VCNのDNS
ドメインネームシステム（DNS）を使用すると、コンピューターはIPアドレスの代わりにホスト名を使用して相互に通信できます。
	VCN内にあるDNS(169.254.169.254)は、次の２つが含まれています。
	　　- **VCNリゾルバ**：インスタンスが同じVCN内の他のインスタンスのホスト名を解決できるようにします。
	　　- **Internetリゾルバ**：インターネット上で公開されているホスト名をインスタンスが解決できるようにします。インスタンスは、インターネットゲートウェイを 介してインターネットにアクセスする必要はありません。

#### ・プライベートDNS
　　異なるVCNやオンプレミスまたはその他のプライベートネットワークに名前解決を提供するには、DNS(169.254.169.254)に関する次のリゾルバーエンドポイントを使用します。
	　　- **リスニング・エンドポイント**: VCN、他のVCNリゾルバー、またはオンプレミスネットワークのDNS内のこれらのソースからクエリを受信します。
	　　- **転送エンドポイント**: DNSクエリをリスニングエンドポイントに転送して、他のピアリングされたVCNまたはオンプレミスネットワークのDNSのリゾルバーを探します。

#### ・DNSドメインとホスト名
最初にVCNとサブネットを作成するときに、それぞれにDNSラベルを指定でき、つぎのようなドメイン名となります。
		　　- **VCNドメイン名**： \<*VCN DNS label*>.oraclevcn.com
		　　- **Subnetドメイン名**： \<*subnet DNS label>.\<*VCN DNS label*>.oraclevcn.com
		　　- **インスタンスFQDN**： \<*hostname*>.\<*subnet DNS label*>.\<*VCN DNS label*>.oraclevcn.com






# ■ 手順:Tokyo Region

## ● Private DNS リスニング-エンドポイント作成

### 1) 対象VCNアクセス
名前解決したい対象のVCNへアクセスし、画面にある「DNSリゾルバのVCN」をクリック
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f2a091ad-5dc5-8bcf-c57c-6d39f141958a.png)




### 2) エンドポイント画面
[エンドポイントの作成]をクリック
![02_EndPint01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c84e659f-1817-b213-86e2-d30b8ca23807.png)



### 3) エンドポイントの作成画面
以下項目を入力し、[エンドポイントの作成]をクリック

	・名前: エンドポイント名を設定
	・サブネットの選択:エンドポイントを配置するSubnetを選択
	・エンドポイント・タイプ: ここでは[リスニング]を選択
	・リスニングIPアドレス: Private DNSのリスニング・エンドポイントIPを設定

![03_EndPint_Listening01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f068a2b5-0cb1-59e4-c40d-4246f2701c56.png)




## ● Private DNS 転送エンドポイント作成

### 1) エンドポイント画面
引き続き同じVCNのエンドポイント画面で[エンドポイントの作成]をクリック
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f884c9e2-b43c-e91a-5804-e4d8b1080629.png)



### 2) エンドポイント作成画面
以下項目を入力し、[エンドポイントの作成]をクリック

	・名前: エンドポイント名を設定
	・サブネットの選択:エンドポイントを配置するSubnetを選択
	・エンドポイント・タイプ: ここでは[転送]を選択
	・リスニングIPアドレス: Private DNSの転送エンドポイントIPを設定

![04_EndPint_Fowarding01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/7dab011a-0c64-fb69-7e31-7e5bd0f2a1f6.png)

###3) エンドポイント作成確認
２つのリスニング/転送エンドポイントが作成されたことを確認
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3be07069-f113-0c68-145f-bd5aa1ce5015.png)


## ● ルール作成

### 1) ルール画面
左にあるリソース欄の[ルール]をクリックし、[ルールの管理]をクリック
![06_Roure01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/91b8adfb-1d82-a580-d868-f8b0bffe8df4.png)




### 2) ルールの管理画面
以下項目を入力し、[変更の保存]をクリック

	・ルール条件 : [CIDRブロック]を選択
	・クライアントCIDRブロック: 転送したい範囲のVCN CIDRを設定
	・ソースエンドポイント: [Forwarding]を設定
	・宛先IPアドレス: 対抗のリスニングDNSのIPを設定

![06_Roure02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3cd986b4-0b99-d79e-0960-23ffe76f69ed.png)

### 3) ルール作成確認
ルールが作成されたことを確認
![06_Roure03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0a3f9439-9568-182e-2557-8311b03650c8.png)



# ■ 手順:Osaka Region
上記 Tokyo Regionと同様に設定

## ● Private DNS リスニング-エンドポイント作成

### 1) 対象VCNアクセス
名前解決したい対象のVCNへアクセスし、画面にある「DNSリゾルバのVCN」をクリック
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/eb664052-8660-ea04-e03d-3df979c72c74.png)




### 2) エンドポイント画面
[エンドポイントの作成]をクリック
![02_EndPoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/ab8c6024-6287-d81d-390b-2a6836362bda.png)



### 4) エンドポイントの作成画面
以下項目を入力し、[エンドポイントの作成]をクリック

	・名前: エンドポイント名を設定
	・サブネットの選択:エンドポイントを配置するSubnetを選択
	・エンドポイント・タイプ: ここでは[リスニング]を選択
	・リスニングIPアドレス: Private DNSのリスニング・エンドポイントIPを設定

![03_EndPint_Listening01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c91248bc-c375-1ef8-4bd4-fa091067a632.png)



### 5) エンドポイント作成確認
エンドポイントが作成されたことを確認
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/9db0d01d-65b9-2f41-5d4f-547756b216d6.png)



## ● Private DNS 転送エンドポイント作成

### 1) エンドポイント画面
引き続き同じVCNのエンドポイント画面で[エンドポイントの作成]をクリック
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/51110a0c-e6ec-8857-6064-6492d9eff069.png)

### 2) エンドポイントの作成画面
以下項目を入力し、[エンドポイントの作成]をクリック

	・名前: エンドポイント名を設定
	・サブネットの選択:エンドポイントを配置するSubnetを選択
	・エンドポイント・タイプ: ここでは[転送]を選択
	・リスニングIPアドレス: Private DNSの転送エンドポイントIPを設定

![04_EndPint_Fowareding01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/89c2cc5e-ceb4-20dc-ef90-100e23c69fcf.png)


### 3) エンドポイント作成確認
２つのリスニング/転送エンドポイントが作成されたことを確認
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/2b8b2990-9d7b-8f19-941b-15dca118a0bd.png)


## ● ルール作成

### 1) ルール画面
左にあるリソース欄の[ルール]をクリックし、[ルールの管理]をクリック
![06_EndPoint_Roure01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/01688961-7f9e-f7bc-7ed7-361eff6abe15.png)



### 2) ルールの管理画面
以下項目を入力し、[変更の保存]をクリック

	・ルール条件 : [CIDRブロック]を選択
	・クライアントCIDRブロック: 転送したい範囲のVCN CIDRを設定
	・ソースエンドポイント: [Forwarding]を設定
	・宛先IPアドレス: 対抗のリスニングDNSのIPを設定

![07_EndPoint_Roure02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c06e5362-f448-c05b-ed03-e2b00c2133e5.png)


### 3) ルール作成確認
ルールが作成されたことを確認
![07_EndPoint_Roure03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/099c88f2-5763-fc77-ab89-1855bf709968.png)




# ■ 動作確認
## ● ドメイン付きホスト名確認

###・tokyo-private-inst01ホスト名確認


```shell
[opc@tokyo-private-inst01 ~]$ cat /etc/hosts
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
	10.0.1.2 tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com tokyo-private-inst01
```

###・osaka-private-inst01ホスト名確認

```shell
[opc@osaka-private-inst01 ~]$ cat /etc/hosts
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
	10.5.1.2 osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com osaka-private-inst01
```

## ● Tokyo --> Osaka 疎通確認

### ・ping疎通確認

```shell
[opc@tokyo-private-inst01 ~]$ ping osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com -c 3
	PING osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com (10.5.1.2) 56(84) bytes of data.
	64 bytes from osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com (10.5.1.2): icmp_seq=1 ttl=62 time=7.70 ms
	64 bytes from osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com (10.5.1.2): icmp_seq=2 ttl=62 time=7.67 ms
	64 bytes from osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com (10.5.1.2): icmp_seq=3 ttl=62 time=7.69 ms

	--- osaka-private-inst01.privatesubnet.vcn10500.oraclevcn.com ping statistics ---
	3 packets transmitted, 3 received, 0% packet loss, time 2002ms
	rtt min/avg/max/mdev = 7.675/7.691/7.702/0.072 ms
```

### ・nslookup確認

```shell
[opc@osaka-private-inst01 ~]$ nslookup tokyo-inst01.publicsubnet01.vcn10000.oraclevcn.com
	Server:		169.254.169.254
	Address:	169.254.169.254#53

	Non-authoritative answer:
	Name:	tokyo-inst01.publicsubnet01.vcn10000.oraclevcn.com
	Address: 10.0.0.2
```



## ● Osaka --> Tokyo 疎通確認

### ・ping疎通確認

```shell
[opc@a ~]$ ping tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com -c 3
	PING tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com (10.0.1.2) 56(84) bytes of data.
	64 bytes from tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com (10.0.1.2): icmp_seq=1 ttl=62 time=7.66 ms
	64 bytes from tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com (10.0.1.2): icmp_seq=2 ttl=62 time=7.59 ms
	64 bytes from tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com (10.0.1.2): icmp_seq=3 ttl=62 time=7.65 ms

	--- tokyo-private-inst01.privatesubnet.vcn10000.oraclevcn.com ping statistics ---
	3 packets transmitted, 3 received, 0% packet loss, time 2002ms
	rtt min/avg/max/mdev = 7.597/7.639/7.666/0.077 ms
```

### ・nslookup確認
インスタンスで設定されているDNS IPは "169.254.169.254"です
エンドポイントで受け取った情報は、169.254.169.254の実DNSでアクセスがされます

```shell
[opc@tokyo-private-inst01 ~]$ nslookup osaka-inst01.publicsubnet01.vcn10500.oraclevcn.com
	Server:		169.254.169.254
	Address:	169.254.169.254#53

	Non-authoritative answer:
	Name:	osaka-inst01.publicsubnet01.vcn10500.oraclevcn.com
	Address: 10.5.0.2
```


### ・インスタンスに設定されてるresolv.conf確認

```shell
opc@osaka-private-inst01 ~]$ cat /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 /usr/sbin/dhclient-script
	search vcn10500.oraclevcn.com privatesubnet.vcn10500.oraclevcn.com
	nameserver 169.254.169.254
```


# ■ 参考
　・[OCI Document:プライベートDNS](https://docs.oracle.com/ja-jp/iaas/Content/DNS/Tasks/privatedns.htm)
　・[チュートリアル:Private DNS Implementation](https://www.ateam-oracle.com/post/private-dns-implementation)
　・[Configure private DNS zones views and resolvers](https://docs.oracle.com/en/learn/oci_private_dns/#introduction)
　・[Private DNS Implementation](https://www.ateam-oracle.com/post/private-dns-implementation)
　・[Use private DNS in interconnected VCNs and On-premises](https://docs.oracle.com/en/solutions/private-dns/index.html#GUID-A1669E7E-EF8B-4B0A-AA36-51D73D51ED46)
　・[Domain Name System (DNS)](https://www.oracle.com/cloud/networking/dns/)