[Oracle Cloud] FortiGate FortiWiFi で BGP + ECMP で IKEv2 IPSec VPN接続してみてみた

**[FortiGate次世代ファイアウォール（NGFW）](https://www.fortinet.com/jp/products/next-generation-firewall)** は、今日のハイブリッド環境でデータ、アセット、ユーザーを保護します。特許取得済みのフォーティネットのセキュリティプロセッサをベースに構築したFortiGate次世代ファイアウォールは、セキュリティとネットワークのパフォーマンスを加速し、データリッチトラフィックとクラウドベースのアプリケーションの増加に対応した効果的な保護が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/85d89106-8cc0-1928-01f8-d73be614aae4.png)
前回設定した Fortinet  [FortiWiFi](https://qiita.com/shirok/items/1db5d3beac27f4e39213) を使用して、Oracle Cloud Infrastructure (OCI) へ Site-to-Site VPN (IPSec) を IKEv2 (Internet Key Exchange version 2) と BGP（Border Gateway Protocol）+ ECMP(Equal Cost Multi Path) を使用して接続してみてみます。


# ■ 構成図
![構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/5b180982-ac49-dca6-f83c-72c88c30272f.jpeg)

FortiGate FortiWiFi の初期設定はこちらが参考になります。

https://qiita.com/shirok/items/1db5d3beac27f4e39213

# ■ サイト間VPNの設定
## ● 全体的なプロセス
サイト間VPNを設定するための[全体的なプロセス](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/settingupIPsec.htm)を次に示します。
ここでは、事前にｆまでしておき、今回は g.から設定を行います。
```
1. 開始する前にリストされたタスクを完了します。
	・参考: リストされたタスク: https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/settingupIPsec.htm#Before
 
2. サイト間VPNコンポーネントを設定します。
　　例) 概念実証サイト間VPNの設定: https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/settingupIPsec.htm#example_poc
	　a. VCN作成
	　b. DRG作成
	　c. DRGをVCNにアタッチ
	　d. DRGのルート表とルート・ルール作成
	　e. セキュリティ・リストおよび必要なルール作成
	　f. VCN内にサブネット作成
	　g. CPEオブジェクト作成し、CPEデバイスのパブリックIPアドレスを指定
	　h. CPEオブジェクトへのIPSec接続を作成し、必要なルーティング情報を指定
```
## ● サポートされているIPSecパラメータ
CPE側の設定は Oracleから掲示されている[サポートされているIPSecパラメータ](https://docs.oracle.com/ja-jp/iaas/Content/Network/Reference/supportedIPsecparams.htm)を使用して設定します。


# ■ OCI側設定
## ● CPEオブジェクト作成
このタスクでは、CPEデバイスの仮想表現であるCPEオブジェクトを作成

**1) OCIコンソール画面**
ナビゲーション・メニューを開き、[ネットワーク]をクリックします。[顧客接続]で、「顧客オンプレミス機器」をクリック
![01_CPE作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/1f2c2def-9270-6740-23a4-67095d219962.png)


**2) 顧客構内機器画面**
「顧客構内機器の作成」をクリック
![01_CPE作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/32ea0d8f-5c32-7a03-bc5b-e4c2606f96cd.png)

**3) CPEの作成画面**
次の値を入力し、[CPEの作成]をクリック
![01_CPE作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/78391b8a-bd97-56ac-fb5b-2591e89cb3e2.png)
```
    ・ 名前: CPEオブジェクトのわかりやすい名前
    ・ IPアドレス: VPNのユーザー側にある実際のCPE/エッジ・デバイスのパブリックIPアドレス(開始する前に収集する情報のリスト参照)
    ・ パブリックIPアドレス: VPNのユーザー側にある実際のCPE/エッジ・デバイスのパブリックIPアドレス(開始する前に収集する情報のリスト参照)
    ・ タグ: 必要に応じて後でタグを追加詳細は、リソース・タグを参照
```

**3) CPEの作成完了**

![01_CPE作成04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/c05b336d-4db1-d0bd-c64d-53ddccf09b65.png)
![01_CPE作成05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/fca2e1fc-15f0-2683-f11f-edb29a214a60.png)





