Azure と OCI を 専用線 (ExpressRoute / FastConnect) でつなぐ👍👍

こんにちは、やまぱんです。

こんにちは、アーキテクトのやまぱんです。
補足コメントや質問、<font color="red">いいね、拡散</font>、是非お願いします🥺！
間違ってたら<font color="red">優しく</font>教えてください！

今回は、Azure の ExpressRoute (プライベート接続) の検証環境をつくるため OCI と連携してみました。
特に普段 Azure 使ってる側の立場で書いてみました。

触らなくてもイメージしやすいように画面ショットは豊富に入れたつもりです。
もしかしたら逆に多くて見にくいかもしれません。
最後に RTT も ExpressRoute - FastConnect 経由と、Public IP 経由 とで比較してました。

-----------------------------------------------------------
さて、はじめましょう！！
いきなりですがここで注意点😲❣
「私は以前この検証をするぞ！！」と意気込んで OCI アカウントを Osaka リージョン を指定して Oracle Free Tier アカウント を作ってしまいました。**Tokyo リージョンで作りましょう。**

https://www.oracle.com/jp/cloud/free/

**結論からいうと OCI Osaka リージョン では今回の検証はできません。**
詳細後述します🤞

# モチベ
通常 ExpressRoute の検証はプロバイダーとの契約が必要だったり、敷居が高いのですが、OCI を使うことで自宅にいながら UI 操作のみでできるようになりました。
このことに関しては下記の記事でも触れられています。
下記で書かれている。**「Oracle Cloud Infrastructure FastConnect (L3: Private Peering)」** が今回の内容にあたります。

https://zenn.dev/microsoft/articles/expressroute-lab-environment

そもそもの ExpressRoute についてはこちらが参考になります。

https://atbex.attokyo.co.jp/blog/detail/28/

今回のシナリオに関する MS 公式ドキュメント

https://learn.microsoft.com/ja-jp/azure/virtual-machines/workloads/oracle/configure-azure-oci-networking

# やりたいこと
一言で言えば 「Azure と OCI を専用線で接続して、プライベート接続を実現したい」です。

簡単にいつもながらの大変恐縮なフリーハンドな図を起こすとこんな感じの環境を作りたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/77bb7956-11b3-5d36-7a58-7a98859606f3.png)
*Subnet は省略、Public IP アドレスも省略してます

# ざっくり用語解説
もしかしたら正確さにかけるかもしれませんが、以下のような理解です。
+ ExpressRoute： Azure の専用線接続サービス、ExpressRoute 回線や ExpressRoute Circuit も本記事の中では基本的に同じものを指します。
+ FastConnect ： OCI の専用線接続サービス
+ VNet： Azure の上のプライベートネットワーク
+ VCN ：VCN(Virtual Cloud Network)、 OCI の上のプライベートネットワーク
+ 仮想ネットワークGW(ERGW) ： Azure の仮想ゲートウェイサービス。仮想ネットワークゲートウェイの種類の一つに ERGW (ExpressRoute Gateway)がある。
+ DRG：OCI の仮想ゲートウェイサービス。動的ルーティング・ゲートウェイ(Dynamic Routing Gateway)

# 前準備

## OCI アカウントの準備
以下から **Tokyo リージョン** を指定してアカウントを開設する。
結構アカウント開設にはクセがあります。
氏名・住所などは 半角英語で入力しましょう。
クレカの入力とかのところで一度はつまるはず。
ちなみにサポートに問い合わせしても、解決しませんでした😢

https://www.oracle.com/cloud/free/

下記にアカウント作成向けの記事もありますので紹介しておきます。

https://qiita.com/fufukuku/items/af58e01ec0ee93f063b0

## Azure アカウントの準備
こちらは普段から  Azure  を利用しているので割愛します。
以下参考になるかも。
ただし VPNGW は無料サービスの中にありますが、ERGW はないので無料アカウントでは使えないかもしれません。

https://azure.microsoft.com/ja-jp/free/search/


# 環境構築 

