feat(vpn): ставить AllowedIPs одной командой, если инсталлер умеет - #55
Merged
Conversation
Апстрим добавляет `add --allowed-ips=СПИСОК` (Issue #253): индивидуальные маршруты клиента вместе с созданием, одним вызовом на всю пачку имён. Бот использует флаг, когда он есть, и сохраняет прежний путь, когда нет. Наличие флага определяется по справке самого скрипта, а не по номеру версии: релиз с флагом заранее не известен, а на полуобновлённом сервере номер и реальность расходятся. Справка ничего не меняет, не требует root и печатает перечень флагов; ответ кэшируется на время жизни процесса, потому что меняется только вместе с обновлением инсталлера. Нечитаемую справку не кэшируем — временный сбой не должен навсегда выключить флаг. Откат безопасен по построению: на неизвестную опцию скрипт печатает справку и НЕ создаёт клиента, а аварийный конверт приходит с command="help" вместо "add". По этому признаку add_client повторяет обычное создание и сообщает вызывающему, что маршруты ещё не применены — тогда их доставляет modify, как раньше. Массовая генерация получила шаг маршрутов: флаг применяется ко всей пачке за один вызов. Отката там нет — он означал бы modify на каждого клиента, поэтому на старом инсталлере шаг не показывается вовсе.
Конверт с command="add" — настоящий отказ создания, например «awg_common.sh устарела» на полуобновлённом сервере. Пользователю текст скрипта не показываем (в нём бывают секреты), поэтому причина уходила в никуда. Теперь она пишется в лог перед тем, как стать ошибкой разбора.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что сделано
Апстрим добавляет
add --allowed-ips=СПИСОК(Issue #253): индивидуальные маршруты клиента вместе с созданием, одним флагом на всю пачку имён. Бот использует флаг, когда он есть, и сохраняет прежний путь, когда нет.Развилка по возможности, а не по номеру версии
Наличие флага определяется по справке самого скрипта. Причины две: релиз, в котором флаг выйдет, заранее не известен, а на полуобновлённом сервере номер версии и реальность расходятся. Справка ничего не меняет, не требует root и печатает перечень флагов. Ответ кэшируется на время жизни процесса, потому что меняется только вместе с обновлением инсталлера. Нечитаемая справка не кэшируется: временный сбой не должен навсегда выключить флаг.
Откат безопасен по построению. На неизвестную опцию скрипт печатает справку и не создаёт клиента, а аварийный конверт приходит с
command="help"вместо"add". По этому признакуadd_clientповторяет обычное создание и сообщает вызывающему, что маршруты ещё не применены, после чего их доставляетmodify, как раньше.Проверено на настоящих скриптах, не только на заглушках:
add имя --allowed-ips=... --jsonотвечает{"command":"help","ok":false,"error":"invalid usage (unknown option or command)","rc":1}с кодом 1 и ничего не создаёт; его справка флага не содержит.Массовая генерация
Получила шаг маршрутов: флаг применяется ко всей пачке за один вызов. Отката там нет, потому что он означал бы
modifyна каждого клиента с применением конфигурации сервера каждый раз. Поэтому на инсталлере без флага шаг просто не показывается, а если флаг отвалится между пробой и запуском, в итоге появится строка о неприменённых маршрутах.Прочее
Настоящая причина отказа
add(например «awg_common.sh устарела» на полуобновлённом сервере) теперь пишется в лог. Пользователю текст скрипта не показывается, в нём бывают секреты, и раньше причина пропадала совсем.Проверка
cargo test— 419 юнит-тестов и 4 интеграционных, зелёные. Новые: проба возможности по справке, откат на старом инсталлере, отсутствие лишнего запуска справки, когда маршруты не заданы, отказ на невалидном списке до запуска скрипта, пачка с флагом и без него, некэширование нечитаемой справки.cargo fmt --check,cargo clippy --all-targets -D warnings,cargo deny check— чисто.parse_allowed_ips, а запуск идёт списком аргументов, без оболочки.