trueNetLab logo
RU
Shadowsocks и Xray: когда VPN блокируют

Shadowsocks и Xray: когда VPN блокируют

12 min read
Network Security

Я часто работаю с VPN не как с теорией, а как с практической сетевой задачей: соединить площадки, дать клиентам доступ к корпоративной сети, сохранить доступность серверов, настроить firewall, обновить сертификаты, стабилизировать IPsec-туннели, отладить SSL VPN-клиенты и понять, почему какой-то филиал внезапно перестал проходить.

Обычно это спокойная и надёжная сетевуха. Так и должно быть.

Но бывают случаи, когда технически правильного VPN уже недостаточно. У клиентов из стран с сильно регулируемым Интернетом, например Китая или России, регулярно встречаются ситуации, где классические VPN-протоколы блокируются, ухудшаются или распознаются целенаправленно. Поскольку я работаю в Дубае с очень международной клиентской базой, это не абстрактная тема. Операционный вопрос звучит так: как сохранить легитимный доступ к собственной инфраструктуре, если соединение фильтруется по дороге?

Здесь и появляются Shadowsocks, ShadowsocksR, V2Ray, Xray-core, VLESS, Trojan, REALITY и XHTTP. Сначала это выглядит как путаница из проектов, форков и аббревиатур. И честно говоря, частично так оно и есть.

Если VPN ломается не на входе в систему, а уже по пути через сеть, нужно говорить не только о шифровании, но и о распознаваемости.

Почему появился Shadowsocks

Shadowsocks не пришёл из классического мира enterprise VPN. Его не создавали как более красивый site-to-site или как замену IPsec. Источник был намного прямее: в 2012 году разработчик под псевдонимом clowwindy хотел лёгкий способ выйти из сильно фильтруемой сети в открытый Интернет.

Это многое объясняет в дизайне. Shadowsocks должен был быть лёгким, быстрым и практичным: не тяжёлый VPN-клиент, не большой gateway, не remote-access suite с identity management и compliance. Идея состояла в локальном SOCKS5-прокси, который шифрует трафик и отправляет его на сервер за пределами блокировки.

Потребность была не в “ещё большем количестве enterprise security features”, а в рабочем выходе из сети, которая фильтрует определённые протоколы и направления. Поэтому Shadowsocks до сих пор интересен и одновременно легко неверно понимается. Это хороший лёгкий транспортный компонент, но не полноценный корпоративный VPN сам по себе.

В 2015 году история стала политической: clowwindy написал на GitHub, что к нему приходила полиция и он должен прекратить работу. Затем развитие продолжилось через форки и другие реализации. Такие инструменты часто рождаются из конкретной технической боли, а потом становятся частью большой гонки между пользователями, разработчиками и инфраструктурами фильтрации.

Почему VPN вообще заметен

Когда говорят VPN, многие сначала думают о шифровании. Это верно, но это только часть истории.

Цензору, провайдеру или национальному firewall не обязательно читать содержимое зашифрованного соединения, чтобы ему мешать. Часто достаточно узнать оболочку. IPsec, SSL VPN, WireGuard и OpenVPN имеют типичные признаки: порты, размеры пакетов, шаблоны handshake, поведение сертификатов, timing, UDP-поведение, повторы, ошибки или известные IP-адреса серверов.

Полезная аналогия: не письмо, а конверт. Содержимое зашифровано, но у конверта есть размер, цвет, штамп и повторяющийся отправитель. Тот, кто сортирует только конверты, не должен читать текст, чтобы отправить такой конверт на отдельную проверку.

С сетевым трафиком похоже. Deep Packet Inspection и Traffic Classification смотрят не только на порты, а на шаблоны. В TLS могут выделяться Client Hello fingerprints, SNI, цепочки сертификатов или ALPN. В полностью зашифрованных протоколах даже слишком случайный вид первых пакетов может стать сигналом. Исследования Great Firewall показывают, что важны длины пакетов, энтропия и печатные ASCII-символы в ранних пакетах.

Неприятный вывод: “всё выглядит случайным” не значит “всё незаметно”. Иногда именно это подозрительно.

Что показывает исследовательская практика

Ключевой момент не в том, что системы цензуры могут “обнаруживать VPN”. Это было понятно в общих чертах. Интересно, насколько буднично часто начинается техническое обнаружение.

Хорошая отправная точка — работа GFW Report, представленная в 2020 году на ACM Internet Measurement Conference. GFW Report — не продукт и не поставщик, а исследовательский и измерительный проект вокруг Great Firewall.

