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

1.9 KiB

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)