FortiGate IPsec в Linux: какой клиент на самом деле подключается
Клиент производителя для Linux говорит только на SSL VPN. Мобильный профиль IPsec приходится пересобирать в vpnc или strongSwan, и четыре поля должны совпадать со шлюзом.
Ваш коллега на Windows импортирует профиль мастера FortiGate и через минуту уже в сети. Вы ставите тот же пакет производителя на Ubuntu, ищете вкладку IPsec и находите клиент, который умеет только открывать SSL VPN портал. Вывод, который обычно следует, неверен дважды: шлюз вас не отвергает, и сборка Linux не сломана. Fortinet поставляет этот клиент только с поддержкой SSL VPN, поэтому мобильному профилю IPsec негде жить, и его приходится пересобирать там, где говорят на IKEv1.
Сначала решите, какой протокол вам на самом деле дали
Эта пересборка механическая, как только вы перестаёте считать клиент производителя эталонной реализацией.
Устройства FortiGate публикуют и SSL VPN, и IPsec, а письмо о передаче редко говорит, что именно вам выдали. URL портала плюс страница входа в стиле браузера означают SSL VPN, и в Linux ответ там — openfortivpn, а не сопоставление полей ниже. Идентификатор группы плюс предварительно общий ключ означают мобильный IPsec, с которым справляются vpnc и strongSwan.
Ошибка здесь — самая частая причина, по которой попытка в Linux умирает до завершения первой фазы: клиент предлагает IKEv1 порталу HTTPS или наоборот. Попросите у администратора название протокола письменно, прежде чем что-либо устанавливать.
Четыре секрета путешествуют в четырёх разных полях
Слово password в большинстве передач встречается дважды и означает две разные вещи. Предварительно общий ключ аутентифицирует сам узел, и это машинный секрет, который администратор читает из конфигурации шлюза. Пароль вашей учётной записи — отдельный секрет, доказывающий, какой человек стоит за этим узлом.
Остальные два значения пропустить легче. Идентификатор группы — это строка, которую мастер записал в объект группы IPsec, а 0 является допустимым значением, а не пустым полем. Предложение охватывает шифрование, хеширование и группу Diffie-Hellman для каждой фазы, а также параметр PFS, и каждый его пункт должен совпадать со шлюзом. Когда соединение срывается на фазе 1, почти всегда виноват один из этих четырёх, поэтому записывайте их отдельно, а не сваливайте в одно окно.
Что должно содержать каждое поле vpnc
Установите клиент вместе с интерфейсом редактора, затем создайте подключение VPNC:
sudo apt install vpnc network-manager-vpnc network-manager-vpnc-gnome
Укажите в шлюзе публичный адрес FortiGate, а в имени группы — ровно идентификатор со шлюза, включая голый ноль. Group password принимает предварительно общий ключ, а имя пользователя и пароль — вашу учётную запись, с любым токеном, добавленным так, как ожидает шлюз. В расширенном окне выберите группу Diffie-Hellman, которую называет предложение, согласуйте PFS с той же группой, включите прохождение NAT, если клиент за домашним маршрутизатором, и оставьте обнаружение мёртвого узла в одном шаге со шлюзом.
Имя группы — то поле, которое пропускают, потому что оно кажется необязательным, а значение по умолчанию ноль похоже на заполнитель. Отправьте его пустым, и клиент передаст не тот идентификатор, который проверяет шлюз. Если профиль всё ещё не работает, сравните расширенные значения с работающим клиентом Windows, а не с сообщением на форуме для другого сайта.
Тот же профиль, написанный для strongSwan
strongSwan — лучший долгосрочный контейнер для этих значений, так как конфигурация представляет собой текстовый файл, который можно просмотреть и сохранить:
conn office-fw
keyexchange=ikev1
aggressive=yes
left=%any
leftauth=psk
leftauth2=xauth
xauth_identity=YOUR_USER
right=GATEWAY_ADDRESS
rightauth=psk
rightsubnet=OFFICE_SUBNET
ike=aes128-sha1-modp1536!
esp=aes128-sha1-modp1536!Прочитайте строки предложения перед блоком, потому что восклицательный знак в конце меняет их смысл: он закрепляет именно это предложение и убирает альтернативы, которые клиент иначе предложил бы. Шлюз, настроенный на одну пару преобразований, отклонит клиент, который открывается списком, поэтому именно закрепление превращает переговоры в совпадение. Возьмите точные имена алгоритмов из рабочего профиля шлюза и замените заполнители своими значениями.
Две строки аутентификации не лишние. PSK доказывает узел, блок XAuth доказывает пользователя, и удаление любой из них оставляет фазу, которую шлюз не завершит.
Прочитайте сбой, прежде чем менять ещё одно поле
Идите от симптома назад, а не перемешивайте окно заново. IKE SA, который поднимается без выданного адреса, означает, что обмен аутентификацией пользователя не удался или вообще не запускался, поэтому проверьте учётную запись и обработку токена. Фаза 1, которая никогда не завершается, указывает на предложение, идентификатор группы или агрессивный режим, и каждый из них сравнивается со шлюзом, а не только с клиентом Windows.
Туннель, который устанавливается и затем умирает каждые несколько минут, — это разногласие в обнаружении мёртвого узла между двумя концами; согласуйте таймер шлюза, а не отключайте keepalive везде. Установленный туннель, в котором офисные хосты остаются недоступными, обычно означает, что проталкиваемая подсеть так и не попала в локальную таблицу маршрутизации, чего сторонний клиент может сам и не сделать.
Верните рабочие значения владельцу шлюза, когда закончите: протокол, идентификатор группы, предварительно общий ключ, предложение, PFS и решение по DPD. Тогда следующая машина с Linux займёт минуты вместо вечера, и никому не придётся заново выяснять, что имя группы было нулём.