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

Два кандидата владеют разными вещами

Поддерживаемый источник конфигурации — это всё, что устройство считает входными данными: поле GUI, импортированный профиль, документированный каталог для каждого клиента, база настроек, которую читает пакет управления. Сгенерированный server.conf — это вывод. Редактирование вывода работает, пока генератор не запустится снова, а это происходит при сохранении, при перезагрузке и при обновлении.

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

QuestionSupported config sourcePost-generation script
Survives a GUI saveYesOnly if the save does not regenerate the file
Survives a package upgradeUsually, when the field is documentedNo guarantee; the wrapper can be replaced
Supportable by the vendorYesNo
Obvious to the next adminYes, it is in the UINo, it lives in a wrapper

Что устройство регенерирует, и когда

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

У обёрток запуска есть второй режим отказа. grep по директиве с определёнными пробелами перестаёт совпадать после изменения шаблона, и скрипт молча ничего не делает. Хуже того, обновление прошивки может заменить обёртку новой версией, забрав заплатку с собой. Тогда у вас есть маршрут, который существовал год и исчез во время обслуживания, которое никто не связал с маршрутизацией.

Что должен выразить поддерживаемый владелец

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

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

Когда поддерживаемого управления нет

Иногда установленный выпуск действительно не может выразить маршрут, специфичный для партнёра. Тогда честные варианты — другой шлюз, которым вы управляете, или поддерживаемый режим «сайт-сайт» на обоих концах. Оба конца должны его понимать. Страница продукта со словами «сайт-сайт» не делает произвольный профиль OpenVPN взаимозаменяемым с туннелем другого протокола, и принудительное спаривание обычно даёт наполовину подключённый туннель, который хорошо выглядит на странице состояния.

Выберите вариант, который вы можете описать одним предложением тому, кто унаследует сеть. Если ответ требует упомянуть путь к скрипту и текстовый шаблон, дизайн уже хрупок.

Сделайте намерение проверяемым

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

Когда что-то ломается, сравните сгенерированный результат с этой записью, вместо того чтобы восстанавливать необъяснённую строку и надеяться.справочник OpenVPN 2.6 — это место, где подтверждают, как route и iroute взаимодействуют, прежде чем спорить с интерфейсом.

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

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