Fortigateを使用したOCI IPSec VPN接続例(BGP編)

# 概要
Fortigateを使用してOCIにIPSec VPNでBGPを使用して接続する設定例です。
Static Routeを使用した設定例は以下で検証しました。
[Fortigateを使用したOCI IPSec VPN接続例](https://qiita.com/tktk2712/items/766440e490a18687701f)

# 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/e80ce1e0-c3f2-908d-bf22-5f2bb76493b6.png)

# 設定例
## OCI
OCIメニューからネットワーキング>>サイト間VPNを選択します。
作成については以下のサイトをご参照ください。
サイト間VPNの設定
https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/settingupIPsec.htm
ここでは作成済みの設定となります。
- 顧客構内機器
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/2740282f-0d22-ec85-7255-7d2c8c9702ff.png)
- サイト間VPN
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/6deb2c66-cf85-6fab-2177-f984ad4b42fe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/05d09899-803f-45fd-e356-c7af0da2904b.png)
- トンネル1の詳細
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/0fec2612-25c3-9a06-16fd-0eb960af7456.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/bf8cd992-900b-8a14-12b3-8c819ad4bf8a.png)
- トンネル2の詳細
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/e2ad7468-e91a-d7f8-eda2-6b6350243316.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/60931a68-69f1-0ea2-594a-cd0607addd97.png)

## Fortigate
FortiGate 50E  ファームウェアバージョンは6.2.12 build 1319です。
Policyや冗長化等環境に応じて設定が必要です。

- IPSec Tunnel設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/dc82415d-db9b-0b69-28d6-c58c86e13432.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/1d1ad5dd-fe6d-9d0b-d428-9213684f6853.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/d462164a-0caf-2d52-8de5-43ea9ca60526.png)

- Interface設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/6b7289cf-f53f-4b38-f1c2-c016a61fbfd4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/f4f91730-f61c-372a-ca67-225493dc75ba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/22ccd131-1a86-50de-7835-1855bc4fbe3f.png)

- Static Route設定
VPN初期設定時に自動登録されたStatic routeはdisableにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/feabda36-9afc-7c4d-0c7e-a0384bb94f8d.png)

- BGP設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/05bb27ae-e086-f28a-8628-d5a930dabb67.png)

- IPV4　Policy設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/8e5dc98b-aa67-da9f-1805-77e84a1d7637.png)

- VPN 2経路の重みづけ 方法1(LOCAL_PREF, AS_PATHプリペンド)
BGP peerはルートの重みづけを行わないと非対称ルーティングになる可能性があります。
Tunnnel1に対しての送信にLocal Preferenceを設定しTunnnel2に対して受信のPathを1追加することによって優先度を調整しています。
          
``` Fortigate.
#route-map設定済みの表示
FortiGate-50E # config router route-map
FortiGate-50E (route-map) # show
config router route-map
    edit "routemap-prepend-out"
        config rule
            edit 1
                set set-aspath "64512"
            next
        end
    next
    edit "routemap-local-pref"
        config rule
            edit 1
                set set-local-preference 200
            next
        end
    next
end

#bgp設定済みの表示
FortiGate-50E # config router bgp
FortiGate-50E (bgp) # show
config router bgp
    set as 64512
    config neighbor
        edit "192.168.0.10"
            set remote-as 31898
            set route-map-in "routemap-local-pref"
        next
        edit "192.168.0.14"
            set remote-as 31898
            set route-map-out "routemap-prepend-out"
        next
    end
    config network
        edit 1
            set prefix 192.168.100.0 255.255.255.0
        next
    end

設定を確認したらbgpリセット
FortiGate-50E # execute router clear bgp all
```
適用結果、トンネル1がルーティング優先されます。
OCI
トンネル1が受信したASパスは2(64512+OCIが追加した65515)となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/f116f5b2-b78d-683b-dce8-b93eee21e11e.png)
トンネル2が受信したASパスは3(64512+Prependの64512+OCIが追加した65515)となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/a79ae53b-3735-8cc8-5d38-ff7d9ac8f9ea.png)
ASパスが短いトンネル1(Home-Rtr-VPN-tun1)が優先されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/967bb2a4-f049-d05a-1e62-9dc298c620a2.png)
Fortigate
``` Fortigate.
#トンネル2(192.168.0.14)のLocalPrefは200となります
FortiGate-50E # get router info bgp network
BGP table version is 2, local router ID is 192.168.179.102
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight RouteTag Path
*> 10.105.1.0/24    192.168.0.10             0    200      0        0 31898 i <-/1>
*                   192.168.0.14             0             0        0 31898 i <-/->
略
FortiGate-50E #

#その結果トンネル1が優先されています
FortiGate-50E #  get router info routing-table all

Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       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
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       * - candidate default

B       10.105.1.0/24 [20/0] via 192.168.0.10, Home-Rtr-tun1, 00:00:30
         ↑ トンネル1が優先されています
FortiGate-50E # 
```
- VPN 2経路の重みづけ 方法2(AS_PATHプリペンド)
 Tunnnel2に対して送信と受信のPathを1追加することによって優先度を下げています。
 設定方法については以下を参照してください。
[Technical Tip: How to configure BGP AS prepending](https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-configure-BGP-AS-prepending/ta-p/190528)

``` Fortigate.
#route-map設定済みの表示
FortiGate-50E # config router route-map

FortiGate-50E (route-map) # show
config router route-map
    edit "routemap-prepend-out"
        config rule
            edit 1
                set set-aspath "64512"
            next
        end
    next
    edit "routemap-prepend-in"
        config rule
            edit 1
                set set-aspath "31898"
            next
        end
    next
end
#bgp設定済みの表示
FortiGate-50E # config router bgp

FortiGate-50E (bgp) # show
config router bgp
    set as 64512
    config neighbor
        edit "192.168.0.10"
            set remote-as 31898
        next
        edit "192.168.0.14"
            set remote-as 31898
            set route-map-in "routemap-prepend-in"
            set route-map-out "routemap-prepend-out"
        next
    end

#設定を確認したらbgpリセット
FortiGate-50E # execute router clear bgp all
```
適用結果、トンネル1がルーティング優先されます。
OCI
トンネル1が受信したASパスは2(64512+OCIが追加した65515)となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/82b82d3d-077e-76b2-d16c-48b6fcab02c2.png)

トンネル2が受信したASパスは3(64512+Prependの64512+OCIが追加した65515)となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/f58ffe1d-d82c-8184-c831-3f67874ab1c0.png)
参考URL:
[Routing Details for Connections to Your On-Premises Network](https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/routingonprem2.htm)

ASパスが短いトンネル1(Home-Rtr-VPN-tun1)が優先されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/7385f5b9-3d3e-c62c-872c-cc842d650c97.png)

Fortigate
``` Fortigate.
#トンネル2(192.168.0.14)のASパスは2(OCIの31898+Prependの31898)となります。
FortiGate-50E # get router info bgp network
BGP table version is 2, local router ID is 192.168.100.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight RouteTag Path
*  10.105.1.0/24    192.168.0.14             0             0        0 31898 31898 i <-/->
*>                  192.168.0.10             0             0        0 31898 i <-/1>

略
FortiGate-50E #

#その結果トンネル1が優先されています
FortiGate-50E # get router info routing-table all

Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       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
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       * - candidate default

S*      0.0.0.0/0 [10/0] via 192.168.179.1, wan1
B       10.105.1.0/24 [20/0] via 192.168.0.10, Home-Rtr-tun1, 00:01:23
         ↑ トンネル1が優先されています
FortiGate-50E # 
``` 


- IPSec tunnel mss調整
mss調整する必要がある場合は以下で変更が可能です。
``` Fortigate.
#WAN IFのMTUを調整する場合の例
config system interface
    edit wan1
        set mtu-override enable
        set mtu 1340
end
#MSSを調整する場合はPolicyごとに設定が必要とのことです
以下はmss=1300に調整しています
config firewall policy
    edit 6
        set tcp-mss-sender 1300
        set tcp-mss-receiver 1300
end
    edit 7
        set tcp-mss-sender 1300
        set tcp-mss-receiver 1300
end

```

# Pingテスト
OCIサーバーからオンプレへのping結果
``` Server.
[opc@instance]$ ping 192.168.100.103
PING 192.168.100.103 (192.168.100.103) 56(84) bytes of data.
64 bytes from 192.168.100.103: icmp_seq=1 ttl=125 time=200 ms
64 bytes from 192.168.100.103: icmp_seq=2 ttl=125 time=191 ms
64 bytes from 192.168.100.103: icmp_seq=3 ttl=125 time=192 ms
64 bytes from 192.168.100.103: icmp_seq=4 ttl=125 time=218 ms
^C
--- 192.168.100.103 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 191.126/200.481/218.087/10.759 ms
[opc@instance]$

```

オンプレからOCIサーバーへのping結果
``` Server.
C:\>ping 10.105.1.122 -t

Pinging 10.105.1.122 with 32 bytes of data:
Reply from 10.105.1.122: bytes=32 time=189ms TTL=60
Reply from 10.105.1.122: bytes=32 time=190ms TTL=60
Reply from 10.105.1.122: bytes=32 time=184ms TTL=60
Reply from 10.105.1.122: bytes=32 time=187ms TTL=60

10.105.1.122 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 184ms、最大 = 190ms、平均 = 187ms
Ctrl+C
^C
C:\>
```