RE:NODE

Сеть12 мин чтения

Xray, WireGuard или OpenVPN: какой VPN-протокол выбрать

WireGuard, OpenVPN и Xray с VLESS и Reality: скорость, насколько легко сеть их распознаёт, порты, MTU и клиентские приложения - и что для какой задачи подходит.

0 прочтений

Если сеть, в которой вы находитесь, пропускает VPN, WireGuard - самый быстрый и простой из трёх, и выбирать стоит его. Если вам нужен TCP, старый роутер или корпоративная инфраструктура, которая уже на нём работает, OpenVPN по-прежнему работает везде и понятен любому администратору файрвола на свете. Если же сеть блокирует VPN - отель, который отбрасывает всё, что не похоже на веб-трафик, офисный файрвол, страна, фильтрующая протоколы по их форме, - не выживет ни тот, ни другой, и для этой задачи создан Xray с VLESS и Reality: он делает туннель похожим на обычное HTTPS-соединение с известным сайтом. Цена в том, что Xray - прокси, а не пакетный туннель, поэтому веб-трафик он несёт отлично, а игровой - хуже.

Это короткий ответ. Остальная часть статьи объясняет почему - с портами, накладными расходами, клиентскими приложениями и типичными сбоями, - чтобы вы могли решить для своего случая сами, а не верить рейтингу на слово.

Три разные конструкции, а не три версии одной идеи#

Эти три протокола часто ставят в один ряд, словно это конкурирующие марки одного продукта. Это не так. Они по-разному решают самый важный вопрос: как трафик выглядит на проводе.

WireGuardOpenVPNXray (VLESS + Reality)
Что передаётIP-пакетыIP-пакеты (tun) или Ethernet-кадры (tap)Соединения (TCP-потоки, UDP ретранслируется)
ТранспортТолько UDPUDP или TCPTCP, обычно порт 443
Порт по умолчанию51820 по соглашению1194 (назначен IANA)443 в большинстве конфигураций
КриптографияCurve25519, ChaCha20-Poly1305, BLAKE2sTLS через OpenSSL, канал данных на AES-GCM или ChaCha20-Poly1305TLS 1.3, ключи x25519 для Reality
Выглядит какWireGuardOpenVPNHTTPS к настоящему сайту
Где работаетЯдро Linux, в остальных системах userspaceUserspace, разгрузка в ядро в 2.6Userspace (Go)

WireGuard - туннель третьего уровня. Ваше устройство получает виртуальный сетевой интерфейс, каждый направленный в него IP-пакет шифруется и отправляется на сервер UDP-датаграммой, а сервер распаковывает его и пересылает дальше. Он маленький - около 4000 строк кода в ядре, - со своими твёрдыми взглядами и вообще без согласования шифров: один фиксированный набор современных примитивов, а если их когда-нибудь придётся заменить, выйдет новая версия протокола. В основной ветке ядра Linux он с версии 5.6.

OpenVPN - старая рабочая лошадка, существующая с 2001 года. Он тоже даёт виртуальный интерфейс, но управляющий канал - полноценная TLS-сессия с сертификатами, и всё это работает в userspace. Он может работать поверх UDP или TCP, и в этом его большое практическое преимущество: TCP на порту 443 проходит через файрволы, которые отбрасывают всё остальное. Слабость его в том, что он никогда не задумывался как скрытный: у его пакетов узнаваемое собственное обрамление даже на порту 443.

Xray - зверь другой породы. Он появился в 2020 году как форк прокси-платформы V2Ray, а его протокол VLESS - тонкий способ без состояния сказать «соедини меня с этим адресом» после того, как клиент подтвердил, кто он, с помощью UUID. Собственного шифрования у VLESS нет; он полагается на ту защиту транспорта, что лежит под ним. Reality, добавленный в 2023 году, и есть эта защита транспорта: слой TLS 1.3, который заимствует рукопожатие настоящего популярного сайта. Рукопожатие подробно разобрано в статье VLESS и Reality простыми словами. Здесь важно то, что Xray не передаёт сырые пакеты. Он передаёт соединения, и это меняет его поведение во всём - от MTU до игр.

Обнаружимость: столбец, который решает большинство случаев#

Шифрование скрывает то, что вы говорите. Но оно не скрывает, что вы пользуетесь VPN. Глубокой инспекции пакетов (DPI) не нужно ничего расшифровывать, чтобы узнать протокол по форме, размеру и времени его первых пакетов, и именно здесь пути трёх протоколов расходятся.

WireGuard распознаётся элементарно. Инициирующее сообщение его рукопожатия - всегда UDP-полезная нагрузка в 148 байт, начинающаяся с фиксированного типа сообщения, а ответ - всегда 92 байта. Это сознательное решение - WireGuard создавался безопасным и простым, а не скрытным, - и оно означает, что сеть, которая хочет заблокировать WireGuard, может сделать это одним правилом. Смена порта с 51820 на 443 не помогает: UDP на 443, не похожий на QUIC, так же заметен.

OpenVPN тоже распознаётся. Каждый пакет начинается с байта кода операции и ID сессии, а TLS-рукопожатие идёт внутри этого обрамления, а не как обычный TLS. tls-crypt шифрует и аутентифицирует управляющий канал, что мешает простому снятию отпечатка обмена сертификатами, но структура пакетов остаётся OpenVPN-овской. Работа поверх TCP 443 проводит его через файрволы, разрешающие только веб-порты, но не через файрвол, который проверяет, действительно ли трафик на 443 - это TLS.

Xray с Reality создан, чтобы быть скучным. Клиент открывает TCP-соединение на порт 443 и отправляет TLS 1.3 ClientHello, в поле SNI которого указан настоящий сайт, а отпечаток имитирует распространённый браузер (тот самый fp=chrome, который вы видите в ссылках). Любой наблюдатель видит TLS 1.3-соединение с чем-то, что выглядит как этот сайт. Любой, кто активно прощупывает сервер без правильного ключа, пропускается к настоящему сайту и получает его настоящий сертификат. Нет ни собственного сертификата, который можно найти, ни собственного домена, ничего необычного, за что можно зацепиться.

Отсюда два практических вывода. Во-первых, в сети, которая ничего не блокирует, скрытность ничего не даёт, и выигрывает скорость WireGuard. Во-вторых, в некоторых странах использование VPN ограничено или регулируется. То, что трафик выглядит обычным, не меняет того, что о нём говорит закон, поэтому узнайте правила там, где вы находитесь, прежде чем на всё это полагаться.

Скорость и накладные расходы#

В неограниченной сети с коротким маршрутом все три заполнят обычный домашний канал. Различия проявляются на краях: высокая пропускная способность, слабые CPU, каналы с потерями.

WireGuard на практике самый быстрый. В Linux он работает в ядре, избегая копирования между ядром и userspace, а ChaCha20-Poly1305 быстр даже на CPU без инструкций AES, поэтому телефоны и маленькие роутеры хорошо с ним справляются. Каждый пакет несёт 60 байт накладных расходов поверх IPv4 (20 IP, 8 UDP, 32 на заголовок WireGuard и тег аутентификации) или 80 поверх IPv6, поэтому wg-quick по умолчанию ставит MTU туннеля 1420: 1500 минус худший случай.

OpenVPN исторически был самым медленным, потому что он однопоточный, работает в userspace, и каждый пакет дважды пересекает границу ядра. В OpenVPN 2.6 появилась разгрузка канала данных (DCO), которая переносит шифрование в модуль ядра в Linux и в драйвер в Windows и сокращает большую часть разрыва, но только если её используют обе стороны и только для AEAD-шифров. Накладные расходы зависят от шифра и опций, обычно от 50 до 70 байт на пакет.

Xray работает в userspace и, как правило, достаточно быстр, чтобы заполнить типичный домашний канал на скромном железе. С накладными расходами у него иначе, потому что он проксирует потоки: ваше TCP-соединение с сайтом завершается на клиенте и заново создаётся на сервере, а байты идут внутри TLS-сессии. Внутреннего IP-пакета, который можно фрагментировать, нет, поэтому проблемы с MTU, преследующие WireGuard за PPPoE или у мобильных операторов, в основном не возникают. Цена в том, что всё идёт внутри одного TCP-соединения на каждое проксируемое соединение, а TCP на пути с потерями резко замедляется.

СитуацияЛучший вариантПочему
Домашняя или офисная сеть, ничего не блокируетсяWireGuardСамый быстрый, простой, переживает смену сетей
Файрвол пропускает только веб-порты, без инспекцииOpenVPN поверх TCP 443 или XrayОба выходят через 443
Сеть инспектирует и блокирует VPN-протоколыXray с RealityВыглядит как HTTPS к настоящему сайту
Мобильный или спутниковый канал с большими потерямиWireGuardUDP не застревает на потерях
Существующая корпоративная PKI и требования аудитаOpenVPNСертификаты, зрелые инструменты

Статья почему VPN тормозит разбирает случаи, когда ни один из них не быстр, и как выяснить, какой участок пути виноват.

UDP, TCP и что это значит для игр и звонков#

Игры и голосовые звонки работают по UDP, потому что опоздавший пакет ничего не стоит, а потерянный нужно пропустить, а не пересылать. Почему так - объясняет статья TCP или UDP для игровых серверов.

WireGuard несёт UDP как UDP. Потерянный пакет теряется один раз, игра пожимает плечами, и следующий приходит вовремя. OpenVPN поверх UDP ведёт себя так же. OpenVPN поверх TCP - нет: UDP игры заворачивается в TCP-поток, один потерянный сегмент задерживает всё, что за ним, пока его не перешлют, и игра видит всплеск лага, а за ним лавину устаревших пакетов. Пускать TCP-соединения внутри TCP-туннеля OpenVPN ещё хуже - два уровня таймеров повторной передачи воюют друг с другом, классический TCP meltdown.

Xray тоже ретранслирует UDP, но поверх своего TCP-соединения, поэтому UDP наследует блокировку очереди (head-of-line blocking) TCP всякий раз, когда путь теряет пакеты. На чистом канале вы этого не заметите. На перегруженном вечернем подключении игра может подтормаживать так, как не стала бы через WireGuard. Это честный предел конструкции, устойчивой к цензуре: она прячется, притворяясь веб-трафиком по TCP, а веб-трафик по TCP - не то, что нужно играм. Дальше эту тему развивает статья снижает ли VPN пинг в играх.

Порты и правила файрвола#

ПротоколПортТранспортПримечания
WireGuard51820UDPСоглашение из документации, а не требование; подойдёт любой порт
OpenVPN1194UDP (или TCP)Назначен IANA; proto tcp и port 443 для сетей с ограничениями
Xray Reality443TCPДолжен быть 443, чтобы выглядеть как HTTPS
OpenVPN поверх TCP443TCPКонфликтует с веб-сервером на том же адресе, если порт не разделить

WireGuard молчит для всех, у кого нет действующего ключа: на неаутентифицированные пакеты он вообще не отвечает, поэтому сканер портов ничего не видит. OpenVPN с tls-crypt или tls-auth тоже рано отбрасывает неаутентифицированные пакеты. Xray с Reality отвечает на 443 как сайт, который он заимствует, - в этом и смысл.

Примеры серверных конфигураций, чтобы было видно, как мало каждому нужно в основе:

wg0.conf (server)
[Interface]Address = 10.8.0.1/24ListenPort = 51820PrivateKey = <server private key>[Peer]PublicKey = <laptop public key>AllowedIPs = 10.8.0.2/32
server.conf (OpenVPN, excerpt)
port 1194proto udpdev tundata-ciphers AES-256-GCM:CHACHA20-POLY1305tls-crypt ta.key

Клиент Xray обычно настраивается одной ссылкой, а не файлом:

code
vless://<uuid>@203.0.113.10:443?encryption=none&flow=xtls-rprx-vision  &security=reality&sni=<borrowed site>&fp=chrome&pbk=<public key>  &sid=<short id>&type=tcp#my-server

На практике ссылка - одна строка; здесь она разбита только чтобы поместиться. Важно каждое поле: UUID идентифицирует вас, pbk - публичный ключ Reality сервера, sid - короткий ID, который сервер принимает, а sni - сайт, чьё рукопожатие заимствуется.

Клиентские приложения на каждой платформе#

ПлатформаWireGuardOpenVPNVLESS / Reality
WindowsWireGuard for WindowsOpenVPN Connect, OpenVPN GUIv2rayN, Hiddify, а на RE:NODE - приложение Renode VPN
macOSWireGuard (App Store)Tunnelblick, OpenVPN ConnectHiddify и другие VLESS-клиенты
AndroidWireGuardOpenVPN for Android, OpenVPN Connectv2rayNG, Hiddify
iOS / iPadOSWireGuardOpenVPN ConnectStreisand, Shadowrocket, Hiddify
Linuxwg-quick из пакета kernel toolsпакет openvpn, NetworkManagerЯдро Xray, Hiddify

