Oracle Analytics CloudからのDataGatewayを介した、Azure上のSQL ServerへのFastConnect接続～前編～


#●目的


Azure上のデータをOracle Analytics Cloud (以下OAC) でインターネットを経由せずに参照することを目的としました。Azure-OCI間をFastConnectで接続し、Oracle Service NetworkからAzureインスタンスにアクセスします。
前半では、Azure-OCI間の相互接続までを記載します。なお、DataGatewayインストール ～ OACからのリモート接続を参照したい方は[後編][link-1]をご覧ください。
[link-1]:https://qiita.com/k20nozawa/items/c8d052cd72c1fc7e99be



#●構成

- 環境情報
    - Oracle Linux 7.8
    - Windows server 2019
    - SQL Server 2017


OCI-Linuxにインターネットゲートウェイを介してSSH接続し、サーバの環境設定を行う。Azure-OCI接続では、OCI-LinuxにインストールするDataGateway経由でAzureリソースへ到達するためにOCI側のインスタンスにはセカンダリvNICを追加する。

- 構成イメージ
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/7b644622-ca22-7a51-e5a4-7c9466ff58d5.png)



#●FastConnectリージョン対応に関して
リージョン間でFastConnect接続できる組み合わせは、2020/11/1 時点では以下のものに制限されているので注意が必要。

~~~
Azure 米国東部 (EastUS) ～OCI アッシュバーン、VA (米国東部)
Azure 英国南部 (UKSouth) ～OCI ロンドン (英国南部)
Azure カナダ中部 (CanadaCentral) ～OCI トロント (カナダ南東部)
Azure 西ヨーロッパ (WestEurope) ～OCI アムステルダム (オランダ北西部)
Azure 東日本 (JapanEast) ～OCI 東京 (東日本)
~~~

Azureを米国東部、OCIをアッシュバーンとして接続検証を行った。

#●Azure-OCIの相互接続

###1. Azure側の構築


**前提条件**
Azure上に仮想ネットワーク、仮想マシン用サブネット、仮想マシン（Windowsサーバ）を作成済みであること。


####1-1. ルート表の作成
ルートテーブル、ルート表の順に作成し、OCIのVCNのアドレス範囲を指定する。

~~~
リージョン：米国東部
名前：任意（ここでは、rt-azure-oci）
ゲートウェイのルートを伝達する : Yes
~~~

![RT_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/8de05dc4-fe03-8bd3-4dc7-ce17be838b0b.png)
デプロイ完了後、作成したリソースに移動し、[設定]＞[ルート]＞ [＋追加] でOCIへのルーティングを作成する。

~~~
ルート名：任意のルート名（rt-rr-azure-oci）
アドレスプレフィックス：OCIのVCNのアドレス範囲（10.0.0.0/16）
次ホップの種類：仮想ネットワークゲートウェイ
~~~

####1-2. ゲートウェイサブネットの作成

ゲートウェイを配置するためのサブネットを作成する。
[リソースの作成]＞[仮想ネットワーク]＞[作成した仮想ネットワーク]＞[サブネット]＞[＋ゲートウェイサブネット] の順に進み、作成する。

~~~
サブネットアドレス範囲：重複しないアドレスを入力する。（ここでは、192.168.1.0/27）
NATゲートウェイ：なし
ルートテーブル：作成したルートテーブルを選択
サービス：Microsoft.Sql
サブネットをサービスに委任：なし
~~~
![sb_gw_Azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/3be0323b-d2b3-fdd7-81eb-0eb9e89de8fc.png)


####1-3. 仮想ネットワークゲートウェイの作成

GatewaySubnetに仮想ネットワークゲートウェイを作成する。
[リソースの作成]＞[仮想ネットワークゲートウェイ]＞[＋追加]で進み、仮想ネットワークゲートウェイを作成する。