# ● CPEオブジェクトへのIPSec接続の作成
このタスクでは、IPSecトンネルを作成し、それに対するルーティングのタイプ(BGP動的ルーティングまたは静的ルーティング)ここでは、BGP動的ルーティングを構成

**1) OCIコンソール画面**
ナビゲーション・メニューを開き、「ネットワーク」をクリックします。「顧客接続」で、「サイト間VPN」をクリック
![02_IPSec作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/fe0ff913-c4e8-5716-732a-e2d6a77f2e30.png)


**2) サイト間VPN画面**
「IPSec接続の作成」をクリック
![02_IPSec作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/9147c87d-0a52-7997-26f6-6b37fbff832b.png)


**3) IPSec接続の作成画面**
次の値を入力し、[IPSec接続の作成]をクリックして作成
※今回、拡張オプションを使用せず設定してみてみます。

```
IPSec接続共通設定
    ・名前: IPSec接続のわかりやすい名前を入力、後で変更できます
    ・コンパートメントに作成: VCNのコンパートメントを選択
    ・顧客構内機器: 事前に作成したCPEオブジェクトを選択
    ・CPE IKE識別子タイプ: Internet Key Exchange (IKE)がCPEデバイスの識別に使用する識別子のタイプを選択
    ・CPE IKE識別子: IKEがCPEデバイスの識別に使用する情報を入力
    ・動的ルーティング・ゲートウェイ・コンパートメント: DRGのコンパートメントを選択
    ・動的ルーティング・ゲートウェイ: 事前に作成したDRGを選択
    ・オンプレミス・ネットワークへのルート: このIPSec接続ではBGP動的ルーティングが使用されるため、空のままにします。以降のステップでは、BGPを使用するように2つのトンネルを構成します。
BGP用トンネル1:
    ・名前: トンネルのわかりやすい名前を入力、後で変更できます。
    ・カスタム共有シークレットの指定(オプション): デフォルトでは、Oracleによりトンネルの共有シークレットが指定されます。指定する場合は、このチェック・ボックスを選択して共有シークレットを入力します。共有シークレットは後で変更できます。
    ・IKEバージョン: このトンネルに使用するInternet Key Exchange (IKE)バージョン、ここでは「IKEv2」を選択
    ・ルーティング・タイプ: 「BGP動的ルーティング」を選択します。
    ・BGP ASN: ネットワークASNを入力
    ・IPv4トンネル内インタフェース - CPE: トンネルのCPE側にサブネット・マスク(/30または/31)を使用するBGP IPv4アドレスを入力
    ・IPv4トンネル内インタフェース - Oracle: トンネルのOracle側にサブネット・マスク(/30または/31)を使用するBGP IPv4アドレスを入力
BGP用トンネル2:
    ・名前: トンネルのわかりやすい名前を入力、後で変更できます。
    ・カスタム共有シークレットの指定(オプション): デフォルトでは、Oracleによりトンネルの共有シークレットが指定されます。指定する場合は、このチェック・ボックスを選択して共有シークレットを入力します。共有シークレットは後で変更できます。
    ・IKEバージョン: このトンネルに使用するInternet Key Exchange (IKE)バージョン、ここでは「IKEv2」を選択
    ・ルーティング・タイプ: 「BGP動的ルーティング」を選択します。
    ・BGP ASN: ネットワークASNを入力
    ・IPv4トンネル内インタフェース - CPE: トンネルのCPE側にサブネット・マスク(/30または/31)を使用するBGP IPv4アドレスを入力
    ・IPv4トンネル内インタフェース - Oracle: トンネルのOracle側にサブネット・マスク(/30または/31)を使用するBGP IPv4アドレスを入力
```
![02_IPSec作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/484411a9-c451-8b13-ae83-ea22fd66e664.png)

**4) サイト間VPN作成完了**
**・IPSec接続画面**
![02_IPSec作成05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/b915fab2-1554-12a6-de49-f9108b67eb8d.png)

**・CPEおよびトンネル情報画面**
![02_IPSec作成06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/dde4c409-088c-6562-7e2a-a272e7dae846.png)