Главная мысль: это не магическая атака на шифрование. Great Firewall комбинировала пассивное наблюдение и активные проверки. Сначала соединения становились подозрительными из-за длины и энтропии первого пакета данных. Затем шли active probes: цензор сам подключался к предполагаемому серверу, воспроизводил старые или изменённые пакеты и смотрел, ведёт ли себя другая сторона как Shadowsocks-сервер.

Для администраторов это показывает два слоя защиты:

  • Трафик не должен пассивно выглядеть слишком необычно.
  • Сервер не должен отвечать на активные проверки как прокси.

В 2023 году другое исследование GFW показало, что полностью зашифрованный трафик можно блокировать простыми эвристиками. Если первый TCP payload не похож ни на TLS, ни на HTTP, ни на печатный текст, а похож на случайный блок, это уже сигнал. Поэтому “максимально случайно” не всегда лучший камуфляж.

В 2024 году работы по encapsulated TLS handshakes добавили ещё один слой: даже если внешний туннель зашифрован и хорошо замаскирован, внутренний TLS-handshake может проявиться как шаблон во вложенном протокольном стеке. Случайный padding помогает ограниченно; stream multiplexing выглядит перспективнее, но не решает всё автоматически, если в итоге виден один application stream.

Timing и cross-layer RTT тоже важны. Прокси сдвигает transport- и application-сессии относительно друг друга. Эти временные различия могут быть измеримы независимо от того, близко клиент к прокси или далеко. Это нельзя просто убрать другим header.

Вывод трезвый: решает не название протокола, а поведение всей схемы.

Shadowsocks не является классическим VPN

Shadowsocks часто кладут в одну корзину с VPN. В бытовом смысле это понятно, но технически неточно.

Shadowsocks — это зашифрованный прокси, loosely based on SOCKS5. Локальный клиент предлагает приложениям прокси, шифрует трафик и отправляет его на удалённый Shadowsocks-сервер. Сервер расшифровывает запрос, подключается к реальной цели и возвращает ответ по зашифрованному пути.

Это легче, чем полноценный VPN. Shadowsocks не втягивает всю операционную систему в туннель автоматически. Это инструмент для отправки выбранного трафика другим маршрутом. С дополнительными клиентами и компонентами можно построить поведение, похожее на VPN, но базовая идея остаётся proxy, а не site-to-site VPN.

Для администраторов это важно:

  • Shadowsocks не заменяет чистый site-to-site IPsec.
  • Shadowsocks не является магической защитой от любого обнаружения.
  • Shadowsocks полезен, когда нужен простой и быстрый encrypted proxy из ограниченной сети.

Технически Shadowsocks развивался. Старые stream cipher setups уже не должны быть ориентиром. Современные развёртывания относятся к AEAD-миру, а Shadowsocks 2022 добавляет pre-shared symmetric key base, BLAKE3-based derivation, replay protection и другие исправления. Но спецификация не даёт Forward Secrecy. Если ключ скомпрометирован, аккуратная ротация обязательна.

shadowsocks-rust — современная реализация, которую можно запускать через Docker. На сервере работает, например, ssserver, на клиенте sslocal. Нужны правильно созданные secrets, доступный порт, актуальные cipher и ясное решение: TCP, UDP или оба.

Почему Xray-core — другая категория

Xray-core — не просто “Shadowsocks, но новее”. Это скорее framework для proxy- и tunnel-сценариев.

Xray может комбинировать inbound- и outbound-протоколы: VLESS, VMess, Trojan, Shadowsocks, WireGuard, Hysteria, SOCKS и HTTP. Сверху добавляются transports вроде RAW, WebSocket, gRPC, XHTTP или Hysteria, а также TLS, REALITY или XTLS Vision. VMess ещё встречается в старых конфигурациях, но для новых deployment это скорее legacy; в современных Xray-схемах обычно в центре VLESS.

Shadowsocks — быстрый отвёртка. Xray — ящик инструментов. С ним можно собрать простой вариант или цепочку, где локальный SOCKS/TUN-клиент принимает трафик, отправляет его через VLESS с REALITY на сервер, а сервер выпускает его в Интернет через outbound freedom.

VLESS сам по себе не камуфляж. Это лёгкий proxy-протокол с UUID-аутентификацией. Конфиденциальность и маскировка приходят из нижнего transport/security-слоя: TLS, REALITY или XTLS Vision.