## Azure ひな形環境の構築
今回まず、[こちら](https://github.com/aktsmm/Iac/tree/main/07_1Vnet-2VM)でひな形環境を作りましたが、Azure Portal で手動で好きに作っていただいても構いません。

[![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Faktsmm%2FIac%2Fmain%2F07_1Vnet-2VM%2Fmain.json)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/1bfef8d7-d378-44c4-682d-4c6aebeb2d88.png)


+ ひな形環境概要
> 1つのリソースグループに 1 つの Vnet をデプロイして、 同じサブネットに 2 つの VM (Windows と Ubuntu) をデプロイします
今回は主に Ubuntu を利用します。

以下今回のひな形環境情報
+ リソースグループ：RG-ER-test
+ VNet：VNet-Hub (10.100.0.0/16) , Subnet：Hub-Subnet (10.100.1.0/24)
+ VM (Ubuntu) : Hub-Ubu , Private IP：10.100.1.5 , Public IP : 4.216.97.253
+ VM (Windows) : Hub-Win , Private IP：10.100.1.4 , Public IP : 4.216.97.246
+ NSG : Subnet(Hub-Subnet) に紐づけている

Ubuntu に SSH して apt update しておきます。
```powershell:apt update
 sudo apt update
```

##  OCI ひな形環境の構築
こちらは手動で 1つの VM をつくります。

### 秘密鍵と公開鍵の作成
OCI の VM は ID / password 認証ができないみたいなので準備します。

以下コマンドで作成できます。
VM 作成時に ".pub の方"(公開鍵) をアップロード、 ".pub がつかない方"(秘密鍵) は ssh する際に使います。

```powershell:秘密鍵と公開鍵の作成
cd 【秘密鍵と公開鍵を生成したい場所】
ssh-keygen -q -t ed25519 -C '' -N '' -f id_rsa
```
参考実行画面ショット
![参考画面ショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2db34d6d-e458-47a1-76ae-1b7ba8b9857f.png)


### OCI VM の作成
+ ハンバーガーメニュ → 左ペインのメニューから コンピュート → インスタンス  より作成
下記のように作成します。
OS は Ubuntu 、ここで先ほど作成した .pub ファイルをアップロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/83eeb0a3-513a-8b31-009b-ad0526c70d00.png)

作成完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d8a33742-53e6-9d23-fc9e-79f8541c6410.png)

以下 OCI VM の情報
+ OS：Ubuntu 20.04
+ Public IP：138.3.208.58
+ Private IP：10.0.0.212
+ VCN (Virtual Cloud Network) : vcn-20240228-1242 (10.0.0.0/16)
*これはここからは確認できません。VCN の画面から確認
+ サブネット:subnet-20240228-1242　
+ ホスト名 : wm-oci-ubu
+ ユーザー名：ubuntu

### 接続確認

先ほど作成した、秘密鍵を指定して SSH できること確認
```powershell:秘密鍵を使ったSSH
ssh -i .\id_rsa ubuntu@138.3.208.56
```
参考画面ショット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/6db37b9a-2ad4-825a-97cd-85aa3599a52c.png)


ついでに apt-update しておきます。
```powershell:apt update
 sudo apt update
```

## Azure : ExpressRoute (ExpressRoute Circuit) 回線の作成 
 Azure 側で ExpressRoute を作ります。
 イメージとしては **[Azure VM**  → **ERGW(仮想ネットワークGW)** → **ExpressRoute回線(ExpressRoute Circuit)**]  といった接続イメージになります。

+ Azure Portal でExpressRoute で検索して、ExpressRoute circuits 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/940d72a5-eb23-f439-d210-70e1c570b652.png)

+ 作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d0502db2-8c7c-fa4c-b2ed-7579ca04edea.png)

+ 下記のような感じで作成、検証用なのでなるべく廉価に
必ず 東京リージョン、**Japan East** で作りましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/fd7bdbb0-c484-44f4-973a-0a1b774bfd49.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/acf26267-13c8-fdd5-2d39-9ed8ce41338a.png)

+ 数分でデプロイ完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/68ef2ce2-66ee-48d3-16de-d5ae91ff4acf.png)

