Oracle Cloud：オンプレミスからVPNでLoad Balancer経由でPublic IPのインスタンスにアクセスしてみてみた

Load BalancerはIP Adressが届けばBackend Set に登録できます。
NAT Gateway や Service Gateway を利用すればPrivate Subnet内にあるインスタンスからPublic IPのインスタンスへアクセスできるので、今回は Private Load Balancerを使用してオンプレミスからVPNを使用してPublic IPのインスタンスへアクセスしてみます。


#■構成概要
PublicサービスであるAutonomous Databaseへアクセスしてみてみます。
ただし、、Autonomous Databaseはホスト名でアクセスする必要があり、IP Addressを指定してのアクセスはIPアドレスが変動する可能性があるためCertify(動作保証)はされませんが、やってみてみます。

<img width="795" alt="NW構成_Qiita用2.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/558b5996-adc2-6407-4b2a-ae8e7f84395b.png">


#■Autonomous Transaction Processing Databases (ATP)作成と確認

##●ATP作成
ATP画面で[Create ATransaction Processing Database]ボタンをクリックし、以下のような情報を入力して作成します。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/109087/16254e51-7d7d-ad70-1b64-c403348b5dcb.png)


##●クライアント資格証明(Oracle Wallet)のダウンロード

データベース接続は暗号化されており、WALLETの資格証明を使用して接続します。
ADWでは、zip化された接続情報含めたファイルをダウンロードし、このzipを使用して接続します。

