5.0 KiB
Чистая установка версии 0.2.0
Поддерживаемая модель
In-place upgrade 0.1.0 → 0.2.0, автоматическая миграция policy/state и запуск
старого config под новым ядром не поддерживаются. Новый package preinst
отклоняет upgrade. Установка выполняется через удаление старого пакета,
архивирование его данных и настройку 0.2.0 с нуля.
Повторная установка ровно 0.2.0 поверх согласованного состояния 0.2.0 не является миграцией и поддерживается без этого runbook.
Описанные действия выполнять из console/maintenance-доступа. До успешного E2E anti-leak guard должен оставаться в nftables.
1. Остановить автоматическое применение
systemctl disable --now vpn-egress-sync.path || true
systemctl stop sing-box.service
systemctl mask --runtime sing-box.service
nft list table inet vpn_egress_guard
Если guard отсутствует, сначала восстановить защиту. Не продолжать переход с
работающим прямым forwarding eth1 -> eth0.
2. Удалить старый package и архивировать данные
apt-get remove vpn-egressctl
install -d -m 0700 /root/vpn-egress-0.1-archive
test ! -e /etc/vpn-egress || \
mv /etc/vpn-egress /root/vpn-egress-0.1-archive/etc-vpn-egress
test ! -e /var/lib/vpn-egress || \
mv /var/lib/vpn-egress /root/vpn-egress-0.1-archive/var-lib-vpn-egress
test ! -e /etc/sing-box/config.json || \
mv /etc/sing-box/config.json /root/vpn-egress-0.1-archive/config.json
Архив содержит secrets и должен оставаться root:root 0700/0600. Не копировать
старые policy.json, state.json или last-good.json обратно в 0.2.0.
3. Установить exact sing-box 1.14.0
apt-get update
apt-get install sing-box=1.14.0
sing-box version
Вывод должен содержать exact 1.14.0, Linux environment, with_quic и
with_gvisor. Runtime mask не снимать: старый config уже архивирован, но новая
policy ещё не настроена.
4. Установить vpn-egressctl 0.2.0
dpkg -i vpn-egressctl_0.2.0_all.deb
systemctl daemon-reload
Если postinst сообщает о legacy state или unmanaged config, не обходить
проверку: архивировать указанный объект и повторить dpkg --configure vpn-egressctl.
5. Настроить новую policy и URI
Редактировать новый /etc/vpn-egress/policy.json вручную. Из старой policy
можно перенести осознанно проверенные локальные значения, но нельзя заменять ею
новый файл целиком.
install -m 0600 -o root -g root /dev/null /etc/vpn-egress/hysteria2.uri
read -r -s URI
printf '%s\n' "$URI" > /etc/vpn-egress/hysteria2.uri
unset URI
vpn-egressctl check
vpn-egressctl diff
Для новой production-установки проверить, что URI содержит obfs=gecko.
obfs=salamander допускается только для явно настроенного server-side
compatibility fallback. check не запускает service.
6. Активировать защиту и config
systemctl enable --now vpn-egress-guard.service
nft list table inet vpn_egress_guard
systemctl unmask --runtime sing-box.service
vpn-egressctl sync
vpn-egressctl doctor
После первого успешного sync last-good ещё отсутствует — это ожидаемо.
7. Acceptance и watcher
С workload за eth1 проверить DNS, TCP, UDP, внешний VPN IP и отсутствие
прямого WAN при остановленном sing-box. Серверный Gecko E2E выполняется отдельно
владельцем HY2XS.
systemctl enable --now vpn-egress-sync.path
vpn-egressctl status --json
vpn-egressctl doctor
Фактический production-прогон этой процедуры и E2E клиента за eth1
зафиксирован в отчёте о финальной приёмке 0.2.0.
Возврат к 0.1.0
0.2.0 не выполняет downgrade. Возврат — отдельная ручная чистая установка: удалить 0.2.0, архивировать её состояние, установить exact старые packages и только после этого восстановить согласованный snapshot 0.1.0. Нельзя запускать config одной версии под бинарником другой.