+ 作成されたリソースを確認
**サービスキーをメモしておきます。**
OCI 側の設定に必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/90d3cbe1-7006-4c4b-08f2-56aefbb03903.png)


## OCI : DRG (Dynamic routing gateway) の作成とアタッチ
DRG は Azure でいうところの 仮想ネットワーク GW / ERGW 

+ ハンバーガーメニュ → 左ペインのメニューから ネットワーキング → 動的ルーティング・ゲートウェイ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2b0ee18e-5c27-9046-25e0-a8bbdc4808eb.png)

+ 動的ルーティング・ゲートウェイの作成 より以下のように作成
 名前 : DRG-ER
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/7f70a6e9-3cd5-cb50-94f8-64c1f746425a.png)

+ DRG (Dynamic routing gateway) を VCN (Virtual Cloud Nerwork) にアタッチ
作成した DRG の左ペインのメニュー → 仮想クラウド・ネットワーク・アタッチメント → 仮想クラウド・ネットワーク・アタッチメントの作成
以下のように作成
 添付名 オプション: VCN-attach01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/93fecda8-1491-30e7-ac3e-5a7c65b18d4a.png)

+ 以下のように作成が完了する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2164d15e-c4d1-4883-a158-15382234bb7e.png)

## Fast Connect の作成
続いて Fast Connect の作成です。(Azure でいうところのExpressRoute Circuit / 回線)
+ ハンバーガーメニュ → 左ペインのメニューから ネットワーキング → FastConncet より作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/44c1d2d0-de61-2722-60d4-612ea24c1be4.png)

+ Fast Connect - 接続の作成 - 接続タイプ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/590f3a1a-6be4-f485-6549-6f6ca66cf7f4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e3de78e1-81fe-7f0f-e4e6-6ded1b32ff71.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ec4963f5-098a-4cd0-cc7b-c6e2215c9218.png)


:::note warn
注意：ここで Osaka リージョンで OCI フリーアカウントを作っている場合は ”Micorosoft Azure : ExpressRoute” が選択できません。
フリーアカウントの場合、アカウントの作り直しか、Tokyo リージョンで作った人のアカウントに招待してもらう必要があります。（ちなみに、アカウントの作り直しは何度もトライしましたがカードのところで躓いてしまい出来ませんでした)
![c478b1a6dedb96603a486610161ab963-1024x412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/3d3d3c0b-b07e-5d3c-6015-d817db53486b.png)

+ Microsoft Azureへのアクセス
https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/azure.htm
![2023-11-07_16h35_03-1024x410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/385e9c1e-ded9-514b-e352-a0728c160896.png)

+ Oracle Cloudコンソール・ユーザーの追加
https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/Content/applications-manager/add-apps-users.htm
:::

+ Fast Connect - 接続の作成 - 構成
ここで Azure の ExpressRoute の画面で確認したサービスキーを入力、任意のIPアドレスを入力します。
今回は以下のように入力。そして **[作成]** をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f8370596-de13-a4e9-0112-562c5252225b.png)

+ Fast Connect の完成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/44b0e39a-d02c-b3ad-134b-494c32f29e1c.png)

数分～10分ほど待つと、ライフライクル状態が プロビジョニング済に変わる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/70f475f3-e5ba-6f81-67bc-b9ade505d0b0.png)

+ Azure Portal での ExpressRoute (Circuit / 回線) の概要画面の確認
プロビジョニング済 になっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/fd102294-b18a-4a3d-dfed-b927dab9ddf6.png)


これ (プロビジョニング済) で OCI (の FastConnect) と Azure (のER 回線) 自体は専用線で接続されました。が、まだ VM 同士は疎通できません。**ポンチ絵の太い部分がつながったに過ぎません。**

## Azure : 仮想ネットワーク GW (ERゲートウェイ) の作成
VNet GW (ExpressRoute(ERGW))を作成し、VNnetとExpressRoute 回線をつなげます。

+ Azure Portal  から VNGW を検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/5196d914-33f5-35a8-5f0b-060612819ff2.png)

