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