REALITY интересен тем, что не делает просто “ещё один TLS”. Снаружи сервер заимствует TLS-handshake реального стороннего HTTPS-сайта. Наблюдатель видит не самодельный proxy-сертификат, а реальный сертификат реального сайта. Только авторизованный клиент по настроенному key material понимает, что говорит со своим Xray-сервером.

Это закрывает прежде всего server-side TLS fingerprint и active probing. uTLS помогает на стороне клиента имитировать browser Client Hellos. Но Xray не невидим: timing, размеры пакетов, ALPN, поведение сервера и nested TLS patterns всё ещё могут давать сигналы. XTLS Vision и XHTTP — интересные блоки, не гарантия. Небольшой padding мало поможет, если базовый шаблон трафика виден.

UDP-подходы вроде Hysteria или QUIC могут быть быстрыми, но в ограниченных сетях их часто режут или блокируют сильнее, чем исходящий TCP/443. Поэтому Xray требует дисциплины: pin versions, тестировать изменения, читать release notes и не копировать слепо советы из форумов.

Путаница вокруг форков и названий

При поиске быстро попадаешь в старые статьи, GitHub-форки и полуживые клиенты. Это часть истории этих инструментов.

Shadowsocks — протокол и экосистема с несколькими реализациями. shadowsocks-rust сегодня естественный выбор для современного сервера. Старые реализации вроде shadowsocks-libev всё ещё известны, но в зависимости от состояния проекта это скорее legacy или bugfix-oriented ветка.

ShadowsocksR был форком с дополнительными идеями obfuscation. SSR до сих пор встречается в старых гайдах. Сегодня я был бы осторожен: не потому что всякая старая установка плоха, а потому что нужно внимательно проверять клиент, сервер, криптографию, обновления и сообщество.

Xray-core вышел из окружения V2Ray, но развивался самостоятельно. Поэтому старые V2Ray-туториалы нельзя переносить на Xray без проверки. Концепции похожи, но конфигурации, функции и рекомендации изменились.

V2Fly остаётся важным более консервативным community-проектом. Xray-core быстрее продвигает REALITY, XTLS Vision и XHTTP. Есть и sing-box как современная универсальная платформа. В этой статье фокус на Xray, но в лаборатории я бы посмотрел и sing-box.

Практичный совет:

  • Для простых новых схем: Shadowsocks с актуальной реализацией.
  • Для сложных сетей: Xray-core с чистым современным дизайном.
  • Для старых SSR/V2Ray-гайдов: сначала проверить статус и безопасность.
  • Для production у клиентов: не копировать конфигурации без понимания.

Что нужно с обеих сторон

Минимальная схема всегда имеет две стороны.

На удалённой стороне нужен сервер вне ограниченной сети: VPS, собственный сервер или контролируемая инфраструктура в доступном регионе. Сервер должен быть hardened, patched, monitored и documented. Дешёвая забытая инстанция — это будущий риск.

На клиентской стороне нужна подходящая программа: для Shadowsocks часто локальный SOCKS-клиент или приложение для системного proxy; для Xray — Xray-клиент, TUN mode, router setup или приложение с импортом профилей.

Также нужны:

  • чёткая цель
  • корректная аутентификация
  • актуальные версии ПО
  • контролируемый DNS
  • logging без лишних клиентских данных
  • мониторинг доступности
  • план ротации серверов, портов и secrets
  • юридическая и договорная проверка

Последний пункт важен. В некоторых странах использование таких инструментов может быть юридически рискованным. В компании также нужно понимать, открываете ли вы свои системы, обслуживаете сеть клиента или даёте общий доступ в Интернет.

DNS часто недооценивают. Если браузер или ОС всё ещё разрешает домены через локального провайдера, туннель помогает только наполовину. Контент может идти через proxy, но DNS-запрос раскрывает направление. Поэтому нужно проверять DNS path, IPv6 и поведение при падении туннеля.

Logging тоже чувствителен. Для troubleshooting хочется видеть, жив ли туннель; для privacy нужно хранить минимум. Хорошая схема собирает технические состояния, latency, error rates и объём, а не полные списки соединений. Debug logs, TLS keylogs и unmasked access logs не должны жить в production.

Monitoring должен проверять реальный тестовый путь через туннель, корректный DNS, блокировки отдельных регионов и разницу между видом из затронутой страны и из офиса.

Как я оцениваю это операционно

Для меня Shadowsocks или Xray не заменяют firewall architecture, Zero Trust, MFA или segmentation. Это транспортный инструмент для специальных случаев.

