Что такое outbound VLESS и зачем он нужен
VLESS — это легковесный транспортный протокол без сохранения состояния, который используется для проксирования трафика между клиентом и сервером Xray. В отличие от VMess, VLESS не зависит от системного времени, что упрощает настройку и повышает стабильность. Outbound VLESS — это конфигурация на стороне клиента, которая определяет, как именно устанавливать соединение с удалённым сервером.
Outbound-часть VLESS описывает параметры подключения: адрес сервера, порт, идентификатор пользователя (UUID), метод шифрования и режим управления потоком. Эти настройки позволяют клиенту корректно аутентифицироваться на сервере и передавать данные через защищённый канал. Без правильно настроенного outbound соединение не будет установлено, даже если серверная часть работает безупречно.
В экосистеме Xray outbound VLESS часто используется в связке с другими компонентами, такими как routing и transport. Например, routing может направлять определённые домены или IP-адреса на этот outbound, а transport — обеспечивать дополнительную обфускацию трафика через TLS или REALITY. Понимание структуры outbound VLESS необходимо для создания эффективных и безопасных прокси-конфигураций.
Структура OutboundConfigurationObject
OutboundConfigurationObject — это объект настроек, который входит в состав OutboundObject в конфигурационном файле Xray. Он содержит все параметры, необходимые для установления исходящего VLESS-соединения. Рассмотрим его основные поля.
address — адрес сервера. Может быть доменным именем, IPv4 или IPv6 адресом. Это обязательное поле, без него соединение невозможно.
port — порт сервера, обычно 443, если используется TLS. Порт должен совпадать с портом, на котором слушает сервер.
id — идентификатор пользователя. Это может быть стандартный UUID в формате RFC 4122 или произвольная строка длиной до 30 байт. Если используется произвольная строка, она автоматически преобразуется в UUIDv5 по стандарту, описанному в XTLS/Xray-core. Например, строка "我爱🍉老师1314" соответствует UUID "5783a3e7-e373-51cd-8642-c83782b807c5". Оба варианта эквивалентны и взаимозаменяемы.
encryption — настройки шифрования VLESS. Это поле не может быть пустым. Чтобы отключить шифрование, нужно явно указать "none". Для включения VLESS Encryption используется строка с точками, например: mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U. Рекомендуется генерировать эту строку с помощью команды xray vlessenc, чтобы избежать ошибок.
flow — режим управления потоком XTLS. Возможные значения: пустая строка (стандартный TLS-прокси), xtls-rprx-vision (режим Vision с перехватом UDP/443) и xtls-rprx-vision-udp443 (режим Vision без перехвата UDP/443). Подробнее о flow мы расскажем в отдельном разделе.
level — уровень пользователя, используется для применения политик. По умолчанию 0.
reverse — объект для настройки реверс-проксирования. Позволяет сохранять реальный IP-адрес источника. Наличие этого поля указывает, что данный outbound может использоваться как реверс-прокси.
Аутентификация по UUID и пользовательские строки
Аутентификация в VLESS основана на UUID. Сервер хранит список допустимых пользователей, каждый из которых имеет уникальный идентификатор. Клиент при подключении отправляет свой UUID, и сервер проверяет его наличие в списке.
Интересной особенностью VLESS является возможность использовать произвольные строки вместо UUID. Любая строка длиной до 30 байт автоматически преобразуется в UUIDv5 с помощью детерминированного алгоритма. Это означает, что одна и та же строка всегда даёт один и тот же UUID. Такой подход упрощает запоминание идентификаторов и позволяет использовать человекочитаемые значения.
Для генерации UUID можно использовать команду xray uuid (случайный UUID) или xray uuid -i "custom string" (UUID, соответствующий заданной строке). Это удобно при настройке большого количества клиентов.
Важно помнить, что длина пользовательской строки ограничена 30 байтами в кодировке UTF-8. Пустые строки не допускаются. Если вы используете нестандартные символы, убедитесь, что они корректно кодируются.
VLESS Encryption: постквантовая защита и обфускация
VLESS Encryption — это расширение протокола, которое добавляет постквантовый обмен ключами и обфускацию трафика. Оно настраивается через поле encryption и использует строку, состоящую из блоков, разделённых точками. Рассмотрим структуру этой строки.
Первый блок — метод рукопожатия. В настоящее время поддерживается только mlkem768x25519plus — гибридный обмен ключами на основе ML-KEM-768 (FIPS 203) и X25519. Этот метод обеспечивает защиту от будущих квантовых компьютеров.
Второй блок — режим внешнего вида трафика. Возможные значения: native (исходный формат VLESS), xorpub (исходный формат с обфускацией публичной части ключа) и random (полностью случайные данные, похожие на VMess или Shadowsocks). Выбор режима влияет на структуру пакетов в сети.
Третий блок — параметры сессии. Для клиента это режим возобновления: 0rtt (попытка быстрого возобновления с использованием кэшированных билетов) или 1rtt (полный цикл рукопожатия). Сервер может запретить 0-RTT, даже если клиент его запрашивает.
Далее следуют блоки паддинга — добавления случайных данных для маскировки длины пакетов. Формат каждого блока: вероятность-мин-макс. Например, 100-111-1111 означает 100% вероятность отправки паддинга длиной от 111 до 1111 байт. Блоки паддинга и задержки чередуются. Первый блок паддинга должен иметь вероятность 100% и минимальную длину больше 0. Если паддинг не указан, используется значение по умолчанию 100-111-1111.75-0-111.50-0-3333.
Последний блок — ключ аутентификации. Он генерируется командами xray x25519 или xray mlkem768 и должен соответствовать ключу на сервере. Использование ML-KEM-768 обеспечивает постквантовую безопасность: даже если злоумышленник перехватит параметры клиента, квантовый компьютер не сможет подделать сервер.
Для автоматической генерации пары encryption/decryption рекомендуется использовать команду xray vlessenc. Она создаёт корректные строки для сервера и клиента, что снижает риск ошибок.
XTLS Vision: режимы flow и их особенности
XTLS (Xray TLS) — это технология, которая позволяет перехватывать TLS-трафик и передавать его напрямую через ядро, минуя пользовательское пространство Xray. Это значительно снижает нагрузку на CPU и память. Для активации XTLS используется поле flow в конфигурации outbound.
Доступны следующие режимы:
- Пустая строка — стандартный TLS-прокси без XTLS. Трафик обрабатывается обычным образом.
- xtls-rprx-vision — режим Vision с внутренним случайным паддингом. Перехватывает UDP-пакеты, направленные на порт 443 (QUIC), чтобы заставить браузеры использовать обычный HTTPS. Это увеличивает объём трафика, который можно обработать через Splice.
- xtls-rprx-vision-udp443 — аналогичен Vision, но не перехватывает UDP/443. Используется, когда приложение требует QUIC и не работает при перехвате.
Важно отметить, что XTLS работает только в определённых комбинациях:
- TCP + TLS/REALITY: если передаётся TLS 1.3, ядро пытается использовать Splice для прямой передачи зашифрованных данных. При успехе экономится весь ввод-вывод.
- VLESS Encryption: нет ограничений на транспорт. Если транспорт не TCP, XTLS пытается проникнуть в Encryption, экономя ресурсы. Если TCP — также пытается выполнить Splice.
Режим Vision рекомендуется для большинства случаев, так как он обеспечивает лучшую производительность и совместимость.
Splice: как работает нулевое копирование в Linux
Splice — это системный вызов Linux, который позволяет ядру напрямую пересылать TCP-данные между сокетами, минуя память пользовательского пространства. Это устраняет необходимость копирования данных и снижает количество переключений контекста.
Splice активируется автоматически при выполнении следующих условий:
- Операционная система — Linux с поддержкой splice().
- Входящий протокол — чистый TCP, например dokodemo-door, socks, http или любой другой inbound с поддержкой XTLS.
- Исходящий протокол — VLESS с flow: "xtls-rprx-vision" или "xtls-rprx-vision-udp443".
Когда Splice активен, данные передаются напрямую через ядро, минуя память Xray. Это приводит к значительному снижению использования CPU и устранению выделений памяти для пересылаемых данных. Однако есть особенность: статистика трафика обновляется только после закрытия соединения, поэтому показатели скорости в мониторинге могут отображаться с задержкой.
Splice особенно полезен на высоконагруженных серверах, где каждый лишний цикл CPU имеет значение. Он также улучшает общую пропускную способность, так как устраняет узкое место в виде копирования данных.
Практический пример конфигурации outbound VLESS
Рассмотрим пример настройки outbound VLESS в конфигурационном файле Xray. Ниже приведён фрагмент JSON, который можно использовать как основу.
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"address": "example.com",
"port": 443,
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0,
"reverse": {}
}
}
]
}В этом примере мы указываем адрес сервера example.com, порт 443, UUID пользователя, отключаем шифрование (encryption: "none") и включаем режим Vision. Уровень и reverse оставлены по умолчанию.
Если вы хотите использовать VLESS Encryption, замените поле encryption на сгенерированную строку. Например:
"encryption": "mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U"Обратите внимание, что при использовании VLESS Encryption необходимо, чтобы сервер и клиент использовали соответствующие ключи из одной пары. Также важно, чтобы методы рукопожатия и режимы внешнего вида совпадали на обеих сторонах.
Для генерации пары encryption/decryption используйте команду xray vlessenc. Она выведет готовые строки для сервера и клиента, что исключит ошибки при ручном копировании.
Особенности настройки outbound в sing-box
sing-box — это универсальная платформа для проксирования, которая также поддерживает VLESS. В sing-box конфигурация outbound VLESS выглядит немного иначе, но основные параметры сохраняются.
Пример конфигурации outbound VLESS в sing-box:
{
"type": "vless",
"tag": "vless-out",
"server": "example.com",
"server_port": 443,
"uuid": "5783a3e7-e373-51cd-8642-c83782b807c5",
"flow": "xtls-rprx-vision",
"tls": {
"enabled": true,
"server_name": "example.com"
}
}В sing-box поле encryption не используется так же, как в Xray. Вместо этого шифрование настраивается через отдельные параметры. Однако базовые принципы остаются: необходимо указать адрес сервера, порт, UUID и режим flow.
При использовании sing-box важно правильно настроить TLS, так как VLESS обычно требует внешнего транспортного уровня безопасности. Если вы используете REALITY, настройки будут другими.
В логах sing-box можно увидеть сообщения вида outbound/vless[vless-out]: outbound connection to 157.240.205.54:443. Это означает, что исходящее соединение успешно установлено. Если таких сообщений нет, проверьте конфигурацию и сетевую связность.
Типичные ошибки и способы их устранения
При настройке outbound VLESS пользователи часто сталкиваются с рядом типичных ошибок. Рассмотрим наиболее распространённые из них.
Несовпадение UUID. Если клиент и сервер используют разные UUID, соединение не будет установлено. Убедитесь, что идентификаторы совпадают. Помните, что пользовательская строка и её UUID-отображение эквивалентны, но если вы используете разные форматы, они должны соответствовать друг другу.
Неправильный порт. Порт в конфигурации outbound должен совпадать с портом, на котором слушает сервер. Часто используется порт 443, но он может быть изменён.
Ошибки в encryption. Если вы вручную вводите строку encryption, легко допустить опечатку. Рекомендуется использовать команду xray vlessenc для генерации. Также проверьте, что сервер и клиент используют совместимые ключи.
Проблемы с flow. Не все режимы flow поддерживаются на всех платформах. Например, Splice работает только на Linux. Если вы используете другую ОС, выберите режим без XTLS или настройте соответствующим образом.
Отсутствие TLS. VLESS требует внешнего транспортного уровня безопасности, если только не используется VLESS Encryption или соединение с приватным адресом. Убедитесь, что в streamSettings настроен TLS или REALITY.
Конфликты с маршрутизацией. Если у вас сложная конфигурация routing, убедитесь, что трафик, который должен идти через VLESS, действительно направляется на этот outbound. Проверьте правила и теги.
Если проблема не решается, обратитесь к логам. В Xray и sing-box есть подробное логирование, которое поможет определить, на каком этапе возникает ошибка.
Вопросы и ответы
Вопрос: Можно ли использовать VLESS без TLS?
Да, но только в определённых случаях. Если сервер и клиент находятся в доверенной частной сети (например, за NAT), можно использовать streamSettings.security: "none". Также можно включить VLESS Encryption, который обеспечивает шифрование без внешнего TLS. В остальных случаях настоятельно рекомендуется использовать TLS или REALITY.
Вопрос: Чем отличается xtls-rprx-vision от xtls-rprx-vision-udp443?
Режим vision перехватывает UDP-пакеты, направленные на порт 443 (QUIC), чтобы заставить приложения использовать TCP. Это увеличивает объём трафика, который можно обработать через Splice. Режим vision-udp443 не перехватывает UDP/443, что полезно, если приложение требует QUIC и не работает при перехвате.
Вопрос: Как сгенерировать UUID для VLESS?
Используйте команду xray uuid для генерации случайного UUID. Если вы хотите использовать пользовательскую строку, выполните xray uuid -i "ваша_строка", чтобы получить соответствующий UUID. Помните, что строка не должна превышать 30 байт.
Вопрос: Что такое VLESS Encryption и зачем она нужна?
VLESS Encryption — это расширение протокола, которое добавляет постквантовый обмен ключами (ML-KEM-768) и обфускацию трафика. Она защищает от будущих квантовых компьютеров и маскирует характеристики трафика. Настраивается через поле encryption.
Вопрос: Почему в логах sing-box появляется сообщение "outbound connection to"?
Это информационное сообщение означает, что исходящее соединение успешно установлено. Оно появляется при каждом новом подключении и содержит IP-адрес и порт назначения. Если сообщений нет, возможно, трафик не направляется на этот outbound.
Вопрос: Можно ли использовать VLESS с другими транспортами, кроме TCP?
Да, VLESS может работать с различными транспортами, такими как WebSocket, gRPC, HTTP/2 и другими. Однако XTLS Vision и Splice работают только с TCP. Если вы используете другой транспорт, XTLS не будет активирован, но VLESS продолжит работать.
Вопрос: Как проверить, что outbound VLESS работает корректно?
Проверьте логи на наличие сообщений об успешном подключении. Также можно использовать команды типа curl для проверки доступности сайтов через прокси. Если сайты открываются, значит, соединение работает. Для более детальной диагностики используйте инструменты мониторинга трафика.
Вопросы и ответы
Можно ли использовать VLESS без TLS?
Да, но только в определённых случаях. Если сервер и клиент находятся в доверенной частной сети (например, за NAT), можно использовать streamSettings.security: "none". Также можно включить VLESS Encryption, который обеспечивает шифрование без внешнего TLS. В остальных случаях настоятельно рекомендуется использовать TLS или REALITY.
Чем отличается xtls-rprx-vision от xtls-rprx-vision-udp443?
Режим vision перехватывает UDP-пакеты, направленные на порт 443 (QUIC), чтобы заставить приложения использовать TCP. Это увеличивает объём трафика, который можно обработать через Splice. Режим vision-udp443 не перехватывает UDP/443, что полезно, если приложение требует QUIC и не работает при перехвате.
Как сгенерировать UUID для VLESS?
Используйте команду xray uuid для генерации случайного UUID. Если вы хотите использовать пользовательскую строку, выполните xray uuid -i "ваша_строка", чтобы получить соответствующий UUID. Помните, что строка не должна превышать 30 байт.
Что такое VLESS Encryption и зачем она нужна?
VLESS Encryption — это расширение протокола, которое добавляет постквантовый обмен ключами (ML-KEM-768) и обфускацию трафика. Она защищает от будущих квантовых компьютеров и маскирует характеристики трафика. Настраивается через поле encryption.
Почему в логах sing-box появляется сообщение "outbound connection to"?
Это информационное сообщение означает, что исходящее соединение успешно установлено. Оно появляется при каждом новом подключении и содержит IP-адрес и порт назначения. Если сообщений нет, возможно, трафик не направляется на этот outbound.
Можно ли использовать VLESS с другими транспортами, кроме TCP?
Да, VLESS может работать с различными транспортами, такими как WebSocket, gRPC, HTTP/2 и другими. Однако XTLS Vision и Splice работают только с TCP. Если вы используете другой транспорт, XTLS не будет активирован, но VLESS продолжит работать.
Как проверить, что outbound VLESS работает корректно?
Проверьте логи на наличие сообщений об успешном подключении. Также можно использовать команды типа curl для проверки доступности сайтов через прокси. Если сайты открываются, значит, соединение работает. Для более детальной диагностики используйте инструменты мониторинга трафика.