Oracle Cloud：プライベートサブネットからインターネットへアクセスさせてみてみた

#■NAT Gateway
Private Subnet上に配置したインスタンスのメンテナンス作業で、yum等のInternetを利用したパッケージのインストールやアップデートのメンテナンスを行いたい場合がありますが、Private Subnet内のインスタンスには Public IPを付与することができないため、インターネットにアクセスすることはできません。
NAT Gatewayは、Private Subnetからインターネットへのアクセスを可能にし、インターネットからのインバウンド接続を回避しセキュリティを向上させることができます。
<img width="1100" alt="NatGW.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/a5f05961-e084-0ef9-f21e-88eaa0279011.png">
NAT Gatewayは、単一の宛先アドレスおよびポートへの最大約20,000の同時接続をサポートします

#■本検証構成イメージ
Private Subnet で構成された インスタンスがInternetにアクセスできるよう NAT Gateway を構成します

<img width="1193" alt="NatGW構成2.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/e37d2320-d73c-d97c-e5d3-c4d2fa40e04f.png">


#■NAT Gateway作成
##●1. Service Gateway作成
①設定するVCNから「Service Gateways」を選択し、[Create Service Gateway]ボタンをクリックして、以下項目を設定し、[Create]ボタンをクリック

・NAME:適切な名前を設定し、[Create]をクリックして作成
<img width="598" alt="CreateNatGW1.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/5156fd56-6a22-450b-9f9c-3c29e2022c2d.png">


②NAT Gateway 確認
 NAT Gatewayが作成され NAT GatewayのPublic IP Addressを確認
<img width="449" alt="CreateNatGW2.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/90517702-d719-bf05-baa8-6f1cd5ed55f9.png">

##●2. Route Table 設定
①設定するVCNから、「Route Tables」を選択し、[Edit Route Rules]ボタンをクリックし、以下設定を行い[SAVE]をクリック

　・TARGET TYPE：「Nat Gateway」を選択
　・Destination CIDR Block：「0.0.0.0/0」 を選択
　・TARGET SERVICE GATEWAY：作成した Nat Gateway を選択

<img width="497" alt="Routetable1.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/6f1cb1eb-40a0-9ddf-7195-ae7f49c1eeea.png">

##●3. Security Lists(Firewall) 設定

①Private Subnet内のインスタンスがInternetにアクセスできるよう
Egress Rule を追加

　　・Destination CIDR：0.0.0.0/0
　　・IP Protocol：All Protocols

<img width="508" alt="SecurityList1.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/1ebe8f86-c886-dde9-40ba-cbaf8f09d17a.png">

#■Nat Gateway疎通確認
##●Nat Gatewayを停止してInternetアクセスできないことを確認
① Nat Gateway停止
・Nat Gateway画面で対象となるNat Gatewayを選択して、[Block Traffic]ボタンをクリック

<img width="932" alt="BlockTraffic.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/26dd346e-60f0-4097-ac05-cba11f01d48e.png">

・BLOKEDになったことを確認
<img width="952" alt="BlockTraffic_Blocked.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/23b202bf-1159-33b0-1aef-4e9b94c2db39.png">

②Internetアクセス不可能確認
・Public DNS(8.8.8.8) にpingを行いInternetアクセスできないことを確認

```shell-session
	[root@nat-test-inst01 opc]# ping 8.8.8.8 -c 3
		PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

		--- 8.8.8.8 ping statistics ---
		3 packets transmitted, 0 received, 100% packet loss, time 2086ms
```

##●Nat Gatewayを起動させてInternetアクセスできることを確認
① Nat Gateway起動
・Nat Gateway画面で対象となるNat Gatewayを選択して、[Allow Traffic]ボタンをクリック
<img width="946" alt="AllawTraffic.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/9fe8a5db-9e77-0650-ecc0-5ab489060fdd.png">

・AVAILABLEになったことを確認
<img width="449" alt="CreateNatGW2.png" src="https://qiita-image-store.s3.amazonaws.com/0/109087/eaf6dd61-5951-f6ad-9ff0-1206962f4b10.png">

これでNat Gateway 経由で インターネットへアクセスできるようになります

②Internetアクセス可能確認
・Public DNS(8.8.8.8) にpingを行いInternetアクセスできることを確認

```shell-session

	[root@nat-test-inst01 opc]# ping 8.8.8.8 -c 3
		PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
		64 bytes from 8.8.8.8: icmp_seq=1 ttl=122 time=19.4 ms
		64 bytes from 8.8.8.8: icmp_seq=2 ttl=122 time=1.80 ms
		64 bytes from 8.8.8.8: icmp_seq=3 ttl=122 time=1.84 ms

		--- 8.8.8.8 ping statistics ---
		3 packets transmitted, 3 received, 0% packet loss, time 2003ms
		rtt min/avg/max/mdev = 1.804/7.689/19.420/8.295 ms
```

③ yumでパッケージインストールできることを確認
・yum でnmapをインストール

