- netns_common.py — обёртки над ip/nft/iptables: проверка netns и линков,
счётчики правил меток и kill-switch (nft -j и iptables -v -x), чтение
JSONL-логов мока и детектора, отправка трафика через probe.py;
- run_tests.py — прогон unittest с JSON-отчётом (pytest не нужен: работает
и на хосте, и в alpine-образе);
- README.md — схема топологии, таблица тестов, переменные окружения и pitfalls
(root/CAP_NET_ADMIN, rp_filter, отсутствие nft и ping в образе).
Refs #21
Refs #15
Основы харнесса для тестов без реального VPN-провайдера:
- lib.sh — конфигурация стенда (netns, адреса, fwmark/таблицы) и правила
netfilter с поддержкой nft и iptables (в alpine-образе приложения nft нет);
- topology.sh — up/down/status/killswitch: veth-пары client<->gw<->uplink,
ip_forward, ip rule fwmark 51820 -> table 51820, метки OUTPUT/FORWARD,
DROP kill-switch для прямого выхода в «публичную» сеть;
- run.sh — preflight, запуск мока и детектора утечки в netns uplink, прогон
тестов, снос стенда с проверкой отсутствия остатков.
Refs #21
Refs #15