INTEGRITY Документация

Fortinet

В этом руководстве приведены сведения и примеры настройки Cloudflare WAN (ранее Magic WAN) с туннелями IPsec (Internet Protocol Security) совместно с межсетевыми экранами Fortinet FortiGate.

Представленные здесь настройки конфигурации FortiGate поддерживают двунаправленные проверки состояния как того требует Cloudflare WAN. Однако они не учитывают другие потоки трафика за пределами проверок работоспособности туннеля. Конфигурацию может потребоваться скорректировать с учётом вашей текущей конфигурации FortiGate.

Testing Environment

Конфигурация FortiGate была протестирована на двух разных брандмауэрах FortiGate:

Настройка Cloudflare WAN

Чтобы настроить Cloudflare WAN, добавьте IPsec-туннели и статические маршруты в ваш аккаунт Cloudflare через панель управления или API.

Прежде чем продолжить, убедитесь, что вашей учетной записи назначен адрес IPv4 anycast. Найти его можно в панели управления Cloudflare в разделе Адресное пространство > Арендованные IP-адреса.

Туннели IPsec

Cloudflare автоматически устраняет сбои в своей сети, анонсируя IP-адрес вашей конечной точки с нескольких узлов в многочисленных дата-центрах по всему миру. Чтобы обрабатывать сбои в собственной сети, настройте два туннеля IPsec от разных маршрутизаторов.

  1. Следуйте Добавить туннели инструкциям для создания необходимых туннелей IPsec со следующими параметрами:
    • Тип проверки работоспособности: Измените на Запрос.
    • Replay Protection: Не изменяйте значение по умолчанию.

Статические маршруты

Добавьте два статических маршрута, определяющих пространство IP-адресов за туннелями IPsec: по одному для каждого из двух туннелей IPsec, настроенных в предыдущем разделе.

По умолчанию статические маршруты определяются с приоритетом, установленным на 100. Cloudflare использует Equal Cost Multipath Routing (ECMP) и будет равномерно распределять нагрузку между двумя туннелями. Если вы предпочитаете модель Active/Passive, можно оставить для первого маршрута значение по умолчанию 100, и задайте для второго туннеля значение 150 (чем выше значение, тем ниже приоритет).

  1. Следуйте Настройте статические маршруты инструкциям для создания статического маршрута.

  2. Для первого маршрута убедитесь, что заданы следующие параметры:

    • Префикс: укажите RFC1918 подсеть, которая находится за первым туннелем IPsec, определённым в предыдущем разделе.
    • Туннель/Следующий переход: Выберите свой первый туннель (Tunnel 01 of 02).
  3. Для второго маршрута убедитесь, что заданы следующие параметры:

    • Префикс: укажите RFC1918 подсеть, которая находится за вторым туннелем IPsec, определённым в предыдущем разделе.
    • Туннель/Следующий переход: Выберите свой второй туннель (Tunnel 02 of 02).

Настройка Fortinet FortiGate

Включите асимметричную маршрутизацию

Включите асимметричную маршрутизацию для ICMP, чтобы проверки работоспособности работали корректно. Этот параметр обязателен: без него проверки работоспособности туннеля, критически важные для корректной работы Cloudflare WAN, не будут функционировать должным образом.

Включение асимметричной маршрутизации повлияет на поведение FortiGate. Подробнее см. в Как ведёт себя FortiGate при включённой асимметричной маршрутизации.

config system settings
    set asymroute-icmp enable
end

Настройте NAT-T (необязательно)

Если в вашей сети используется технология обхода NAT (NAT-T, Network Address Translation Traversal), вы можете включить эту функцию и инициировать обмен ключами IKE (Internet Key Exchange) на порту 4500.

Чтобы задать порт IKE, добавьте следующее в настройки системы:

config system settings
    set ike-port 4500
end

Чтобы включить NAT-T, добавьте set nattraversal enable к настраиваемым туннелям IPsec.

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

См. документация Fortinet для дополнительных сведений.

Отключить защиту anti-replay

Для конфигураций IPsec на основе маршрутов необходимо отключить защиту от повторного воспроизведения (anti-replay). Приведенная ниже команда отключает эту защиту глобально, но вы можете сделать это и для отдельной политики брандмауэра. См. документацию Fortinet о поддержка anti-replay для каждой политики чтобы узнать больше.

config system global
    set anti-replay disable
end

Туннели IPsec

Туннели IPsec используют модель виртуальной частной сети (VPN) между сайтами, построенную на основе маршрутов. Эта модель опирается на Virtual Tunnel Interfaces и маршрутизацию, которые определяют, какой трафик проходит через туннели IPsec.

Настройте два туннеля IPsec с помощью phase1-interface и phase2-interface объекты.

В следующих примерах предполагается, что wan1 является внешним (исходящим) интерфейсом межсетевого экрана FortiGate.

Добавление интерфейсов Phase 1

MWAN_IPsec_Tun1 соответствует Tunnel 01 из 02, добавленному ранее в разделе Cloudflare конфигурации. MWAN_IPsec_Tun2 соответствует Tunnel 02 из 02, добавленному ранее в разделе Cloudflare конфигурации.

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

Добавьте два phase2-interfaces: по одному для каждого из двух phase1-interfaces следующим образом:

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

Сетевые интерфейсы

Virtual tunnel interfaces

Настройте Virtual Tunnel Interfaces, которые были автоматически добавлены при указании set net-device enable в пределах phase1-interface настройки.

Это единственные настройки, которые должны потребоваться для виртуальных туннельных интерфейсов:

В следующих примерах предполагается, что wan1 является внешним (исходящим) интерфейсом межсетевого экрана FortiGate.

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

Проверить связь между virtual tunnel interfaces

После настройки виртуальных туннельных интерфейсов вы сможете отправить ping на IP-адрес, связанный с remote-ip атрибут.

Следующие примеры показывают успешные результаты пинга через оба виртуальных туннельных интерфейса:

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 настроено три зоны. Эти объекты зон используются в политиках, упомянутых далее в этом документе:

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

Create Address Objects

Создайте Address Objects, представляющие IPv4-адресное пространство Cloudflare а также объекты для двунаправленных 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

Создайте Address Object, который содержит все подсети Cloudflare IPv4. Скопируйте и вставьте следующие команды 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

Добавить политику безопасности

Добавьте правило межсетевого экрана, разрешающее ICMP-трафик, связанный с двунаправленными проверками работоспособности в режиме reply style.

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, возвращался через тот же туннель.

Добавьте два правила маршрутизации на основе политик, по одному для каждого из двух туннелей IPsec.

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

Мониторинг проверок работоспособности IPsec-туннелей Cloudflare

Панель управления Cloudflare отслеживает работоспособность всех anycast-туннелей вашего аккаунта, которые направляют трафик от Cloudflare к вашей исходной сети. См. Проверить работоспособность туннеля в панели управления, где это описано подробнее.

Устранение неполадок

Захват пакетов

Захваты пакетов позволяют определить, работают ли правила маршрутизации на основе политик так, как ожидается.

Трафик, входящий через 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

И наоборот, трафик, входящий через туннель 02 из 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

Отладка потока трафика

Отладка потока трафика помогает определить, проходит ли трафик через межсетевой экран (на входе и выходе) по ожидаемому пути. Она предоставляет более подробную информацию, чем захват пакетов через sniffer, описанный в предыдущем разделе, но создаёт значительный объём журналов, поэтому включать её следует только при крайней необходимости.

Кроме того, клиентам, скорее всего, потребуется обратиться в техническую поддержку Fortinet за помощью в интерпретации отладочных журналов потоков, а также за рекомендациями по настройке FortiGate для обеспечения корректной маршрутизации потоков в соответствии с требованиями приложения.

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