+ 仮想ネットワークは事前に作成していた VM が存在するネットワークを指定して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/9f27d9be-0fba-dd4a-a348-915abc28eebc.png)

>サブスクリプション XXXXXX-XXX-Ext
リソース グループ RG-ER-test
名前 ER-GW-OCI
地域 Japan East
SKU Standard
仮想ネットワーク Vnet-Hub
サブネット GatewaySubnet (10.100.0.0/24)
ゲートウェイの種類 ExpressRoute

+ デプロイが進行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e2a51f8e-ce7e-2dc2-e700-c2b510dcb888.png)

:::note 
ちなみにどれくらいかかるかというと、今回**およそ 20 分今回かかりました。**
トイレに行くなり、ストレッチするなり、コンビニいくなりすると良いでしょう。
もちろんその都度時間はかわりますし、SKUなどによっても時間は変化します。
OCI 側 の DRG の作成に比べて結構時間がかかります。
:::

+ デプロイが完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/3f57a817-d8bf-0800-3623-3377af68c8db.png)

+ 作成された 仮想ネットワーク GW (ERGW) の画面
ゲートウェイの種類：ExpressRoute  になっていることが分かります。
余談ですが、ERGW も Windows ベースのVMで動いてます。(実態としてVMは見えないです)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d36dcc0c-d3bb-6f9f-d7d0-c09fe7ad174f.png)

+ 仮想ネットワーク (VNet-Hub) の画面
仮想ネットワークゲートウェイに必要な専用サブネット (GatewaySubnet) が作成されています。
明示的にあらかじめ作っておかなくても自動で作ってくれていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/16f003c0-1418-e507-2eb1-8467cf59d6ff.png)

・ゲートウェイ サブネット - ExpressRoute の仮想ネットワーク ゲートウェイについて

https://learn.microsoft.com/ja-jp/azure/expressroute/expressroute-about-virtual-network-gateways#gwsub

## Azure : 仮想ネットワーク GW (ERゲートウェイ) と ExpressRoute 回線 との接続
下記の要領で接続します。

+ ERGW の左ペインから「接続」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/32325db4-1e75-f1a8-34eb-c7b675cec547.png)

+ 下記のように入力して作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/142fe7b9-9ea4-d6e1-2f2e-01aa6b11cf73.png)

+ デプロイ
1~2分で完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e7d60ccb-356d-43ec-46b6-038479a6a4db.png)

+ 完了確認
 ”状態” が Scceeded になっていれば OK ✌✌
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ac4c5421-a789-2030-c02c-43a3fa21c542.png)

## ルーティングと FW 設定
これで経路的にはつながったはずなのであとはルーティングやファイアウォールまわりの設定です❣❣
### Azure 側

+ OCI 側の確認

ここで設定するにあたり、OCI 側の設定を確認します。
ハンバーガーメニュ → 左ペインのメニューから ネットワーキング → ネットワーキング・ビジュアライザを確認しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/c4f5fd3b-fd2f-136f-7d04-d40ce9621ed7.png)

OCI 側 の IP レンジが 10.0.0.0/16 であることが分かります。（デプロイ時に確認してますが念のため)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f9bcb565-96ef-14ed-47dc-764c2e5268b0.png)

+ ルーティングの設定の確認
Azure 側からこのアドレス帯に対する通信が ERGW (から ExpressRoute 回線) に向くように設定されているか確認します。
参考サイトの方ではルートテーブルを作成して紐づけていますが、実際にはルートテーブルの作成は不要です。
 Azure 側の ERGW が存在する任意の仮想マシンの NIC から下記のように確認すると、OCI のセグメントに対するルーティング情報が入ってることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2b0fe889-31ff-ea8e-4c94-798685f217cf.png)

+  NSG の設定
後の検証のために、OCI VM の Public IPを許可しておく。
ERGW からの通信は VirtualNetwork の通信に含まれているので許可されているので明示的に許可する必要ない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e5b47d92-bec5-2ad5-755e-1247729c8bae.png)

