Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Fortinet

最終更新 Markdown で表示Agent セットアップ

このガイドでは、Fortinet FortiGate ファイアウォールと組み合わせて、Internet Protocol Security(IPsec)トンネルで Cloudflare WAN(旧 Magic WAN)を設定する方法と例を示します。

ここで示す FortiGate の設定は、Cloudflare WAN が求める 双方向ヘルスチェック に対応しています。ただし、トンネルヘルスチェック以外のトラフィックフローは考慮していません。現在の FortiGate 設定に合わせて調整が必要な場合があります。

検証環境

FortiGate の設定は、次の 2 つの FortiGate ファイアウォールで検証しました。

  • VMware ESXi 6.5 上の FortiGate Virtual Appliance バージョン 7.0.8
  • FortiGate FG80F、バージョン 7.0.12

Cloudflare WAN の設定

Cloudflare WAN を設定するには、ダッシュボードまたは API でアカウントに IPsec トンネルと静的ルートを追加します。

作業の前に、アカウントに割り当てられた IPv4 anycast アドレスがあることを確認します。Cloudflare ダッシュボードの Address Space > Leased IPs で確認できます。

IPsec トンネル

Cloudflare は、世界各地のデータセンターの複数ノードからエンドポイント IP を広報することで、自社ネットワーク上の障害を自動的に処理します。自社ネットワーク側の障害に備えるには、別々のルーターから 2 本の IPsec トンネルを設定します。

  1. トンネルを追加する の手順に従い、次のオプションで必要な IPsec トンネルを作成します。
    • Health check type: Request に変更します。
    • Replay Protection: デフォルト設定のまま変更しません。

静的ルート

IPsec トンネルの背後にある IP アドレス空間を定義する静的ルートを 2 本追加します。前の節で定義した 2 本の IPsec トンネルへ、それぞれ 1 本ずつです。

デフォルトでは、静的ルートの優先度は 100 です。Cloudflare は Equal Cost Multipath Routing(ECMP) を使い、2 本のトンネルにトラフィックを均等に負荷分散します。Active / Passive モデルを使いたい場合は、1 本目のルートのデフォルト値 100 を残し、2 本目のトンネルを 150 に設定します(値が大きいほど優先度は低くなります)。

  1. 静的ルートを設定する の手順に従い、静的ルートを作成します。

  2. 1 本目のルートでは、次の設定にします。

    • Prefix: 前の節で定義した 1 本目の IPsec トンネルの背後にある RFC1918 サブネットを指定します。
    • Tunnel/Next hop: 1 本目のトンネル(Tunnel 01 of 02)を選びます。
  3. 2 本目のルートでは、次の設定にします。

    • Prefix: 前の節で定義した 2 本目の IPsec トンネルの背後にある RFC1918 サブネットを指定します。
    • Tunnel/Next hop: 2 本目のトンネル(Tunnel 02 of 02)を選びます。

Fortinet FortiGate の設定

非対称ルーティングを有効にする

ICMP の非対称ルーティングを有効にし、ヘルスチェックが想定どおり動くようにします。このオプションは必須です。有効にしないと、Cloudflare WAN の正しい動作に不可欠なトンネルヘルスチェックが設計どおり動きません。

非対称ルーティングを有効にすると FortiGate の動作が変わります。詳細は 非対称ルーティング有効時の FortiGate の動作 を参照してください。

config system settings
    set asymroute-icmp enable
end

NAT-T を設定する(任意)

ネットワークで Network Address Translation Traversal(NAT-T)を使っている場合は、この機能を有効にし、ポート 4500 で Internet Key Exchange(IKE)通信を開始できます。

IKE ポートを設定するには、システム設定に次を追加します。

config system settings
    set ike-port 4500
end

NAT-T を有効にするには、設定中の IPsec トンネルに set nattraversal enable を追加します。

fortigate # config vpn ipsec phase1-interface
    edit "<NAME_OF_YOUR_TUNNEL>"
        set nattraversal enable

詳細は Fortinet のドキュメント を参照してください。

アンチリプレイ保護を無効にする

ルートベースの IPsec 構成では、アンチリプレイ保護を無効にする必要があります。次のコマンドはグローバルにアンチリプレイ保護を無効にしますが、ファイアウォールポリシー単位でも行えます。詳細は Fortinet の ポリシー単位のアンチリプレイ対応 を参照してください。

config system global
    set anti-replay disable
end

IPsec トンネル

IPsec トンネルは、ルートベースのサイト間 Virtual Private Network(VPN)モデルを使います。このモデルは、仮想トンネルインターフェイスとルーティングに依存して、IPsec トンネルを流れるトラフィックを定義します。

phase1-interfacephase2-interface オブジェクトで IPsec トンネルを 2 本設定します。

次の例では、FortiGate ファイアウォールの外部 / 出力インターフェイスを wan1 とします。

Phase 1 インターフェイスを追加する

MWAN_IPsec_Tun1 は、Cloudflare 側の設定で追加した Tunnel 01 of 02 に対応します。MWAN_IPsec_Tun2 は、Cloudflare 側の設定で追加した Tunnel 02 of 02 に対応します。

fortigate # config vpn ipsec phase1-interface
    edit "MWAN_IPsec_Tun1"
        set interface "wan1"
        set ike-version 2
        set keylife 86400
        set peertype any
        set net-device enable
        set proposal aes256gcm-prfsha512 aes256gcm-prfsha384 aes256gcm-prfsha256
        set localid "f1473dXXXXXXX72e33.49561179.ipsec.cloudflare.com"
        set dhgrp 20
        set nattraversal disable
        set remote-gw 162.159.67.210
        set add-gw-route enable
        set psksecret <YOUR_PRE-SHARED_KEY>
    next
    edit "MWAN_IPsec_Tun2"
        set interface "wan1"
        set ike-version 2
        set keylife 86400
        set peertype any
        set net-device enable
        set proposal aes256gcm-prfsha512 aes256gcm-prfsha384 aes256gcm-prfsha256
        set localid "de91565XXXXXXXfbbd6632.49561179.ipsec.cloudflare.com"
        set dhgrp 20
        set nattraversal disable
        set remote-gw 172.XX.XX.210
        set add-gw-route enable
        set psksecret ENC <YOUR_PRE-SHARED_KEY>
    next
end

Phase 2 インターフェイスを追加する

2 つの phase1-interface それぞれに対し、phase2-interface を 1 つずつ追加します。

fortigate # config vpn ipsec phase2-interface
    edit "MWAN_IPsec_Tun1"
        set phase1name "MWAN_IPsec_Tun1"
        set proposal aes256gcm aes128gcm
        set dhgrp 20
        set replay disable
        set keylifeseconds 28800
        set auto-negotiate enable
        set keepalive enable
    next
    edit "MWAN_IPsec_Tun2"
        set phase1name "MWAN_IPsec_Tun2"
        set proposal aes256gcm aes128gcm
        set dhgrp 20
        set replay disable
        set keylifeseconds 28800
        set auto-negotiate enable
        set keepalive enable
    next
end

ネットワークインターフェイス

仮想トンネルインターフェイス

phase1-interface 設定で set net-device enable を指定したときに自動追加された仮想トンネルインターフェイスを設定します。

仮想トンネルインターフェイスに追加が必要な設定は、次だけです。

  • ip: ローカル IP アドレス(/32 ネットマスク 255.255.255.255 で指定)。
  • remote-ip: 先の IPsec トンネル節で指定したインターフェイスアドレスに対応する値(/31 ネットマスク 255.255.255.254 で指定)。
  • alias: 任意です。

次の例では、FortiGate ファイアウォールの外部 / 出力インターフェイスを wan1 とします。

fortigate # config system interface
    edit "MWAN_IPsec_Tun1"
        set vdom "root"
        set ip 10.252.2.91 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 10.252.2.90 255.255.255.254
        set alias "MWAN_IPsec_Tun1"
        set snmp-index 17
        set interface "wan1"
    next
    edit "MWAN_IPsec_Tun2"
        set vdom "root"
        set ip 10.252.2.93 255.255.255.255
        set allowaccess ping
        set type tunnel
        set remote-ip 10.252.2.92 255.255.255.254
        set alias "MWAN_IPsec_Tun2"
        set snmp-index 18
        set interface "wan1"
    next
end

仮想トンネルインターフェイス間の通信を確認する

仮想トンネルインターフェイスを設定したら、remote-ip 属性に紐づく IP アドレスへ ping できるはずです。

次の例は、両方の仮想トンネルインターフェイスへの ping が成功した結果です。

MWAN_IPsec_Tun1

fortigate # execute ping 10.252.2.90
PING 10.252.2.90 (10.252.2.90): 56 data bytes
64 bytes from 10.252.2.90: icmp_seq=0 ttl=64 time=5.8 ms
64 bytes from 10.252.2.90: icmp_seq=1 ttl=64 time=5.8 ms
64 bytes from 10.252.2.90: icmp_seq=2 ttl=64 time=5.8 ms
64 bytes from 10.252.2.90: icmp_seq=3 ttl=64 time=5.8 ms
64 bytes from 10.252.2.90: icmp_seq=4 ttl=64 time=5.7 ms