Разумный корпоративный подход:

  1. Сначала проверить SSL VPN, IPsec или WireGuard.
  2. Если блокируется, измерить DNS, port, protocol, server IP, TLS fingerprint и UDP throttling.
  3. Затем протестировать Shadowsocks или Xray-core.
  4. Использовать туннель только для нужных целей.
  5. На сервере ограничить доступные внутренние сервисы.
  6. Настроить monitoring, чтобы не узнавать о блокировке от клиента.
  7. Иметь fallback: второй exit, другой provider, регион или protocol.
  8. Разделять secrets и profiles по площадкам или пользователям.
  9. Делать logs и metrics достаточными для эксплуатации, но без лишнего следа.

Когда клиент потерял доступ, “лишь бы снова заработало” понятно. Но потом нужно убрать временные допущения и документировать. Иначе workaround становится невидимым production path.

Почему блокировки догоняют

Другая сторона постоянно адаптирует обнаружение.

Если многие используют один Docker Compose, один port, один TLS fingerprint, одну domain strategy и одного VPS provider, шаблон становится видимым. Блокируется не “Xray” или “Shadowsocks” абстрактно, а конкретный шаблон: handshakes, packet sizes, IP ranges, типичные clients, плохие fallbacks или подозрительные error responses.

Маскировка — это не только feature инструмента. Маскировка — это эксплуатация: те же инструменты с другими domains, providers, profiles и traffic patterns могут выглядеть совершенно иначе.

Поэтому я осторожен с обещаниями проектов. Если tool говорит, что он не обнаруживается, это заявление проекта. Если paper показывает обнаружение признака в реальной сети, это другой уровень доказательства. На практике нужны и скорость проектов, и трезвость исследований.

Моя оценка

Shadowsocks имеет смысл, когда нужен лёгкий, быстрый и сравнительно простой encrypted proxy: первые тесты, временный доступ и среды без крайне агрессивного detection.

Xray-core имеет смысл, когда сеть сложнее, нужны разные transports или хочется осознанно работать с VLESS, REALITY, WebSocket, gRPC или XHTTP. Но он требует большего понимания и легче допускает ошибки конфигурации.

Для клиентов я бы не продавал это как “замену VPN”. Я бы описал это как альтернативный transport path для легитимного доступа. Менее эффектно, но честнее.

Главное различие не Shadowsocks против Xray, а понимаю ли я проблему, которую решаю. Для обычного remote access я использую обычный VPN. Для protocol detection со стороны государства или провайдера нужно говорить о recognizability, fingerprints и operational strategy. Если я не могу объяснить это чисто, не стоит запускать это в production для клиентов.

Итог

Shadowsocks и Xray-core — инструменты из мира, где сетевые соединения не просто “работают” или “не работают”. Иногда их классифицируют, замедляют, активно тестируют или блокируют. Любой, кто обслуживает международных клиентов, рано или поздно встречает эту реальность.

Тема интересна тем, что делает сетевые технологии очень конкретными: encryption, patterns, fingerprints, routing, DNS, operations, law, responsibility и факт, что рабочий туннель ещё не означает хороший дизайн.

Мой следующий шаг очевиден: я хочу воспроизвести Shadowsocks и Xray-core в маленькой лаборатории. Не чтобы вслепую обходить цензуру, а чтобы лучше понять, почему классические VPN иногда заметны и какие альтернативы можно эксплуатировать технически ответственно.

До следующего раза,
Joe

FAQ

Shadowsocks — это VPN?
Не в классическом смысле. Shadowsocks — прежде всего encrypted proxy. В зависимости от клиента и ОС можно получить VPN-похожую модель, но технически это не IPsec, SSL VPN или WireGuard.
Xray-core лучше Shadowsocks?
Не всегда. Xray-core гибче и может комбинировать protocols, transports и camouflage. Shadowsocks проще и легче. Выбор зависит от сети, риска и операционной нагрузки.
Можно просто запустить это в Docker?
Да, Shadowsocks и Xray-core можно запускать через Docker. Но для production у клиентов одного контейнера недостаточно: нужны updates, monitoring, secrets management, firewall rules, logs, DNS и план на случай блокировок.
А что с ShadowsocksR?
ShadowsocksR был историческим форком с дополнительными obfuscation-идеями. Для новых production-схем я бы сегодня не выбирал SSR, потому что maintenance, standardization и security posture выглядят слабее, чем у современных Shadowsocks- или Xray-подходов.
Это гарантированно невидимо?
Нет. Ни один инструмент не гарантирует, что трафик не будет обнаружен или заблокирован. Современные фильтры анализируют signatures, metadata, packet patterns, server IPs, active probes и необычное поведение.
Источники