FortiGateVM on AWS でSD-WAN/ADVPN2.0を試す(第二回:ADVPN設定編)
はじめに
NTTデータ セキュリティ&ネットワーク事業部 テクニカル・グレードの田中智志です。本BlogではAmazon Web Services(AWS)上にデプロイしたFortiGateVMを含む構成でADVPN2.0とSD-WANのトラフィックコントロールについて試した内容を紹介しています。
第一回は検証構成と使用するテクニック(BGP on Loopback、IKE extension:exchange-ip-addrv4、RR(Route Reflector)レスのダイナミックBGP)およびそのメリット、FortiGateVMのAWS上でのデプロイまで解説しました。第二回となる今回はADVPNの設定編となります。
第一回:概要編はこちらです↓
構成
今回は以下の構成のうち、ADVPN ShortcutとルートリフレクタレスのダイナミックBGPの確立までを見ていきます。SD-WANによるDirect Internet Access(ローカルブレークアウト)、Remote Internet Accessについては第三回で扱う予定です。
設定1:ADVPN
まずはHUB&Spokeトポロジの土台となるADVPNの設定をそれぞれのデバイス上で行っていきます。
従来のADVPNではVPN用のトンネルに対するIPアドレス、ネットワークプレフィックス、(場合によっては)スタティックルートが必要でしたが、BGP on Loopback+IKE extension:exchange-ip-addrv4を利用することでそれらの構成要素が不要になり、より簡素なコンフィグレーションとネットワーク全体のスケーラビリティ向上が実現できます。
FortiGateにはGUIとCLIの設定方法が用意されています。GUIでの設定は分かりやすくシンプルというメリットがありますが、執筆時点ではADVPNやダイナミックBGPの詳細な設定ができない箇所が部分的に存在しているため、今回の検証では基本的にCLIで設定を行います。
なおコンフィグレーションを全て表示すると記事上の見た目がビジーになるため項目ごとにアコーディオン方式になっています。お手数ですがクリックして展開しご確認ください。
HUB(FortiGateVM)
ループバックインターフェース
BGPピアリングとADVPNショートカット監視に使用するループバックインターフェースを設定します。
config system interface
edit "Lo"
set ip 10.202.1.11 255.255.255.255
set allowaccess ping
set type loopback
set vdom "root"
next
end
ロケーションID
IPsec VPNで場所を識別するために使用されます。BGPピアリングに使用するループバックインターフェースのIPアドレスを設定することが推奨されています。
config system settings
set location-id 10.202.1.11
end
ADVPNのPhase1インターフェース
IKEフェーズ1の設定をします。ADVPNの一部やIKE extension:exchange-ip-addrv4の設定もここで行います。
config vpn ipsec phase1-interface
edit "advpn"
set type dynamic
set interface "port1"
set ike-version 2
set peertype any
set net-device disable
set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
set add-route disable
set dpd on-idle
set auto-discovery-sender enable
set exchange-ip-addr4 10.202.1.11
set psksecret *****
set dpd-retryinterval 60
next
end
set ike-version 2
IKEバージョン2はADVPN2.0の必須要件です。
set net-device disable
ショートカットトンネル用の動的なトンネルインターフェースを作成する機能で、HUBでは無効にします。
set add-route disable
ダイナミックトンネルのネゴシエーション時、自動的にリモートルートを追加する機能で、無効にします。
set auto-discovery-sender enable
Spokeにオートディスカバリーショートカットメッセージを送信する機能を有効にします。
set exchange-ip-addr4 10.202.1.11
SpokeからのBGPパケットがHUBのループバックインターフェースに到達するためのスタティックルートをSpokeに注入します。
ADVPNのPhase2インターフェース
IKEフェーズ2の設定をします。
config vpn ipsec phase2-interface
edit "advpn"
set phase1name "advpn"
set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm aes256gcm chacha20poly1305
set keepalive enable
next
end
ADVPNトンネルインターフェース
ADVPNのPhase1、Phase2インターフェースを設定後、以下が自動的に作成されていることを確認します。
config system interface
edit "advpn"
set vdom "root"
set type tunnel
set interface "port1"
next
end
SD-WANゾーンとメンバー
SD-WANゾーンとSD-WANメンバーを定義します。
次回設定するSD-WANルールだけでなく、ファイアウォールポリシーやルーティングの設定にも必要な概念となります。
config system sdwan
set status enable
config zone
edit underlay
next
edit ADVPN
next
end
config members
edit 1
set interface port1
set zone underlay
next
edit 2
set interface advpn
set zone ADVPN
set source 10.202.1.11
next
end
end
アドレスグループ
ファイアウォールポリシー設定を簡素化するため、拠点LANサマリアドレスをグループ化します。
config firewall address
edit "Spoke-Subnets"
set subnet 192.168.0.0 255.255.0.0
next
end
ファイアウォールポリシー
HUBに流入するSpokeからのトラフィックと、ループバックインターフェースへのBGPパケットを許可します。
config firewall policy
edit 1
set name "ADVPN to ADVPN"
set srcintf "ADVPN"
set dstintf "ADVPN"
set action accept
set srcaddr "all"
set dstaddr "Spoke-Subnets"
set schedule "always"
set service "ALL"
next
edit 2
set name "VPN to Loopback"
set srcintf "ADVPN"
set dstintf "Lo"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "BGP" "PING"
next
end
BGP
HUBではneighbor-groupとneighbor-rangeを設定します。neighbor-groupはルートマップやポリシーなど共通の設定を複数のBGPネイバーに同時に適用できるため、コンフィグレーションが簡素化されます。なお、eBGPネイバーを確立する必要がある場合、必要に応じてaspath-listを併用することによりBGPピアを形成するASの範囲を限定できます。(今回の構成では必須ではありません)
config router aspath-list
edit "SDWAN_AS"
config rule
edit 1
set action permit
set regexp "6520."
next
end
next
end
config router bgp
set as 65201
set router-id 10.202.1.11
set keepalive-timer 1
set holdtime-timer 3
set ebgp-multipath enable
set ibgp-multipath enable
set recursive-next-hop enable
set recursive-inherit-priority enable
config neighbor-group
edit "DYN_EDGE"
set advertisement-interval 1
set capability-graceful-restart enable
set next-hop-self enable
set soft-reconfiguration enable
set interface "Lo"
set remote-as-filter "SDWAN_AS"
set update-source "Lo"
next
end
config neighbor-range
edit 1
set prefix 10.200.0.0 255.252.0.0
set neighbor-group "DYN_EDGE"
next
end
end
set recursive-next-hop enable
ルーティングテーブルの再帰ルックアップでBGPルートを利用することを許可します。
set recursive-inherit-priority enable
ヘルスチェックSLA設定で定義された優先度であるルート優先度を親から継承できるようにします。
Spoke(DC:FortiGate 40F)
インターフェース
config system interface
edit "lan"
set ip 192.168.2.250 255.255.255.0
set allowaccess ping https ssh
end
2 admin session(s) are currently connected on this interface.
Are you sure you want to continue? (y/n)y
※LAN側IPアドレスを変更するために出力される注意喚起です。以降は新しく設定したIPアドレスに再ログインして作業します。
config system interface
edit "wan"
set mode static
set ip *.*.*.* 255.255.255.0 ※自分の環境に合わせてインターネットアクセスが可能なように設定します。
next
edit "Lo"
set ip 10.200.1.250 255.255.255.255
set allowaccess ping
set type loopback
set vdom "root"
next
end
ロケーションID
config system settings
set location-id 10.200.1.250
end
ADVPNのPhase1インターフェース
IKEフェーズ1の設定をします。
config vpn ipsec phase1-interface
edit "advpn"
set interface "wan"
set ike-version 2
set peertype any
set net-device enable
set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
set dpd on-idle
set auto-discovery-receiver enable
set remote-gw *.*.*.*
set psksecret *****
set dpd-retryinterval 5
set exchange-ip-addr4 10.200.1.250
next
end
set net-device enable
ADVPN Shortcut用の動的なトンネルインターフェースを作成する機能です。ショートカットトンネルが作成されると、ルーティングテーブルとカーネルルーティングテーブルにルートがインストールされます。このショートカットルートは、ショートカットトンネルを介したトラフィックのルーティングに使用されます。
set auto-discovery-receiver enable
SpokeではオートディスカバリーショートカットメッセージのReceiverとして有効化します。
set remote-gw *.*.*.*
AWSのElastic IPを設定します。
ADVPNのPhase2インターフェース
IKEフェーズ2の設定をします。
config vpn ipsec phase2-interface
edit "advpn"
set phase1name "advpn"
set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm aes256gcm chacha20poly1305
set auto-negotiate enable
next
end
SD-WANゾーンとメンバー
config system sdwan
set status enable
config zone
edit "underlay"
next
edit "ADVPN"
next
end
config members
edit 1
set interface "advpn"
set zone "ADVPN"
set source 10.200.1.250
next
edit 2
set interface "wan"
set zone "underlay"
set gateway *.*.*.* ※自分の環境に合わせて設定する
next
end
end
set interface "wan"
デフォルトのファイアウォールポリシーにWANインターフェースが参照されている場合はファイアウォールポリシーを削除しないとSD-WANメンバーにアサインすることができないので注意しましょう。
ファイアウォールポリシー
次回設定を行うローカルブレークアウトのためのインターネット向けトラフィック、LANからADVPNへのトラフィック、ループバックインターフェースへのBGPパケット、ADVPNからLANへのトラフィックを許可します。
config firewall policy
edit 1
set name "Internet Policy"
set srcintf "lan"
set dstintf "underlay"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
next
edit 2
set name "LAN to ADVPN"
set srcintf "lan"
set dstintf "ADVPN"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
next
edit 3
set name "VPN to Loopback"
set srcintf "ADVPN"
set dstintf "Lo"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "BGP" "PING"
next
end
edit 4
set name "ADVPN to LAN"
set srcintf "ADVPN"
set dstintf "lan"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
end
デフォルトルート
config router static
edit 1
set distance 1
set sdwan-zone "underlay" "ADVPN"
next
end
BGP
ここではまず、ルートリフレクタレスのダイナミックBGPが設定されていないときの動作を確認するため、スタティックBGPでの設定を行います。
config router bgp
set as 65201
set router-id 10.200.1.250
set keepalive-timer 1
set holdtime-timer 3
set ibgp-multipath enable
set recursive-next-hop enable
set graceful-restart enable
config neighbor
edit "10.202.1.11"
set advertisement-interval 1
set capability-graceful-restart enable
set soft-reconfiguration enable
set interface "Lo"
set remote-as 65201
set connect-timer 1
set update-source "Lo"
next
end
config network
edit 1
set prefix 192.168.2.0 255.255.255.0
next
end
Spoke(Branch:FortiGate 40F)
Spoke(DC)と同様の設定のため割愛します。IPアドレスなどは構成に合わせて設定します。
動作確認1:ADVPNの確認
HUB(FortiGateVM)
IKE extension:exchange-ip-addrv4の確認
HUBでのdebugを有効にしてBGP on LoopbackのIKE extension:exchange-ip-addrv4を確認します。IKEによって「add peer static route」とあり、対向のルータのLoopbackインターフェースのIPアドレスを自身のスタティックルートに追加する様子です。
# diagnose debug application ike -1
Debug messages will be on for 30 minutes.
# diagnose debug enable
~SNIP~
ike V=root:0:advpn: adding new dynamic tunnel for *.*.*.*(Spoke(DC)のGlobal IPアドレス):1024
ike V=root:0:advpn_1: tunnel created tun_id 10.200.1.250/::10.0.0.4 remote_location 10.200.1.250
ike V=root:0:advpn_1: added new dynamic tunnel for *.*.*.*(Spoke(DC)のGlobal IPアドレス):1024
ike V=root:0:advpn_1:433: established IKE SA 72e6cecbc2ce573d/2899c2e023a104ba
ike V=root:0:advpn_1:433: auto-discovery sender
ike V=root:0:advpn_1:433: auto-discovery 1
ike V=root:0:advpn_1:433: check peer route: if_addr4_rcvd=1, if_addr6_rcvd=0, mode_cfg=0
ike V=root:0:advpn_1:433: update peer route 0.0.0.0 -> 10.200.1.250
ike V=root:0:advpn_1: add peer static route 10.200.1.250 via 10.200.1.250 dev advpn_1
~SNIP~
IKE、IPsecの確認
IKE SAとIPsec SAがともにEstablishedになっていることを確認します。なお今回の検証環境ではSpoke側のインターネット接続にNAT機器を介しているため、FortiGateが自動的にNAT機器を検出してNATトラバーサル(4500/udp)で動作しています。
# get vpn ike gateway
vd: root/0
name: advpn_0
version: 2
interface: port1 3
addr: 10.2.1.11:4500 -> *.*.*.*(Spoke(Branch)のGlobal IPアドレス):4500
created: 6295s ago
peer-id: 192.168.1.252
peer-auth: no
IKE SA created: 1/1 established: 1/1 time: 210/210/210 ms
IPsec SA created: 1/1 established: 1/1 time: 0/0/0 ms
id/spi: 330 26016a73b970571e/1181ae436ffefab5
direction: responder
status: established 6295-6295s ago = 210ms
proposal: aes-128-sha256
SK_ei: 79172d97e7c35c55-d529c20b6c6c999e
SK_er: 1988f5ce162145e2-97e493fa9a3a8105
SK_ai: dde44972b58dfd1d-76316d45a56d652d-1f8ac2dc5d46ebe4-b3f65337fa31b344
SK_ar: ddac5127e7996089-77ae3c9cf4d8b747-b6feb0383f3d9bc0-1a08fbab59d2a416
lifetime/rekey: 86400/79834
DPD sent/recv: 00000000/00000000
vd: root/0
name: advpn_1
version: 2
interface: port1 3
addr: 10.2.1.11:4500 -> *.*.*.*(Spoke(DC)のGlobal IPアドレス):1024
created: 957s ago
peer-id: 192.168.1.251
peer-auth: no
IKE SA created: 1/1 established: 1/1 time: 210/210/210 ms
IPsec SA created: 1/1 established: 1/1 time: 0/0/0 ms
id/spi: 433 72e6cecbc2ce573d/2899c2e023a104ba
direction: responder
status: established 957-957s ago = 210ms
proposal: aes-128-sha256
SK_ei: 864ed1786e51e172-dcaac83b60dff288
SK_er: 5cc3d694c8ba307d-630f35aaa8fed245
SK_ai: 29dadef154b3d401-f9adc9fbc85870ef-6c271c347b3979c4-45da4cc28b252165
SK_ar: 980a7d7f2630815d-65b730a098964495-c83e7b0f0cf1813a-20fc5bb2c86d2f94
lifetime/rekey: 86400/85172
DPD sent/recv: 00000000/00000000
IKE,IPsec関連の確認コマンドには他にも以下などがありますので、必要に応じて状態を確認します。
get ipsec tunnel list
diagnose vpn ike gateway list
diagnose vpn tunnel list
Spoke(DC:FortiGate 40F)
HUB側はIPsecVPNのResponderですが、Spoke側は動的IPアドレスのためInitiatorになります。
# get vpn ike gateway
vd: root/0
name: advpn
version: 2
interface: wan 5
addr: 192.168.1.251:4500 -> *.*.*.*(AWSのElastic IP):4500
created: 184s ago
peer-id: 10.2.1.11
peer-auth: no
IKE SA created: 1/1 established: 1/1 time: 400/400/400 ms
IPsec SA created: 1/1 established: 1/1 time: 400/400/400 ms
id/spi: 29 bad8a17b34f27e31/b5f765ec4b9501f6
direction: initiator
status: established 184-183s ago = 400ms
proposal: aes-128-sha256
SK_ei: 4e0988d52e1e1b30-aa5156498f1b673d
SK_er: b9e468f6f3e0ee21-dba08be7306af489
SK_ai: f52c989448738f5c-dc9c167045ab2e50-2ecee6d597e4bddb-416b682e5da4d24b
SK_ar: 3e915be11929d0c9-f3cae418a3c2a930-fba6d50e5479f663-8288550af2a30644
lifetime/rekey: 86400/85916
DPD sent/recv: 00000000/00000000
Spoke(Branch:FortiGate 40F)
Spoke(DC)と同様のため割愛します。
動作確認2:BGPの確認
HUB(FortiGateVM)
BGPネイバー、BGPテーブル、ルーティングテーブルを確認します。各SpokeのBGPピアからLAN側ルートをiBGPで学習しています。各SpokeのLAN側ルートへのネクストホップは各SpokeのループバックインターフェースのIPアドレスになっていますが、IKE extension:exchange-ip-addrv4によってスタティックルートで学習されているため再帰解決が可能になっています。
# get router info bgp summary
VRF 0 BGP router identifier 10.202.1.11, local AS number 65201
BGP table version is 4
1 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.200.1.250 4 65201 1046 1045 3 0 0 00:17:22 1
10.202.7.250 4 65201 6384 6383 1 0 0 01:46:19 1
Total number of neighbors 2
# get router info bgp network
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
VRF 0 BGP table version is 4, local router ID is 10.202.1.11
Network Next Hop Metric LocPrf Weight RouteTag Path
*>i192.168.2.0 10.200.1.250 0 100 0 0 i <-/1>
*>i192.168.7.0 10.202.7.250 0 100 0 0 i <-/1>
Total number of prefixes 2
# get router info routing-table all
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
V - BGP VPNv4
* - candidate default
Routing table for VRF=0
S* 0.0.0.0/0 [5/0] via 10.2.1.1, port1, [1/0]
C 10.2.1.0/24 is directly connected, port1
S 10.200.1.250/32 [15/0] via advpn tunnel 10.200.1.250, [1/0]
C 10.202.1.11/32 is directly connected, Lo
S 10.202.7.250/32 [15/0] via advpn tunnel 10.202.7.250, [1/0]
B 192.168.2.0/24 [200/0] via 10.200.1.250 (recursive via advpn tunnel 10.200.1.250 [1]), 00:17:35, [1/0]
B 192.168.7.0/24 [200/0] via 10.202.7.250 (recursive via advpn tunnel 10.202.7.250 [1]), 01:46:32, [1/0]
Spoke(DC:FortiGate 40F)
iBGPでルートリフレクタを設定していないため、Spoke(Branch)のLAN側ルートを学習していません。※以降の手順でルートリフレクタレスのダイナミックBGPを確認します。
FortiGate-40F # get router info bgp summary
VRF 0 BGP router identifier 10.200.1.250, local AS number 65201
BGP table version is 1
1 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.202.1.11 4 65201 142 143 1 0 0 00:02:18 0
Total number of neighbors 1
FortiGate-40F # get router info bgp network
VRF 0 BGP table version is 1, local router ID is 10.200.1.250
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
*> 192.168.2.0 0.0.0.0 100 32768 0 i <-/1>
Total number of prefixes 1
FortiGate-40F # get router info routing-table all
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
V - BGP VPNv4
* - candidate default
Routing table for VRF=0
S* 0.0.0.0/0 [1/0] via 192.168.1.1, wan, [1/0]
[1/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
C 10.200.1.250/32 is directly connected, Lo
S 10.202.1.11/32 [15/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
C 192.168.1.0/24 is directly connected, wan
C 192.168.2.0/24 is directly connected, lan
Spoke(Branch:FortiGate 40F)
Spoke(DC)と同様のため割愛します。
動作確認3:疎通
Spoke間通信
現状のHUB設定にはルートリフレクタがないためSpokeルータは別のSpokeのLAN側ルートを学習していませんが、デフォルトルートをADVPNにも向けているので疎通は可能になっています。ただし必ずHUBを経由する通信になっていることに注目してください。(10.2.1.11、192.168.1.251はHUBとSpoke(DC)のアンダーレイインターフェースのアドレスです)
# Spoke(Branch)のPCからSpoke(DC)のPCへPingとTracerouteを実行
PS C:\Users\user01> ping 192.168.2.100
192.168.2.100 に ping を送信しています 32 バイトのデータ:
192.168.2.100 からの応答: バイト数 =32 時間 =332ms TTL=125
192.168.2.100 からの応答: バイト数 =32 時間 =332ms TTL=125
192.168.2.100 からの応答: バイト数 =32 時間 =333ms TTL=125
192.168.2.100 の ping 統計:
パケット数: 送信 = 3、受信 = 3、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 332ms、最大 = 333ms、平均 = 332ms
PS C:\Users\user01> tracert -d 192.168.2.100
192.168.2.100 へのルートをトレースしています。経由するホップ数は最大 30 です
1 <1 ms <1 ms <1 ms 192.168.7.250
2 166 ms 166 ms 166 ms 10.2.1.11
3 330 ms 330 ms 330 ms 192.168.1.251
4 332 ms 332 ms 332 ms 192.168.2.100
# ルーティングテーブルにSpoke(DC)のループバックインターフェースのIPアドレスが学習され、shortcutトンネルが確立されている
FortiGate-40F # get router info routing-table all
~SNIP~
S* 0.0.0.0/0 [1/0] via 192.168.1.1, wan, [1/0]
[1/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
S 10.200.1.250/32 [15/0] via advpn_0 tunnel 192.168.1.251, [1/0]
S 10.202.1.11/32 [15/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
C 10.202.7.250/32 is directly connected, Lo
C 192.168.1.0/24 is directly connected, wan
C 192.168.7.0/24 is directly connected, lan
# get vpn ike gateway
vd: root/0
name: advpn_0
version: 2
interface: wan 5
addr: 192.168.1.252:500 -> 192.168.1.251:500
created: 23509s ago
peer-id: 192.168.1.251
peer-auth: no
IKE SA created: 1/1 established: 1/1 time: 10/10/10 ms
IPsec SA created: 1/1 established: 1/1 time: 10/10/10 ms
~SNIP~
設定2:ルートリフレクタレスのダイナミックBGP
これまでの設定ではスタティックBGPの動作を確認しました。ここからはFortiOS7.4以降で新たに追加されたルートリフレクタレスのダイナミックBGPを設定し、Spoke間のShortcutによる直接通信を可能にします。(従来のADVPNでもSpoke間のShortcutは可能ですが、今回の検証では解説が煩雑になるため省略しました)
HUB(FortiGateVM)
Spokeのサマリールート広告
SpokeのLAN側サマリールートをHUBからアドバタイズするようにします。サマリールートへのスタティックルートをブラックホールルートとして設定し、それをBGPのnetworkコマンドで指定します。
config router static
edit 1
set dst 192.168.0.0 255.255.0.0
set blackhole enable
next
end
config router bgp
config network
edit 1
set prefix 192.168.0.0 255.255.0.0
next
end
end
Spoke(DC:FortiGate 40F)
ADVPN Shortcut+ダイナミックBGPを有効にします。静的なneighborの設定は削除します。なお、このようなBGPネイバーの削除や再設定を行う場合は念のため再起動を行ったほうが確実だと思います。
ADVPN Shortcut+ダイナミックBGP
neighbor-groupとneighbor-rangeを使用して動的にSpokeとのBGPピアを形成できるように設定します。
config router bgp
config neighbor
delete 10.202.1.11
next
end
config neighbor-group
edit "spoke2spoke"
set advertisement-interval 1
set capability-graceful-restart enable
set next-hop-self enable
set passive disable
set soft-reconfiguration enable
set interface "Lo"
set remote-as 65201
set update-source "Lo"
next
end
config neighbor-range
edit 10
set prefix 10.200.0.0 255.252.0.0
set neighbor-group "spoke2spoke"
next
end
end
set passive disable
BGPネイバーへのオープンメッセージの送信を行わない機能(Passive)を無効(Disable)にします。ここではつまりオープンメッセージの送信を能動的に行う設定をしています。
SD-WANヘルスチェックとSD-WANルール
オーバーレイとなるSD-WANゾーンでADVPN 2.0を有効にし、SD-WANメンバーをプローブするために使用されるパフォーマンスSLAを割り当てます。HUBのループバックインターフェースへICMPによるヘルスチェックを行い、かつSpoke間通信が発生した場合にADVPN Shortcutを動作させるよう設定します。
config system sdwan
config health-check
edit "HUB"
set server "10.202.1.11"
set members 1
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
config zone
edit ADVPN
set advpn-select enable
set advpn-health-check "HUB"
next
end
config service
edit 1
set name "SPOKE2SPOKE"
set mode sla
set shortcut-priority enable
set dst "Spoke-Subnets"
set src "Spoke-Subnets"
config sla
edit "HUB"
set id 1
next
end
set priority-members 1
next
end
end
Spoke(Branch:FortiGate 40F)
Spoke(DC)と同様のため割愛します。
動作確認:ADVPN Shortcut
Spoke間通信
ルートリフレクタレスのダイナミックBGPによるADVPN Shortcutを確立させるため、Spoke間通信を発生させます。
Spoke(Branch:FortiGate 40F)での確認
# Spoke(Branch)のPCからSpoke(DC)のPCへTracerouteを実行
PS C:\Users\user01> tracert -d 192.168.2.100
192.168.2.100 へのルートをトレースしています。経由するホップ数は最大 30 です
1 <1 ms <1 ms <1 ms 192.168.7.250
2 166 ms 167 ms 167 ms 10.2.1.11
3 330 ms 330 ms 331 ms 192.168.1.251
4 332 ms 331 ms 333 ms 192.168.2.100
トレースを完了しました。
上記のとおり、最初のパケットはHUBを経由します。再度Tracerouteを実行するとHUBを経由していないことが確認できます。(10.2.1.11、192.168.1.251はHUBとSpoke(DC)のアンダーレイインターフェースのアドレスです)
PS C:\Users\user01> tracert -d 192.168.2.100
192.168.2.100 へのルートをトレースしています。経由するホップ数は最大 30 です
1 <1 ms <1 ms <1 ms 192.168.7.250
2 <1 ms <1 ms <1 ms 192.168.1.251
3 2 ms 2 ms 1 ms 192.168.2.100
トレースを完了しました。
Spoke(Branch)でDebugを有効にし、Spoke(Branch)におけるADVPN Shortcutを確立するまでのプロセスを見てみましょう。Spoke(Branch)からのSHORTCUT_OFFERと、Spoke(DC)からのSHORTCUT_REPLYがやり取りされていることが確認できます。
# diagnose debug application ike -1
Debug messages will be on for 30 minutes.
# diagnose debug enable
~SNIP~
ike V=root:0:advpn:0: processing notify type SHORTCUT_OFFER
ike V=root:0:advpn: ikev2_process_shortcut_offer sport 2048, dport 0, proto 1, iif 11
ike V=root:0:advpn: shortcut-offer 192.168.7.100->192.168.2.100 0 psk 64 ppk 0 ver 2 mode 0, peer-addr *.*.*.*(Spoke(Branch)のグローバルIPアドレス):1024
ike V=root:0 looking up shortcut by addr 192.168.2.100, resp-name:, name advpn, peer-addr *.*.*.*(Spoke(Branch)のグローバルIPアドレス):1024
ike V=root:0:advpn: send shortcut-query 15968817133350371884 c41a78f871ff36b9/0000000000000000 192.168.1.252 192.168.7.100->192.168.2.100 0 psk 64 ttl 32 nat 1 ver 2 mode 0 network-id 0
~SNIP~
ike V=root:0:advpn:0: processing notify type SHORTCUT_REPLY
ike V=root:0:advpn: recv shortcut-reply 15968817133350371884 c41a78f871ff36b9/acdbd28a6b55ca0e 192.168.1.251 to 192.168.7.100 0 psk 64 ppk 0 ver 2 mode 0 ext-mapping 192.168.1.251:500, network-id 0/0
ike V=root:0:advpn: iif 20 192.168.2.100->192.168.7.100 0 route lookup oif 19 lan gwy 0.0.0.0
ike V=root:root:0:advpn: finding rpdb ip: 192.168.2.100, gw: 192.168.7.100, dip: 192.168.7.100, sip: 192.168.2.100, sport 2048, dport 0, proto 1, oif 20, rpdb_id: 0x7f000001, c->iif: 11, info->iif: 0, igw->if_index: 5, info->vrf:0
~SNIP~
ike V=root:0:advpn: shortcut-reply received from 192.168.1.251:500, local-nat=yes, peer-nat=no
ike V=root:0:advpn:advpn: created connection: 0x99fb330 5 192.168.1.252->192.168.1.251:500.
ike V=root:0:advpn: adding new dynamic tunnel for 192.168.1.251:500
ike V=root:0:advpn_0: tunnel created tun_id 192.168.1.251/::192.168.1.251 remote_location 0.0.0.0
ike V=root:0:advpn_0: added new dynamic tunnel for 192.168.1.251:500
ike V=root:0:advpn_0: shortcut selector added new 1 a203
ike V=root:0:advpn_0:advpn: chosen to populate IKE_SA traffic-selectors
ike V=root:0:advpn_0: no suitable IKE_SA, queuing CHILD_SA request and initiating IKE_SA negotiation
~SNIP~
ike V=root:0:advpn_0:2:advpn:5: added IPsec SA: SPIs=b8566ff5/24258988
ike V=root:0:advpn_0:2:advpn:5: sending SNMP tunnel UP trap
ike V=root:0:advpn_0: tunnel up event
ike V=root:0:advpn_0: link is idle 5 192.168.1.252->192.168.1.251:0 dpd=1 seqno=1 rr=0
~SNIP~
また、以下のコマンドでADVPN Shortcutセッションの確認ができます。SD-WANヘルスチェックのステータス情報も保持していることが確認できます。
# diagnose sys sdwan advpn-session
Session head(FortiGate-40F-0-ADVPN:1)
(1) Service ID(1), last access(91208), remote health check info(1)
Selected path: local(, ) gw: 0.0.0.0 remote IP: 0.0.0.0(32.0.0.0)
Remote information:
1: latency: 163.635818 jitter: 0.353102 pktloss: 0.000000 mos: 4.280497 sla: 0x0 cost: 0 remote gw: advpn transport_group: 0 bandwidth up: 999998 down: 999996 bidirection: 1999994
ipv4: 192.168.1.251(10.200.1.250) ipv6 b034:da95:7f00:0:8a00::(2815:ffe6:7f00:0:3818:ffe6:7f00:31)
IKE/IPsec SA
ADVPN ShortcutのIPsec VPNトンネルを確認します。ピアアドレスは各SpokeのWANインターフェースのIPアドレスになっています。
# get vpn ike gateway
~SNIP~
vd: root/0
name: advpn_0
version: 2
interface: wan 5
addr: 192.168.1.252:500 -> 192.168.1.251:500
created: 138s ago
peer-id: 192.168.1.251
peer-auth: no
IKE SA created: 1/1 established: 1/1 time: 10/10/10 ms
IPsec SA created: 1/1 established: 1/1 time: 10/10/10 ms
~SNIP~
BGP
各SpokeはHUBから各拠点のLAN側ネットワークアドレスのサマリールートを学習しています。Spoke間通信が発生した後ADVPN Shortcutが確立され、ADVPN Shortcut経由でダイナミックBGPネイバーを確立し、Spoke(DC)から直接LAN側ルートをBGPで学習できていることが確認できます。ネクストホップはBGP on Loopbackにより各デバイスのループバックインターフェースのIPアドレスになっています。
# get router info bgp summary
VRF 0 BGP router identifier 10.202.7.250, local AS number 65201
BGP table version is 3
1 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.200.1.250 4 65201 147 147 3 0 0 00:02:22 1
10.202.1.11 4 65201 915 917 1 0 0 00:15:10 1
Total number of neighbors 2
# get router info bgp network
VRF 0 BGP table version is 3, local router ID is 10.202.7.250
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
*>i192.168.0.0/16 10.202.1.11 0 100 0 0 i <-/1>
*>i192.168.2.0 10.200.1.250 0 100 0 0 i <-/1>
*> 192.168.7.0 0.0.0.0 100 32768 0 i <-/1>
Total number of prefixes 3
# get router info routing-table all
~SNIP~
Routing table for VRF=0
S* 0.0.0.0/0 [1/0] via 192.168.1.1, wan, [1/0]
[1/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
S 10.200.1.250/32 [15/0] via advpn_0 tunnel 192.168.1.251, [1/0]
S 10.202.1.11/32 [15/0] via advpn tunnel *.*.*.*(AWSのElastic IP), [1/0]
C 10.202.7.250/32 is directly connected, Lo
B 192.168.0.0/16 [200/0] via 10.202.1.11 (recursive via advpn tunnel *.*.*.*(AWSのElastic IP)), 00:15:18, [1/0]
C 192.168.1.0/24 is directly connected, wan
B 192.168.2.0/24 [200/0] via 10.200.1.250 (recursive via advpn_0 tunnel 192.168.1.251), 00:02:31, [1/0]
C 192.168.7.0/24 is directly connected, lan
まとめ
今回はFortiGateVM on AWSにおけるADVPN Shortcutの設定方法と動作確認結果について紹介しました。分かりやすくするためADVPN Shortcutが確立されない状態をまずは確認し、次にルートリフレクタレスのダイナミックBGPを設定する流れで見てみましたが、いかがだったでしょうか。BGP on LoopbackのIKE extension:exchange-ip-addrv4も併用することでHUBやSpokeに設定するコンフィグレーションも最小限で済ませることができ、ネットワーク全体に流れるルート情報も大きく削減されスケーラビリティ向上に寄与する機能になっています。
次回はSD-WANルールの設定と動作確認を紹介する予定です。ご期待ください!
一緒に働く仲間を募集しています!
NTTデータ セキュリティ&ネットワーク事業部では以下の職種を募集しています。
参考文献

NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。
Discussion