У WireGuard и OpenVPN есть официальные приложения от самих разработчиков. Экосистема Xray построена сообществом: много клиентов от разных разработчиков, большинство с открытым исходным кодом, некоторые (Shadowrocket) платные. Это менее аккуратно, но на практике формат ссылки у всех общий, поэтому одна и та же ссылка vless:// импортируется в каждый из них. Четыре распространённых клиента по шагам разобраны в руководстве по настройке VLESS-клиентов.

Одно различие, о которое часто спотыкаются: приложения WireGuard и OpenVPN создают системный VPN и по умолчанию захватывают весь трафик. Некоторые VLESS-клиенты на десктопе по умолчанию работают в режиме системного прокси, который охватывает только приложения, учитывающие настройку прокси, - браузеры да, многие игры и консольные утилиты нет. Если хотите, чтобы через туннель шло всё, ищите режим VPN или TUN.

Что выбрать в какой ситуации#

  • У вас домашняя лаборатория, и вы хотите заходить в неё с телефона. WireGuard. Ничто другое не настраивается так быстро и не живётся с ним так приятно.
  • На работе уже используется OpenVPN. Оставайтесь на нём. Сертификаты, списки отзыва и существующие инструменты стоят больше, чем несколько процентов скорости.
  • Вы ездите через сети, которые блокируют VPN, или живёте за такой сетью. Xray с Reality. WireGuard и OpenVPN просто не подключатся, часто без всяких сообщений.
  • Вам нужно самое быстрое игровое соединение. Скорее всего, вообще без VPN - см. статью об играх по ссылке выше, - а если VPN нужен, то WireGuard поверх UDP.
  • Вы хотите приватности от сети, в которой сидите (отель, кафе). Подойдёт любой из трёх, если сеть его пропускает. Что это на самом деле защищает, описано в статье VPN в публичном wifi.

Ни один из них не делает вас анонимным. Каждый переносит доверие с вашей локальной сети и провайдера на того, кто держит сервер. С собственным сервером это вы, и адрес, который видит мир, тоже ваш. Модель угроз как следует разобрана в статье что VPN защищает, а что нет.

Что использует RE:NODE и почему#

Линейка приватных VPN RE:NODE работает на Xray с VLESS и Reality и ни на чём другом - ни WireGuard, ни OpenVPN. Причина - столбец обнаружимости: сервер, который работает только в дружелюбных сетях, отказывает именно там, где он нужнее всего. У каждого сервера свой адрес и свой ключ, больше на нём никого нет, и ограничения трафика нет. На Windows используется приложение Renode VPN, которое берёт ссылку, выданную сервером, и подключается; телефоны и Mac используют любой VLESS-клиент - v2rayNG, Hiddify, Streisand или Shadowrocket - с той же ссылкой. Сервер находится в Германии, поэтому задержка определяется вашим расстоянием до него.

Если правильный ответ для вас - WireGuard (неограниченная сеть, в первую очередь игры), лучше подойдёт VDS общего назначения, на который вы поставите его сами, и он находится в линейке выделенных серверов.

FAQ#

WireGuard безопаснее, чем OpenVPN?

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

Можно ли спрятать WireGuard, запустив его на порту 443?

Нет. Выдаёт его не порт, а фиксированные размеры рукопожатия и типы сообщений. UDP на 443, который не является QUIC, если уж на то пошло, ещё заметнее. Чтобы спрятать WireGuard, его нужно во что-то завернуть, и тогда вы построили худшую версию Xray.

Xray медленнее, чем WireGuard?

На чистом неограниченном соединении WireGuard обычно несколько быстрее, особенно на слабых CPU и для UDP-трафика. Для сёрфинга и стриминга на типичном домашнем канале разница редко заметна. В сетях, блокирующих WireGuard, сравнение теряет смысл - один подключается, а другой нет.

Шифрует ли VLESS мой трафик?

Сам VLESS - нет; это сознательно тонкий протокол. Шифрование даёт слой под ним, который в случае Reality - TLS 1.3. Конфигурация VLESS без TLS или Reality отправляла бы трафик открытым текстом, поэтому ни одна разумная конфигурация так не делает.

Какой протокол используют крупные коммерческие VPN?

Большинство сейчас по умолчанию использует WireGuard или собственный вариант на его основе, а OpenVPN оставляет для совместимости. Некоторые добавляют обфусцированный режим для сетей с ограничениями. Конфигурации на Xray чаще встречаются у тех, кто держит собственные серверы, и в регионах с жёсткой фильтрацией.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000