~~~
名前：任意のインスタンス名（gw-ue-azure-oci）
地域：米国東部
ゲートウェイの種類：Express Route
SKU：Standard
仮想ネットワーク：仮想ネットワークを選択（ここでは、vnet-usa-east）
パブリックIP：新規作成 (ここでは既存のものを使用している)
パブリックIPアドレス名：任意のIPアドレス名（ここでは、ip-gw）
アクティブ/アクティブモードの有効化：無効
BGP ASNの構成：無効

~~~

作成。デプロイに時間がかかる。。。。（２０分弱）
![gw_azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/c25675d7-ad7e-1f30-139d-273210dd6da6.png)



####1-4. 受信規則の設定

OCIのVCNからAzureインスタンスに接続するための受信規則を設定する。
[作成したインスタンス名]＞[ネットワーク]＞[受信ポートの規則]＞[受信ポートの規則を追加する]

~~~
名前：任意（ここでは、OCI。）
ポート：1433
プロトコル：TCP
ソース：OCIのVCN（10.0.0.0/16）
~~~
![受信規則.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/3af606b1-d3a3-63e1-44e2-44044c819387.png)



####1-5. ExpressRoute回線の作成

OCIとの接続するのに使用する回線を作成する。
[リソースの作成]＞[Express Route circuit(回線)]＞[＋追加]

~~~
リージョン：米国東部
名前：任意（ここでは、er-azure-oci）
ポートの種類：プロバイダー
新規作成....：新規作成
プロバイダー：Oracle Cloud FastConnect
ピアリングの場所：Washinngton DC
帯域幅：１Gbps
SKU：Standard
課金モデル：従量課金制
クラシック操作：いいえ
~~~

![er_azure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/7eaa980b-6fbb-7ff2-e62f-17c8ec599a80.png)
必要事項を入力し作成。
FastConnect作成時に使用するため、デプロイ完了後のサービスキーを確認する。
![er-resource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/222aed1c-23b0-1869-0019-8f27190d00b9.png)
FastConnectにサービスキーを入力して作成することで認証され、プロバイダーの状態が、[未プロビジョニング]→[プロビジョニング中]→[プロビジョニング済み]と進行していく。




####1-6. 接続の作成

※「2-6. FastConnectの作成」でFastConnectを作成後、ライフサイクル状態が「プロビジョニング中」となってから行う。
デプロイしたExpressRouteからConnection（接続）を選択し、接続名、仮想ネットワークゲートウェイを選択し、作成。
ステータスが成功になれば完了。
![connection_status.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/27ab71f9-122d-bf4f-80ed-e2c10519484f.png)

###2. OCI側の構築

**前提条件**

・VCN（ここでは、vcn-dg（10.0.0.0/16））を作成済みであること。
・インスタンス(vm-oci (10.0.0.3) )を作成、OCIのインスタンス管理画面上でセカンダリvNICを追加していること。

####2-1. セカンダリvNICの設定
プライベートサブネット側のvNICの設定を行う。OCIのインスタンス管理画面上でセカンダリvNICを追加してもインスタンスには認識されていない仕様のため、インスタンスにsshでログインし、vNICを認識させる必要がある。

rootユーザになり、現在の設定を確認します。

~~~
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 02:00:17:0B:84:F5 brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.5/24 brd 10.1.0.255 scope global dynamic ens3
       valid_lft 52752sec preferred_lft 52752sec
3: ens5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:00:17:01:36:c5 brd ff:ff:ff:ff:ff:ff
~~~

ens5が今回追加したvNICで、ステータスがDOWNになっている。
永続的にvNICを稼働させるために設定ファイルの編集する。

~~~
# cd /etc/sysconfig/network-scripts/
# ls -l
-rw-r--r--. 1 root root   168 Oct 27 02:02 ifcfg-ens3
-rw-r--r--. 1 root root   254 Aug 19  2019 ifcfg-lo
lrwxrwxrwx. 1 root root    24 Sep 17 00:20 ifdown -> ../../../usr/sbin/ifdown
-rwxr-xr-x. 1 root root   654 Aug 19  2019 ifdown-bnep
・・・・・・・・・
~~~
ifcfg-<デバイス名>がvNICの設定ファイル。
既存のifcfg-ens3をコピーし、ifcfg-ens5を作成、編集する。

