Ник Пост Дата
hdrover

Мне пришлось искать альтернативу постоянному использованию TUN только для Discord, поэтому я разработал DLL, которая позволяет Discord использовать прокси-сервер без вмешательства в работу системы. Также удалось решить проблему с голосовыми звонками, чтобы они работали без использования прокси. Решил поделиться этой программой, возможно, кому-то пригодится. Написано на Delphi.

Эта программа заставляет Windows-версию Discord подключаться через указанный прокси-сервер (HTTPS или SOCKS5) для всех TCP-соединений (чат, обновления). Это особенно полезно, поскольку в оригинальном клиенте Discord нет встроенных настроек для работы с прокси, а системный прокси игнорируется. Дополнительно программа немного корректирует исходящий UDP-трафик, что помогает обходить локальные ограничения на голосовые чаты.

Программа работает на уровне самого приложения, без каких-либо изменений в операционной системе или установки драйверов. Это удобная альтернатива использованию глобального VPN (TUN-интерфейсы и прочее).

Для начала работы нужно просто скопировать файлы version.dll и drover.ini в папку, где находится Discord.exe (не путать с Update.exe). Прокси настраивается в файле drover.ini через параметр proxy.

Репозиторий: GitHub - hdrover/discord-drover: A DLL for forcing Discord to use a specified proxy (HTTP/SOCKS5) for TCP connections. Bypasses local restrictions on voice chats.
Релиз: Release drover v0.3 · hdrover/discord-drover · GitHub

2024-10-19T06:48:40.717Z
Lezhek(Lezhek)

Как же ты хорош спасибо большое

2024-10-20T10:10:49.655Z
D4NICKY(D4NICKY)

Пипец ты гений я аплодирую стоя

2024-10-20T14:34:48.891Z
skripterasm(Roman)

народные умельцы снова в деле, спасибо!

2024-10-20T15:26:09.005Z
hdrover

Спасибо всем! Рад, что не зря потратил время на загрузку в github, что кому-то пригодилось

Я так костыльно добавил поддержку nekobox, потому что у меня в интернете есть простенький socks5 прокси на VPS. Если локально nekobox не запущен, то дискорд работает через этот простой socks5 в интернете. И друзьям раздал, им кроме копирования двух файлов вообще ничего настраивать не нужно (прокси сразу прописал). А у себя уже, если локально вдруг поднят nekobox с vless, то программа (если находит его при запуске), направляет трафик на него.

2024-10-21T00:59:04.850Z
skripterasm(Roman)

у меня некобокс, я в конфиге его включил все завелось в пару кликов.

p.s. а есть возможность под лялих написать такую?

2024-10-21T06:56:59.017Z
SpecteR

мб в конфиге сделать опцию включать голосовой трафик через прокси? Трансляции вне прокси

2024-10-21T15:01:40.933Z
hdrover

К сожалению, реальное проксирование udp за рамками этого проекта. Тут вся суть в дешево и сердито, когда минимум кода выполняет возложенную задачу. Для реального заворачивания udp процесса в прокси нужно пользоваться чем-то другим, намного более сложным в плане реализации. Например:
GitHub - wiresock/proxifyre: ProxiFyre: SOCKS5 Proxifier for Windows (тут работа на уровне драйвера)
GitHub - nefarius/socksifier: One DLL to redirect them all to a SOCKS5 server. (на уровне процесса)

2024-10-22T01:00:23.678Z
fluffy-femboy

deleted

2024-10-22T01:04:57.390Z
SpecteR

штош, и на этом спасибо. работает отлично, хоть чаты теперь быстро прогружаются.

2024-10-22T05:43:30.632Z
hdrover

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

2024-10-25T10:33:21.945Z
mrRouter

А подскажите, пожалуйста, каким образом настраивать proxy?
Поясню: я в этом деле совсем новичок и по гайдам настроил vless протокол на сервере, работает через админскую панель 3X-UI, через nekobox на телефоне всё работает, но вот клиент на компе устанавливать не могу из-за того стоят корпоративные права доступа.
Объясните, пожалуйста, как мне настроить с помощью данного решения использования моего VLESS прокси-сервера у Дискорда? Какие данные вписывать в файле drover.ini?

2024-10-26T19:46:58.375Z
hdrover

Прокси нужно настроить отдельно.

И для этой dll подходят только 2 типа прокси (самые простые): socks5 или https (и обязательно без логина и пароля). Эти типы прокси при желании легко блокируются и не обеспечивают достаточной маскировки трафика.

Есть два варианта: или использовать какой-то сервер в интернете (повторюсь, прокси без логина и пароля, публичные найти сложновато); или поднять локальный прокси на компьютере (это делают всякие nekobox, hiddify, v2rayN и др.), который уже будет использовать какой-то сложный протокол для связи с каким-то другим сервером в интернете.

То есть запускаете локально условный nekobox (не включаете tun), настраиваете его, а он уже поднимает на 127.0.0.1 socks5, его и указываете в drover.ini.

2024-10-28T03:40:30.262Z
mrRouter