①作成したADWのページに移動し、「DB Connection」をクリック
![03.png](https://qiita-image-store.s3.amazonaws.com/0/109087/fc6517b2-b3e6-b82e-4a3a-99a7e4c979ad.png)


②「Database Connection」画面で、「Download」をクリックし、WALLETの資格証明（Wallet_〜.zip）をダウンロード
![06.png](https://qiita-image-store.s3.amazonaws.com/0/109087/77d30e7f-2401-ea29-c757-8f0ff45eb1a3.png)


##●ATP hostname確認
DownloadしたWALLETの資格証明（Wallet_〜.zip）内にあるtnsnames.oraから、ATPのIPアドレスを確認します

①WALLETの資格証明（Wallet_〜.zip）解凍

```shell-session
[oracle@test-Inst01 ~]$ unzip Wallet_ATP001.zip
Archive:  Wallet_ATP001.zip
  inflating: cwallet.sso
  inflating: tnsnames.ora
  inflating: truststore.jks
  inflating: ojdbc.properties
  inflating: sqlnet.ora
  inflating: ewallet.p12
  inflating: keystore.jks
```

②tnsnames.ora確認
 hostとCNにある名前を確認

```shell-session
[oracle@test-Inst01 ~]$ cat tnsnames.ora
		・・・
		atp001_high = (description= (address=(protocol=tcps)(port=1522)(host=adb.test.oraclecloud.com))(connect_data=(service_name=p36dah33ehxmnrf_atp001_high.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
		        "CN=adwc.test.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )
		・・・
```
		


##●ATP IP Address 確認
OCI上のホストでtnsnames.oraにある　hostとCNにある名前から、3つのIP Addressを確認
この3つのアドレスをLoadBalancerのBuckend Setに登録します

```shell-session
[opc@oci-Inst01 ~]$ nslookup adb.test.oraclecloud.com
		Server:		169.254.169.254
		Address:	169.254.169.254#53

		Non-authoritative answer:
		adb.test.oraclecloud.com	canonical name = adwc.test.oraclecloud.com.
		Name:	adwc.test.oraclecloud.com
		Address: 100.100.100.101
		Name:	adwc.test.oraclecloud.com
		Address: 100.100.100.102
		Name:	adwc.test.oraclecloud.com
		Address: 100.100.100.103
```

##●NAT Gateway作成
Private Load BarancerがVCN内からATPへアクセスできるようNAT Gateway もしくはService Gatewayを作成

##●Routeing Table設定
VCN内から作成したNAT Gatewayを通してATPの3つのアドレスへアクセスするように設定
<img width="970" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/4baaf23f-52d7-a128-0352-125ac6ee789f.png">

##●Security List 設定
Public IPのATPへアクセスできるようにEgress Rouleを設定
<img width="887" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/b990d3ca-dfab-3820-69a0-017920036fca.png">


#■ Private Load Balancer作成
##●Private Load Balancer作成
Load Balancer画面で[Create Load Balancer]ボタンをクリックし、以下情報を入力して作成

	・Listener Information
		- Protocol:TCP
		- PORT:1522

	・Backend Set Information
		- Private or Public IP Address: ATPの3つのIP Addressを登録
		- Port：1522

![01_IP変更.png](https://qiita-image-store.s3.amazonaws.com/0/109087/6435b371-0407-42af-397d-94cb4fb013f5.png)

##●Backend Sets Health確認
Backend Setが登録されATPと疎通できていることを確認

<img width="1258" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/8a147d44-fd3d-2856-ee5d-3288a0f82495.png">


#■オンプレミス側：Client設定
オンプレミス側ClientにLoad Balancerを経由してATPにアクセスするため、Load BlancerのIP AddressをATPのホスト名でアクセスできるように設定

##●/etc/hosts設定
 /etc/hostsへLoad BlancerのIP AddressをATPのホスト名へ設定

```shell-session
	[oracle@test-Inst01 ~]$ cat /etc/hosts
			10.0.0.8 adb.test.oraclecloud.com adwc.test.oraclecloud.com
```

##●ping接続確認
ATPのホスト名でLoad Blancerへ疎通できることを確認

```shell-session
	[oracle@test-Inst01 ~]$ ping adwc.test.oraclecloud.com -c 3
			PING adb.test.oraclecloud.com (10.0.0.8) 56(84) bytes of data.
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=1 ttl=62 time=53.1 ms
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=2 ttl=62 time=53.2 ms
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=3 ttl=62 time=53.1 ms

			--- adb.test.oraclecloud.com ping statistics ---
			3 packets transmitted, 3 received, 0% packet loss, time 2002ms
			rtt min/avg/max/mdev = 53.166/53.185/53.212/0.189 ms

	[oracle@test-Inst01 ~]$ ping adb.test.oraclecloud.com -c 3
			PING adb.test.oraclecloud.com (10.0.0.8) 56(84) bytes of data.
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=1 ttl=62 time=54.2 ms
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=2 ttl=62 time=54.2 ms
			64 bytes from adb.test.oraclecloud.com (10.0.0.8): icmp_seq=3 ttl=62 time=54.3 ms

			--- adb.test.oraclecloud.com ping statistics ---
			3 packets transmitted, 3 received, 0% packet loss, time 2002ms
			rtt min/avg/max/mdev = 54.251/54.284/54.329/0.193 ms
```

#■ATP接続テスト
OnPのClientにSQLclを設定してATPへ接続確認します

##●Internetに接続できないことを確認

```shell-session
[oracle@test-Inst01 ~]$ ping google.com
	PING google.com (172.217.20.78) 56(84) bytes of data.
	^C
	--- google.com ping statistics ---
	8 packets transmitted, 0 received, 100% packet loss, time 7151ms
```

##●ATP接続確認

```shell-session
		[oracle@test-Inst01 ~]$ ~/oracle/sqlcl/bin/sql /nolog

		SQLcl: 火 2 19 13:30:14 2019のリリース18.4 Production

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


		SQL> set cloudconfig /home/opc/oracle/Wallet_ATP001.zip
		操作は正常に完了しました。
		操作は正常に完了しました。
		Using temp directory:/tmp/oracle_cloud_config3565512044165054504

		SQL> connect ADMIN@ATP001_HIGH
		パスワード (**********?) ********************
		接続しました.

		SQL> select NAME from v$pdbs;

		NAME
		---------------------------------------------
		TEST_ATP001

```