← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-wan / configuration / third-party
Fortinet
В этом руководстве приведены сведения и примеры настройки Cloudflare WAN (ранее Magic WAN) с туннелями IPsec (Internet Protocol Security) совместно с межсетевыми экранами Fortinet FortiGate.
Представленные здесь настройки конфигурации FortiGate поддерживают двунаправленные проверки состояния как того требует Cloudflare WAN. Однако они не учитывают другие потоки трафика за пределами проверок работоспособности туннеля. Конфигурацию может потребоваться скорректировать с учётом вашей текущей конфигурации FortiGate.
Testing Environment
Конфигурация FortiGate была протестирована на двух разных брандмауэрах FortiGate:
- FortiGate Virtual Appliance версии 7.0.8, работающий на VMware ESXi 6.5
- FortiGate FG80F, версия 7.0.12
Настройка Cloudflare WAN
Чтобы настроить Cloudflare WAN, добавьте IPsec-туннели и статические маршруты в ваш аккаунт Cloudflare через панель управления или API.
Прежде чем продолжить, убедитесь, что вашей учетной записи назначен адрес IPv4 anycast. Найти его можно в панели управления Cloudflare в разделе Адресное пространство > Арендованные IP-адреса ↗.
Туннели IPsec
Cloudflare автоматически устраняет сбои в своей сети, анонсируя IP-адрес вашей конечной точки с нескольких узлов в многочисленных дата-центрах по всему миру. Чтобы обрабатывать сбои в собственной сети, настройте два туннеля IPsec от разных маршрутизаторов.
- Следуйте Добавить туннели инструкциям для создания необходимых туннелей IPsec со следующими параметрами:
- Тип проверки работоспособности: Измените на Запрос.
- Replay Protection: Не изменяйте значение по умолчанию.
Статические маршруты
Добавьте два статических маршрута, определяющих пространство IP-адресов за туннелями IPsec: по одному для каждого из двух туннелей IPsec, настроенных в предыдущем разделе.
По умолчанию статические маршруты определяются с приоритетом, установленным на 100. Cloudflare использует Equal Cost Multipath Routing (ECMP) и будет равномерно распределять нагрузку между двумя туннелями. Если вы предпочитаете модель Active/Passive, можно оставить для первого маршрута значение по умолчанию 100, и задайте для второго туннеля значение 150 (чем выше значение, тем ниже приоритет).
-
Следуйте Настройте статические маршруты инструкциям для создания статического маршрута.
-
Для первого маршрута убедитесь, что заданы следующие параметры:
- Префикс: укажите RFC1918 ↗ подсеть, которая находится за первым туннелем IPsec, определённым в предыдущем разделе.
- Туннель/Следующий переход: Выберите свой первый туннель (Tunnel 01 of 02).
-
Для второго маршрута убедитесь, что заданы следующие параметры:
- Префикс: укажите 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 настройки.
Это единственные настройки, которые должны потребоваться для виртуальных туннельных интерфейсов:
ip: Локальный IP-адрес (укажите с помощью/32маска подсети,255.255.255.255).remote-ip: Значение, связанное с адресом интерфейса, указанным ранее в разделе IPsec-туннелей (укажите с помощью/31маска подсети,255.255.255.254).alias: Это значение необязательно.
В следующих примерах предполагается, что 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 msMWAN_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 настроено три зоны. Эти объекты зон используются в политиках, упомянутых далее в этом документе:
Trust_Zone: Содержит интерфейс(ы) LAN.Untrust_Zone: Содержит интерфейс WAN.Cloudflare_Zone: Содержит оба интерфейса IPsec Tunnel.
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
endCreate 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