# ■ FortiWiFi設定
## ● Tunnelインターフェース1つ目作成
**1) FortiWiFiコンソール画面**
FortiWiFiへログインし、[VPN] > [IPSec Wizard]をクリックし、次を入力し、[Next]をクリック
```
・Name : トンネル・インターフェースの名前を入力
・Tmplate type: [Custom]
```
![03_FortiWiFi-IPSec-Tunnel01作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e70e2e5e-1312-7c90-7bf7-1f19a77aaed9.png)


**2) New VPN Tunnel画面**
次を入力し、[OK]をクリックして作成
```:・Network項目
- NAME: IPSec Wizardで設定した名前が自動表示されます
- Remote Gateway: [Static IP Address]をクリック
- IP Address: OCI Tunnel01 のインターフェース・アドレスを入力
- Interface: Internet インターフェースを選択
- NAT Traversal: FortiWifiを NAT配下に配置せず直接Internet接続しているので[Disable]
- Deep Peer Detection(DPD): [On Demand]を選択
```
```:・Authentication項目
- Pre-shared Ley: OCI Tunnel01 で設定した値を入力
- IKE: [Verison 2]を選択
```
```:・Phase 1 Proposal項目
- Encryption: [AES256]
- Authentication: [SHA384]
- Diffie-Hellman Group: [5]
- Key LIfetime(Seconds): [28800]
```
```:・Phase 2 Selectors項目
- Name: IPSec Wizardで設定した名前が自動表示されます
- Local Address: [Subnet 0.0.0.0/0]を入力
- Remote Address: [Subnet 0.0.0.0/0]を入力
- Encryption: [AES256]を選択
- Autentication: [SHA1]を選択
- Enable Replay Detection: ☑️チェック
- Enble Perfect Forward Secrety(PFS): ☑️チェック
- Diffie-Hellman Group: ☑️チェック
- Auto-negotiate: ☑️チェック
- Autokey Keep Alive: ☑️チェック
- Key Lifetime: [Seconds]を選択
- Seconds: [3600]を入力
```
![03_FortiWiFi-IPSec-Tunnel01作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/25b01817-c936-5367-44d8-009e7ce83979.png)


**3) Tunnelインターフェース1つ目作成完了**

![03_FortiWiFi-IPSec-Tunnel01作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6e73aadf-caec-addf-8a52-f8b0384df37a.png)

## ● Tunnelインターフェース1つ目のファイアウォール・ポリシー作成
### ・FortiWiFi -> OCI へのポリシー作成
FortiWiFiから出ていくトラフィックのファイアウォール・ポリシーを作成
**1) FortiWiFiコンソール画面**
FortiWiFiコンソール [Policy & Objects] > [IPv4 Polic]を選択し、[Create New]をクリック
![04_FortiWiFi_IPv4-Policy-to-OCI-Tunnel01作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/cf244f68-089f-b28e-7b70-6e085f973283.png)


**2) New Policy画面**
次を入力し、[OK]をクリックし作成
```:New Policy
- Name: 任意の名前を設定
- Incoming Interface: [Internal]を選択
- Outogoing Interface: [OCI-TUnnel01]を選択
- Suource: [all]を選択
- Destination: [all]を選択
- Schedule: [all]を選択
- Service: [all]を選択
- Action: : [ACCEPT]を選択
- Inspection Mode: [Flao-based]を選択
- NAT: [Off]を選択
```
![04_FortiWiFi_IPv4-Policy-to-OCI-Tunnel01作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/66e49a04-b174-9737-db6f-985b4cfad420.png)

**3) FortiWiFi -> OCI へのポリシー作成完了**
![04_FortiWiFi_IPv4-Policy-to-OCI-Tunnel01作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0bf0348e-cb74-f41f-ebef-18f6c9025e2e.png)

### ・OCI -> FortiWiFiへのファイアウォール・ポリシー作成
OCIから入ってくるトラフィックのファイアウォール・ポリシーを作成

