Skip to content

Контрольный список реализации

Комплексный контрольный список для реимплементации sing-box, организованный по фазам. Каждая фаза базируется на предыдущих.

Фаза 1: Основа

Система конфигурации

  • [ ] JSON-парсер с контекстно-зависимым реестром типов
  • [ ] Корневая структура Options со всеми полями верхнего уровня
  • [ ] Тип Listable[T] (принимает одиночное значение или массив)
  • [ ] Тип Duration (парсинг строк продолжительности Go)
  • [ ] Тип NetworkList (одна строка или массив "tcp"/"udp")
  • [ ] Перечисление DomainStrategy (as_is, prefer_ipv4, prefer_ipv6, ipv4_only, ipv6_only)
  • [ ] Перечисление NetworkStrategy
  • [ ] Перечисление InterfaceType (wifi, cellular, ethernet, other)
  • [ ] Тип DNSQueryType (строковое имя или uint16)
  • [ ] UDPTimeoutCompat (число-как-секунды или строка продолжительности)
  • [ ] ServerOptions (server + server_port)
  • [ ] ListenOptions (адрес прослушивания, порт, параметры сокета)
  • [ ] DialerOptions (detour, bind, timeout, метка маршрутизации, сетевая стратегия)
  • [ ] DomainResolveOptions (сокращённая строка или полный объект)
  • [ ] Полиморфный парсинг входящих/исходящих/эндпоинтов/сервисов/DNS через реестры типов
  • [ ] Система тегов сборки / флагов функций для условного включения протоколов
  • [ ] Валидация дублирования тегов для входящих и исходящих/эндпоинтов

Логирование

  • [ ] Уровни логов: trace, debug, info, warn, error, fatal, panic
  • [ ] Контекстно-зависимый логгер (контекст для каждого соединения)
  • [ ] Наблюдаемая фабрика логов (для потоковой передачи логов Clash API)
  • [ ] Поддержка вывода в файл
  • [ ] Опция меток времени
  • [ ] Опция цветного вывода

Жизненный цикл сервисов

  • [ ] Этапы запуска: Initialize, Start, PostStart, Started
  • [ ] Упорядоченный запуск сервисов с разрешением зависимостей
  • [ ] Корректное завершение с распространением Close()
  • [ ] Контекстный реестр сервисов (service.FromContext[T])

Фаза 2: Основной конвейер

Интерфейсы адаптера

  • [ ] Интерфейс adapter.Inbound
  • [ ] Интерфейс adapter.OutboundN.Dialer)
  • [ ] Интерфейс adapter.Endpoint (двунаправленный: входящий + исходящий)
  • [ ] Интерфейс adapter.Router
  • [ ] Структура метаданных adapter.InboundContext
  • [ ] adapter.ConnectionRouterEx для маршрутизации соединений
  • [ ] adapter.OutboundManager (поиск по тегу, исходящий по умолчанию)
  • [ ] adapter.InboundManager
  • [ ] adapter.EndpointManager
  • [ ] adapter.NetworkManager

Сетевые примитивы

  • [ ] Интерфейс N.Dialer (DialContext, ListenPacket)
  • [ ] N.ExtendedConn (расширения буферизированного чтения/записи)
  • [ ] N.PacketConnReadPacket/WritePacket для zero-copy)
  • [ ] Утилиты bufio (копирование, каналы, счётчики соединений)
  • [ ] Тип M.Socksaddr (унифицированный addr:port с поддержкой FQDN)
  • [ ] Распространение метаданных соединения через контекст

Слушатель

  • [ ] TCP-слушатель с настраиваемыми параметрами сокета
  • [ ] UDP-слушатель с обработкой пакетного соединения
  • [ ] Конфигурация keep-alive
  • [ ] Поддержка TCP Fast Open
  • [ ] Поддержка Multipath TCP
  • [ ] Поддержка метки маршрутизации (SO_MARK)
  • [ ] Поддержка сетевого пространства имён (setns)
  • [ ] Поддержка привязки к интерфейсу

Дайлер

  • [ ] Дайлер по умолчанию с параметрами сокета
  • [ ] Дайлер с обходом (цепочка через другой исходящий)
  • [ ] Привязка к интерфейсу
  • [ ] Привязка к адресу (inet4/inet6)
  • [ ] Распространение метки маршрутизации
  • [ ] Таймаут подключения
  • [ ] Интеграция разрешения доменов
  • [ ] Сетевая стратегия (предпочтение определённых типов интерфейсов)
  • [ ] Запасной дайлер (попытка нескольких сетей)

Маршрутизатор

  • [ ] Конвейер сопоставления правил маршрутизации
  • [ ] Стандартные типы правил (домен, IP, порт, процесс, сеть и т.д.)
  • [ ] Логические правила (AND, OR с инверсией)
  • [ ] Действия правил (route, reject, hijack-dns, sniff, resolve)
  • [ ] Финальный исходящий (маршрут по умолчанию)
  • [ ] Интеграция наборов правил
  • [ ] Конвейер DNS-правил (отдельный от правил маршрутизации)
  • [ ] Маршрутизация соединений с обогащением метаданных

Определение протокола

  • [ ] Фреймворк определения протоколов
  • [ ] Определение HTTP (метод + заголовок host)
  • [ ] Определение TLS (SNI из ClientHello)
  • [ ] Определение QUIC (SNI из QUIC ClientHello)
  • [ ] Определение DNS (домен запроса)
  • [ ] Определение SSH
  • [ ] Определение RDP
  • [ ] Определение BitTorrent
  • [ ] Определение DTLS
  • [ ] Обработка таймаута определения
  • [ ] Опция переопределения назначения

Фаза 3: Транспортный уровень

TLS

  • [ ] TLS-клиент (с SNI, ALPN, закреплением сертификата)
  • [ ] TLS-сервер (сертификат, ключ, ACME)
  • [ ] Клиент UTLS (отпечатки Chrome/Firefox/Safari)
  • [ ] Reality клиент и сервер
  • [ ] Поддержка ECH (Encrypted Client Hello)
  • [ ] Оптимизация kTLS (Linux)

Транспорты V2Ray

  • [ ] Транспорт WebSocket (клиент + сервер)
  • [ ] Транспорт HTTP/2 (клиент + сервер)
  • [ ] Транспорт gRPC (клиент + сервер)
  • [ ] Транспорт HTTPUpgrade (клиент + сервер)
  • [ ] Транспорт QUIC (клиент + сервер) [тег сборки: with_quic]

Мультиплекс (sing-mux)

  • [ ] Клиент мультиплекса (протоколы smux, yamux, h2mux)
  • [ ] Сервер мультиплекса
  • [ ] Мультиплексирование потоков через одно соединение
  • [ ] Поддержка заполнения
  • [ ] Опция управления перегрузкой Brutal
  • [ ] Конфигурация max connections / min streams / max streams

Фаза 4: Протоколы

Direct

  • [ ] Прямой входящий (приём соединений и маршрутизация)
  • [ ] Прямой исходящий (прямое подключение к назначению)

Block

  • [ ] Блокирующий исходящий (отклонение соединений)

SOCKS

  • [ ] Входящий SOCKS5 (с необязательной аутентификацией)
  • [ ] Входящий SOCKS4/4a
  • [ ] Исходящий SOCKS5 (клиент)
  • [ ] SOCKS5 UDP ASSOCIATE

HTTP

  • [ ] Входящий HTTP-прокси (CONNECT + простой HTTP)
  • [ ] Исходящий HTTP CONNECT (клиент)
  • [ ] Базовая/дайджест-аутентификация

Mixed

  • [ ] Смешанный входящий (автоопределение HTTP/SOCKS5)

Shadowsocks

  • [ ] Однопользовательский входящий Shadowsocks
  • [ ] Многопользовательский входящий Shadowsocks
  • [ ] Входящий Shadowsocks с ретрансляцией
  • [ ] Исходящий Shadowsocks
  • [ ] Шифры AEAD (aes-128-gcm, aes-256-gcm, chacha20-ietf-poly1305)
  • [ ] Шифры AEAD 2022 (2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305)
  • [ ] Ретрансляция UDP
  • [ ] Поддержка плагинов SIP003 (obfs, v2ray-plugin)
  • [ ] UDP-over-TCP (UoT)

VMess

  • [ ] Входящий VMess
  • [ ] Исходящий VMess
  • [ ] Режимы безопасности: auto, zero, aes-128-gcm, chacha20-poly1305, aes-128-cfb, none
  • [ ] Поддержка alterId (устаревшая)
  • [ ] Опция глобального заполнения
  • [ ] Опция аутентифицированной длины
  • [ ] Кодирование пакетов: packetaddr, xudp

VLESS

  • [ ] Входящий VLESS
  • [ ] Исходящий VLESS
  • [ ] Аутентификация на основе UUID
  • [ ] Flow: xtls-rprx-vision
  • [ ] Кодирование пакетов: packetaddr, xudp

Trojan

  • [ ] Входящий Trojan
  • [ ] Исходящий Trojan
  • [ ] Хеширование пароля SHA-224 (56-байтовый hex-ключ)
  • [ ] Ретрансляция UDP через протокол Trojan

ShadowTLS

  • [ ] Входящий ShadowTLS (v1, v2, v3)
  • [ ] Исходящий ShadowTLS
  • [ ] Ретрансляция TLS-рукопожатия

Hysteria / Hysteria2 [тег сборки: with_quic]

  • [ ] Входящий и исходящий Hysteria
  • [ ] Входящий и исходящий Hysteria2
  • [ ] Управление перегрузкой Brutal

TUIC [тег сборки: with_quic]

  • [ ] Входящий и исходящий TUIC
  • [ ] Мультиплексирование на основе QUIC

WireGuard [тег сборки: with_wireguard]

  • [ ] Эндпоинт WireGuard (двунаправленный)
  • [ ] Рукопожатие протокола Noise
  • [ ] Управление пирами

Прочее

  • [ ] Входящий NaiveProxy (и исходящий с тегом сборки)
  • [ ] Исходящий Tor
  • [ ] Исходящий SSH

Группы исходящих

  • [ ] Группа Selector (ручной выбор с сохранением)
  • [ ] Группа URLTest (автоматический выбор по задержке)
  • [ ] Реализация URL-теста
  • [ ] Хранилище истории тестов

Фаза 5: DNS

Система DNS

  • [ ] DNS-маршрутизатор с выбором транспорта на основе правил
  • [ ] DNS-кэш с TTL
  • [ ] Ограничение ёмкости кэша
  • [ ] Независимый кэш для каждого правила
  • [ ] Подсеть клиента (EDNS0)
  • [ ] Применение стратегии домена (разрешение A/AAAA/оба)

DNS-транспорты

  • [ ] UDP DNS-транспорт
  • [ ] TCP DNS-транспорт
  • [ ] TLS DNS-транспорт (DoT)
  • [ ] HTTPS DNS-транспорт (DoH)
  • [ ] QUIC DNS-транспорт (DoQ) [тег сборки: with_quic]
  • [ ] HTTP/3 DNS-транспорт [тег сборки: with_quic]
  • [ ] Локальный системный DNS-транспорт
  • [ ] DNS-транспорт файла hosts
  • [ ] DNS-транспорт FakeIP
  • [ ] DHCP DNS-транспорт [тег сборки: with_dhcp]

FakeIP

  • [ ] Пул адресов FakeIP (IPv4 + IPv6)
  • [ ] Выделение и переиспользование адресов
  • [ ] Двунаправленное сопоставление (адрес <-> домен)
  • [ ] Постоянное хранение в файле кэша
  • [ ] Сохранение метаданных (указатель выделения)

Правила DNS

  • [ ] Сопоставление правил DNS (домен, источник, тип запроса и т.д.)
  • [ ] Действия правил DNS (route, reject, предопределённый ответ)
  • [ ] Кэш отклонённых DNS-ответов (RDRC)

Фаза 6: Расширенные функции

Наборы правил

  • [ ] Чтение двоичного формата SRS
  • [ ] Запись двоичного формата SRS
  • [ ] Чтение исходного формата JSON
  • [ ] Локальный набор правил с наблюдением за файлом
  • [ ] Удалённый набор правил с HTTP-загрузкой и кэшированием ETag
  • [ ] Встроенные наборы правил
  • [ ] Подсчёт ссылок набора правил и управление памятью
  • [ ] Метаданные набора правил (флаги process/WIFI/IPCIDR)
  • [ ] Извлечение IP-набора для маршрутизации TUN

GeoIP / GeoSite (устаревшие)

  • [ ] Чтение MaxMind MMDB (тип sing-geoip)
  • [ ] Чтение двоичного формата GeoSite
  • [ ] Компиляция GeoSite в правила
  • [ ] Автозагрузка при первом использовании

Поиск процессов

  • [ ] Linux: диагностика сокета netlink + поиск в procfs
  • [ ] macOS: парсинг списка PCB sysctl
  • [ ] Windows: IP Helper API (GetExtendedTcpTable)
  • [ ] Android: netlink + сопоставление UID с пакетом
  • [ ] Делегирование через интерфейс платформы

TUN

  • [ ] Создание и настройка TUN-устройства
  • [ ] Автомаршрутизация (управление таблицей маршрутизации)
  • [ ] Перехват DNS через TUN
  • [ ] Поддержка IPv4 и IPv6
  • [ ] Настройка MTU
  • [ ] Платформенный TUN (Android VpnService, iOS NetworkExtension)

Clash API [тег сборки: with_clash_api]

  • [ ] HTTP REST-сервер с маршрутизатором chi
  • [ ] Аутентификация по Bearer-токену
  • [ ] Поддержка WebSocket
  • [ ] Потоковая передача статистики трафика
  • [ ] Потоковая передача логов с фильтрацией по уровню
  • [ ] Отслеживание и перечисление соединений
  • [ ] Перечисление прокси и тестирование задержки
  • [ ] API обновления Selector
  • [ ] Переключение режимов с сохранением
  • [ ] Обслуживание статических файлов внешнего UI
  • [ ] Настройка CORS

V2Ray API [тег сборки: with_v2ray_api]

  • [ ] gRPC-сервер
  • [ ] Сервис статистики (GetStats, QueryStats, GetSysStats)
  • [ ] Счётчики трафика для каждого входящего/исходящего/пользователя
  • [ ] Соглашение об именовании счётчиков (сущность>>>тег>>>traffic>>>направление)
  • [ ] Сопоставление по паттернам (подстрока и регулярное выражение)

Файл кэша

  • [ ] База данных bbolt (или эквивалент)
  • [ ] Сохранение выбранного исходящего
  • [ ] Сохранение режима Clash
  • [ ] Кэширование удалённых наборов правил
  • [ ] Сохранение FakeIP (двунаправленное сопоставление)
  • [ ] Сохранение RDRC с истечением срока действия
  • [ ] Пространство имён Cache ID
  • [ ] Восстановление после повреждения (удаление и пересоздание)
  • [ ] Асинхронная буферизация записи

Интерфейс платформы

  • [ ] Определение интерфейса, совместимого с gomobile
  • [ ] Мост управления TUN-устройством
  • [ ] Мониторинг интерфейса по умолчанию
  • [ ] Перечисление сетевых интерфейсов
  • [ ] Мост поиска владельца соединения
  • [ ] Чтение состояния WIFI
  • [ ] Доступ к системным сертификатам
  • [ ] Отправка уведомлений
  • [ ] Мониторинг соседей
  • [ ] Правила по запросу (iOS)
  • [ ] Жизненный цикл сетевого расширения (iOS)
  • [ ] Командный сервер (IPC)

Фаза 7: Тестирование и совместимость

Совместимость проводного формата

  • [ ] Тесты проводного формата протокола VLESS
  • [ ] Тесты проводного формата протокола VMess
  • [ ] Тесты проводного формата протокола Trojan
  • [ ] Тесты проводного формата Shadowsocks (все варианты шифров)
  • [ ] Тесты проводного формата мультиплекса (sing-mux)
  • [ ] Интеграционные тесты с официальным sing-box

Совместимость конфигурации

  • [ ] Парсинг примеров конфигураций официального sing-box
  • [ ] Тесты сериализации «туда-обратно»
  • [ ] Тесты миграции устаревших форматов
  • [ ] Тесты отклонения неизвестных полей

Совместимость

  • [ ] Тестирование с серверами sing-box
  • [ ] Тестирование с серверами Xray-core
  • [ ] Тестирование с Clash.Meta
  • [ ] Совместимость формата наборов правил SRS
  • [ ] Совместимость базы данных GeoIP
  • [ ] Совместимость базы данных GeoSite