:::note
> VirtualNetwork:
仮想ネットワーク アドレス空間 (仮想ネットワークに対して定義されているすべての IP アドレスの範囲)、すべての接続されたオンプレミスのアドレス空間、ピアリングされた仮想ネットワーク、仮想ネットワーク ゲートウェイに接続された仮想ネットワーク、ホストの仮想 IP アドレス、およびユーザーが定義したルートで使用されるアドレス プレフィックス。 このタグには、既定のルートも含まれる場合もあります。
+ 利用可能なサービス タグ
https://learn.microsoft.com/ja-jp/azure/virtual-network/service-tags-overview#available-service-tags
:::
### OCI 側
+ まずは Azure 側のネットワークを確認します
今回のリソースグループ RG-ER-test  から Vnet Hub を選択します。
Azure 側の NW レンジは **10.100.0.0/16** であることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/0e1317b2-304b-178c-23fa-60528d8a7e3f.png)

+ Azure 側へのルーティングの設定
ハンバーガーメニュ → 左ペインのメニューから ネットワーキング → 仮想クラウドネットワーク → 今回のネットワークルート表をクリックして、 ルート・ルールの追加 をクリック
以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/090cdf39-ce92-1c86-9016-ded1f0f8d9cc.png)

+ セキュリティルールの追加
Azure 側の NW を追加 ＆ Azure VM (Ubuntu) のPublic IPを追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/87a8e502-733a-cb26-bf73-31dbb15bd251.png)

## 疎通確認 (Ping)
左が OCI 側 VM (10.0.0.212) 、Azure 側 VM (10.100.1.5) にそれぞれ SSH して、お互いに ping を打ったところです。無事に Private IP で疎通できていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/53f19b0d-bd34-6d12-78ba-88c6c71f0686.png)




## ExpressRoute - FastConnect 経由 と Public IP 経由 の RTT 比較
ついでなので、RTT 比較をしてみたいと思います。

ここで IP アドレスの確認
*時間をおいて再起動したので Public IP が変わっています
必要に応じて、ファイアウォール (NSGなど)や OS 内部のFW などの設定をします。

+  OCI側 VM
Public IP：138.3.208.56
Private IP：10.0.0.212
+  Azure 側 VM：
Public IP：74.226.153.212
Private IP：10.100.1.5

