Перейти к основному содержимому

Внешние VPN-шлюзы: FortiGate и другие IKEv2

Актуально для: SimpleTwo 0.9.x · Проверено: 26.10.2026

Если в организации уже стоит свой VPN-шлюз — FortiGate или любой другой, принимающий IKEv2 dial-up, — SimpleTwo Connect подключается к нему сам, рядом с туннелями до шлюзов SimpleTwo. На устройстве остаётся один VPN: правила маршрутизации SimpleTwo решают, какой трафик идёт в туннель до вашего шлюза, какой — к шлюзам SimpleTwo, а какой — напрямую. FortiClient для этого не нужен, а шлюз и его RADIUS дорабатывать не нужно: человек входит в шлюз своим логином и паролем каталога, как во FortiClient.

1. Как это устроено​

  • Шлюз проверяется по общему ключу (PSK) или по своему сертификату, человек — по EAP-MSCHAPv2 своим логином и паролем. Дальше шлюз проверяет их так же, как для FortiClient: через RADIUS (например, NPS), LDAP или локальных пользователей. Как проверять шлюз, выбирается в консоли (§4). Сертификат надёжнее: общий ключ есть на каждом устройстве, которому разрешён шлюз, а по сертификату за шлюз себя не выдать. Шлюз проверяется до того, как приложение отправит пароль.
  • Пароль приложение берёт из входа в SimpleTwo. Когда человек входит по паролю, приложение сохраняет этот пароль только на устройстве: на iOS и macOS — в связке ключей, на Android — в зашифрованном хранилище сессии, на Windows — под защитой DPAPI текущего пользователя. Пароль стирается вместе с сессией (выход, отзыв, истёкшая сессия). На сервер и в конфигурацию туннеля он не попадает: приложение передаёт его движку туннеля отдельным вызовом.
  • Если пароля приложение не видело — человек вошёл через браузер (единый вход) или ключом входа, — на экране «Подключение» появится карточка «Пароль для корпоративной сети». Пароль вводится один раз и хранится так же.
  • Общий ключ и параметры шлюза хранит координатор. Клиент получает их вместе с параметрами сессии и только если этот шлюз ему разрешён. В консоли ключ после сохранения не показывается. Шлюзу, который проверяется по сертификату, ключ на устройства не выдаётся.
  • Туннель поднимается при первом обращении к корпоративной сети, а не в момент включения VPN. Живость шлюза клиент проверяет каждые 15 секунд. После обрыва он подключается заново с растущей паузой — от 2 секунд до минуты. Отказанный пароль клиент сам больше не пробует — ни через время, ни при перезапуске туннеля: следующая попытка будет с паролем, который человек введёт в карточке. Так устройство со старым паролем после его смены в каталоге не накручивает счётчик неудачных входов. Заново клиент попробует сам, только если изменились параметры шлюза в консоли (например, исправлен общий ключ) или приложение запущено заново — одна попытка.
  • Пока шлюз недоступен, его сети заблокированы, а не отправлены мимо туннеля в интернет.

2. Что нужно на шлюзе​

ПараметрЧто должно быть
ПротоколIKEv2. IKEv1 и XAuth клиент не поддерживает
Тип туннеляdial-up (динамический), принимающий любой идентификатор клиента
Проверка шлюзаобщий ключ (PSK), не короче 8 символов, или сертификат шлюза (подпись RSA или RFC 7427). Сертификат должен называть адрес из поля «Сервер» в Subject Alternative Name — шаблон *.example.com подходит, для IP-адреса нужен IP в SAN — и выводиться к центру сертификации из консоли или к тому, которому доверяет система устройства
Проверка человекаEAP, метод MSCHAPv2. Если шлюз сначала спрашивает Identity (eap-identity send-request), клиент отвечает логином; на другой метод EAP — отказом с просьбой MSCHAPv2. Второй фактор (код, push) клиент передать не может: для этого туннеля его не должно быть
Адрес клиентувыдаётся из пула через mode-config. Без адреса туннель не поднимается
Фаза 1 (IKE)AES-GCM-256 или -128 либо ChaCha20-Poly1305 с PRF SHA-256/384/512; или AES-CBC-256 с HMAC-SHA-256. Группы DH: 31 (Curve25519), 19, 20, 14 — клиент начинает с 31 и переходит на ту, что назовёт шлюз
Фаза 2 (ESP)AES-GCM-256 или -128, ChaCha20-Poly1305 или AES-CBC-256 с HMAC-SHA-256. PFS выключен: клиент обновляет ключи ESP без новой группы DH
Селекторы трафика0.0.0.0/0 — что именно идёт в туннель, решают правила SimpleTwo
Порты снаружиUDP 500 и 4500. Для IPsec поверх TCP — тот TCP-порт, что указан в консоли (по умолчанию 4500)
Политика межсетевого экранаиз туннеля — в те сети, что перечислены в группе шлюзов SimpleTwo (§4)

Вид логина. Клиент передаёт логин так, как человек ввёл его при входе в SimpleTwo, — обычно user@domain. Убедитесь на первом подключении, что политика RADIUS принимает этот вид.

3. Пример для FortiGate​

Отдельный туннель для SimpleTwo проще отлаживать, чем общий с FortiClient. Ниже — набросок для FortiOS 7.x с проверкой через RADIUS. Имена интерфейсов, адреса пула и сетей замените своими, а названия параметров сверьте с документацией вашей версии FortiOS.

config user radius
edit "nps"
set server "10.20.0.10"
set secret "<секрет RADIUS>"
set auth-type ms_chap_v2
next
end
config user group
edit "s2-vpn"
set member "nps"
next
end
config vpn ipsec phase1-interface
edit "s2-dialup"
set type dynamic
set interface "wan1"
set ike-version 2
set peertype any
set net-device disable
set mode-cfg enable
set ipv4-start-ip 10.212.134.10
set ipv4-end-ip 10.212.134.250
set ipv4-netmask 255.255.255.0
set ipv4-dns-server1 10.20.0.53
set proposal aes256gcm-prfsha256 aes256-sha256
set dhgrp 19 14
set eap enable
set eap-identity send-request
set authusrgrp "s2-vpn"
set psksecret "<общий ключ>"
set dpd on-idle
next
end
config vpn ipsec phase2-interface
edit "s2-dialup"
set phase1name "s2-dialup"
set proposal aes256gcm aes256-sha256
set pfs disable
next
end
config firewall policy
edit 0
set name "s2-dialup-to-corp"
set srcintf "s2-dialup"
set dstintf "internal"
set srcaddr "all"
set dstaddr "<корпоративные сети>"
set action accept
set schedule "always"
set service "ALL"
next
end

Проверка шлюза по сертификату. Вместо psksecret в фазе 1:

config vpn ipsec phase1-interface
edit "s2-dialup"
set authmethod signature
set certificate "<сертификат шлюза>"
next
end

Сертификат — с публичным именем шлюза в SAN, загруженный в FortiGate с цепочкой: FortiGate присылает цепочку сам. В консоли SimpleTwo — режим «Сертификат»; «Идентификатор шлюза» оставьте пустым: FortiGate представляется именем из сертификата, а клиент сверяет сертификат с «Сервером». Сертификат от публичного центра (как у веб-сайта) проверяется без настройки; для своего центра вставьте в консоль его корневой сертификат.

Для IPsec поверх TCP (сети, где UDP наружу закрыт) включите на FortiGate TCP-транспорт для этого туннеля и укажите в консоли SimpleTwo тот же порт.

4. Настройка в консоли координатора​

Всё — на вкладке Secure Access.

  1. Группы шлюзов. Заведите для внешнего шлюза отдельную корпоративную группу и заполните «Разрешённые CIDR» и «Разрешённые домены» сетями и именами за шлюзом; внутренние имена без DNS можно задать в «Карте хостов». Группа должна что-то обслуживать и не должна содержать шлюзов SimpleTwo — иначе консоль откажет: к одной сети ведёт одна дорога.

  2. Внешние шлюзы (IPsec). Добавьте шлюз:

    ПолеЧто вписать
    Названиекак шлюз называется в консоли; идентификатор консоль присваивает сама
    Группа шлюзовгруппа из шага 1
    Серверпубличное имя или адрес шлюза — без схемы, пути и порта
    Портпусто — 500 для UDP, 4500 для TCP
    ТранспортUDP; TCP (IPsec over TCP) — для сетей, где UDP наружу закрыт
    Как приложение проверяет шлюз«Общий ключ (PSK)» или «Сертификат» — как настроен шлюз
    Общий ключ (PSK)в режиме PSK: тот же, что на шлюзе. При изменении шлюза пустое поле оставляет прежний ключ
    Центр сертификации шлюзав режиме сертификата: корневой сертификат (PEM) центра, выпустившего сертификат шлюза. Пусто — центр, которому доверяет система устройства (публичный)
    Идентификатор шлюзанеобязательно. Если задан, шлюз обязан представиться именно им (на FortiGate — localid фазы 1), а в режиме сертификата — и сертификат должен его называть. Пусто — сертификат должен называть «Сервер»
    DNS-серверыкорпоративные DNS внутри разрешённых сетей: через них, внутри туннеля, разрешаются «Разрешённые домены» группы. Пусто — разрешает DNS, который шлюз выдал через mode-config
    не выдаватьшлюз остаётся в консоли, но никому не выдаётся
  3. Группы → профиль. В строке группы каталога, которой нужен доступ (или строке «Все»), отметьте группу из шага 1 в «Разрешённых группах шлюзов». Человеку, у которого есть только этот шлюз, он выдаётся тоже.

