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

Почему изменённый файл создаётся заново

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

Посмотрите, что записывает последовательность загрузки и когда. Ответ почти всегда — скрипт в каталоге init или автозапуска прошивки.

Вставьте директиву там, где скрипт собирает файл

Устройства QTS заново генерируют конфигурацию сервера OpenVPN внутри init-скрипта, который запускает демон, поэтому правку нужно делать там. Добавьте дописывание непосредственно перед командой запуска, а не редактируйте созданный файл.

sed -i '/daemon_mgr/i echo client-config-dir clientconfig >>/etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
grep -c client-config-dir /etc/openvpn/server.conf

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

Почините форму, сохранившую экранированные ключи

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

openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pem

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

Перепроверьте после обновлений

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

Затем подключите клиента и прочитайте в журнале сервера переданную опцию. Настройка, которая когда-либо существовала только в форме, — это настройка, которую никто не проверял.

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