**1) New Policy画面**
次を入力し、[OK]をクリックし作成
```:New Policy
- Name: 任意の名前を設定
- Incoming Interface: [OCI-TUnnel01]を選択
- Outogoing Interface: [Internal]を選択
- Suource: [all]を選択
- Destination: [all]を選択
- Schedule: [all]を選択
- Service: [all]を選択
- Action: : [ACCEPT]を選択
- Inspection Mode: [Flao-based]を選択
- NAT: [Off]を選択
```
![05_FortiWiFi_IPv4-Policy-From-OCI-Tunnel01作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/ca5f5bfd-a53b-5334-ea89-dcd9b124185e.png)


**2) FortiWiFi -> OCI へのポリシー作成完了**
![05_FortiWiFi_IPv4-Policy-From-OCI-Tunnel01作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a292894a-ea2d-0de2-9279-f58231d84bce.png)


## ● Tunnelインターフェース1つ目の起動確認
Tunnelインターフェースの稼働には少し時間がかかります。
時間かかる場合は、FortiWiFiからTunnelをUPさせてみてみます
### ・ 手動起動
**1) IPsec-Monitor画面**
FortiWiFiへログインし、[Monitor] > [IPsec Monito]を選択し、
作成したIPSec Tunnelを選択し、[Bring UP] から対象のTunnelをクリック

![06_IPSec-Monitor02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/b3828272-4ed1-1b10-6637-d77905414ca9.png)

**2) IPsec Monitor画面**
![06_IPSec-Monitor03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/8809583a-77ec-f582-6e9e-b887d918a05b.png)

**3) IPsec Tunnels画面**
IPsec Tunnels画面から、UPしていることを確認
![07_OCI-Tunnel01-UP確認02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/cd61a6da-d979-6695-b9df-b46f65e48aab.png)

## ● OCI側 Tunnelインターフェース1つ目起動確認![07_OCI-Tunnel01-UP確認01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6a471c87-9176-34ef-198f-fa88fa08fa26.png)

## ● Tunnelインターフェース2つ目作成
1つ目と同様に作成と設定をします。
**・ 2つ目Tunnelインターフェース作成画面**
![11_FortiWiFi-IPSec-Tunnel02作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6a0a1f15-137f-1088-86ab-ae5863ea8f0e.png)
**・ 2つ目Tunnelインターフェース作成完了**
![11_FortiWiFi-IPSec-Tunnel02作成03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/b5ec987d-bac2-b39f-c243-015a2af75d48.png)
**・ 2つ目Tunnelインターフェース・ポリシー作成完了**
![13_FortiWiFi_IPv4-Policy-From-OCI-Tunnel02作成04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/7ebcdd4d-a552-469c-7e46-4df7262bd59c.png)

**・ 2つ目Tunnelインターフェース稼働完了**
![13_FortiWiFi_IPv4-Policy-From-OCI-Tunnel02作成05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/10853e46-11e0-2996-5cc9-ad816b70488d.png)

## ● Tunnelインターフェース設定確認
コマンドでも設定確認してみてみます
```

FortiWiFi50E # show vpn ipsec phase1-interface
config vpn ipsec phase1-interface
    edit "OCI-Tunnel01"
        set interface "wan1"
        set ike-version 2
        set keylife 28800
        set peertype any
        set net-device disable
        set proposal aes256-sha384
        set dhgrp 5
        set nattraversal disable
        set remote-gw 168.138.219.191
        set psksecret ENC Paasward1
    next
    edit "OCI-Tunnel02"
        set interface "wan1"
        set ike-version 2
        set keylife 28800
        set peertype any
        set net-device disable
        set proposal aes256-sha384
        set dhgrp 5
        set nattraversal disable
        set remote-gw 158.101.67.49
        set psksecret ENC Paasward2
    next
end


FortiWiFi50E # show vpn ipsec phase2-interface
config vpn ipsec phase2-interface
    edit "OCI-Tunnel01"
        set phase1name "OCI-Tunnel01"
        set proposal aes256-sha1
        set dhgrp 5
        set keepalive enable
        set keylifeseconds 3600
    next
    edit "OCI-Tunnel02"
        set phase1name "OCI-Tunnel02"
        set proposal aes256-sha1
        set dhgrp 5
        set keepalive enable
        set keylifeseconds 3600
    next
end


FortiWiFi50E # show firewall policy
config firewall policy
    edit 1
        set uuid f8b26968-87dc-51ef-e951-4901874632903
        set srcintf "internal"
        set dstintf "wan1"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set nat enable
    next
    edit 2
        set name "To-OCI-Tunnel01"
        set uuid 589d9b90-8b02-51ef-9ba6-glsu82js9vn2
        set srcintf "internal"
        set dstintf "OCI-Tunnel01"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
    next
    edit 3
        set name "From-OCI-Tunnel01"
        set uuid c33777c4-8b06-51ef-c89d-9oexijsgb3mah
        set srcintf "OCI-Tunnel01"
        set dstintf "internal"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
    next
    edit 4
        set name "To-OCI-Tunnel02"
        set uuid 1e943cd8-8b07-51ef-4951-cski89wpefbs
        set srcintf "internal"
        set dstintf "OCI-Tunnel02"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
    next
    edit 5
        set name "From-OCI-Tunnel02"
        set uuid 712ceb02-8b07-51ef-edd1-8sike35vsq72
        set srcintf "OCI-Tunnel02"
        set dstintf "internal"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end


FortiWiFi50E # show system interface OCI-Tunnel01
config system interface
    edit "OCI-Tunnel01"
        set vdom "root"
        set ip 192.168.200.101 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 192.168.200.102 255.255.255.252
        set snmp-index 10
        set interface "wan1"
    next
end

FortiWiFi50E # show system interface OCI-Tunnel02
config system interface
    edit "OCI-Tunnel02"
        set vdom "root"
        set ip 192.168.200.105 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 192.168.200.106 255.255.255.252
        set snmp-index 11
        set interface "wan1"
    next
end
```


# ■ BGP設定

## ● トンネル・インタフェースの編集
新しく作成したFortiGateトンネル・インタフェースにBGP IPアドレスを追加します。
各トンネルに対して次のステップを実行します。

**1) FortiWiFiコンソール画面**
「Network」>「Interfaces」へ移動し、目的のインタフェースを選択し、「編集」をクリック
![21_Interface-Tunnel01設定01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/33fa503e-b3f9-6bfd-f06c-313a64ba17de.png)


**2) Edit Interface画面**
次の項目を設定し、[OK]をクリックして設定
```: Edit Intarfaces画面
- IP: トンネル・インタフェースのFortiGate終端に割り当てたBGP IPアドレスを入力
- リモートIP/ネットワーク・マスク: トンネル・インタフェースのOracle終端に割り当てたBGP IPアドレスを追加
- Pingアクセス(推奨): 「管理アクセス」セクションで、pingアクセスを有効にします。
```
![21_Interface-Tunnel01設定02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0edfba21-42a2-fbd1-5b18-d74c849d5ce0.png)

**3)設定完了**
2つのTunnelインターフェースへ IP/Netmask と Administrative Accrss が設定されていることを確認

![22_Interface-Tunnel02設定03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0bad51c4-ff39-6d5a-eb1f-863b1cbbe05e.png)


## ● BGP設定画面有効化
デフォルトでは、WebコンソールではBGPの設定表示はされないため、有効化します。
**1) Feature Visibility画面**
[System] > [Feature Visibility]へ移動し、[Advanced Routing]を有効化
![23_FeatureVisibility01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a5168518-5b3a-dfcd-ab0c-86ce8b70f599.png)

## ● BGP設定
**1) BGP設定**
[Network] > [BGP]へ移動し、次の項目を入力し、[OK]をクリック
```: Local BGP Options画面
- Local AS: OCI　IPsec設定した FortiWiFi側の BGP ASNを入力
- Route ID: ピア間でこのBGPルーターを一意に識別するための値
- Neighbors: 「新規作成」をクリックして、トンネルのOracle終端のBGP IPアドレスと、Oracle BGP ASNを入力します。Oracleの商用クラウド用のBGP ASNは31898です。
- Networks: オプションで、このフィールドを使用して、BGP経由で特定のサブネットを通知します。「拡張オプション」セクションで、「再分散」セクションを使用してサブネットを通知することもできます。
```
![24_BGP設定01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e44f2c3a-76e9-0f1b-94b0-f72c4ea438a3.png)