~~~
# cp /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-ens5
~~~
ens3の設定ファイルを参考に編集する。

~~~
# vi ifcfg-ens5
NAME="ens5"　
DEVICE="ens5"
ONBOOT=yes
NETBOOT=yes
HWADDR=00:00:17:01:36:C5
BOOTPROTO=static
PREFIX=24
IPADDR=10.0.1.2
MTU=9000
TYPE=Ethernet
NM_CONTROLLED=no
~~~

編集後、サーバを再起動することで完了。

~~~
# reboot
~~~ 

vNICが認識されているか確認。

~~~
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 02:00:17:0b:84:f5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.3/24 brd 10.0.0.255 scope global dynamic ens3
       valid_lft 85269sec preferred_lft 85269sec
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 00:00:17:01:36:c5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.2/24 brd 10.0.1.255 scope global ens5
~~~

ステータスがUPされているので問題なし。

####2-2. インスタンスのルーティングの設定
ens3、ens5ともにルーティング設定をする。
まず初めに現在のルーティングを確認する。

~~~
$ routel
         target            gateway          source    proto    scope    dev tbl
        default           10.0.0.1                                     ens3
      10.0.0.0/ 24                        10.0.0.3   kernel     link   ens3
      10.0.1.0/ 24                        10.0.1.2   kernel     link   ens5
   169.254.0.0/ 16                                   static     link   ens3
   169.254.0.0/ 16                                              link   ens3
   169.254.0.0/ 16                                              link   ens5
.............. 
~~~

**編集内容**
**ens3**
　　●インターネット（グローバルIP）からのルーティングを追加
**ens5**
　　●デフォルト・ゲートウェイをens3からens5に変更
　　●Azure側の仮想ネットワークへのルーティングを追加


/etc/sysconfig/network-scripts/にroute-<インターフェイス名>でファイルを作成する。       
〇**ens3のルーティング**

~~~
# cd /etc/sysconfig/network-scripts
# touch route-ens3
# vi route-ens3
~~~

↓↓ route-ens3に以下を記述。※xxx.xxx.xxx.xxxはグローバルIPアドレス。
~~~
xxx.xxx.xxx.xxx via 10.0.0.1 dev ens3
~~~
同様にens5のスクリプトも作成する。

〇**ens5のルーティング**

~~~
# touch route-ens5
# vi route-ens5
~~~
route-ens5に以下を記述。※192.168.0.0/16はAzure仮想ネットワークのIPアドレス。

~~~
192.168.0.0/16 via 10.0.1.1 dev ens5
~~~

続いてデフォルト・ゲートウェイをens5にする。

~~~
network-scripts]# vi ifcfg-ens5
~~~
ifcfg-ens5の最後の行に、GATEWAY=10.0.1.1を追加する。

~~~
.................
GATEWAY=10.0.1.1
~~~
サーバを再起動して設定を更新する。

~~~
# reboot
~~~

再起動後、ルーティングが反映されているか確認する。

~~~
$ routel
         target            gateway          source    proto    scope    dev tbl
        default           10.0.1.1                                     ens5 
      10.0.0.0/ 24                        10.0.0.3   kernel     link   ens3 
      10.0.1.0/ 24                        10.0.1.2   kernel     link   ens5
   169.254.0.0/ 16                                   static     link   ens3 
   169.254.0.0/ 16                                              link   ens3
   169.254.0.0/ 16                                              link   ens5 
..............
~~~
gatewayが「10.0.0.1」から「10.0.1.1」になっていることが確認出来たら完了。


####2-3. サービスゲートウェイの作成
[ネットワーキング]＞[作成したVCN]＞[リソース]＞[サービスゲートウェイ作成]

(VCN作成時にデフォルトで作成されている場合もある。)

~~~
名前：任意（ここでは、sg-connect-drg）
コンパートメント：所属させたいコンパートメント
サービス：All IAD Services In Oracle Services Network
~~~

####2-4. 動的ルーティングゲートウェイ (DRG) の作成
[ネットワーキング]＞[動的ルーティングゲートウェイ]＞[作成]。
ここはコンパートメントと名前を入力するだけ。
DRG作成後、VCN（ここでは、vcn-dg）にアタッチする。

~~~
名前：任意（ここでは、drg-connect-sg）
宛先CIDR : Azure仮想ネットワークのIPアドレス（ここでは、192.168.0.0/16）
~~~

####2-5. ルート表の作成
サービスゲートウェイ、動的ルーティングゲートウェイ、プライベートサブネットに関連付けるルート表を作成する。
[ネットワーキング]＞[作成したVCN]＞[リソース]＞[ルート表]＞[ルートルールの追加]。

〇**サービスゲートウェイ用ルート表**


以下のルート表を作成する。
宛先としてAzureの仮想ネットワークのアドレス範囲を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/c835e606-ca92-b757-b3dd-d2bb027e1443.png)

※作成後、サービスゲートウェイのリソースへ移動し、ルート表を関連付ける。


〇**動的ルーティングゲートウェイ用ルート表**


以下のルート表を作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/08085f0c-e7be-d537-4c15-d4951105d050.png)

※作成後、動的ルーティングゲートウェイのリソースへ移動し、ルート表を関連付ける。

〇**プライベートサブネット用ルート表**


以下のルート表を作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/20e3cc2c-427e-c27c-7bcf-8958b1ad5f95.png)


####2-6. セキュリティリストの作成
〇**プライベートサブネット用セキュリティリスト**

以下のセキュリティリストを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/0e6f48cc-27f7-e207-d8ec-065477bf8c94.png)



    
〇**パブリックサブネット用セキュリティリスト**

以下のセキュリティリストを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/a9a51a3c-8425-e87d-c86f-5d96fd33abca.png)

####2-7. FastConnectの作成
[ネットワーキング]＞[FastConnect]＞[作成]
パートナーとしてMicrosoft Azure:ExpressRouteを選択する。
![FastConnect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/c8495cd1-2efd-ce6e-4de3-691c206471c2.png)
次に進み、以下を項目の入力する。

~~~
名前：任意（ここでは、fc-oci-azure）
コンパートメント：作成するコンパートメント
仮想回線タイプ：プライベート仮想回線
動的ルーティングゲートウェイ：作成したDRGを選択（ここでは、drg-oci-azure）
帯域幅：Azure側で設定した値に合わせる。（１Gbps）
パートナーサービスキー：ExpressRouteで表示されているものを貼り付ける。（ ※「1-5. ExpressRouteの作成」を参照 ）
顧客プライマリBGP IPV4アドレス：10.200.0.22/30
ORACLEプライマリBGP IPV4アドレス：10.200.0.21/30
顧客セカンダリBGP IPV4アドレス：10.200.0.26/30
ORACLEセカンダリBGP IPV4アドレス：10.200.0.25/30

~~~

FastConnect作成後、ステータスが成功、BGP回線が稼働中になっていれば完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/bc0bb15e-4707-c478-cfa9-a060b44e66a4.png)


###3. 接続の確認
Azure (192.168.0.6) ⇔ OCI (10.0.1.2) で相互にping応答を確認する。

〇**OCI-Linux ⇒ Azure-Windowsに対して**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/2878080c-a2af-ab30-c1a7-1f7ce2cd9cee.png)

〇**Azure-Windows ⇒ OCI-Linuxに対して**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755575/88439e52-5397-8856-bacc-44129e302700.png)
それぞれで応答が確認できたので、接続成功。

[後編][link-1]では、DataGatewayインストール～OAC-SQL Serverの接続までを行う。
[link-1]:https://qiita.com/k20nozawa/items/c8d052cd72c1fc7e99be

#●参考
・Azure-OCI間接続 : https://docs.oracle.com/ja/solutions/learn-azure-oci-interconnect/index.html#GUID-A3BCA684-47C4-4644-90E8-99A7E3E0A6FE

・ExpressRoute作成 : https://docs.microsoft.com/ja-jp/azure/expressroute/expressroute-howto-circuit-portal-resource-manager