Skip to content

AnyTLS — sing-box

AnyTLS — это туннель в форме TLS, использующий приёмы паддинга, чтобы замаскировать профиль своего трафика. sing-box стал первой стабильной реализацией; поддерживаются и входящий, и исходящий с клиентским пулом сессий.

Входящий

type: "anytls":

ПолеТипПо умолчаниюДопустимые значенияОписание
users[]AnyTLSUser[][AnyTLSUser]Принимаемые пользователи.
padding_schemebadoption.Listable[string](server default)<scheme line> | [<scheme line>]Пользовательская схема паддинга, формирующая профиль трафика на проводе. Принимает одну строку или список строк; пустое / незаданное значение использует встроенную схему сервера по умолчанию.

Исходный код: option/anytls.go:5-10 · зафиксировано на v1.13.15 (3708fa1)

Структура встраивает ListenOptions и InboundTLSOptionsContainer. TLS обязателен — на проводе AnyTLS всегда обёрнут в TLS.

users[]

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(unset)<string>Отображаемое имя, используемое в статистике и журналах.
passwordstring(required)<string>Пароль пользователя.

Исходный код: option/anytls.go:12-15 · зафиксировано на v1.13.15 (3708fa1)

Исходящий

type: "anytls":

ПолеТипПо умолчаниюДопустимые значенияОписание
passwordstring(required)<string>Пароль сервера.
idle_session_check_intervalbadoption.Duration30s<duration>Как часто клиент просматривает пул в поисках простаивающих сессий для утилизации.
idle_session_timeoutbadoption.Duration30s<duration>Сессии, простаивающие дольше этого времени, закрываются при следующем проходе проверки.
min_idle_sessionint0<int>Держать «тёплыми» не меньше этого числа простаивающих сессий для повторного использования с низкой задержкой.

Исходный код: option/anytls.go:17-25 · зафиксировано на v1.13.15 (3708fa1)

Встраивает DialerOptions, ServerOptions и OutboundTLSOptionsContainer. TLS обязателен.

Примеры

Входящий:

json
{
  "inbounds": [
    {
      "type": "anytls",
      "tag": "anytls-in",
      "listen": "::",
      "listen_port": 443,
      "users": [{ "name": "alice", "password": "<password>" }],
      "tls": {
        "enabled": true,
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

Исходящий с прогретым пулом сессий:

json
{
  "outbounds": [
    {
      "type": "anytls",
      "tag": "anytls-out",
      "server": "example.com",
      "server_port": 443,
      "password": "<password>",
      "min_idle_session": 4,
      "idle_session_check_interval": "30s",
      "idle_session_timeout": "60s",
      "tls": { "enabled": true, "server_name": "example.com" }
    }
  ]
}

Примечания

  • padding_scheme принимает либо одну строку (по одному правилу на строку внутри), либо список строк. Формат следует спецификации апстрима AnyTLS — большинству пользователей стоит оставить его незаданным и использовать серверную схему по умолчанию.
  • Поля пула сессий (idle_session_check_interval, idle_session_timeout, min_idle_session) есть только у исходящего. Пул держит TLS-сессии «тёплыми», чтобы новые запросы прикладного уровня стоили один цикл обмена, а не полное TLS-рукопожатие.
  • min_idle_session: 0 (по умолчанию) создаёт сессии лениво по запросу и закрывает их после idle_session_timeout. Увеличьте значение, если нагрузка приходит всплесками новых запросов.

Сравнение с другими ядрами

  • Xray-core не поддерживает AnyTLS. См. AnyTLS — Xray-core.
  • mihomo полностью поддерживает AnyTLS с обеих сторон, с именами полей в kebab-case (idle-session-check-interval, …) и дополнительными параметрами отпечатка uTLS и ECH. См. AnyTLS — mihomo.

Исходный код: option/anytls.go:5-25 · v1.13.15 (3708fa1)

Core Tutorial от Argsment