# D5: NetNS Runtime Case (Ready) Дата: 2026-03-09 ## Что зафиксировано - `SingBox` может работать в отдельном `netns` без влияния на основной VPN-контур. - Для запуска внутри namespace используется адаптивный exec-режим: - default: `nsenter --net=/var/run/netns/ -- ...` - fallback: `ip netns exec ...` - Подготовка `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//restart` -> `ok=true`. 2. `GET /api/v1/transport/clients//health` -> `status=up`. 3. `systemctl status ` -> `active (running)`. 4. `systemctl show -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)