Мне пришлось искать альтернативу постоянному использованию 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, что кому-то пригодилось
Я так костыльно добавил поддержку nekobox, потому что у меня в интернете есть простенький socks5 прокси на VPS. Если локально nekobox не запущен, то дискорд работает через этот простой socks5 в интернете. И друзьям раздал, им кроме копирования двух файлов вообще ничего настраивать не нужно (прокси сразу прописал). А у себя уже, если локально вдруг поднят nekobox с vless, то программа (если находит его при запуске), направляет трафик на него.
Добавлена функция, автоматически копирующая все необходимые файлы в новую папку Discord при его обновлении. Ранее при каждом обновлении прокси-функционал переставал работать, так как обновленный Discord запускался из новой папки без нужных файлов, и их приходилось копировать вручную. Теперь программа сама отслеживает обновления и переносит все необходимые файлы, обеспечивая бесперебойную работу прокси без ручного вмешательства.
А подскажите, пожалуйста, каким образом настраивать proxy?
Поясню: я в этом деле совсем новичок и по гайдам настроил vless протокол на сервере, работает через админскую панель 3X-UI, через nekobox на телефоне всё работает, но вот клиент на компе устанавливать не могу из-за того стоят корпоративные права доступа.
Объясните, пожалуйста, как мне настроить с помощью данного решения использования моего VLESS прокси-сервера у Дискорда? Какие данные вписывать в файле drover.ini?
И для этой dll подходят только 2 типа прокси (самые простые): socks5 или https (и обязательно без логина и пароля). Эти типы прокси при желании легко блокируются и не обеспечивают достаточной маскировки трафика.
Есть два варианта: или использовать какой-то сервер в интернете (повторюсь, прокси без логина и пароля, публичные найти сложновато); или поднять локальный прокси на компьютере (это делают всякие nekobox, hiddify, v2rayN и др.), который уже будет использовать какой-то сложный протокол для связи с каким-то другим сервером в интернете.
То есть запускаете локально условный nekobox (не включаете tun), настраиваете его, а он уже поднимает на 127.0.0.1 socks5, его и указываете в drover.ini.
Принял. Спасибо за ответ!
У меня, кстати, получилось использовать socks5 с логином и паролем для этой цели. Арендовал такой прокси, прописал в drover.ini по типу IP:PORT:LOGIN:PASS и всё работает. Единственное - это пинг довольно высок 150мс, но это уже проблема прокси
Очень странно, если работает с логином и паролем. Потому что dll добавляет параметры для Electron (на чем дискорд сделан), а тот в свою очередь использует механизмы chrome. А в chrome намеренно не хотят брать логин и пароль из параметров (считают, что небезопасно, исправлять не хотят). https://groups.google.com/a/chromium.org/g/chromium-dev/c/x-GDesVs1eI
Как одно из возможных улучшений, которые мог бы добавить в dll - это реализовать аутентификацию socks5 (вмешиваться в tcp пакеты, в socks5 сессию). Но, по-моему, оно того не стоит, в целом слишком мало кому нужно решение в виде dll, а из них кому нужен внешний socks5 с логином и паролем - и 10 человек не наберется на весь интернет. Все-таки основной вид использования - направление на локальный прокси, который уже пробрасывает куда надо по какому надо протоколу.
Тоже не понял как завести сокс5. Использую в связке с byedpi, по логам byedpi идут сообщения: ss: invalid version: 0x43 (106)
Я как понял программа обращается к прокси по http, socks видимо не понимает