Вы вставляете заранее общий ключ из сообщения администратора в диалог NetworkManager, ставите флажок, чтобы его показать, и он совпадает символ в символ. Соединение всё равно заканчивается ошибкой аутентификации до того, как поднимется туннель. Впервые увидев это, я решил, что ключ неверный; он не был. Ещё две вещи определяют, что демон читает на самом деле: файл секретов, который плагин записывает для этого соединения, и то, прошло ли значение через диалог без изменений.

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

Начните с диалога, но не доверяйте полю

Откройте вкладку IPsec соединения и введите ключ заново вместо вставки. Ключ, скопированный из сообщения в чате, PDF или менеджера паролей, может прийти с переводом строки в конце, которого поле не показывает, и видимые символы всё равно выглядят правильными.

Нажмите кнопку показа пароля и посмотрите на конец строки, а не на середину. Если курсор оставляет пустую строку под текстом, удалите её и введите последний символ заново. Эта одна правка решает удивительную часть таких обращений и стоит меньше, чем чтение любого журнала.

Если ключ пришёл из системы заявок, которая переносит длинные строки, запросите его по каналу, который не переносит. Сравнивайте длины с администратором, а не разглядывайте две строки рядом; потерянный символ на месте переноса невидим в пропорциональном шрифте.

Проследите ключ внутрь /etc/ipsec.d

Плагин никогда не передаёт PSK демону IPsec как аргумент в командной строке. Вместо этого он хранит значение в файле секретов и добивается, чтобы демон этот файл подключил, добавив строку include в /etc/ipsec.secrets, если её нет. То, что хранит диалог, — это входные данные для созданного файла, а не используемое значение.

Перечислите, что есть, прежде чем что-то менять:

ipsec --version
sudo ls -l /etc/ipsec.d/*.secrets /etc/ipsec.d/ipsec.nm-l2tp.secrets 2>/dev/null
sudo grep -n "include" /etc/ipsec.secrets

Старые выпуски плагина писали по одному файлу на соединение, названному по UUID соединения, например /etc/ipsec.d/nm-l2tp-ipsec-<uuid>.secrets. Удаление профиля в апплете не удаляет этот файл надёжно. Если старый файл от прежнего сервера всё ещё лежит на диске и всё ещё подключён, демон может выбрать секрет, принадлежащий профилю, которым вы больше не пользуетесь, и соединение срывается, хотя видимое поле верно.

Поймите, что изменение 1.2.12 сделало с обновлениями

Версия плагина 1.2.12 заменила файлы секретов для каждого соединения одним общим файлом, /etc/ipsec.d/ipsec.nm-l2tp.secrets. Обновление не убирает старые файлы по UUID, и существующая строка include /etc/ipsec.d/*.secrets всё ещё подключает их. Версия 1.2.16 изменила обработку предложений по умолчанию, а не раскладку секретов.

Эта история объясняет, почему две машины с как будто одинаковым профилем ведут себя по-разному. Ключ одинаковый; набор файлов, которые подключает демон, — нет. Убирая осиротевший файл, отложите его в сторону, а не удаляйте, подтвердите соединение и удалите его только после того, как рабочее состояние зафиксировано. Переименование сохраняет старое значение восстановимым, если окажется, что сбой в другом месте.

Отделите символы, которые формат хранения не может содержать

Документация strongSwan для строки общего секрета утверждает, что значение не может содержать перевод строки или символ двойной кавычки. Ключ, вставленный из документа, может нести любой из них без всякой визуальной разницы в обычном диалоге.

С версии 1.2.12 хранимое значение — не простой текст. Плагин кодирует PSK в base64 до того, как оно попадёт в файл, и примечания к выпуску называют это кодирование причиной, по которой двойная кавычка теперь допустима в ключе. Поэтому кавычка, введённая в поле, представима; для каждого управляющего символа это не так.

Длина — другое ограничение. В программном обеспечении L2TP/IPsec нет универсального минимума: некоторые клиенты принимают ключи короче двадцати символов, а некоторые шлюзы требуют минимум. Если короткий ключ отклонён, правило принадлежит политике сервера или проверке этого клиента, и повышение чего-то локально этого не изменит.

Прочитайте, какой уровень аутентификации не прошёл

Сначала запустите ipsec --version, потому что strongSwan и Libreswan используют разные имена файлов и синтаксис, и совет для одного может повредить другому. Затем прочитайте стадию сбоя из сообщения клиента или журнала демона: жалоба на общий ключ — это другое событие, чем отклонённые имя пользователя и пароль.

PSK аутентифицирует концы туннеля. Имя пользователя и пароль аутентифицируют человека внутри L2TP, и PPP занимается ими после того, как ассоциация IPsec поднята. Правильный PSK при неверной учётной записи всё равно не работает, и смена учётной записи не починит ключ, который демон так и не прочитал правильно.

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

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