OpenVPN не запускается, а сообщение об ошибке указывает на строку, которая выглядит правильно: Unrecognized option or missing or extra parameter(s) in office.ovpn:42: ca. Сертификат не изменился, файл открывается в редакторе, и в пути ничего не выглядит неправильно. Парсер возражает не против имени опции, а против того, сколько аргументов пришло вместе с ней. Четыре проверки решают почти каждый такой случай, и их стоит выполнять в порядке затрат.

Почему парсер винит опцию

Каждая строка конфигурации разбивается по пробелам и по кавычкам ещё до того, как её увидит хоть одна опция. Поэтому значение с пробелом приходит как несколько аргументов, если оно не заключено в кавычки, а опция, которой принадлежала строка, сообщает о несоответствии. В Windows это делает несомненным каталог установки по умолчанию, потому что C:\Program Files по построению стоит в середине пути. При этой ошибке сертификат никогда не открывается, поэтому проверка наличия файла ничего полезного не доказывает.

Указанный номер строки обычно верен, а указанная опция — та, что израсходовала строку. Когда названа опция, которую вы точно никогда не писали, прочитайте строку выше: кавычка, потерянная в предыдущем блоке, сдвигает разбор. Так блок сертификата в конце концов получает вину за количество аргументов.

ca C:\Program Files\OpenVPN\config\office-ca.crt

Заключите в кавычки каждый путь с пробелом

Одна пара двойных кавычек вокруг значения — это весь ремонт, а в Windows косые черты допустимы, так что экранирование никогда не становится частью проблемы. Исправьте все опции путей за один проход, потому что парсер останавливается на первой ошибке, а следующая просто ждёт следующего перезапуска. Набор обычно включает ca, cert, key, tls-auth и auth-user-pass.

ca "C:/Program Files/OpenVPN/config/office-ca.crt"
cert "C:/Program Files/OpenVPN/config/office.crt"
key "C:/Program Files/OpenVPN/config/office.key"

Поиск по имени каталога находит каждое вхождение быстрее, чем чтение файла. Запустите его до любых правок, чтобы список был полным:

Select-String -Path .\office.ovpn -Pattern 'Program Files'

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

Восстановите объявление режима до сертификатов

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

client
dev tun
proto udp
remote vpn.example.net 1194

Держите одну директиву на строку, пока вы там. Склеенные строки дают ровно ту же ошибку числа аргументов из первого раздела, а указанная строка выглядит разумно, потому что склейка произошла там, где редактор перенёс текст. Читайте сырую строку, а не отображаемую.

Повреждение кодировки выглядит как имя опции

Файл, сохранённый как UTF-16 с меткой порядка байтов, скрывает свою первую опцию от парсера, а случайные байты могут прилипнуть к имени опции в сообщении. Сохраните файл как UTF-8 без метки порядка байтов, затем откройте его снова и убедитесь, что первый символ — обычная буква. Редакторы, перенаправление в PowerShell и текст, вставленный из окна чата, меняют кодировку не спрашивая.

Format-Hex .\office.ovpn | Select-Object -First 1

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

Какую проверку делать первой и почему

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

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

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