Маршрут устройства OpenVPN: владелец конфигурации или скрипт запуска?
Маршрут филиала, переживший одну перезагрузку, всё равно может исчезнуть после сохранения в GUI или обновления прошивки. Сравните поддерживаемого владельца конфигурации со скриптом-заплаткой.
Вы добавляете маршрут филиала, он работает, а затем обновление прошивки или сохранение из веб-интерфейса удаляет его. Два исправления в этот момент выглядят одинаково разумно: поместить маршрут в поддерживаемый источник конфигурации устройства или дописать его в сгенерированный файл из скрипта запуска. Неделю они ведут себя одинаково и расходятся при втором обновлении. Эта статья сравнивает, чем на самом деле владеет каждое из них.
Два кандидата владеют разными вещами
Поддерживаемый источник конфигурации — это всё, что устройство считает входными данными: поле GUI, импортированный профиль, документированный каталог для каждого клиента, база настроек, которую читает пакет управления. Сгенерированный server.conf — это вывод. Редактирование вывода работает, пока генератор не запустится снова, а это происходит при сохранении, при перезагрузке и при обновлении.
Подход со скриптом патчит этот вывод после завершения генератора. Это законная техника для лаборатории, и это неверное значение по умолчанию для филиала, потому что она делает маршрут зависимым от совпадения текста, а не от документированного поля.
| Question | Supported config source | Post-generation script |
|---|---|---|
| Survives a GUI save | Yes | Only if the save does not regenerate the file |
| Survives a package upgrade | Usually, when the field is documented | No guarantee; the wrapper can be replaced |
| Supportable by the vendor | Yes | No |
| Obvious to the next admin | Yes, it is in the UI | No, it lives in a wrapper |
Что устройство регенерирует, и когда
Пакеты управления обычно хранят настройки в базе данных или наборе шаблонов и формируют конфигурацию демона при запуске. Сохранение из веб-интерфейса часто перезаписывает весь файл, а не патчит одну строку. Если ваше изменение жило в этом файле, теперь его нет, и ничто не записывает предупреждение, потому что с точки зрения устройства ничего не потеряно.
У обёрток запуска есть второй режим отказа. grep по директиве с определёнными пробелами перестаёт совпадать после изменения шаблона, и скрипт молча ничего не делает. Хуже того, обновление прошивки может заменить обёртку новой версией, забрав заплатку с собой. Тогда у вас есть маршрут, который существовал год и исчез во время обслуживания, которое никто не связал с маршрутизацией.
Что должен выразить поддерживаемый владелец
Префиксу филиала нужны три утверждения, а не одно. Клиент должен узнать маршрут, сервер должен знать, какой аутентифицированный клиент владеет префиксом, а сторона филиала должна возвращать трафик на адрес туннеля, который ей выдали. В терминах OpenVPN это означает отправленный route, соответствующий iroute, привязанный к клиенту, и обратный путь на другой стороне.
Именно здесь интерфейсы устройств вводят в заблуждение. Флажок с надписью «разрешить клиентам доступ к локальной сети сервера» описывает трафик в сторону собственной сети сервера. Ваш филиал — противоположное направление: сеть за одним клиентом, доступная со стороны сервера. Та же надпись не подразумевает поддержку этого, и действующая директива в файле не является обещанием, что пакет её сохранит.
Когда поддерживаемого управления нет
Иногда установленный выпуск действительно не может выразить маршрут, специфичный для партнёра. Тогда честные варианты — другой шлюз, которым вы управляете, или поддерживаемый режим «сайт-сайт» на обоих концах. Оба конца должны его понимать. Страница продукта со словами «сайт-сайт» не делает произвольный профиль OpenVPN взаимозаменяемым с туннелем другого протокола, и принудительное спаривание обычно даёт наполовину подключённый туннель, который хорошо выглядит на странице состояния.
Выберите вариант, который вы можете описать одним предложением тому, кто унаследует сеть. Если ответ требует упомянуть путь к скрипту и текстовый шаблон, дизайн уже хрупок.
Сделайте намерение проверяемым
Запишите контракт вне устройства: фактическую идентичность клиента, префикс, обратный шлюз и поддерживаемое поле, которое предоставляет каждое из них. Экспортируйте конфигурацию через поддерживаемый механизм, чтобы при перестройке была ссылка, и проверяйте службу после переподключения, перезапуска и обновления, а не только после изменения.
Когда что-то ломается, сравните сгенерированный результат с этой записью, вместо того чтобы восстанавливать необъяснённую строку и надеяться.справочник OpenVPN 2.6 — это место, где подтверждают, как route и iroute взаимодействуют, прежде чем спорить с интерфейсом.
Контрольный список для следующего изменения: назовите владельца, сформулируйте трёхчастный контракт, экспортируйте намерение и проверьте заново после собственных событий жизненного цикла устройства, а не после вашей правки.