---
name: cehoproxy_crossplatform_plan
description: "CehoProxy на Linux и macOS: что сделано, чем доказано, и единственное, что осталось непроверенным (TUN на macOS)"
metadata: 
  node_type: memory
  type: project
  originSessionId: cf75944b-cc91-4988-aab6-28363391917a
  modified: 2026-08-07T11:16:12.091Z
---

Порт [[cehoproxy_overview]] с Windows на Linux и macOS сделан 07.08.2026. Репозиторий `~/Разработки/proxycage`.

**Веб-панель оказалась и есть GUI для всех трёх систем** — отдельный десктопный интерфейс не понадобился. Терминальный режим — тот же CLI. Добавлена команда `cehoproxy open`.

**Платформенный шов — пять файлов, больше нигде:** `Os` (пути, права, realpath, поиск sing-box и curl), `SingBoxProcess`, `TunCleanup`, `Autostart`, `AppDetector`. Плюс `DaemonControl` (pid-файл + сигнал вместо именованного события Windows) и `ProcessInspector` (/proc на Linux, lsof+ps на macOS, netstat на Windows).

**Как проверялось.** Linux — полностью, живьём, в одноразовой Ubuntu 26.04 в lima (`limactl start --name=ceho template://ubuntu-lts`). Ломать там можно всё. macOS — всё, кроме TUN: sudo на маке требует пароль, а вводить его я не могу.

**Доказательство изоляции без внешних сервисов.** Подписка провайдера в тот день отдавала 502, нода на своём VPS молчала. Решение: подняли СВОЙ shadowsocks-узел sing-box на маке и подписку из него; доказательство — не сравнение IP (у VM и мака он общий), а лог узла: соединение изолированного приложения там ЕСТЬ, соединение обычного — НЕТ. Так же надёжно и ни от кого не зависит. Повторять этот приём при любых сомнениях.

**Что подтвердилось живьём на Linux:** изоляция (`verify` → 1 через туннель / 0 напрямую, узел видит трафик), интернет всей машины жив при поднятом туннеле, systemd-автозапуск переживает перезагрузку, после перезагрузки подписка была недоступна и продукт поднялся **на кэше**, `uninstall` не оставляет ни юнита, ни правил, ни файлов.

**Грабля Linux, найденная замером: `ip rule del pref N` снимает ОДНО правило,** а движок создаёт по несколько с одним приоритетом (9102 — два, 9103 — три). Один проход оставлял мусор, и он копился бы с каждой аварией. Чинится циклом «удаляй, пока команда не начнёт ошибаться». Проверено тремя авариями подряд: число правил не растёт.

**После `kill -9` на Linux интерфейс и маршруты снимает ядро, но остаются 8 правил ip rule**, среди них IPv6-правило `from all unreachable` — вот оно и есть «уронить систему». Уборка идёт ПЕРЕД стартом. Чтобы не снести чужой sing-box на той же машине, у нас своё имя интерфейса `ceho-tun` и свои индексы `iproute2_table_index=2122`, `iproute2_rule_index=9100` — намеренно не умолчания движка (2022/9000), это закреплено тестом.

**Различия в конфиге по системам:** `strict_route` нет на macOS; `interface_name` и индексы iproute2 — только Linux; `stack: gvisor` везде.

**Осталось непроверенным ровно одно: TUN на macOS** (auto_route, hijack-dns, живучесть системы, самолечение). Само правило по процессу на macOS ПРОВЕРЕНО и работает. Закрывается одной командой: `sudo ./scripts/audit-macos.sh <программа>` — скрипт гоняет все сценарии сам и печатает вердикт, внутри сторож, который выключает защиту через 180 секунд, даже если сеть ляжет.

**Windows после рефакторинга не перепроверялся** — ноутбук 192.168.0.101 был недоступен. Windows-ветки кода не менялись по существу, но общий слой затронут: `status` теперь смотрит и на туннель, появился pid-файл (после обновления нужен перезапуск демона), в `AppDetector` добавлен запрет на системные каталоги.

Связано: [[process_path_must_be_physical]], [[cehoproxy_github_publish]], [[singbox_windows_tun_per_app]].
