Oracle Cloud:FortiGateでOCIへIPsec VPN接続してみてみた

新しいDRGのIPsec Connectionでは、NAT配下のVPN装置のIKE認証KeyをPrivate IP等に 設定できるようになり、設定項目も増えました。
ということで、Oracle Cloud Infrastructure(OCI)上に配置したFortiGateと別リージョンのDRGをIPsec VPN接続してみます。

# ■ 構成
今回は、FortiGate-VMを使用します。
<img width="889" alt="構成図.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/cc6941d3-2a34-3bb6-e810-be354f6911fa.png">
FortiGate-VMは物理ハードウェアと同じOSが使われているので設定は同じになります。
FortiGate-VMの構成手順は,
[Oracle Cloud:Fortinet FortiGate Next-Generation Firewall(NGFW) を導入してみてみた](https://qiita.com/shirok/items/8a15ea8dd4d4c6f04364) を参照

また、FortiGate-VMなどのSoftware Routerを使用するとOCIのSevice Limit超える多拠点接続や他社クラウド・プロバイダと接続する事もできます。


# ■ OCI DRG環境
## ● Customer-Premises Equipment作成
OCIの[Networking] > [ICustomer-Premises Equipment] 画面から[Create Customer-Premises Equipmentn]をクリックし以下内容を設定

    ・NAME:適当な名前を設定
    ・DRG：IPsec接続させる作成済みのDRGを設定
    ・STATIC ROUTE CIDER:対向側(FortiGate)のCIDERを設定　*後から追加変更削除可能です
    ・CPE IKE IDENTIFIER : FortiGateのWAN側Private IPを設定
<img width="599" alt="01_CPE01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/d2b87a80-ebeb-eefb-29ec-e654bff7b066.png">
[Create Premises Equipment]をクリックして作成

## ● IPsec Connection作成
**① OCIの[Networking] > [IPsec Connetion] 画面から[Create IPsec COnnection]をクリックし以下内容を設定**



[Create IPsec Connection]をクリックして作成
<img width="656" alt="02_IPsec0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/9ff2aa0e-6955-513c-5c41-1709163dd76b.png">


<img width="870" alt="02_IPsec01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a0dba0eb-d8ea-167e-45bb-f7d0e1c58d9a.png">


**② 作成したIPsec ConnetionのVPN IP Addressを確認**
<img width="869" alt="02_IPsec02_SharedSecret.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/09e47507-5202-f084-7b7c-36fe64de33f8.png">


**③ 作成したIPsec ConnetionのShared Secretを確認**
・Tunnel1(200.200.200.201)のShared Secret
<img width="435" alt="02_IPsec02_SharedSecret01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/766b996c-21d0-36bd-546f-48dbaf5fb9f0.png">

・Tunnel２(200.200.200.202)のShared Secret
<img width="436" alt="02_IPsec02_SharedSecret02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/556f42a5-75fd-d867-8d38-54e429890a88.png">


# ■ Fotigate環境設定

## ● OCI Secrity List設定
IPsecに必要なポート:4500と500を設定
<img width="537" alt="03_SecurityList01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a98738cd-6413-58d4-afb5-d56f7c3f9df9.png">



## ● IPsec設定

**① SSHログイン**
Fortigateにsshログイン

```shell-session
[opc@inst01 ~]$ ssh admin@100.100.100.101
 admin@100.100.100.101's password:
 Fortigate-inst01 #
```

**② ファイアウォール構成**

```shell-session
config firewall address
    edit any_ipv4
    next
    edit OracleVcn-AshVCN_remote_subnet
        set subnet 10.0.0.0 255.0.0.0
    next
end

config firewall addrgrp
    edit OracleVcn-AshVCN_local
        set member any_ipv4
    next
    edit OracleVcn-AshVCN_remote
        set member OracleVcn-AshVCN_remote_subnet
    next
end
config firewall policy
    edit 101
        set name vpn_200.200.200.201_local
        set srcintf port1
        set dstintf 200.200.200.201
        set srcaddr OracleVcn-AshVCN_local
        set dstaddr OracleVcn-AshVCN_remote
        set action accept
        set schedule always
        set service ALL
        set comments "VPN: Oracle 200.200.200.201"
    next
    edit 102
        set name vpn_200.200.200.201_rhosiemote
        set srcintf 200.200.200.201
        set dstintf port1
        set srcaddr OracleVcn-AshVCN_remote
        set dstaddr OracleVcn-AshVCN_local
        set action accept
        set schedule always
        set service ALL
        set comments "VPN: Oracle 200.200.200.201"
    next
    edit 103
        set name vpn_200.200.200.202_local
        set srcintf port1
        set dstintf 200.200.200.202
        set srcaddr OracleVcn-AshVCN_local
        set dstaddr OracleVcn-AshVCN_remote
        set action accept
        set schedule always
        set service ALL
        set comments "VPN: Oracle 200.200.200.202"
    next
    edit 104
        set name vpn_200.200.200.202_remote
        set srcintf 200.200.200.202
        set dstintf port1
        set srcaddr OracleVcn-AshVCN_remote
        set dstaddr OracleVcn-AshVCN_local
        set action accept
        set schedule always
        set service ALL
        set comments "VPN: Oracle 200.200.200.202"
    next
end
```

**③ ISAKMPフェーズ1を構成**

```shell-session
config vpn ipsec phase1-interface
    edit 200.200.200.201
        set interface port1
        set keylife 28800
        set proposal aes256-sha384 aes256-sha256
        set comments "VPN: Oracle 200.200.200.201"
        set dhgrp 5
        set remote-gw 200.200.200.201
        set psksecret FortigateSharedSecret01
    next
    edit 200.200.200.202
        set interface port1
        set keylife 28800
        set proposal aes256-sha384 aes256-sha256
        set comments "VPN: Oracle 200.200.200.202"
        set dhgrp 5
        set remote-gw 200.200.200.202
        set psksecret FortigateSharedSecret02
    next
end
```


**④ IPSecの構成 - ISAKMPフェーズ2**

```shell-session
config vpn ipsec phase2-interface
    edit 200.200.200.201
        set phase1name 200.200.200.201
        set proposal aes256-sha1
        set dhgrp 5
        set replay disable
        set auto-negotiate enable
        set comments "VPN: Oracle 200.200.200.201"
        set keylifeseconds 3600
    next
    edit 200.200.200.202
        set phase1name 200.200.200.202
        set proposal aes256-sha1
        set dhgrp 5
        set replay disable
        set auto-negotiate enable
        set comments "VPN: Oracle 200.200.200.202"
        set keylifeseconds 3600
    next
end
```


**⑤ VCNに静的ルートを構成**

```shell-session
config vpn ipsec phase2-interface
    edit 200.200.200.201
        set phase1name 200.200.200.201
        set proposal aes256-sha1
        set dhgrp 5
        set replay disable
        set auto-negotiate enable
        set comments "VPN: Oracle 200.200.200.201"
        set keylifeseconds 3600
    next
    edit 200.200.200.202
        set phase1name 200.200.200.202
        set proposal aes256-sha1
        set dhgrp 5
        set replay disable
        set auto-negotiate enable
        set comments "VPN: Oracle 200.200.200.202"
        set keylifeseconds 3600
    next
end
```


## ● IPsec Tunnel確認

```shell-session
Fortigate-inst01 # diagnose vpn tunnel list
        list all ipsec tunnel in vd 0
        ------------------------------------------------------
        name=200.200.200.202 ver=1 serial=2 172.24.0.251:0->200.200.200.202:0
        bound_if=3 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/0
        proxyid_num=1 child_num=0 refcnt=11 ilast=0 olast=60 ad=/0
        stat: rxp=0 txp=0 rxb=0 txb=0
        dpd: mode=on-demand on=1 idle=20000ms retry=3 count=0 seqno=0
        natt: mode=none draft=0 interval=0 remote_port=0
        proxyid=200.200.200.202 proto=0 sa=0 ref=2 serial=1 auto-negotiate
          src: 0:0.0.0.0/0.0.0.0:0
          dst: 0:0.0.0.0/0.0.0.0:0
        ------------------------------------------------------
        name=200.200.200.201 ver=1 serial=1 172.24.0.251:0->200.200.200.201:0
        bound_if=3 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/0
        proxyid_num=1 child_num=0 refcnt=11 ilast=7 olast=67 ad=/0
        stat: rxp=0 txp=0 rxb=0 txb=0
        dpd: mode=on-demand on=1 idle=20000ms retry=3 count=0 seqno=0
        natt: mode=none draft=0 interval=0 remote_port=0
        proxyid=200.200.200.201 proto=0 sa=0 ref=2 serial=1 auto-negotiate
          src: 0:0.0.0.0/0.0.0.0:0
          dst: 0:0.0.0.0/0.0.0.0:0
```

## ● DRG IPsec Connection Status UP確認
IPsec ConnectionのStatusがUPしていることを確認
<img width="831" alt="04_IPsecUP.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/2d569ae4-34c8-0587-7491-e4ef6710bcef.png">

## ● 対向インスタンスping疎通確認
Fortigate-inst01から対向のlondon-inst01へpingできることを確認

```shell-session
Fortigate-inst01 # execute ping 10.0.0.2
    PING 10.0.0.2 (10.0.0.2): 56 data bytes
    64 bytes from 10.0.0.2: icmp_seq=0 ttl=62 time=47.2 ms
    64 bytes from 10.0.0.2: icmp_seq=1 ttl=62 time=47.0 ms
    64 bytes from 10.0.0.2: icmp_seq=2 ttl=62 time=47.1 ms
    64 bytes from 10.0.0.2: icmp_seq=3 ttl=62 time=47.1 ms
    ^C
    --- 10.0.0.2 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 47.0/47.1/47.2 ms
```




# ■ 接続確認
## ● ssh接続確認

・Frankfurt --> London間インスタンス ssh接続確認
　対向インスタンスのホスト名が出力されることを確認

```shell-session
[opc@fra-inst01 ~]$ ssh -i <ssh鍵> opc@10.0.0.2 hostname
    ldn-inst1
```

・London --> Frankfurt間インスタンス ssh接続確認
　対向インスタンスのホスト名が出力されることを確認

```shell-session
[opc@ldn-inst1 ~]$ ssh -i <ssh鍵> opc@172.24.0.10.2 hostname
    fra-inst01
```

# ■ Appendix

## ● デバッグ
IPsec Tunnelが通信できない場合などは、デバッグ ログを有効化して確認

・IKE デバッグ ログを有効化

```shell-session
    diag vpn ike log 
    diag debug app ike -1
    diag debug enable
```

・IKE デバッグ ログ停止

```shell-session
    diagnose debug reset
    diagnose debug disable
```