Files
elmprodvpn/docs/phase-d/D5_NETNS_RUNTIME_CASE.md

35 lines
1.9 KiB
Markdown

# D5: NetNS Runtime Case (Ready)
Дата: 2026-03-09
## Что зафиксировано
- `SingBox` может работать в отдельном `netns` без влияния на основной VPN-контур.
- Для запуска внутри namespace используется адаптивный exec-режим:
- default: `nsenter --net=/var/run/netns/<name> -- ...`
- fallback: `ip netns exec <name> ...`
- Подготовка `netns` (veth/route/NAT) и запуск runtime используют единый механизм выбора exec-mode.
- GUI debug toggle (`Debug netns`) изменяет `netns_enabled` через API, делает `provision` и `restart` для активных клиентов.
## Рефакторинг модулей
- Go:
- `selective-vpn-api/app/transport_netns.go` — setup/cleanup/NAT/spec.
- `selective-vpn-api/app/transport_netns_exec.go` — exec-mode selection (`nsenter|ip`) и wrappers.
- GUI:
- `selective-vpn-gui/netns_debug.py` — вычисление состояния netns-кнопки и общий toggle pipeline (`patch -> provision -> restart`).
- `selective-vpn-gui/vpn_dashboard_qt.py` — только UI-обвязка и вызов helper-модуля.
## Минимальный runtime-check
1. `POST /api/v1/transport/clients/<id>/restart` -> `ok=true`.
2. `GET /api/v1/transport/clients/<id>/health` -> `status=up`.
3. `systemctl status <unit>` -> `active (running)`.
4. `systemctl show <unit> -p ExecStart` -> команда через `nsenter` (или `ip netns exec` при fallback).
## Полезные конфиг-ключи клиента
- `netns_enabled: bool`
- `netns_name: string`
- `netns_exec_mode: auto|nsenter|ip` (optional)
- `netns_nsenter_bin: /usr/bin/nsenter` (optional)
- `netns_ip_bin: /sbin/ip` (optional)
- `netns_setup_strict: bool` (optional)
- `netns_auto_cleanup: bool` (optional)