Шлюз отвечает на IKEv2 на UDP 4443 не просто так, в профиле есть поле с именем Server, вы вводите имя хоста и порт, а телефон сообщает, что не может достучаться до сервера или не может разрешить адрес. Ничего не блокируется. Штатная форма Android ожидает хост, и то же самое верно в Windows. Нестандартный порт — это возможность клиента, а не настройка сервера, и выразить её позволяют только некоторые клиенты. Пройдите три части по порядку: что может сказать клиент, что слушает сервер и одинакова ли инкапсуляция пакетов на обоих концах.

Что телефон на самом деле отправил

Строка host:port в поле, предназначенном для имени, разрешается как имя. Резолвер ничего не возвращает для vpn.example.net:4443, и ошибка, которую вы видите, — это сбой разрешения имени или недоступность, а не тайм-аут на порту. Это различие важно, потому что повтор с более коротким именем или другой сетью никогда не исправит строку, которую форма не может разобрать.

Штатный профиль IKEv2 на Android, как и встроенный клиент Windows VPN, привязан к стандартным портам IKE. Ни один из них не показывает поле порта, и никакое редактирование профиля его не добавляет. Если слушатель оператора действительно находится на 4443, встроенный клиент — неподходящий инструмент, а не неправильно настроенный.

Используйте клиент, который показывает порт

Клиент strongSwan для Android документирует настраиваемый порт сервера в расширенных параметрах профиля, поэтому он встречается почти в каждом рабочем рецепте для этой схемы. Эта поддержка относится именно к тому клиенту: другое приложение IKEv2 или вендорский форк того же приложения может не показывать то же поле, хотя базовый демон strongSwan его поддерживает.

Запросите у оператора весь набор сразу: имя шлюза, порт UDP, метод аутентификации и идентичность сервера, которую должен ожидать клиент. Нестандартный порт — не повод отключать проверку сертификатов или менять протоколы. Введите порт там, где его ожидает установленный клиент, и если у этого клиента такого поля нет, ответ — другой разрешённый клиент, а не придуманный обход.

У сервера два порта, и оба должны совпадать

IKE начинается на UDP 500, а прохождение NAT обычно переносит IKE и инкапсулированный ESP на UDP 4500. В strongSwan это отдельные настройки, поэтому сервер, перенесённый на один нестандартный порт, должен изменить оба на одно и то же значение:

plugins {
  socket-default {
    port = 4443
    port_nat_t = 4443
  }
}

Когда один порт обслуживает обе роли, демону нужно отличать IKE от ESP-in-UDP на том же сокете, что он делает с помощью четырёхбайтового маркера «не ESP», который предшествует сообщению IKE. Поэтому клиент не может договориться на нестандартном порту и затем молча продолжить на 4500, и поэтому фраза «просто смените порт» скрывает требование к инкапсуляции.

Переадресация — это не слушатель

Переадресация 4443 на обычный слушатель IKE — это режим отказа, который выглядит почти успешным. Первое сообщение приходит, сервер отвечает, и затем соединение застревает или пересоздаёт ключи в никуда, потому что ответ уходит с другого порта, а последующий инкапсулированный трафик никогда не совпадает с состоянием, созданным двумя сторонами. Правило, которое переписывает порт назначения, не перемещая слушатель, даёт ровно этот полуоткрытый результат.

Путь также должен разрешать UDP от края до края. То, что TCP 443 проходит через гостиничную или операторскую сеть, ничего не говорит об IKEv2 на порту UDP, даже с тем же номером. Там, где разрешён только TCP 443, нестандартный порт UDP не превращает IKEv2 в HTTPS, и правильным ответом может быть другой путь доступа, а не очередной эксперимент с портом.

Разделяйте три этапа при тестировании

Захватывайте трафик на сервере, пока клиент пытается один раз. Запрос, который не приходит, — вопрос конечной точки или межсетевого экрана; запрос, который приходит без ответа, — вопрос слушателя или политики; ответ, за которым следует тишина, — вопрос инкапсуляции или идентичности.

tcpdump -ni eth0 -vv udp port 4443

Затем читайте сообщение клиента, а не его крутящийся индикатор. Ошибка предложения означает, что алгоритмы не совпадают, сбой аутентификации означает, что не совпадают идентичности или сертификаты, а повторные передачи без ответа означают, что на этом порту никто не отвечает. Проверяйте по одному этапу и меняйте одно поле между попытками; документация strongSwan о прохождении NAT описывает маркер и поведение порта, которые показывает вам запись.

Похожие статьи