Ви додаєте маршрут філії, він працює, а потім оновлення прошивки або збереження з веб-інтерфейсу видаляє його. Два виправлення в той момент виглядають однаково розумно: помістити маршрут у підтримуване джерело конфігурації пристрою або дописати його в згенерований файл зі скрипта запуску. Тиждень вони поводяться однаково і розходяться при другому оновленні. Ця стаття порівнює, чим насправді володіє кожне з них.

Два кандидати володіють різними речами

Підтримуване джерело конфігурації — це все, що пристрій вважає вхідними даними: поле 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 взаємодіють, перш ніж сперечатися з інтерфейсом.

Контрольний список для наступної зміни: назвіть власника, сформулюйте трискладовий контракт, експортуйте намір і перевірте знову після власних подій життєвого циклу пристрою, а не після вашої правки.

Схожі статті