前回設定した Fortinet の FortiWiFi を使用して、Oracle Cloud Infrastructure (OCI) へ Site-to-Site VPN (IPSec) を IKEv2 (Internet Key Exchange version 2) と BGP(Border Gateway Protocol)+ ECMP(Equal Cost Multi Path) を使用して接続してみてみます。
■ 構成図
■ サイト間VPNの設定
● 全体的なプロセス
サイト間VPNを設定するための全体的なプロセスを次に示します。
ここでは、事前にfまでおき、今回は 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パラメータを使用して設定します。
■ OCI側設定
● CPEオブジェクト作成
このタスクでは、CPEデバイスの仮想表現であるCPEオブジェクトを作成
1) OCIコンソール画面
ナビゲーション・メニューを開き、[ネットワーク]をクリックします。[顧客接続]で、「顧客オンプレミス機器」をクリック
3) CPEの作成画面
次の値を入力し、[CPEの作成]をクリック
・ 名前: CPEオブジェクトのわかりやすい名前
・ IPアドレス: VPNのユーザー側にある実際のCPE/エッジ・デバイスのパブリックIPアドレス(開始する前に収集する情報のリスト参照)
・ パブリックIPアドレス: VPNのユーザー側にある実際のCPE/エッジ・デバイスのパブリックIPアドレス(開始する前に収集する情報のリスト参照)
・ タグ: 必要に応じて後でタグを追加詳細は、リソース・タグを参照
3) CPEの作成完了
● CPEオブジェクトへのIPSec接続の作成
このタスクでは、IPSecトンネルを作成し、それに対するルーティングのタイプ(BGP動的ルーティングまたは静的ルーティング)ここでは、BGP動的ルーティングを構成
1) OCIコンソール画面
ナビゲーション・メニューを開き、「ネットワーク」をクリックします。「顧客接続」で、「サイト間VPN」をクリック
2) サイト間VPN画面
「IPSec接続の作成」をクリック
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アドレスを入力
■ FortiWiFi設定
● Tunnelインターフェース1つ目作成
1) FortiWiFiコンソール画面
FortiWiFiへログインし、[VPN] > [IPSec Wizard]をクリックし、次を入力し、[Next]をクリック
・Name : トンネル・インターフェースの名前を入力
・Tmplate type: [Custom]
2) New VPN Tunnel画面
次を入力し、[OK]をクリックして作成
- 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]を選択
- Pre-shared Ley: OCI Tunnel01 で設定した値を入力
- IKE: [Verison 2]を選択
- Encryption: [AES256]
- Authentication: [SHA384]
- Diffie-Hellman Group: [5]
- Key LIfetime(Seconds): [28800]
- 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]を入力
3) Tunnelインターフェース1つ目作成完了
● Tunnelインターフェース1つ目のファイアウォール・ポリシー作成
・FortiWiFi -> OCI へのポリシー作成
FortiWiFiから出ていくトラフィックのファイアウォール・ポリシーを作成
1) FortiWiFiコンソール画面
FortiWiFiコンソール [Policy & Objects] > [IPv4 Polic]を選択し、[Create New]をクリック
2) New Policy画面
次を入力し、[OK]をクリックし作成
- Name: 任意の名前を設定
- Incoming Interface: [Internal]を選択
- Outogoing Interface: [OCI-TUnnel01]を選択
- Suource: [all]を選択
- Destination: [all]を選択
- Schedule: [all]を選択
- Service: [all]を選択
- Action: : [ACCEPT]を選択
- Inspection Mode: [Flao-based]を選択
- NAT: [Off]を選択
3) FortiWiFi -> OCI へのポリシー作成完了
・OCI -> FortiWiFiへのファイアウォール・ポリシー作成
OCIから入ってくるトラフィックのファイアウォール・ポリシーを作成
1) New Policy画面
次を入力し、[OK]をクリックし作成
- Name: 任意の名前を設定
- Incoming Interface: [OCI-TUnnel01]を選択
- Outogoing Interface: [Internal]を選択
- Suource: [all]を選択
- Destination: [all]を選択
- Schedule: [all]を選択
- Service: [all]を選択
- Action: : [ACCEPT]を選択
- Inspection Mode: [Flao-based]を選択
- NAT: [Off]を選択
2) FortiWiFi -> OCI へのポリシー作成完了
● Tunnelインターフェース1つ目の起動確認
Tunnelインターフェースの稼働には少し時間がかかります。
時間かかる場合は、FortiWiFiからTunnelをUPさせてみてみます
・ 手動起動
1) IPsec-Monitor画面
FortiWiFiへログインし、[Monitor] > [IPsec Monito]を選択し、
作成したIPSec Tunnelを選択し、[Bring UP] から対象のTunnelをクリック
3) IPsec Tunnels画面
IPsec Tunnels画面から、UPしていることを確認
● OCI側 Tunnelインターフェース1つ目起動確認
● Tunnelインターフェース2つ目作成
1つ目と同様に作成と設定をします。
・ 2つ目Tunnelインターフェース作成画面
・ 2つ目Tunnelインターフェース作成完了
・ 2つ目Tunnelインターフェース・ポリシー作成完了
● 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 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 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 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」へ移動し、目的のインタフェースを選択し、「編集」をクリック
2) Edit Interface画面
次の項目を設定し、[OK]をクリックして設定
- IP: トンネル・インタフェースのFortiGate終端に割り当てたBGP IPアドレスを入力
- リモートIP/ネットワーク・マスク: トンネル・インタフェースのOracle終端に割り当てたBGP IPアドレスを追加
- Pingアクセス(推奨): 「管理アクセス」セクションで、pingアクセスを有効にします。
3)設定完了
2つのTunnelインターフェースへ IP/Netmask と Administrative Accrss が設定されていることを確認
● BGP設定画面有効化
デフォルトでは、WebコンソールではBGPの設定表示はされないため、有効化します。
1) Feature Visibility画面
[System] > [Feature Visibility]へ移動し、[Advanced Routing]を有効化
● BGP設定
1) BGP設定
[Network] > [BGP]へ移動し、次の項目を入力し、[OK]をクリック
- Local AS: OCI IPsec設定した FortiWiFi側の BGP ASNを入力
- Route ID: ピア間でこのBGPルーターを一意に識別するための値
- Neighbors: 「新規作成」をクリックして、トンネルのOracle終端のBGP IPアドレスと、Oracle BGP ASNを入力します。Oracleの商用クラウド用のBGP ASNは31898です。
- Networks: オプションで、このフィールドを使用して、BGP経由で特定のサブネットを通知します。「拡張オプション」セクションで、「再分散」セクションを使用してサブネットを通知することもできます。
1) BGP送信/受信確認
[Monitor] > [Routing Monitor]へ移動し、オンプレミス側と OCI側のネットワークがBGPで送信/受信されていることを確認
● OCI側BGP確認
2) DRG ルート・ルール画面
2つの IPSec Tunnel 設定により、重複ルート構成になるため、BGPの動作によりどちらか1つの Tunnelがアクティブになり、もう片方は競合ステータスになります。
■ 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を有効化します。
2) DRGルート表画面
対象のDRGルート表画面にある [編集]をクリック
3) DRGルート表の編集画面
[ECMPの有効化]へチェックし有効化
4) すべてのルート・ルールの取得画面
対象のDRGルート表画面にある [すべてのルート・ルールの取得]をクリックし、競合するルートが無くなっていることを確認
■ MTU/MSS設定
最大転送単位(MTU)が原因でトンネルのフラッピングが発生する場合、FortiWiFi の各トンネル・インターフェースへMTU/MSS値を設定します。
MTU/MSSの特定方法の詳細は、MTU の概要を参照してください。
※ 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 ドキュメント
- サイト間VPN
- 全体的なプロセス
- サポートされているIPSecパラメータ
- CPE構成: FortiGate
- VCNと接続のトラブルシューティング
- サイト間VPNのトラブルシューティング
- MTUの概要
・ Fortigate ドキュメント
- IPsec VPNs
- Policy and Objects
- ECMP routes for recursive BGP next hop resolution
- Interface MTU packet size
- Technical Tip: MTU override of IPsec VPN interface