```shell-session
		[root@nat-test-inst01 opc]# yum -y install nmap
			Loaded plugins: langpacks, ulninfo
			ol7_UEKR5                                                | 2.5 kB     00:00
			ol7_addons                                               | 2.5 kB     00:00
			ol7_developer                                            | 2.5 kB     00:00
			ol7_developer_EPEL                                       | 2.5 kB     00:00
			ol7_ksplice                                              | 2.5 kB     00:00
			ol7_latest                                               | 3.0 kB     00:00
			ol7_optional_latest                                      | 2.5 kB     00:00
			ol7_software_collections                                 | 2.5 kB     00:00
			Resolving Dependencies
			--> Running transaction check
			---> Package nmap.x86_64 2:6.40-16.el7 will be installed
			--> Processing Dependency: nmap-ncat = 2:6.40-16.el7 for package: 2:nmap-6.40-16.el7.x86_64
			--> Running transaction check
			---> Package nmap-ncat.x86_64 2:6.40-16.el7 will be installed
			--> Finished Dependency Resolution

			Dependencies Resolved

			================================================================================
			 Package          Arch          Version                 Repository         Size
			================================================================================
			Installing:
			 nmap             x86_64        2:6.40-16.el7           ol7_latest        3.9 M
			Installing for dependencies:
			 nmap-ncat        x86_64        2:6.40-16.el7           ol7_latest        205 k

			Transaction Summary
			================================================================================
			Install  1 Package (+1 Dependent package)

			Total download size: 4.1 M
			Installed size: 17 M
			Downloading packages:
			(1/2): nmap-ncat-6.40-16.el7.x86_64.rpm                    | 205 kB   00:00
			(2/2): nmap-6.40-16.el7.x86_64.rpm                         | 3.9 MB   00:00
			--------------------------------------------------------------------------------
			Total                                               30 MB/s | 4.1 MB  00:00
			Running transaction check
			Running transaction test
			Transaction test succeeded
			Running transaction
			  Installing : 2:nmap-ncat-6.40-16.el7.x86_64                               1/2
			  Installing : 2:nmap-6.40-16.el7.x86_64                                    2/2
			  Verifying  : 2:nmap-ncat-6.40-16.el7.x86_64                               1/2
			  Verifying  : 2:nmap-6.40-16.el7.x86_64                                    2/2

			Installed:
			  nmap.x86_64 2:6.40-16.el7

			Dependency Installed:
			  nmap-ncat.x86_64 2:6.40-16.el7

			Complete!
```

##●Internet上のサーバー(Web01)からtcpdumpでNAT Gateway のPublic IP で通信されることを確認
①OCIのサーバー(nat-test-inst01：10.0.10.2)から Webサーバー(web01:200.200.200.201)のPort 80へnping疎通確認

```shell-session
	[root@nat-test-inst01 opc]# nping 200.200.200.201 -p 80 --tcp -c 3

		Starting Nping 0.6.40 ( http://nmap.org/nping ) at 2018-12-06 06:44 GMT
		SENT (0.0197s) TCP 10.0.10.2:48824 > 200.200.200.201:80 S ttl=64 id=27434 iplen=40  seq=2963548057 win=1480
		RCVD (0.1006s) TCP 200.200.200.201:80 > 10.0.10.2:48824 RA ttl=60 id=47231 iplen=40  seq=0 win=0
		SENT (1.0198s) TCP 10.0.10.2:48824 > 200.200.200.201:80 S ttl=64 id=27434 iplen=40  seq=2963548057 win=1480
		RCVD (1.0815s) TCP 200.200.200.201:80 > 10.0.10.2:48824 RA ttl=60 id=47744 iplen=40  seq=0 win=0
		SENT (2.0216s) TCP 10.0.10.2:48824 > 200.200.200.201:80 S ttl=64 id=27434 iplen=40  seq=2963548057 win=1480
		RCVD (2.0832s) TCP 200.200.200.201:80 > 10.0.10.2:48824 RA ttl=60 id=47881 iplen=40  seq=0 win=0

		Max rtt: 80.819ms | Min rtt: 61.598ms | Avg rtt: 68.010ms
		Raw packets sent: 3 (120B) | Rcvd: 3 (126B) | Lost: 0 (0.00%)
		Nping done: 1 IP address pinged in 2.10 seconds
```

②Webサーバー(web01:200.200.200.201)上でtcpdumpを実施してNAT GatewayのPublic IP(100.100.100.101) からアクセスされていることを確認

```shell-session
	[root@web01 ~]# tcpdump -i eth0  -nn port 80
		tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
		listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

		06:44:45.543662 IP 100.100.100.101.3244 > 200.200.200.201.80: Flags [S], seq 2963548057, win 1480, length 0
		06:44:45.543693 IP 200.200.200.201.80 > 100.100.100.101.3244: Flags [R.], seq 0, ack 2963548058, win 0, length 0
		06:44:46.524599 IP 100.100.100.101.3244 > 200.200.200.201.80: Flags [S], seq 2963548057, win 1480, length 0
		06:44:46.524628 IP 200.200.200.201.80 > 100.100.100.101.3244: Flags [R.], seq 0, ack 1, win 0, length 0
		06:44:47.526367 IP 100.100.100.101.3244 > 200.200.200.201.80: Flags [S], seq 2963548057, win 1480, length 0
		06:44:47.526395 IP 200.200.200.201.80 > 100.100.100.101.3244: Flags [R.], seq 0, ack 1, win 0, length 0
```