Удаление key-method из профиля OpenVPN ничего не меняет
Директива исчезла из парсера, а не из протокола. Отделите устаревшую опцию от формата обмена ключами, прежде чем править профиль.
Профиль, который работал годами, вдруг отказывается запускаться, а сообщение называет директиву, которую никто не помнит добавленной: key-method. Следующая выдача поиска советует добавить key-method 2 для совместимости, но это совет из другой эпохи. Парсер, отклонивший строку, — текущий, и такой опции в нём нет вовсе. Удаление строки исправляет запуск и ничего не меняет в том, как два узла защищают сеанс.
Именно этот разрыв между тем, что содержит профиль, и тем, что протокол делает на самом деле, и есть вся тема, и он объясняет несколько других правок, которые люди делают одновременно. Он же объясняет, почему такие правки обычно приходят одним набором.
Симптом — ошибка разбора, а не сбой рукопожатия
Опции читаются до отправки любого пакета. Профиль с неизвестной директивой терпит неудачу на этом этапе, поэтому процесс никогда не доходит до сети и никогда не выдаёт ошибку рукопожатия. Формулировка обычно называет опцию и файл, что делает этот сбой одним из самых простых для привязки к причине. Ни пакет, ни маршрут, ни межсетевой экран здесь не участвуют.
openvpn --config /etc/openvpn/client/office.ovpn --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
Если сообщение называет директиву, диагноз закончен: в файле есть то, что эта сборка не принимает. Если сообщение вместо этого называет путь к файлу, проблема в отсутствующем include или ключе, а это другой раздел того же этапа запуска.
Не следует делать вывод, что клиенту или серверу нужен более старый режим протокола. Сбой разбора — это проблема словаря между вашим файлом и бинарником, и бинарник в этом случае просто выбросил одно слово из своего словаря.
Директива и формат передачи — две разные вещи
Старая опция key-method выбирала, как обрамляется обмен ключами TLS, а современный обмен — это многопакетный метод, который эта опция когда-то запрашивала. Опция исчезла, потому что больше ничего не выбирала; формат, который она называла, стал единственным. Поэтому удаление строки оставляет сеанс с тем же обрамлением, что и раньше. Правка текста не может изменить это ни в одну сторону.
Поэтому возвращать старый бинарник, чтобы «восстановить» метод 2, — неверный ремонт. Он не восстанавливает ничего, кроме более старого парсера со старыми значениями по умолчанию, и лишает вас исправлений, пришедших после него. То же рассуждение применимо к ослаблению проверки сертификата или списка шифров в надежде, что соединение вернётся.
Полезная проверка — это версия и разобранная конфигурация, а не наличие слова в файле:
openvpn --version | head -n 1
grep -rn 'key-method' /etc/openvpn/ 2>/dev/null
Что удалять и из какого файла
Правьте тот файл, который действительно читает запущенный процесс, и только его. В пакетных системах это обычно профиль в каталоге клиента или сервера, указанном юнитом, а не копия в вашем домашнем каталоге, которую вы держите для справки. Сгенерированный профиль может также пересобираться из шаблона, поэтому правка, сделанная только в развёрнутой копии, вернётся после следующего запуска провижининга.
Удалите устаревшую строку и оставьте в покое конечную точку, сертификаты, политику шифров и настройки канала управления. Это поддерживаемые опции, которые нужны процессу, и они не причастны к ошибке разбора. Если в том же профиле есть другие директивы, которых вы не узнаёте, сверяйте каждую с запущенной версией, а не удаляйте их группой, пока процесс не запустится.
Затем запустите нужный экземпляр и прочитайте его вывод при запуске. Чистый запуск при наличии слушателя — подтверждение того, что этот этап завершён; тест клиента после этого отвечает на другой вопрос.
Отклонённый профиль и отклонённый клиент выглядят одинаково
Два сбоя порождают похожие темы поддержки и требуют разных доказательств. Сервер, который отклоняет собственную конфигурацию, никогда не запускается, поэтому ни один клиент не может к нему подключиться. Сервер, который нормально запускается и отказывает одному клиенту, работает, и в его журнале есть причина: проблема с сертификатом, протолкнутая опция, которую клиент не принимает, несовпадение шифра.
Удалённая опция не является диагнозом для второго случая, и обращение к ней тратит один и тот же час дважды. Если журнал клиента показывает отказ сервера, читайте этот отказ; если он показывает локальную ошибку, проверять нужно профиль клиента. Обращение к директиве, которой больше нет, задерживает оба расследования одинаково.
Вопросы совместимости, на которые строка так и не ответила
Профили, которые ходят с этой директивой, обычно несут историю о конкретной платформе, и история переживает техническую причину. Мобильному или настольному клиенту по-прежнему нужен полный поддерживаемый профиль: доверенная цепочка сертификатов, шифр данных, который принимают обе стороны, режим канала управления, который реализуют обе стороны, и никаких директив, которые отвергает сборка клиента. Ничто из этого не определяется наличием или отсутствием старой строки key-method.
Сжатие — отдельный вопрос политики той же формы. Удаление строки key-method ничего не говорит о том, поддерживается ли директива сжатия и допустима ли она в вашем развёртывании, и оба решения следует принимать независимо. Удаление нескольких настроек, важных для безопасности, разом, пока что-нибудь не подключится, — это путь, которым рабочий профиль превращается в необъяснимый.
Держите короткую запись о том, что вы удалили и почему: опция, версия, которая её отклонила, и команда, показавшая ошибку. Следующему человеку, который унаследует профиль, понадобятся именно эти три факта, и записать их сейчас дешевле, чем восстанавливать позже.