Изменения доходят до клиента со следующей сессией: при переподключении или при плановом обновлении сессии.

5. Что видит пользователь​

В карточке «Активные локации» на экране «Подключение» у каждого внешнего шлюза своя строка «Корпоративная сеть · имя шлюза» с состоянием: «Подключится при первом обращении», «Подключение…», «Подключено» (под строкой — выданный шлюзом адрес), «Нужен пароль», «Пароль не принят» или «Нет подключения» — тогда под строкой текст ошибки шлюза. При «Нужен пароль» и «Пароль не принят» над карточкой появляется «Пароль для корпоративной сети»; после ввода клиент сразу пробует снова.

6. Ограничения​

  • Внутри туннеля проходят TCP и UDP; ping (ICMP) — нет.
  • Только IKEv2: шлюз — по PSK или сертификату, человек — EAP-MSCHAPv2. Вход человека по сертификату, IKEv1 и XAuth, второй фактор — нет.
  • В режиме PSK общий ключ знает каждое устройство, которому шлюз разрешён, — как и у FortiClient с общим ключом. Человека проверяет его собственный пароль. В режиме сертификата ключа на устройствах нет.
  • Смена общего ключа — одновременно на шлюзе и в консоли; клиенты получат новый ключ со следующей сессией, а до этого их туннели к шлюзу показывают «Пароль не принят».

7. Если не подключается​

Текст ошибки виден в приложении под строкой туннеля.

Что видноПричинаЧто сделать
«Нужен пароль»пароль не сохранён: вход через браузер или ключом входаввести пароль в карточке
«Пароль не принят»шлюз отказал во входе: пароль в каталоге сменился; RADIUS отказал (вид логина, политика, второй фактор); или не совпали общий ключ либо идентификатор шлюза — приложение эти случаи не различаетсначала — новый пароль в карточке. Если и он не принят: отказ есть в журнале NPS (событие 6273) — дело в RADIUS; записи нет — сверить PSK и «Идентификатор шлюза»
NO_PROPOSAL_CHOSENалгоритмы фазы 1 или 2 не пересекаются с клиентскимисверить с §2
«it wants DH group N, and this client offers …»шлюзу нужна группа DH, которой у клиента нетвключить на шлюзе одну из групп §2
«the server proves itself with a certificate …, not the PSK»шлюз подписывается сертификатом, а в консоли выбран общий ключвыбрать в консоли «Сертификат»
«the server's certificate was not accepted: … server sent no certificate»в консоли выбран сертификат, а шлюз проверяется по общему ключувыбрать «Общий ключ (PSK)» или перевести шлюз на authmethod signature
«the server's certificate was not accepted: … not trusted»цепочка сертификата не выводится ни к центру из консоли, ни к доверенным системойвставить в консоль корневой сертификат центра шлюза
«the server's certificate was not accepted: … does not name …»в сертификате нет имени из «Сервера» (или «Идентификатора шлюза»): например, в «Сервере» IP-адресуказать в «Сервере» имя из сертификата или перевыпустить сертификат
«the gateway assigned no inner address»на шлюзе нет пула mode-configвключить mode-config с пулом адресов
туннель работает и рвётся на первом обновлении ключейв фазе 2 включён PFSвыключить PFS для этого туннеля
шлюз не отвечаетUDP 500/4500 закрыты по путитранспорт TCP в консоли и на шлюзе
имена не разрешаютсянет DNS для «Разрешённых доменов»заполнить «DNS-серверы» или выдать DNS через mode-config
адрес открывается, но ответа нетсеть не в «Разрешённых CIDR» или её не пускает политика шлюзадобавить сеть в группу и в политику

Дальше​