🎖️ Игра с включенным v2rayN (или любой другой VLESS прокси)
Я долго использовал XRay + VLESS без всяких проблем до недавнего времени. Я включал TUN-режим и изкоробочный фильтр по процессу внутри v2rayN (или Nekoray) и этого было достаточно для повседневного вэб-серфинга до тех пор, пока Discord не заблокировали в России. После того как я попробовал запустить игру параллельно с VLESS прокси (в TUN режиме для работы Discord), оказалось, что далеко не каждая игра работает корректно: увеличенный пинг, потери пакетов, некоторые функции не работают вовсе и так далее.
Нет никаких проблем, если вы просто сидите в Discord с включенным прокси (в TUN режиме). Если ваш прокси поддерживает проксирование UDP трафика, как, например, связка XRay + VLESS + v2rayN, то в Discord будет работать войс и вообще все. Проблемы появляются когда вам нужно параллельно играть в какую-либо игру, потому что, как уже сказал выше, не каждая игра нормально работает с TUN режимом. В целом это относится не только к играм, но и в теории к любым приложениям, но в моем случае я это заметил только с ними. Например, вот игры, которые точно “не дружат” с прокси в TUN режиме: Hunt: Showdown, Valorant, Lost Ark (протестировал сам).
Эта проблема делает невозможной (или как минимум нестабильной) игру параллельно с включенным в TUN режиме прокси для работы Discord.
Что конкретно не так с TUN режимом
Сначала давайте посмотрим, что вообще такое TUN режим согласно Википедии:
TUN, namely network TUNnel, simulates a network layer device and operates in layer 3 carrying IP packets. TAP, namely network TAP, simulates a link layer device and operates in layer 2 carrying Ethernet frames. TUN is used with routing. TAP can be used to create a user space network bridge.
Вкратце, когда вы запускаете TUN режим в, например, v2rayN, программа создает виртуальный интерфейс, через который теперь проходит весь ваш трафик. То есть вообще весь, даже тот, который по итогу пойдет не через прокси, а напрямую. Весь трафик попадает сначала в этот виртуальный интерфейс, и уже оттуда роутится либо в сам, собственно, прокси, либо идет напрямую. То есть даже если в правилах v2rayN вы не прописывали процесс игры, все равно весь ее трафик дополнительно пройдет через виртуальный интерфейс TUN и уже после этого пойдет по обычному маршруту, из-за чего и появляются такие проблемы как повышенный пинг, потери пакетов и так далее. Возможный набор проблем зависит от реализации конкретной игры.
Некоторые игры не работают с TUN режимом вовсе, и причин на это может быть множество. Одна из них, которую я заметил в Hunt: Showdown, это отсутствие возможности корректно пинговать сервера. Известно, что Вы не можете послать пинг находясь за прокси, а когда TUN режим включен, как я описал выше, весь трафик по сути проходит через прокси (в каком-то виде), даже если по правилам он идет по итогу напрямую. Поэтому, например, Hunt: Showdown с включенным TUN режимом показывает пинг до всех серверов 0ms и поэтому отображает их как недоступные, не давая возможности пройти дальше меню.
Поэтому, резюмируя, чтобы минимизировать проблемы во время игры, Вам необходимо избегать TUN режима.
Жизнь без TUN режима
Давайте рассмотрим конкретный кейс: нам необходимо проксировать Discord (TCP + UDP), используя v2rayN на Windows. Это мы хотим делать без TUN режима, чтобы не сломать игру, которую мы запускаем параллельно.
Есть несколько опций.
Направить Discord в прокси на уровне самого приложения
Почему нам вообще нужен TUN режим для проксирования Discord? Собственно, потому что это намного легче, чем добиться того, чтобы Discord сам слал свой трафик через прокси. На OSX или Linux Вы можете просто задать параметр --proxy-server
, но на Windows эта функция изкоробки отсутствует и приходится пользоваться обходными путями.
Я попробовал некоторые из них, но конкретно у меня сработало только одно. Каждое из решений инжектит в процесс кастомный DLL со всей логикой, поэтому никаких сторонних приложений запускать не нужно:
- runetfreedom/discord-voice-proxy - это сработало у меня.
- aiqinxuancai/discord-proxy и hdrover/discord-drover - оба выглядят очень похоже, но возможно они немного устарели, потому что у меня вообще нет файла
version.dll
, который они подменяют. Но в целом можете попробовать.
Использовать сторонний софт для роутинга трафика в прокси
Если у Вас не получилось направить трафик в прокси из самого приложения, Вы можете попробовать установить сторонний софт. Обычно все они работают так, что в системе появляется какой-то драйвер, который управляет тем, куда какой трафик отроутить.
Несколько вариантов, которые я нашел:
- wiresock/proxifyre - частично опен-сорс, сработало в моем случае, но сама программа не очень юзер-френдли: настройка через
.json
, отсутствие графического интерфейса, нет инсталлятора. Также требует отдельной установки драйвера Windows Packet Filter. - ProxyCap - сработало в моем случае, но решение платное и иногда ломает некоторые приложения, которые нужно фиксить руками (см. их FAQ, вопрос “WSL stops working after installing ProxyCap”).
- Proxifier - платное и не подходит в конкретном случае, так как не умеет роутить UDP трафик.
Заключение
Таким образом вы можете избавиться от необходимости запускать прокси в TUN режиме. То или иное решение Вам обязательно подойдет, вне зависимости от того, речь про Discord или нет. Удачи на поле боя!
Спасибо за прочтение этой небольшой статьи. Надеюсь, она была полезна.
Посмотрите также статьи на похожие темы: