В sing-box добавлен протокол Snell

В sing-box добавлен Snell

В sing-box 1.14.0 добавлена поддержка прокси-протокола Snell.

Inbound: Snell - sing-box
Outbound: Snell - sing-box

Snell — это зашифрованный прокси-протокол от разработчиков Surge.

Зачем он нужен

Его сильные стороны:

  • зашифрованный трафик, похожий на случайный поток;
  • простая схема с PSK, как у Shadowsocks;
  • мультиплексирование соединений;
  • нормальная TCP-семантика, без грубого ломания поведения соединений;
  • multi-user режим на одном сервере;
  • в Snell v6 — traffic shaping, то есть изменение характеристик трафика, а не просто “рандомные байты”.

Главная идея Snell v6 — не притворяться HTTPS/TLS, а делать трафик менее одинаковым между разными установками. Профиль трафика зависит от ключа, поэтому разные серверы с разными PSK могут выглядеть по-разному.

Поддержка в sing-box

Для inbound доступны версии:

"version": 5

или

"version": 6

Важно: sing-box не поддерживает QUIC proxy mode из Snell v5, поэтому v5 фактически используется как v4 wire protocol.

Основные параметры

psk

Основной pre-shared key сервера.

Для Snell v6 ключ должен быть длиной от 12 до 255 байт.

"psk": "password"

users

Multi-user режим. Можно задать отдельных пользователей со своими ключами:

"users": [
  {
    "name": "user1",
    "userkey": "user-password"
  }
]

name нужен в основном для логов, userkey — ключ конкретного пользователя. Верхнеуровневый psk остаётся серверным ключом.

obfs_mode

Только для Snell v5.

"obfs_mode": "http"

Возможные значения:

none
http

По умолчанию используется none.

mode

Только для Snell v6. Отвечает за traffic shaping:

"mode": "default"

Возможные значения:

default
unshaped
unsafe-raw

Для обычного использования лучше оставлять:

"mode": "default"

Минимальный inbound v6

{
  "type": "snell",
  "tag": "snell-in",
  "listen": "::",
  "listen_port": 12345,
  "version": 6,
  "psk": "strong-password-123",
  "mode": "default"
}

Коротко

Snell в sing-box — это альтернатива Shadowsocks-подобным прокси. Он интересен не тем, что “маскируется под HTTPS”, а тем, что даёт зашифрованный прокси-трафик с мультиплексированием и, в версии 6, traffic shaping. Для новых конфигураций логичнее смотреть именно на Snell v6.

А какие клиенты его поддерживают?

Оригинальные клиенты sing-box плюс которые используют его в качестве движка

Звучит так, будто разработчики Sing-box в Shadowsocks нашли фатальный недостаток - его делали не они!

А в наших реалиях отсутствие маскировки под TLS делает только хуже - ТСПУ шейпит одиночные соединения, а при достаточной массовости весь сервер улетает в блок. Недавно блокировали такое, задев даже SSH.

Snell тоже делали не они. Изначально это проприетарный протокол от разработчиков Surge. Тут нет никакой подоплеки в плане конкуренции с SS, SS в sing-box тоже есть и остается. Да и отличия от SS существенные. Тут мультиплексирование именно на уровне протокола (плюс полная TCP-семантика). И тут есть маскировка трафика на основе ключа, то есть с разными ключами будут разные профили (framing, padding, размеры пакетов). Для РФ наверное протоколы с TLS лучше, но я бы не стал без тестов уверять, что Snell будет так же блокироваться сразу, как и SS.

По-моему, SS блокируется моментально по принципу “протокол не определен - бан”. С этим будет то же самое, разве что обфускация под http вдруг заработает на каких-то хостингах (если такие существуют)

такого нет, блокируется https через ss/vmess/…, скорее всего по размерам пакетов

На практике встречалось и обратное: tls/http замедлялись, а неизвестный мусор работал. Нормальный tcp протокол со встроенным мультиплексированием - этакий аналог AmneziaWG - не повредит.

Немного удручает бессмысленное раздувание функциональности sing-box с забиванием на проблемы и баги в реализациях прочих протоколов. Ведь всем очень нужны Claude code multiplexer, USB/IP и тому подобное. Надеюсь, автора рано или поздно отпустит.