Skip to content

feat(vpn): ставить AllowedIPs одной командой, если инсталлер умеет - #55

Merged
ekuraev merged 2 commits into
mainfrom
feat/add-allowed-ips-flag
Sep 2, 2026
Merged

feat(vpn): ставить AllowedIPs одной командой, если инсталлер умеет#55
ekuraev merged 2 commits into
mainfrom
feat/add-allowed-ips-flag

Conversation

@ekuraev

@ekuraev ekuraev commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Что сделано

Апстрим добавляет add --allowed-ips=СПИСОК (Issue #253): индивидуальные маршруты клиента вместе с созданием, одним флагом на всю пачку имён. Бот использует флаг, когда он есть, и сохраняет прежний путь, когда нет.

Развилка по возможности, а не по номеру версии

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

Откат безопасен по построению. На неизвестную опцию скрипт печатает справку и не создаёт клиента, а аварийный конверт приходит с command="help" вместо "add". По этому признаку add_client повторяет обычное создание и сообщает вызывающему, что маршруты ещё не применены, после чего их доставляет modify, как раньше.

Проверено на настоящих скриптах, не только на заглушках:

  • v5.31.0 на add имя --allowed-ips=... --json отвечает {"command":"help","ok":false,"error":"invalid usage (unknown option or command)","rc":1} с кодом 1 и ничего не создаёт; его справка флага не содержит.
  • Скрипт из головы апстрим-PR печатает флаг в справке, и русская, и английская версии; обе завершаются нулём и непустым выводом, как требует проба.

Массовая генерация

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

Прочее

Настоящая причина отказа add (например «awg_common.sh устарела» на полуобновлённом сервере) теперь пишется в лог. Пользователю текст скрипта не показывается, в нём бывают секреты, и раньше причина пропадала совсем.

Проверка

  • cargo test — 419 юнит-тестов и 4 интеграционных, зелёные. Новые: проба возможности по справке, откат на старом инсталлере, отсутствие лишнего запуска справки, когда маршруты не заданы, отказ на невалидном списке до запуска скрипта, пачка с флагом и без него, некэширование нечитаемой справки.
  • cargo fmt --check, cargo clippy --all-targets -D warnings, cargo deny check — чисто.
  • Значение, уходящее в аргументы, проходит parse_allowed_ips, а запуск идёт списком аргументов, без оболочки.

Апстрим добавляет `add --allowed-ips=СПИСОК` (Issue #253): индивидуальные
маршруты клиента вместе с созданием, одним вызовом на всю пачку имён.
Бот использует флаг, когда он есть, и сохраняет прежний путь, когда нет.

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

Откат безопасен по построению: на неизвестную опцию скрипт печатает
справку и НЕ создаёт клиента, а аварийный конверт приходит с
command="help" вместо "add". По этому признаку add_client повторяет
обычное создание и сообщает вызывающему, что маршруты ещё не применены —
тогда их доставляет modify, как раньше.

Массовая генерация получила шаг маршрутов: флаг применяется ко всей пачке
за один вызов. Отката там нет — он означал бы modify на каждого клиента,
поэтому на старом инсталлере шаг не показывается вовсе.
Конверт с command="add" — настоящий отказ создания, например
«awg_common.sh устарела» на полуобновлённом сервере. Пользователю
текст скрипта не показываем (в нём бывают секреты), поэтому причина
уходила в никуда. Теперь она пишется в лог перед тем, как стать
ошибкой разбора.
@ekuraev
ekuraev merged commit efb4544 into main Sep 2, 2026
2 checks passed
@ekuraev
ekuraev deleted the feat/add-allowed-ips-flag branch September 2, 2026 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant