35 lines
1.9 KiB
Markdown
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)
|