Что такое VLESS и зачем он нужен в sing-box
VLESS — это легковесный прокси-протокол, который использует UUID для аутентификации пользователей. В отличие от более старых протоколов, таких как VMess, VLESS не шифрует данные самостоятельно, полагаясь на внешний транспорт (например, TLS или REALITY). Это делает его быстрым и гибким, а также упрощает маскировку трафика под обычный HTTPS.
sing-box — это универсальный прокси-ядро, которое поддерживает множество протоколов, включая VLESS. Благодаря модульной архитектуре, sing-box позволяет комбинировать VLESS с различными транспортами (WebSocket, gRPC, HTTP) и механизмами безопасности (TLS, REALITY). Это делает его популярным выбором для обхода блокировок и обеспечения приватности.
Основное преимущество VLESS в sing-box — это возможность тонкой настройки каждого аспекта соединения. Вы можете контролировать не только адрес и порт сервера, но и такие параметры, как flow (например, xtls-rprx-vision), packet_encoding для UDP, а также включать мультиплексирование для экономии ресурсов. Всё это описывается в JSON-конфигурации, что даёт полный контроль над поведением клиента и сервера.
Ключевые параметры outbound VLESS в sing-box
При настройке исходящего соединения (outbound) типа vless в sing-box необходимо правильно указать несколько критически важных параметров. Ошибка в любом из них приведёт к неработоспособности соединения.
- server — адрес сервера (IP или домен).
- server_port — порт, на котором слушает сервер (обычно 443).
- uuid — уникальный идентификатор пользователя, который должен совпадать с серверным.
- flow — управление потоком. Для REALITY часто используется
xtls-rprx-vision, но в sing-box поддержка Vision ограничена (см. раздел о различиях). - tls — настройки TLS, включая
server_name(SNI) иenabled. - transport — тип транспорта (например,
wsдля WebSocket,grpcилиhttp). - packet_encoding — способ кодирования UDP-пакетов:
xudp(по умолчанию),packetaddrилиlegacy. - multiplex — включение мультиплексирования, когда несколько логических соединений объединяются в одно физическое.
Важно понимать, что параметры в sing-box могут отличаться от аналогичных в Xray-core. Например, в Xray используется streamSettings, а в sing-box — transport. Поэтому при переносе конфигурации из одного ядра в другое необходимо сопоставлять поля, а не копировать их вслепую.
REALITY: маскировка под реальный TLS
REALITY — это технология, которая позволяет маскировать VLESS-соединение под реальное TLS-соединение с легитимным сайтом. Вместо того чтобы использовать собственный сертификат, сервер REALITY проксирует TLS-рукопожатие к выбранному "донору" — реальному сайту (например, example.com). Это делает трафик практически неотличимым от обычного HTTPS-запроса.
В sing-box для настройки REALITY в outbound используются параметры:
tls.reality.enabled— включить REALITY.tls.reality.public_key— публичный ключ, сгенерированный на сервере.tls.reality.short_id— короткий идентификатор, также задаётся на сервере.tls.server_name— домен донора, который должен совпадать с SNI.
На сервере inbound также настраивается REALITY с указанием dest (адрес донора) и private_key. Важно, чтобы server_name на клиенте совпадал с доменом донора, иначе рукопожатие не пройдёт.
REALITY считается более устойчивым к блокировкам, чем обычный TLS, поскольку не требует собственного сертификата и не оставляет характерных следов. Однако, как показывает практика, даже REALITY может быть заблокирован по IP, если сервер используется слишком активно. Поэтому важно иметь несколько альтернативных протоколов.
NaiveProxy как альтернатива VLESS
NaiveProxy — это ещё один протокол, который маскирует трафик под HTTPS, но использует для этого сетевой стек реального браузера Chromium. Вместо того чтобы имитировать ClientHello, как это делает uTLS, NaiveProxy использует настоящий браузерный стек, что делает трафик практически неотличимым от реального браузера.
В sing-box NaiveProxy поддерживается начиная с версии 1.13. Для настройки клиента используется outbound типа naive, а для сервера — inbound naive. В отличие от VLESS, NaiveProxy не требует UUID, а использует пару логин/пароль. Также он поддерживает мультиплексирование через HTTP/2 и имеет встроенный механизм padding для затруднения анализа длин пакетов.
Одним из преимуществ NaiveProxy является то, что он может работать с обычными HTTP/2-прокси, не знающими о Naive. Однако для полной маскировки необходимо, чтобы клиент использовал именно браузерный стек, как это делает sing-box. Другие клиенты могут быть лишь совместимыми, но не обеспечивать ту же степень маскировки.
Выбор между VLESS и NaiveProxy зависит от конкретных условий. VLESS более гибкий и поддерживает больше транспортов, а NaiveProxy обеспечивает лучшую маскировку за счёт использования реального браузерного стека. Рекомендуется иметь оба протокола в арсенале и переключаться в зависимости от ситуации.
Настройка сервера VLESS + REALITY в sing-box
Для создания сервера VLESS + REALITY в sing-box необходимо настроить inbound. Пример конфигурации inbound:
{
"inbounds": [
{
"type": "vless",
"listen": "0.0.0.0",
"listen_port": 443,
"users": [
{
"uuid": "ваш-uuid",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "example.com",
"reality": {
"enabled": true,
"handshake": {
"server": "example.com",
"server_port": 443
},
"private_key": "ваш-private-key",
"short_id": ["ваш-short-id"]
}
}
}
]
}Важно, чтобы server_name в TLS совпадал с доменом донора, указанным в handshake.server. Также необходимо сгенерировать ключевую пару REALITY (public_key и private_key) с помощью утилиты sing-box generate reality-keypair.
На клиенте outbound должен содержать соответствующие параметры: uuid, flow, tls.server_name, tls.reality.public_key, tls.reality.short_id. Если какой-то параметр не совпадает, соединение не установится.
Рекомендуется начинать с минимальной конфигурации и проверять каждый параметр по отдельности, чтобы избежать ошибок.
Диагностика проблем с VLESS в sing-box
Когда VLESS-соединение не работает, важно систематически проверять каждый слой. Вот пошаговый подход:
- Проверьте сеть и порт: Убедитесь, что сервер доступен по указанному адресу и порту. Используйте
pingилиtelnetдля проверки. - Проверьте TLS/REALITY: Если используется REALITY, проверьте, что
server_nameна клиенте совпадает с доменом донора, аpublic_keyиshort_idсоответствуют серверным. Ошибки рукопожатия часто возникают из-за несовпадения ключей. - Проверьте протокол: Убедитесь, что UUID и flow совпадают с серверными. Также проверьте, что transport (если используется) настроен одинаково на клиенте и сервере.
- Проверьте маршрутизацию: В sing-box важно, чтобы трафик не зацикливался через TUN или DNS. Проверьте правила route и DNS.
- Смотрите логи: Логи сервера часто показывают более раннюю причину ошибки, чем клиентские. Сравнивайте логи клиента и сервера за один и тот же момент времени.
Частая ошибка — копирование JSON из Xray-core без сопоставления полей. Например, в Xray используется streamSettings, а в sing-box — transport. Также не удаляйте поля flow, fingerprint, shortId или path при ручном импорте.
Если вы используете подписку, убедитесь, что она не содержит опечаток и синхронизирована с сервером. Ручные правки лучше документировать и не смешивать с автообновлением.
Особенности реализации VLESS в sing-box
sing-box реализует VLESS с использованием библиотеки sing-vmess/vless, которая обеспечивает совместимость с Xray-core на уровне wire-формата. Однако есть несколько ключевых отличий:
- Vision/XTLS: В Xray-core поддерживается Vision (flow
xtls-rprx-vision) с использованием unsafe.Pointer для оптимизации. В sing-box Vision не поддерживается, поэтому flow должен быть пустым или использовать другие варианты. - Fallback: В Xray-core есть встроенный fallback (по имени, ALPN, пути). В sing-box fallback не поддерживается, вместо этого нужно использовать отдельный listener или reverse_proxy (например, Caddy).
- XUDP: В Xray-core XUDP использует GlobalID, а в sing-box — собственную реализацию sing-vmess XUDP.
- Mux: В Xray-core используется собственный mux, а в sing-box — sing-mux (на основе smux).
- Data flow: В Xray-core используется Pipe Reader/Writer, а в sing-box — net.Conn passthrough.
Эти различия важно учитывать при переносе конфигураций. Например, если вы используете flow xtls-rprx-vision в Xray, в sing-box его нужно убрать, иначе соединение не установится.
Также стоит отметить, что sing-box поддерживает kTLS (kernel TLS) для повышения производительности, но только при определённых условиях: отсутствие транспорта, мультиплексирования и Vision flow.
Практические советы по выбору протокола и настройке
При выборе между VLESS и NaiveProxy (или другими протоколами) важно учитывать текущую ситуацию с блокировками. Ни один протокол не гарантирует вечной работы, поэтому лучше иметь несколько вариантов.
- Для максимальной маскировки используйте NaiveProxy, так как он использует реальный браузерный стек.
- Для гибкости и производительности используйте VLESS с REALITY и подходящим транспортом.
- Для UDP-трафика (например, для игр или видеозвонков) настройте packet_encoding
xudpи включитеudp_over_tcpпри необходимости.
При настройке сервера рекомендуется использовать Caddy в качестве TLS-терминатора для NaiveProxy, как описано в статье. Это позволяет автоматически получать сертификаты и маскировать трафик под обычный сайт.
Не забывайте про безопасность: не публикуйте подписочные ссылки в открытых чатах, используйте сложные UUID и пароли, регулярно обновляйте sing-box до актуальной версии.
Наконец, всегда проверяйте конфигурацию на тестовом устройстве перед массовым использованием. Начинайте с минимального профиля и постепенно добавляйте параметры, фиксируя изменения.
Заключение: что выбрать для стабильной работы
В условиях постоянных блокировок важно иметь несколько рабочих протоколов. VLESS + REALITY в sing-box — это мощное и гибкое решение, которое подходит для большинства задач. Однако, как показывает практика, даже REALITY может быть заблокирован по IP, поэтому стоит рассмотреть альтернативы, такие как NaiveProxy.
NaiveProxy обеспечивает лучшую маскировку за счёт использования браузерного стека, но требует более тщательной настройки сервера (например, с Caddy). В то же время VLESS проще в настройке и поддерживает больше транспортов.
Рекомендуется настроить оба протокола и переключаться между ними в зависимости от ситуации. Также важно регулярно обновлять sing-box и следить за новыми методами обхода блокировок.
В конечном счёте, хороший протокол — тот, который стабильно работает прямо сейчас. Поэтому экспериментируйте, тестируйте и выбирайте то, что лучше всего подходит для ваших условий.
Вопросы и ответы
Почему VLESS + REALITY в sing-box не работает после импорта?
Обычно проблема в том, что клиент потерял расширенное поле (например, flow, public_key, short_id) или применил другой transport. Сравните экспорт профиля с исходной ссылкой. Убедитесь, что все параметры REALITY совпадают с серверными, а server_name соответствует домену донора.
Нужно ли менять все параметры сразу при диагностике?
Нет. Проверяйте по одному слою: сеть и порт, TLS/REALITY, протокол (UUID, flow), transport и route. Меняйте только один параметр за проверку, иначе вы не поймёте, что именно вызвало проблему. Фиксируйте результаты в логах.
Когда лучше использовать подписку вместо ручной настройки?
Подписка удобна, когда параметры узлов часто меняются или профиль нужен на нескольких устройствах. Она снижает риск опечаток и позволяет синхронизировать изменения. Однако для диагностики лучше использовать ручные правки, но их нужно документировать и не смешивать с автообновлением.
В чём разница между VLESS и NaiveProxy?
VLESS — это лёгкий протокол с UUID-аутентификацией, который маскируется под TLS с помощью REALITY или uTLS. NaiveProxy использует сетевой стек Chromium, что делает трафик неотличимым от реального браузера. NaiveProxy обеспечивает лучшую маскировку, но VLESS более гибкий и поддерживает больше транспортов.
Как настроить UDP через VLESS в sing-box?
Для UDP используйте параметр packet_encoding в outbound. По умолчанию используется xudp, который поддерживает Full-Cone NAT. Также можно включить udp_over_tcp, если UDP блокируется. Убедитесь, что на сервере inbound также настроена поддержка UDP.
Можно ли использовать flow xtls-rprx-vision в sing-box?
Нет, sing-box не поддерживает Vision flow. Вместо этого используйте пустой flow или другие варианты. Если вы переносите конфигурацию из Xray-core, обязательно удалите flow, иначе соединение не установится.
Что делать, если REALITY блокируют по IP?
Если REALITY заблокирован по IP, попробуйте сменить IP сервера или использовать другой протокол, например NaiveProxy. Также можно настроить несколько серверов и переключаться между ними. Важно иметь альтернативные варианты, так как ни один протокол не гарантирует вечной работы.