--- 10.252.2.90 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 5.7/5.7/5.8 ms

MWAN_IPsec_Tun2

fortigate # execute ping 10.252.2.92
PING 10.252.2.92 (10.252.2.92): 56 data bytes
64 bytes from 10.252.2.92: icmp_seq=0 ttl=64 time=6.1 ms
64 bytes from 10.252.2.92: icmp_seq=1 ttl=64 time=6.1 ms
64 bytes from 10.252.2.92: icmp_seq=2 ttl=64 time=6.1 ms
64 bytes from 10.252.2.92: icmp_seq=3 ttl=64 time=6.1 ms
64 bytes from 10.252.2.92: icmp_seq=4 ttl=64 time=6.0 ms

--- 10.252.2.92 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 6.0/6.0/6.1 ms

ゾーンオブジェクト(任意)

このサンプル設定では、FortiGate ファイアウォールに 3 つのゾーンが設定されている前提です。これらのゾーンオブジェクトは、後述のポリシーで使います。

  • Trust_Zone: LAN インターフェイスを含みます。
  • Untrust_Zone: WAN インターフェイスを含みます。
  • Cloudflare_Zone: 両方の IPsec トンネルインターフェイスを含みます。
fortigate # config system zone
    edit "Cloudflare_Zone"
        set intrazone allow
        set interface "MWAN_IPsec_Tun1" "MWAN_IPsec_Tun2"
    next
    edit "Trust_Zone"
        set intrazone allow
        set interface "internal"
    next
    edit "Untrust_Zone"
        set intrazone allow
        set interface "wan1"
    next
end

Address Object を作成する

Cloudflare の IPv4 アドレス空間 を表す Address Object と、双方向ヘルスチェック用 anycast IP のオブジェクトを作成します。

config firewall address
    edit "Cloudflare_IPv4_01"
        set color 9
        set subnet 173.245.48.0 255.255.240.0
    next
    edit "Cloudflare_IPv4_02"
        set color 9
        set subnet 103.21.244.0 255.255.252.0
    next
    edit "Cloudflare_IPv4_03"
        set color 9
        set subnet 103.22.200.0 255.255.252.0
    next
    edit "Cloudflare_IPv4_04"
        set color 9
        set subnet 103.31.4.0 255.255.252.0
    next
    edit "Cloudflare_IPv4_05"
        set color 9
        set subnet 141.101.64.0 255.255.192.0
    next
    edit "Cloudflare_IPv4_06"
        set color 9
        set subnet 108.162.192.0 255.255.192.0
    next
    edit "Cloudflare_IPv4_07"
        set color 9
        set subnet 190.93.240.0 255.255.240.0
    next
    edit "Cloudflare_IPv4_08"
        set color 9
        set subnet 188.114.96.0 255.255.240.0
    next
    edit "Cloudflare_IPv4_09"
        set color 9
        set subnet 197.234.240.0 255.255.252.0
    next
    edit "Cloudflare_IPv4_10"
        set color 9
        set subnet 198.41.128.0 255.255.128.0
    next
    edit "Cloudflare_IPv4_11"
        set color 9
        set subnet 162.158.0.0 255.254.0.0
    next
    edit "Cloudflare_IPv4_12"
        set color 9
        set subnet 104.16.0.0 255.248.0.0
    next
    edit "Cloudflare_IPv4_13"
        set color 9
        set subnet 104.24.0.0 255.252.0.0
    next
    edit "Cloudflare_IPv4_14"
        set color 9
        set subnet 172.64.0.0 255.248.0.0
    next
    edit "Cloudflare_IPv4_15"
        set color 9
        set subnet 131.0.72.0 255.255.252.0
    next
    edit "Bidirect_HC_Endpoint_01"
        set comment "Bidirectional health check endpoint address"
        set color 9
        set subnet 172.64.240.253 255.255.255.255
    next
    edit "Bidirect_HC_Endpoint_02"
        set comment "Bidirectional health check endpoint address"
        set color 9
        set subnet 172.64.240.254 255.255.255.255
    next
end

Address Group Object を設定する

Cloudflare の IPv4 サブネットをすべて含む Address Object を作成します。次の CLI コマンドを SSH ターミナルにコピーして貼り付けると、オブジェクトを自動作成できます。