**1) BGP送信/受信確認**
[Monitor] > [Routing Monitor]へ移動し、オンプレミス側と OCI側のネットワークがBGPで送信/受信されていることを確認
![25_RoutingMonitor確認01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/ab975f1c-609e-d3fa-1a4d-a41ea0cefadd.png)


## ● OCI側BGP確認
**1) IPsec画面**
![26_OCI-IPSec-BGP起動確認01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/aca3addd-24d6-103d-9ed1-6ecbef8aa4b2.png)

**2) DRG ルート・ルール画面**
2つの IPSec Tunnel 設定により、重複ルート構成になるため、BGPの動作によりどちらか1つの Tunnelがアクティブになり、もう片方は競合ステータスになります。
![31_DRGルート表-ECMP設定前02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/4df63406-943a-2217-0b3f-74a183a2321a.jpeg)





# ■ ECMP設定
Equal-Cost Multi-Path Routing (ECMP)は、BGPを使用して、複数の FastConnect仮想回線または複数の IPSec Tunnelを介した ネットワークトラフィック の Flow-Based Load Balancingを可能にする機能です。
これにより、Active-Active Load Balancing と、最大8つの回線間のネットワーク・トラフィックのフェイルオーバーが可能になります。
また、冗長性が重要でない場合でも、暗号化処理のオーバーヘッドのために通常1 Gbpsに制限されている IPSec接続の速度を向上させることができ、ECMPを使用すると最大8つの IPSec接続を組み合わせて Multi-Gigabit レベルのスループットを実現できるようになります。
ということで、FortiWiFi とOCI DRG へ ECMPを設定してみてみます。

## ● FortiGate側 ECMP設定
FortiOSでは、ECMP設定はコマンドで設定します。

**1) 設定前確認**
```
FortiWiFi50E # show router bgp
config router bgp
    set as 65000
    config neighbor
        edit "192.168.200.102"
            set remote-as 31898
        next
        edit "192.168.200.106"
            set remote-as 31898
        next
    end
    config network
        edit 1
            set prefix 192.168.99.0 255.255.255.0
        next
    end
    config redistribute "connected"
        set status enable
    end
    config redistribute "rip"
    end
    config redistribute "ospf"
    end
    config redistribute "static"
    end
    config redistribute "isis"
    end
    config redistribute6 "connected"
    end
    config redistribute6 "rip"
    end
    config redistribute6 "ospf"
    end
    config redistribute6 "static"
    end
    config redistribute6 "isis"
    end
end
```

**2) 設定前 BGP routing table確認**
OCIから受信したルートに対して1つのTunnelインターフェースが使われていることを確認

```
FortiWiFi50E # get router info routing-table bgp

Routing table for VRF=0
B       10.10.0.0/24 [20/0] via 192.168.200.106, OCI-Tunnel02, 02:03:19
```

**3) ECMP設定**

```
FortiWiFi50E # config router bgp
FortiWiFi50E (bgp) # set ebgp-multipath enable
FortiWiFi50E (bgp) # end
```


**4) 設定確認**
```
FortiWiFi50E # show router bgp
config router bgp
    set as 65000
    set ebgp-multipath enable
    config neighbor
        edit "192.168.200.102"
            set remote-as 31898
        next
        edit "192.168.200.106"
            set remote-as 31898
        next
    end
    config network
        edit 1
            set prefix 192.168.99.0 255.255.255.0
        next
    end
    config redistribute "connected"
        set status enable
    end
    config redistribute "rip"
    end
    config redistribute "ospf"
    end
    config redistribute "static"
    end
    config redistribute "isis"
    end
    config redistribute6 "connected"
    end
    config redistribute6 "rip"
    end
    config redistribute6 "ospf"
    end
    config redistribute6 "static"
    end
    config redistribute6 "isis"
    end
end
```


**5) 設定後 BGP routing table 確認**
OCIから受信したルートに対して2つのTunnelインターフェースが使われていることを確認
```
FortiWiFi50E # get router info routing-table bgp

Routing table for VRF=0
B       10.10.0.0/24 [20/0] via 192.168.200.106, OCI-Tunnel02, 00:00:50
                     [20/0] via 192.168.200.102, OCI-Tunnel01, 00:00:50
```


## ● OCI DRG側 ECMP 設定

**1) DRG画面**
OCIコンソールから、ナビゲーション・メニューを開き、[ネットワーキング] > [顧客接続性] > [動的ルーティング・ゲートウェイ] > [対象DRG名] > [DRGルート表]へ移動し、各ルート表をクリックし、ECMPを有効化します。
![32_DRGルート表-ECMP設定01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/16fccee0-2c6a-889e-61fd-53d2f86592c1.jpeg)

**2) DRGルート表画面**
対象のDRGルート表画面にある [編集]をクリック
![32_DRGルート表-ECMP設定02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/26f519d5-3c90-5cb7-5228-bc0bb7a901e7.jpeg)

**3) DRGルート表の編集画面**
[ECMPの有効化]へチェックし有効化
![32_DRGルート表-ECMP設定03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/2ba7a81a-1629-8a12-e0c8-95c708921096.jpeg)

**4) すべてのルート・ルールの取得画面**
対象のDRGルート表画面にある [すべてのルート・ルールの取得]をクリックし、競合するルートが無くなっていることを確認
![27_OCI-IPSec-BGPーDRGルート確認03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/04af4539-0b56-ec9d-785e-8e5d3dbdb3fd.png)






# ■ MTU/MSS設定
最大転送単位(MTU)が原因でトンネルのフラッピングが発生する場合、FortiWiFi の各トンネル・インターフェースへMTU/MSS値を設定します。
MTU/MSSの特定方法の詳細は、[MTU](https://docs.oracle.com/ja-jp/iaas/Content/Network/Troubleshoot/connectionhang.htm#Overview) の概要を参照してください。
※ MTUを設定するには、FortiOS 6.4.0 以降の Version が必要です。

## ● Tunnel01 設定
**1) Tunnel01 設定**
```
FortiWiFi50E # config system interface

FortiWiFi50E (interface) # edit OCI-Tunnel01

FortiWiFi50E (interface) # set mtu-override enable

FortiWiFi50E (interface) # set mtu 1427

FortiWiFi50E (OCI-Tunnel01) # set tcp-mss 1379

FortiWiFi50E (OCI-Tunnel01) # end
```

**2) Tunnel01 設定確認**
```
FortiWiFi50E # show system interface OCI-Tunnel01
config system interface
    edit "OCI-Tunnel01"
        set vdom "root"
        set ip 192.168.200.101 255.255.255.255
        set allowaccess ping
        set type tunnel
		set mtu-override enable
		set mtu 1427
        set tcp-mss 1379
        set remote-ip 192.168.200.102 255.255.255.252
        set snmp-index 10
        set interface "wan1"
    next
end
```

## ● Tunnel02 設定
**1) Tunnel02 設定**
```
FortiWiFi50E # config system interface

FortiWiFi50E (interface) # edit OCI-Tunnel02

FortiWiFi50E (interface) # set mtu-override enable

FortiWiFi50E (interface) # set mtu 1427

FortiWiFi50E (OCI-Tunnel02) # set tcp-mss 1379

FortiWiFi50E (OCI-Tunnel02) # end
```


**2) Tunnel02 設定確認**
```
FortiWiFi50E # show system interface OCI-Tunnel02
config system interface
    edit "OCI-Tunnel02"
        set vdom "root"
        set ip 192.168.200.105 255.255.255.255
        set allowaccess ping
        set type tunnel
		set mtu-override enable
		set mtu 1427
        set tcp-mss 1379
        set remote-ip 192.168.200.106 255.255.255.252
        set snmp-index 11
        set interface "wan1"
    next
end
```