Принял. Спасибо за ответ!
У меня, кстати, получилось использовать socks5 с логином и паролем для этой цели. Арендовал такой прокси, прописал в drover.ini по типу IP:PORT:LOGIN:PASS и всё работает. Единственное - это пинг довольно высок 150мс, но это уже проблема прокси

2024-10-28T06:17:28.027Z
hdrover

Очень странно, если работает с логином и паролем. Потому что dll добавляет параметры для Electron (на чем дискорд сделан), а тот в свою очередь использует механизмы chrome. А в chrome намеренно не хотят брать логин и пароль из параметров (считают, что небезопасно, исправлять не хотят).
https://groups.google.com/a/chromium.org/g/chromium-dev/c/x-GDesVs1eI
Как одно из возможных улучшений, которые мог бы добавить в dll - это реализовать аутентификацию socks5 (вмешиваться в tcp пакеты, в socks5 сессию). Но, по-моему, оно того не стоит, в целом слишком мало кому нужно решение в виде dll, а из них кому нужен внешний socks5 с логином и паролем - и 10 человек не наберется на весь интернет. Все-таки основной вид использования - направление на локальный прокси, который уже пробрасывает куда надо по какому надо протоколу.

2024-10-28T10:38:37.713Z
mutt-tamer-dinghy

Что-то не понимаю. Вписываю свой сокс прокси и не работает. http работает.

2024-10-28T12:33:18.086Z
D4NICKY(D4NICKY)

Тоже не понял как завести сокс5. Использую в связке с byedpi, по логам byedpi идут сообщения: ss: invalid version: 0x43 (106)
Я как понял программа обращается к прокси по http, socks видимо не понимает

2024-10-28T16:43:39.037Z
BoweryElectric(Bowery Electric)

Кайф, спасибо

2024-10-28T19:46:29.054Z
Hint

Попробуйте указать в формате proxy = socks5://127.0.0.1:1080

2024-10-29T03:25:49.167Z
D4NICKY(D4NICKY)

В таком случае воовсе перестает обращатся к прокси. Вообщем немного не ясно как использовать сокс5 потому что в гитхабе указано что можно.

2024-10-29T04:56:17.405Z
mutt-tamer-dinghy

@hdrover дайте совет как вбить socks5

2024-10-29T23:59:42.718Z
hdrover

К сожалению, в ближайшую неделю сам проверить не смогу. На самом деле с socks5 не тестировал, но думал, что это работает (потому что видел в wireshark пакеты от socks5, когда указывал протокол socks5). DLL делает в плане прокси 2 вещи:

  1. Подменяет переменные окружения HTTP_PROXY и HTTPS_PROXY на то, что задано в конфиге
  2. Подменяет командную строку запуска, добавляя параметр --proxy-server со значением из конфига

Если делать что-то одно, то не работает (разные части дискорда используют разные механизмы).

Точно знаю, что часть с --proxy-server использует движок Chromium.
Вот документация: https://source.chromium.org/chromium/chromium/src/+/main:net/docs/proxy.md
И тут четко указано, что можно использовать socks5 вот так: socks5://foo:1080.

Что именно внутри дискорда использует переменные окружения - я не знаю, не разбирался. Но просто видел в отладчике, что эти переменные окружения активно запрашиваются. В целом переменные распространены. И почти весь софт, который я знаю, который использует эти переменные окружения, принимает в качестве значения строку с указанием протокола socks5.

Мне надо поэкспериментировать. Но смогу только через неделю. Например, может нужно для socks5 подменять переменную ALL_PROXY. Если получится, то обновлю DLL.

Пока что могу только посоветовать проверить вариант с указанием протокола socks5://ip:port. Если не работает, то получается, что пока что socks5 не работает.

2024-10-30T05:30:57.445Z
hdrover

Похоже socks5 все-таки не поддерживается, только https. Сначала происходит процесс обновления. Перед ним запрашиваются следующие переменные окружения:
HTTPS_PROXY, https_proxy, REQUEST_METHOD, HTTP_PROXY, http_proxy, NO_PROXY, no_proxy
Переменной ALL_PROXY в списке нет. Скорее всего обновление делается через запросы в node.js, а там по умолчанию socks5 не поддерживается. Если пропустить процесс обновления, то всё заработало бы, но, к сожалению, его никак не сбросить.
Добавить поддержку socks5 можно было бы, но это много работы. Видимо поправлю документацию, удалю про socks5.

2024-10-31T05:59:14.093Z
D4NICKY(D4NICKY)

Жаль. Единственный вариант тогда использовать gost только.

2024-10-31T07:25:07.782Z
mutt-tamer-dinghy

Решение определенно имеет право на жизнь. Ибо в целом прокси без пароля - это плохо. А множество хромиум приложений всё равно не работает с сокс5 паролями Потому в любом случае все поднимают локальные прокси через локалхост 127.0.0.1 и всякие nekoray и его аналоги.

Мне нравится что голос и видео в этом решении работают не через прокси сервер. Это позволяет не забивать канал на впс, снижает пинг. Т.к. голосовой траффик идет напрямую.

