Обновление Ubuntu сломало L2TP/IPsec? Сравните предложения IKEv1
Профиль и пароль не менялись, но фаза 1 теперь не проходит. Допустимые предложения клиента сместились, а сервер по-прежнему предлагает то, что предлагал всегда.
Соединение работало в четверг, обновление выполнилось в пятницу, а в понедельник клиент крутится на “connecting” и сдаётся. Тот же ноутбук, тот же сервер, та же учётная запись, тот же предварительно разделённый ключ. В профиле ничего не редактировали, поэтому очевидные подозреваемые, пароль и firewall, тратят ваше время.
Изменился список преобразований, которые ваша машина готова предложить. Оба стека IPsec, используемые в Ubuntu, strongSwan и Libreswan, отбрасывают алгоритмы, которые больше не считают безопасными, а плагин NetworkManager перед ними имеет собственный список, который движется по другому графику. Сервер, привязанный к 3DES, SHA1 и группе Diffie-Hellman на 1024 бита, может в итоге не услышать ничего из того, что принимает.
Что на самом деле изменило обновление
Предложение IKEv1 питают два уровня. Демон поставляет встроенный в компиляцию набор предложений по умолчанию, а плагин L2TP либо полагается на него, либо предоставляет свой список. До NetworkManager-l2tp 1.2.16 плагин полагался на него, поэтому вашим предложением было то, что установленный демон считал разумным. Начиная с 1.2.16 плагин отправляет документированный список, построенный по образцу клиентов Windows и Apple, и этот список шире старого значения по умолчанию, но больше не содержит каждого устаревшего сочетания в начале очереди.
Это разделение объясняет режим отказа, который люди находят запутанным: две машины на одном выпуске Ubuntu могут вести себя по-разному, потому что у одной есть пакет дистрибутива, а у другой backport, и версия демона на обеих в отчёте об ошибке выглядит одинаково. Проверьте версию плагина, а не только версию демона, прежде чем заключать, что обновление ничего существенного не изменило.
В той же области есть ловушка поменьше. Два демона по-разному пишут группы Diffie-Hellman на эллиптической кривой: один пишет ecp384, другой ecp_384. Вставьте неправильное написание в диалог Advanced, и демон отклонит настройку как неразбираемую, что в журнале выглядит как проблема переговоров, а не как опечатка в конфигурации.
Прочитайте отказ, прежде чем что-то менять
Начните с того, какой backend вы запускаете, потому что ответ определяет и синтаксис, и место журнала.
ipsec --version
nmcli connection show "Your VPN name" | grep -i ipsec
Затем прочитайте сам обмен. В strongSwan демон пишет в journal на текущем выпуске и в /var/log/syslog на более старом, и интересна не последняя строка, а отправленное предложение. Вы ищете формулировку об отсутствии подходящего предложения, что является проблемой алгоритма; об ошибке аутентификации, которая указывает на ключ или учётную запись; или об обычном тайм-ауте, который указывает на доступность.
Эти три исхода слишком часто воспринимают как один симптом. Тайм-аут с пустым журналом демона означает, что пакеты не приходят. Отклонение предложения означает, что они пришли и были отвергнуты. Если ваш журнал молчит, поднимите уровень отладки плагина на одну попытку и затем снизьте его, потому что подробный вывод быстро заполняет journal.
Фаза 1 и фаза 2 — отдельные ставки
IKEv1 договаривается дважды. Основной режим строит ассоциацию безопасности IKE из алгоритма шифрования, алгоритма целостности, группы Diffie-Hellman и метода аутентификации. Быстрый режим затем строит ассоциацию ESP, которая будет нести L2TP. Сервер волен принять первую и отклонить вторую, поэтому наполовину правильный профиль отказывает позже, чем вы ждёте, и выглядит как другая ошибка.
Phase 1: 3des-sha1-modp1024!
Phase 2: 3des-sha1!
Восклицательный знак — это синтаксис strongSwan для строгой записи: предлагай только это одно сочетание и ничего больше. Без него запись присоединяется к резервному списку, что хорошо, когда партнёр современный, и контрпродуктивно, когда это устройство с одной жёстко закодированной политикой. Считайте пару выше иллюстрацией формы, а не рекомендацией для чего-либо, что вы строите сегодня.
Измените одно поле, затем повторите тест
На текущем плагине самый быстрый первый тест — полностью очистить оба поля предложений и подключиться заново, потому что поставляемый список по умолчанию уже включает обычные сочетания Windows и Apple. На более старом плагине их очистка возвращает управление демону, который мог уже отбросить алгоритм, на котором настаивает ваш сервер, и отказ становится хуже.
Если очистка не помогает, задайте строгую пару, которую документирует ваш сервер, по одной фазе за раз. Измените фазу 1, подключитесь заново и прочитайте журнал, прежде чем трогать фазу 2. Когда сочетание наконец заработает, запишите его рядом с моделью сервера и версией плагина, потому что значения по умолчанию снова сдвинутся, и именно эта заметка превращает следующее обновление в пятиминутную проверку.