config firewall addrgrp
    edit "Cloudflare_IPv4_Nets"
        set member "Cloudflare_IPv4_01" "Cloudflare_IPv4_02" "Cloudflare_IPv4_03" "Cloudflare_IPv4_04" "Cloudflare_IPv4_05" "Cloudflare_IPv4_06" "Cloudflare_IPv4_07" "Cloudflare_IPv4_08" "Cloudflare_IPv4_09" "Cloudflare_IPv4_10" "Cloudflare_IPv4_11" "Cloudflare_IPv4_12" "Cloudflare_IPv4_13" "Cloudflare_IPv4_14" "Cloudflare_IPv4_15"
        set color 9
    next
end

セキュリティポリシーを追加する

Reply 方式の双方向ヘルスチェックに関連する ICMP トラフィックを許可するファイアウォールルールを追加します。

fortigate (policy) # show
config firewall policy
    edit 2
        set name "CF_Magic_Health_Checks"
        set uuid 80eb76ce-3033-51ee-c5e5-d5a670dff3b3
        set srcintf "Cloudflare_Zone"
        set action accept
        set srcaddr "Cloudflare_IPv4_Nets"
        set dstaddr "Bidirect_HC_Endpoint_01" "Bidirect_HC_Endpoint_02"
        set schedule "always"
        set service "ALL_ICMP"
        set logtraffic all
    next
end

ポリシーベースルーティング

IPsec トンネルで受信した双方向ヘルスチェックのトラフィックが、同じトンネルを通って戻るように、ポリシーベースルーティングルールを追加します。

2 本の IPsec トンネルそれぞれに、ポリシーベースルーティングルールを 1 本ずつ追加します。

fortigate # config router policy
    edit 1
        set input-device "MWAN_IPsec_Tun1"
        set srcaddr "all"
        set dstaddr "all"
        set gateway 10.252.2.90
        set output-device "MWAN_IPsec_Tun1"
    next
    edit 2
        set input-device "MWAN_IPsec_Tun2"
        set srcaddr "all"
        set dstaddr "all"
        set gateway 10.252.2.92
        set output-device "MWAN_IPsec_Tun2"
    next
end

Cloudflare IPsec トンネルのヘルスチェックを監視する

Cloudflare ダッシュボードは、Cloudflare からオリジンネットワークへトラフィックをルーティングする、アカウント上のすべての anycast トンネルの健全性を監視します。詳細は ダッシュボードでトンネルの健全性を確認する を参照してください。

トラブルシューティング

パケットキャプチャ

パケットキャプチャで、ポリシーベースルーティングルールが想定どおり動いているかを確認します。

Tunnel 01 of 02 に入ったトラフィックは、同じトンネルから出る必要があります。次の例のとおりです。

fortigate # diagnose sniffer packet any 'host 172.64.240.253' 4
interfaces=[any]
filters=[host 172.64.240.253]
0.601569 MWAN_IPsec_Tun1 in 172.64.240.253 -> 162.158.176.118: icmp: echo reply
0.601585 MWAN_IPsec_Tun1 out 172.64.240.253 -> 162.158.176.118: icmp: echo reply
0.611164 MWAN_IPsec_Tun1 in 172.64.240.253 -> 172.71.87.94: icmp: echo reply
0.611178 MWAN_IPsec_Tun1 out 172.64.240.253 -> 172.71.87.94: icmp: echo reply
0.617562 MWAN_IPsec_Tun1 in 172.64.240.253 -> 172.71.129.214: icmp: echo reply
0.617574 MWAN_IPsec_Tun1 out 172.64.240.253 -> 172.71.129.214: icmp: echo reply
0.622042 MWAN_IPsec_Tun1 in 172.64.240.253 -> 172.69.61.43: icmp: echo reply
0.622056 MWAN_IPsec_Tun1 out 172.64.240.253 -> 172.69.61.43: icmp: echo reply
0.624092 MWAN_IPsec_Tun1 in 172.64.240.253 -> 172.68.9.214: icmp: echo reply

逆に、Tunnel 02 of 02 に入ったトラフィックは、同じトンネルから出る必要があります。

fortigate # diagnose sniffer packet any 'host 172.64.240.254' 4
interfaces=[any]
filters=[host 172.64.240.254]
0.912041 MWAN_IPsec_Tun2 in 172.64.240.254 -> 172.70.177.56: icmp: echo reply
0.912057 MWAN_IPsec_Tun2 out 172.64.240.254 -> 172.70.177.56: icmp: echo reply
0.913579 MWAN_IPsec_Tun2 in 172.64.240.254 -> 172.70.221.154: icmp: echo reply
0.913592 MWAN_IPsec_Tun2 out 172.64.240.254 -> 172.70.221.154: icmp: echo reply
0.914247 MWAN_IPsec_Tun2 in 172.64.240.254 -> 162.158.1.85: icmp: echo reply
0.914260 MWAN_IPsec_Tun2 out 172.64.240.254 -> 162.158.1.85: icmp: echo reply
0.918533 MWAN_IPsec_Tun2 in 172.64.240.254 -> 172.71.125.75: icmp: echo reply
0.918550 MWAN_IPsec_Tun2 out 172.64.240.254 -> 172.71.125.75: icmp: echo reply
0.924465 MWAN_IPsec_Tun2 in 172.64.240.254 -> 172.69.21.134: icmp: echo reply

Flow Debugging

Flow Debugging は、トラフィックが想定した経路でファイアウォールに入り、出ているかを確認するのに役立ちます。前の節のスニファーパケットキャプチャより詳しい情報が出ますが、ログ量が非常に多いため、どうしても必要なときだけ有効にします。

加えて、フローデバッグログの解釈や、アプリケーションの要件に合わせてフローを正しくルーティングする FortiGate の設定推奨については、Fortinet のテクニカルサポートへの問い合わせが必要になることがほとんどです。

fortigate # diagnose debug disable
fortigate # diagnose debug flow filter clear
fortigate # diagnose debug reset
fortigate # diagnose debug flow filter addr 172.64.240.253
fortigate # diagnose debug show flow show function-name enable
fortigate # diagnose debug config-error-log timestamps enable
fortigate # diagnose debug flow trace start 999
fortigate # diagnose debug enable
fortigate # 2023-08-01 09:27:26 id=20085 trace_id=2871 func=print_pkt_detail line=5844 msg="vd-root:0 received a packet(proto=1, 172.64.240.253:56968->172.70.121.28:0) tun_id=162.159.67.210 from MWAN_IPsec_Tun1. type=0, code=0, id=56968, seq=0."
2023-08-01 09:27:26 id=20085 trace_id=2871 func=rpdb_srv_match_input line=1036 msg="Match policy routing id=1: to 10.252.2.90 via ifindex-34"
2023-08-01 09:27:26 id=20085 trace_id=2871 func=vf_ip_route_input_common line=2605 msg="find a route: flag=00000000 gw-162.159.67.210 via MWAN_IPsec_Tun1"
2023-08-01 09:27:26 id=20085 trace_id=2871 func=ipsecdev_hard_start_xmit line=669 msg="enter IPSec interface MWAN_IPsec_Tun1, tun_id=0.0.0.0"
2023-08-01 09:27:26 id=20085 trace_id=2871 func=_do_ipsecdev_hard_start_xmit line=229 msg="output to IPSec tunnel MWAN_IPsec_Tun1"
2023-08-01 09:27:26 id=20085 trace_id=2871 func=esp_output4 line=844 msg="IPsec encrypt/auth"
2023-08-01 09:27:26 id=20085 trace_id=2871 func=ipsec_output_finish line=544 msg="send to 172.71.91.34 via intf-wan1"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=print_pkt_detail line=5844 msg="vd-root:0 received a packet(proto=1, 172.64.240.253:18685->162.158.209.64:0) tun_id=162.159.67.210 from MWAN_IPsec_Tun1. type=0, code=0, id=18685, seq=0."
2023-08-01 09:27:26 id=20085 trace_id=2872 func=rpdb_srv_match_input line=1036 msg="Match policy routing id=1: to 10.252.2.90 via ifindex-34"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=vf_ip_route_input_common line=2605 msg="find a route: flag=00000000 gw-162.159.67.210 via MWAN_IPsec_Tun1"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=ipsecdev_hard_start_xmit line=669 msg="enter IPSec interface MWAN_IPsec_Tun1, tun_id=0.0.0.0"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=_do_ipsecdev_hard_start_xmit line=229 msg="output to IPSec tunnel MWAN_IPsec_Tun1"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=esp_output4 line=844 msg="IPsec encrypt/auth"
2023-08-01 09:27:26 id=20085 trace_id=2872 func=ipsec_output_finish line=544 msg="send to 172.71.91.34 via intf-wan1"

Flow Debugging を無効にする

CTRL + C では、通常 Flow Debugging は止まりません。

デバッグログが流れているあいだでも、次を入力するだけで Flow Debugging を無効にできます。

fortigate # diagnose debug disable

役に立ちましたか?