なお、[参考記事](https://qiita.com/tokawa-ms/items/bf0784fd00cbe88d8663)にもあるように、**Azure VM の RTT を図るのに Ping を使用すべきではありません！**
なので今回は **netperf** コマンドを使います。

それぞれの Azure VM  で apt update & netperf のインストール をしておきます。

```powershell:apt update & netperf のインストール
 sudo apt update
 sudo apt-get install netperf
```
```powershell:netperf コマンド
netperf -t omni -H (宛先IPアドレス) -- -d rr -T TCP -k MIN_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,MAX_LATENCY,STDDEV_LATENCY
```

**今回は OCI VM → Azure VM のRTT を ExpressRoute 経由 と Public IP 経由 の RTT 比較します。**

```bash: netperf / Public IP 経由 (74.226.153.212 宛)
ubuntu@vm-oci-ubu:~$ netperf -t omni -H 74.226.153.212 -- -d rr -T TCP -k MIN_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,MAX_LATENCY,STDDEV_LATENCY
OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 74.226.153.212 () port 0 AF_INET : demo
MIN_LATENCY=2652
MEAN_LATENCY=3064.89
P90_LATENCY=3323
P99_LATENCY=4650
MAX_LATENCY=9384
STDDEV_LATENCY=418.75
```

```bash: netperf / ExpressRoute - FastConnect 経由 (10.100.1.5 宛)
ubuntu@vm-oci-ubu:~$ netperf -t omni -H 10.100.1.5 -- -d rr -T TCP -k MIN_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,MAX_LATENCY,STDDEV_LATENCY
OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.100.1.5 () port 0 AF_INET : demo
MIN_LATENCY=2683
MEAN_LATENCY=3179.26
P90_LATENCY=3473
P99_LATENCY=4700
MAX_LATENCY=15167
STDDEV_LATENCY=437.48
```

>Public IP経由 (74.226.153.212宛)への結果：
最小レイテンシー: 2652 μsec
平均レイテンシー: 3064.89 μsec
**90パーセンタイルのレイテンシー: 3323 μsec**
99パーセンタイルのレイテンシー: 4650 μsec
最大レイテンシー: 9384 μsec
標準偏差のレイテンシー: 418.75 μsec

>ExpressRoute - FastConnect 経由 (10.100.1.5宛)への結果：
最小レイテンシー: 2683 μsec
平均レイテンシー: 3179.26 μsec
**90パーセンタイルのレイテンシー: 3473 μsec**
99パーセンタイルのレイテンシー: 4700 μsec
最大レイテンシー: 15167 μsec
標準偏差のレイテンシー: 437.48 μsec

***1 μsec / マイクロ秒 = 0.001 ms / ミリ秒**

これらの結果から、今回 Public IP経由のネットワーク経路がExpressRoute - FastConnect経由よりも低いレイテンシーを示しています。しかし、ExpressRoute - FastConnect経由の方が最大レイテンシーが高く、標準偏差も大きいことが分かります。
有意な差かどうかは微妙なところです。

#  参考
+ Microsoft Azure と Oracle Cloud を Cross-Cloud 接続してみてみた 
こちら オラクルの方が書いてくださっている記事です。
今回非常に参考させていただきました✨✨✨
UI が当時と変わっていたり、実際には RTテーブルや NSG の設定など (現在の) Azure 側では不要な手順など一部もあります。

https://qiita.com/shirok/items/8a6aa561daa6789fa012


+ Azure 仮想マシン 高速ネットワーク 概要 ~ Azure VM 間の RTT 測定に ICMP を使ってはいけない ~
当初 Ping で RTT 測定をしていたんですが、親愛なる仲間に **「それはあかんで」** と教えていただき、その時に参照として教えてもらった記事になります。
こちらの記事をみて Ping で実施していた RTT 比較をやり直しました。
 **簡単にいうと (少なくとも Azure) VM ではTCP は優先されてるから TCP で RTT しましょう。**


https://qiita.com/tokawa-ms/items/bf0784fd00cbe88d8663

> Azure の仮想マシンでは、VM 間の TCP の通信も内部的には UDP に近い低遅延のプロトコルに変換されているということ。一方、TCP/UDP の枠組みでないプロトコルは高速化対象ではないため、通常の NIC を介して通信されているようです。


+ ExpressRoute 導入の流れを確認してみる
こちら、より具体的に ExpressRoute の導入のイメージがつきやすい記事になっています。

https://zenn.dev/microsoft/articles/expressroute-getstart

+ ssh-keygenを用いて秘密鍵と公開鍵を作る（Windows10とLinuxの違い）

https://qiita.com/overflowfl/items/14a2486df85fd7efac85

+ Azure OCI Interconnect (相互接続)でつないでみた

https://qiita.com/takeokams/items/8187cd6ba38c4e5872bb



+ Azure CAF にはマルチクラウド構成時のネットワークガイダンスあるよ

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-other-providers

特に OCI ならこれだよ

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/connectivity-to-other-providers-oci

+ ExpressRouteで障害が発生する可能性のあるポイントとその対応策

https://atbex.attokyo.co.jp/blog/detail/99/

+ netperf の使い方

https://qiita.com/shirok/items/f5083a90d1ba81563c9d

+ netperf のドキュメント

https://hewlettpackard.github.io/netperf/doc/netperf.html

+ Latte と SockPerf を使った方法について ｍｌ
https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-network-test-latency?tabs=windows


# 謝辞
この記事を出すにあたり、コメントをいただいた親愛なる仲間 (S 氏) に感謝します。
また、Osaka リージョン で OCI アカウントを作ってしまい、OCI アカウントの作り直しも弾かれて、途方に暮れていた私に OCI アカウントを作ってかしてくれた K 氏にも大変感謝です。