Порядок важнее, чем набор функций

Запуск туннеля — около десяти шагов. Покажем главные шесть. Прокрутите страницу: схема справа меняется вместе с шагами.

  1. 01

    Pre-flight

    Если в системе уже есть чужой TUN-адаптер, клиент отказывается стартовать и объясняет причину. Два туннеля одновременно — это путаница маршрутов.

  2. 02

    Lockdown адаптеров

    Физические адаптеры подчиняются туннелю: IPv6 выключается, DNS указывает на резолвер туннеля, отключается умный выбор DNS Windows.

  3. 03

    Доверенный runtime

    Проверяются владельцы и права каталогов, а бинарники сверяются с эталоном по SHA-256. При несовпадении атомарный staging заменяет их.

  4. 04

    Конфиг и запуск

    Конфигурация генерируется и проверяется командой sing-box check -c. Только после этого запускается ядро.

  5. 05

    Ожидание TUN

    Клиент ждёт, пока адаптер получит Status=Up. Трафик приложений теперь идёт в Wintun и дальше в ядро.

  6. 06

    Kill-switch

    Только теперь включается блокировка. Правило привязано к алиасу интерфейса, и до появления адаптера оно просто не создалось бы.

Принципы

Три правила, на которых всё держится

Fail-closed

При падении туннеля kill-switch намеренно остаётся включённым до авторестарта или перехода на другой ключ группы.

Доказательства вместо надежд

Если безопасность не доказана, клиент блокирует трафик или помечает «не проверено», но не рапортует об успехе.

Откат обязателен

Манифест изменений пишется атомарно. После падения приложения состояние восстанавливается, а в strict-режиме блокировка остаётся до вашего решения.

Watchdog

Что происходит, когда всё работает

Туннель — это не «включил и забыл». Клиент постоянно проверяет, что трафик действительно идёт туда, куда должен.

Hard Mode

Проверка egress-IP каждые 15 секунд.

15 с

Soft Mode

TCP-проба прокси, три промаха — proxy-down без роняния TUN.

5 с

Авторестарт

Бэкофф 2, 5, 10 секунд, затем failover по группе.

2/5/10

Leak self-test

Выход через физический адаптер считается утечкой.

авто
Известное ограничение. Чтобы узнать адрес VPN-сервера до подъёма туннеля, клиент делает bootstrap-запрос DNS напрямую. Имя сервера в этот момент видно провайдеру. Мы не скрываем это, потому что доверие строится на таких оговорках.

Хотите увидеть детали в коде?

Все шаги описаны в README и реализованы в открытом репозитории.