【OCI】2つの拠点とOCI間でVPN接続、OCI経由で拠点間通信を試してみた

###概要

オンプレミス拠点とOCI間をVPN接続する構成において、オンプレミス拠点が複数存在することは珍しくない。
通信要件として各オンプレミス拠点とOCI間の通信のみが存在する場合は問題ないが
オンプレミス拠点間の通信をOCI経由で行いたい場合はOCIの標準機能では実現が不可能である。
理由はOCIの仕様上(厳密にいうとDRGの仕様)、拠点間通信のためのルーティングを行えないためである。

(参考資料)
<font color="red">**[動的ルーティング・ゲートウェイ(DRG)][1]**</font>
[1]:https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/managingDRGs.htm
※「ルート伝播の制限事項」ご参照

そこでOCI上にルータを役割をしてくれる中継サーバを配置、
そちらの中継サーバを経由して拠点間通信が行えるか試してみることにした。

###検証構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/ddd0e22c-6831-8b5a-8ef6-c446ed0cafe1.png)

###検証シナリオ
・疑似オンプレミス拠点を用意するためにNEC IX2105×2台をVPNルータとして構築、
　異なるインターネット回線経由でOCIとIPSec接続
・類似オンプレミス拠点のネットワークアドレスを上記検証構成の通りに定義、
　各ネットワークには疎通確認用のTEST PC(OS:Windows)を用意
・VCN上に仮想マシンを配置、OS(Oracle Linux)のルーティング機能を有効にし
　類似オンプレミス拠点間通信の中継が可能な状態にする
・検証構成の動作確認としてTEST PC1とTEST PC2間でpingによる疎通確認を行う

###ステータス確認

(中継サーバ)
・ルーティングテーブル確認
・TEST PC1(10.0.0.100)及びTEST PC2(10.100.0.100)宛のping疎通確認
![test-vm1-log1(edit).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/69f8f549-a5d3-cfbf-6d78-38b55c8f9182.png)

・パケット転送機能のステータス確認
net.ipv4.ip_forward = 1になっていればONの状態
ステータスが1ではなく0になっている場合は修正が必要
![test-vm1-log2(edit).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/9d923965-dc73-ae60-cf46-b6fbf60a6948.png)

(CPE1)
ルーティングテーブル確認
OCI側からadvertiseされた0.0.0.0/0と172.16.1.0/24を受信できている

```shell-session
CPE1(config)# show ip route
IP Routing Table - 7 entries, 3 hidden, 2038 frees
Entries: 4 Connected, 1 Static, 0 RIP, 0 OSPF, 2 BGP
Codes: C - Connected, S - Static, R - RIP, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, B - BGP
       * - Candidate default, s - Summary
Timers: Age
B*   0.0.0.0/0 [20/0] via 10.1.255.102, Tunnel0.0, 0:00:22
     10.0.0.0/8 is subnetted, 3 subnets
C      10.0.0.0/24 [0/1] is directly connected, GigaEthernet1.0, 0:01:11
C      10.1.255.100/30 [0/1] is directly connected, Tunnel0.0, 0:03:01
C      10.1.255.104/30 [0/1] is directly connected, Tunnel1.0, 0:03:00
S    140.204.0.0/16 [1/1] via 172.32.0.1, GigaEthernet0.0, 0:03:02
     172.16.0.0/16 is subnetted, 1 subnets
B      172.16.1.0/24 [20/0] via 10.1.255.102, Tunnel0.0, 0:00:23
     172.32.0.0/16 is subnetted, 1 subnets
C      172.32.0.0/24 [0/1] is directly connected, GigaEthernet0.0, 0:03:03
CPE1(config)# 
```

(CPE2)
ルーティングテーブル確認
OCI側からadvertiseされた0.0.0.0/0と172.16.1.0/24を受信できている

```shell-session

CPE2(config)# show ip route
IP Routing Table - 7 entries, 2 hidden, 2039 frees
Entries: 4 Connected, 1 Static, 0 RIP, 0 OSPF, 2 BGP
Codes: C - Connected, S - Static, R - RIP, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, B - BGP
       * - Candidate default, s - Summary
Timers: Age
B*   0.0.0.0/0 [20/0] via 10.1.255.102, Tunnel0.0, 0:35:24
     10.0.0.0/8 is subnetted, 3 subnets
C      10.1.255.100/30 [0/1] is directly connected, Tunnel0.0, 0:57:15
C      10.1.255.104/30 [0/1] is directly connected, Tunnel1.0, 0:57:14
C      10.100.0.0/24 [0/1] is directly connected, GigaEthernet1.0, 0:55:59
S    140.204.0.0/16 [1/1] via 192.168.255.1, GigaEthernet0.0, 0:57:22
     172.16.0.0/16 is subnetted, 1 subnets
B      172.16.1.0/24 [20/0] via 10.1.255.102, Tunnel0.0, 0:45:50
C    192.168.255.0/24 [0/1] is directly connected, GigaEthernet0.0, 0:57:22
CPE2(config)# 
```

(TEST PC1)
TEST PC2宛のping疎通OK
![cmd_10_0_0_100(TESTPC1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/56a336fc-b73a-d7ef-339e-3b95fe202c73.png)

(TEST PC2)
TEST PC1宛のping疎通OK
![cmd_10.100.0.100(TESTPC2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411653/8cb99290-0beb-f0a7-b9e2-91aadf42fa76.png)



###感想など
・DRGではオンプレミス側にあるネットワーク間通信を中継してくれない仕様はわかっていたので
中継サーバをおいてルーティングさせたら実現できるのでは？という発想から検証を実施してみた
ところあっさり成功したのでちょっと嬉しかった。
・とりあえず動作確認の目的だったため中継サーバのルーティングはOracle Linuxの標準機能を
利用したがもし本番環境用に利用を検証する際はFortigate等の有償の仮想アプライアンスの利用も
考慮したほうがいいと思った(動作保証、サポート等の観点から)。
・本文章は個人で検証した内容の記録であり、検証方法及び結果を保証するものではないことを
あらかじめご了承・ご理解いただけますようお願い致します。