2024-11-01T13:29:18.563Z
hdrover

Я бы добавил еще, что в наше время в любом случае нужно поднимать какой-то локальный прокси для того же youtube и многих других сайтов (через удаленный сервер с vless или чем-то похожим в плане сложности детектирования). Так что локальный https-прокси на localhost - это уже обыденность.

2024-11-01T15:38:13.785Z
hdrover

Добавил поддержку socks5 прокси. В конфиге нужно добавить протокол socks5:

proxy = socks5://127.0.0.1:1080

Релиз: Release drover v0.3 · hdrover/discord-drover · GitHub

2024-11-05T05:05:18.629Z
l8l

Если никто не пишет, это значит всё работает:) Спасибо.

2024-11-12T21:48:38.665Z
miroxxq(vvsl)

Если не сложно не могли бы рассказать как использовать socks5 через dll который вы обновили, т.к там же нужен логин пароль.

2024-11-13T14:19:42.677Z
miroxxq(vvsl)

использовал совет человека, выше вписав socks5:IP:PORT:LOG:PASS
дс запустился а вот войс все так же мертвый, прокси socks5 поставил его на роутер, возможно ли проблема из за этого?

2024-11-13T14:27:49.088Z
hdrover

Поддержку SOCKS5 я добавил, но еще не добавил поддержку логина с паролем :frowning: Но если дискорд запускается, то это значит, что ваш прокси не требует логина с паролем (иначе бы не запустилось).

Но голос идет в любом случае без прокси через манипуляции с пакетами (по аналогии с GoodbyeDPI и пр.). Это особенность данной библиотеки. Если у вас голос не работает, то, возможно, у вас используется другое оборудование ТСПУ, где текущий обход не работает. Вы можете попробовать тестовую версию с другим алгоритмом, которую я делал для другого пользователя: https://github.com/user-attachments/files/17686324/version.zip

2024-11-13T14:59:16.554Z
fluffy-femboy

А в чем разница между этими DLL и Полноценное проксирования Discord через SOCKS5 (включая голосовые звонки) ?

2024-11-14T14:33:52.009Z
hdrover

Плюсы моей (этой): поддержка http и socks5, более простая и надежная реализация (меньше лезем в работу процесса, используем встроенные в Discord механизмы проксирования), обход блокировки голоса и видео через манипуляции с пакетами без необходимости использования прокси для UDP (принцип схожий с GoodbyeDPI и пр.), соответственно более быстрая работа голоса и видео.
Минусы этой: нет поддержки прокси с логином и паролем, нет проксирования UDP (то есть нельзя зайти в голосовой канал, если не работает встроенный сюда обход DPI).

Плюсы чужой: полноценное проксирование UDP, поддержка socks5 с логином и паролем.
Минусы чужой: нет поддержки http-прокси, голос и видео идут через прокси (немного медленнее).

Ну и моя появилась раньше, чужая позже.

В итоге, я бы рекомендовал мою, если у вас с ней работает обход DPI (работают голосовые каналы). И чужую, если голос и видео с моей не работают, если вашему прокси нужны логин с паролем.

2024-11-14T15:22:37.708Z
fluffy-femboy

Спасибо!

2024-11-14T18:46:05.785Z
hdrover

Добавил установщик и чуть улучшил обход ограничений для UDP:

2024-11-17T08:47:11.302Z
hdrover

Добавил поддержку HTTP прокси с логином и паролем. Скорее всего это последняя версия. Добавлять какие-то новые функции не планирую.

2024-11-21T09:55:22.135Z
0x7f

из этого можно получить .so для линукса?

2024-12-18T15:37:33.221Z
hdrover

Тут всё полностью завязано на Windows и Windows API. Для Linux нужно с нуля переделывать.

2024-12-18T19:36:40.105Z
0ka(0ka)

tsocks не подойдёт?

2024-12-19T00:14:56.758Z
hdrover

Немного обновил программу:

  • Добавлена поддержка Windows 7.
  • Улучшено перемещение файлов между версиями дискорда. Раньше файлы не переносились при фоновых обновлениях (когда дискорд скачивает обновление в процессе работы, но не запускает самостоятельно новую версию, просто ждет очередного перезапуска пользователем).
  • Добавлена поддержка версий Canary и PTB (как в dll, так и в установщике).
  • В установщик добавлен режим Direct, чтобы можно было устанавливать dll, но не использовать прокси. Это актуально для ОАЭ, где сам дискорд не заблокирован, но заблокированы голосовые звонки (dll это исправляет).
2024-12-24T17:24:42.004Z
maktimka

Идеально для такого нубаса как я. Столько мучился с Tun settings в nekobox, никак не получалось эти whitelistЫ настроить, discord работал в tun режиме, а steam и battle.net никак не хотел. Прога супер, просто вписал данные прокси из браузера. Дай Бог тебе здоровья и долгих лет жизни, маэстро!

2025-01-04T14:26:42.496Z
atomi(Itsatomi)

Спасибо большое!

2025-01-19T21:20:42.123Z