# ■ 接続確認
オンプレミスとOCIの終端インスタンスどおしで接続できることを確認
## ● Ping確認
**・ MacBook -> OCI-Instance 接続確認**
```
shikobay@shikobay-mac ~ % ping 10.10.0.2 -c 10
PING 10.10.0.2 (10.10.0.2): 56 data bytes
64 bytes from 10.10.0.2: icmp_seq=0 ttl=60 time=6.057 ms
64 bytes from 10.10.0.2: icmp_seq=1 ttl=60 time=5.924 ms
64 bytes from 10.10.0.2: icmp_seq=2 ttl=60 time=5.956 ms
64 bytes from 10.10.0.2: icmp_seq=3 ttl=60 time=6.216 ms
64 bytes from 10.10.0.2: icmp_seq=4 ttl=60 time=5.351 ms
64 bytes from 10.10.0.2: icmp_seq=5 ttl=60 time=6.873 ms
64 bytes from 10.10.0.2: icmp_seq=6 ttl=60 time=6.092 ms
64 bytes from 10.10.0.2: icmp_seq=7 ttl=60 time=6.236 ms
64 bytes from 10.10.0.2: icmp_seq=8 ttl=60 time=6.381 ms
64 bytes from 10.10.0.2: icmp_seq=9 ttl=60 time=5.783 ms

--- 10.10.0.2 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.351/6.087/6.873/0.377 ms
```

**・ OCI-Instance -> MacBook 接続確認**
```
[opc@oci-inst ~]$ ping 192.168.1.2 -c 10
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=61 time=7.26 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=61 time=7.14 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=61 time=8.57 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=61 time=6.27 ms
64 bytes from 192.168.1.2: icmp_seq=5 ttl=61 time=6.09 ms
64 bytes from 192.168.1.2: icmp_seq=6 ttl=61 time=7.30 ms
64 bytes from 192.168.1.2: icmp_seq=7 ttl=61 time=5.99 ms
64 bytes from 192.168.1.2: icmp_seq=8 ttl=61 time=6.19 ms
64 bytes from 192.168.1.2: icmp_seq=9 ttl=61 time=6.44 ms
64 bytes from 192.168.1.2: icmp_seq=10 ttl=61 time=5.86 ms

--- 192.168.1.2 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 5.864/6.711/8.566/0.809 ms
```




# ■ 参考
**・ [Oracle Cloud Infrastructure ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/home.htm)**
　- [サイト間VPN](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/managingIPsec.htm)
　- [全体的なプロセス](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/settingupIPsec.htm)
　- [サポートされているIPSecパラメータ](https://docs.oracle.com/ja-jp/iaas/Content/Network/Reference/supportedIPsecparams.htm)
　- [CPE構成: FortiGate](https://docs.oracle.com/ja-jp/iaas/Content/Network/Reference/fortigateCPE.htm)
　- [VCNと接続のトラブルシューティング](https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/troubleshooting.htm)
　- [サイト間VPNのトラブルシューティング](https://docs.oracle.com/ja-jp/iaas/Content/Network/Troubleshoot/ipsectroubleshoot.htm)
　- [MTUの概要](https://docs.oracle.com/ja-jp/iaas/Content/Network/Troubleshoot/connectionhang.htm#Overview)

**・ [Fortigate ドキュメント](https://docs.fortinet.com/product/fortigate/6.2)**
　- [IPsec VPNs](https://docs.fortinet.com/document/fortigate/6.2.16/cookbook/520377/ipsec-vpns)
　- [Policy and Objects](https://docs.fortinet.com/document/fortigate/6.2.16/cookbook/728881/policy-and-objects)
　- [ECMP routes for recursive BGP next hop resolution](https://docs.fortinet.com/document/fortigate/7.0.0/new-features/823985/ecmp-routes-for-recursive-bgp-next-hop-resolution)
　- [Interface MTU packet size](https://docs.fortinet.com/document/fortigate/6.2.16/cookbook/596096/interface-mtu-packet-size)
　- [Technical Tip: MTU override of IPsec VPN interface](https://community.fortinet.com/t5/FortiGate/Technical-Tip-MTU-override-of-IPsec-VPN-interface/ta-p/193388)