Skip to content

d0mhate/-tg-ws-proxy-Manager-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

165 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TG WS Proxy Go

CI Latest Release Downloads Go Report Card Go Version License CGO Protocol

Компактный Go-порт tg-ws-proxy для Telegram. Основной сценарий - запуск на OpenWrt-роутере через меню-скрипт без Python runtime и desktop-обвязки.

Прокси принимает подключения от Telegram как SOCKS5 или MTProto и ведет трафик до Telegram DC через WebSocket/TLS. Если основной маршрут недоступен, можно включить Cloudflare route или внешний MTProto proxy как запасной путь.

Telegram app / Telegram Desktop
  -> SOCKS5 или MTProto
  -> tg-ws-proxy
  -> WebSocket + TLS -> Telegram DC
       -> Cloudflare route, если включен
       -> внешний MTProto proxy, если задан
       -> прямой TCP fallback

Important

Используйте на свой страх и риск. Проект не гарантирует 100% работу и не берет на себя ответственность за состояние роутера или сети.

Python manager This port
Runtime нужен Python один статический бинарник
Размер зависит от Python-пакетов OpenWrt binary около 5 MB
OpenWrt больше места и зависимостей скачать и запустить
CGO не важно CGO_ENABLED=0
Управление script/menu script/menu + прямой CLI

Quick Start

OpenWrt через меню

Подключитесь к роутеру по SSH и запустите:

wget -O /tmp/tg-ws-proxy-go.sh https://github.com/d0mhate/-tg-ws-proxy-Manager-go/releases/latest/download/tg-ws-proxy-go.sh && sh /tmp/tg-ws-proxy-go.sh

Обычно достаточно трех действий:

  1. Setup / Update -> подтвердить y
  2. Start proxy -> выбрать t для запуска в терминале или b для фона
  3. Enable autostart, если нужен запуск после перезагрузки

После Setup / Update меню покажет предупреждение. Это нормально: нужно выйти из текущей menu-сессии и снова запустить tgm, чтобы менеджер работал уже на обновленном script state.

Скрипт создает короткую команду tgm. Через нее можно снова открыть меню или выполнить команды вроде tgm stop, tgm status, tgm remove.

OpenWrt без меню

wget -O /tmp/tg-ws-proxy-go.sh https://github.com/d0mhate/-tg-ws-proxy-Manager-go/releases/latest/download/tg-ws-proxy-go.sh && sh /tmp/tg-ws-proxy-go.sh install && sh /tmp/tg-ws-proxy-go.sh start

Запуск в фоне:

sh /tmp/tg-ws-proxy-go.sh start-background

Pre-built binaries

Готовые бинарники лежат в Releases. Меню-скрипт сам выбирает подходящий asset по архитектуре роутера.

Для обычных release manager script дополнительно сверяет SHA256 скачанного бинарника с digest из GitHub release API. Для preview-веток эта проверка не выполняется.

OpenWrt Linux macOS Windows FreeBSD

Поддерживаемые release-архитектуры
  • OpenWrt: mipsel_24kc, mips_24kc, armv7, armv8l, aarch64, x86_64
  • Linux: x86_64, aarch64, armv7, armv6, 386, riscv64, loong64
  • Additional targets: mips64, mips64el
  • macOS: amd64, arm64
  • Windows: amd64, arm64
  • FreeBSD: amd64, arm64

Проверенная цель:

  • Xiaomi Mi Router 4A Gigabit Edition v2
  • OpenWrt 24.10.5
  • ramips/mt7621
  • mipsel_24kc

Telegram Setup

SOCKS5

По умолчанию прокси запускается как SOCKS5 на порту 1080.

Если прокси запущен на роутере, в Telegram укажите:

Field Value
Type SOCKS5
Host IP роутера
Port 1080
Username пусто, если auth не включена
Password пусто, если auth не включена

Если прокси запущен на той же машине, используйте host 127.0.0.1.

SOCKS5 auth включается в меню: Advanced -> SOCKS5 auth.

MTProto

MTProto включается через меню:

  1. Advanced
  2. 19) Mode -> mtproto
  3. 20) Secret -> сгенерировать secret или вставить свой
  4. 15) Public IP -> указать публичный IP сервера

После этого меню покажет готовую ссылку tg://proxy?.... Ее можно открыть в Telegram или вывести QR-код через 16) Show QR code.

Usage

Прямой запуск бинарника без меню:

./tg-ws-proxy [flags]
Flag Default Description
--mode <socks5|mtproto> socks5 Режим работы прокси
--host <IP> 127.0.0.1 Адрес, на котором слушает сервер
--port <PORT> 1080 Порт, на котором слушает сервер
--username <NAME> пусто Логин для SOCKS5 auth
--password <PASS> пусто Пароль для SOCKS5 auth
--verbose off Подробные логи
--buf-kb <KB> 256 Размер буфера сокета
--pool-size <N> 4 Размер пула заранее открытых WebSocket соединений
--pool-max-age <DURATION> 55s Максимальный возраст idle WebSocket в пуле
--pool-refill-delay <DURATION> 250ms Пауза между созданием новых WebSocket соединений
--dial-timeout <DURATION> 10s Таймаут подключения
--init-timeout <DURATION> 15s Таймаут первого ответа клиента
--dc-ip <DC:IP> DC2 + DC4 IP для конкретного Telegram DC, можно повторять
--cf-proxy off Включить Cloudflare route
--cf-proxy-first off Сначала пробовать Cloudflare, потом direct route
--cf-balance off Балансировать трафик между несколькими Cloudflare доменами с сохранением fallback-порядка
--cf-domain <DOMAIN[,DOMAIN2]> пусто Домен или список доменов для Cloudflare route
--secret <HEX> пусто MTProto secret, нужен для --mode mtproto
--link-ip <IP> пусто IP, который попадет в tg://proxy ссылку
--mtproto-proxy <HOST:PORT:SECRET> пусто Внешний MTProto proxy как fallback, можно повторять

Examples

# SOCKS5 только для этой машины
./tg-ws-proxy --mode socks5 --host 127.0.0.1 --port 1080

# SOCKS5 для устройств в локальной сети
./tg-ws-proxy --mode socks5 --host 0.0.0.0 --port 1080

# SOCKS5 с логином и паролем
./tg-ws-proxy --mode socks5 --host 0.0.0.0 --port 1080 --username alice --password secret

# SOCKS5 с Cloudflare route
./tg-ws-proxy --mode socks5 --cf-proxy --cf-domain yourdomain.com

# MTProto
./tg-ws-proxy --mode mtproto --secret dda1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 --port 1080 --link-ip 1.2.3.4

# MTProto с внешним MTProto proxy как fallback
./tg-ws-proxy --mode mtproto --secret dda1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 --port 1080 \
  --mtproto-proxy proxy.example.com:443:ddf0e1d2c3b4a5968778695a4b3c2d1e0f

Menu Script

Основные команды:

sh tg-ws-proxy-go.sh install
sh tg-ws-proxy-go.sh update
sh tg-ws-proxy-go.sh start
sh tg-ws-proxy-go.sh start-background
sh tg-ws-proxy-go.sh stop
sh tg-ws-proxy-go.sh restart
sh tg-ws-proxy-go.sh enable-autostart
sh tg-ws-proxy-go.sh disable-autostart
sh tg-ws-proxy-go.sh status
sh tg-ws-proxy-go.sh telegram
sh tg-ws-proxy-go.sh quick
sh tg-ws-proxy-go.sh remove
sh tg-ws-proxy-go.sh help

Если установлена короткая команда tgm, можно использовать ее:

tgm status
tgm stop
tgm remove

Menu map

Главное меню:

  • 1) Setup / Update - скачать или обновить бинарник
  • 2) Start proxy / 2) Stop proxy - запустить или остановить прокси
  • 3) Enable autostart / 3) Disable autostart - включить или выключить автозапуск
  • 4) Advanced - расширенные настройки

Advanced:

  • Full status - полный статус установки
  • Proxy settings - текущие настройки прокси
  • Quick commands - готовые команды для скрипта
  • Toggle verbose - подробные логи
  • Restart proxy - перезапуск с текущими настройками
  • Toggle proxy / Toggle order / Toggle balance - Cloudflare route, порядок попыток и балансировка
  • Set domain / Check domain - built-in или свои Cloudflare домены и проверка kws1..kws5, kws203
  • SOCKS5 auth - логин и пароль
  • DC mapping - ручная карта DC:IP
  • Port / Pool size / Public IP - порт, пул соединений, IP для ссылки
  • Show QR code - QR-код для подключения
  • Update source - release/latest, конкретный тег или preview-ветка
  • Remove binary - удаление установки с подтверждением
  • Mode / Secret / Upstream proxies - MTProto-режим

Как переключиться на тестовую ветку

Если нужно получать не обычные релизы, а тестовые обновления из ветки:

  1. Откройте меню tgm
  2. Перейдите в Advanced
  3. Выберите Update source
  4. Выберите режим preview
  5. Выберите ветку из списка или введите имя вручную
  6. После сохранения вернитесь в главное меню и запустите Setup / Update

После этого менеджер будет обновляться из выбранной preview-ветки, а не из обычных release-тегов.

Если нужно вернуться обратно на стабильные релизы:

  1. Снова откройте Advanced -> Update source
  2. Выберите режим release
  3. Оставьте latest, выберите тег из списка или введите его вручную
  4. Запустите Setup / Update

Если у вас уже включен автозапуск, источник обновлений тоже будет сохранён.

Текущий UX Update source:

  • на первом экране доступны release, preview и back
  • пустой Enter на первом экране делает back
  • для release показывается latest, список недавних тегов и ручной ввод
  • для preview показывается список доступных preview-веток и ручной ввод

Cloudflare Proxy

Cloudflare route нужен, если прямой путь до Telegram нестабилен. Можно использовать built-in пул доменов или указать свои домены с поддержкой WebSocket.

Полная инструкция по настройке домена: CF-proxy

В меню:

  1. Advanced
  2. 6) Toggle proxy -> включить Cloudflare route
  3. 8) Toggle balance -> включить или выключить round-robin между несколькими доменами
  4. 9) Set domain -> оставить built-in пул или указать свои домены через запятую
  5. 10) Check domain -> проверить built-in, свои или вручную введенные домены

Пункты 9 и 10 в Advanced были переработаны:

  • 9) Set domain теперь работает через numbered menu:
    • enter your own domains
    • keep current
    • use built-in domains, если свои домены уже заданы
    • back
  • 10) Check domain теперь тоже работает через numbered menu:
    • your own domains, если они заданы
    • built-in domains
    • enter domains manually
    • back

Пустой Enter в этих экранах теперь по умолчанию делает back, а не сохраняет что-то неявно.

Порядок маршрутов:

Order Meaning
fallback сначала direct route, потом Cloudflare
first сначала Cloudflare, потом direct route

Через переменные окружения:

CF_PROXY=1 CF_BALANCE=1 CF_DOMAIN='' tgm start
CF_PROXY=1 CF_DOMAIN=yourdomain.com tgm start
CF_PROXY=1 CF_PROXY_FIRST=1 CF_DOMAIN=yourdomain.com tgm start

Для manager script CF_BALANCE=1 используется по умолчанию.

Прямой запуск бинарника:

./tg-ws-proxy --cf-proxy --cf-balance
./tg-ws-proxy --cf-proxy --cf-proxy-first --cf-balance
./tg-ws-proxy --cf-proxy --cf-domain yourdomain.com
./tg-ws-proxy --cf-proxy --cf-proxy-first --cf-domain yourdomain.com

Если --cf-domain не указан, бинарь использует built-in пул доменов. --cf-domain сам по себе не включает Cloudflare route. Нужен --cf-proxy.

MTProto Proxy

MTProto mode позволяет подключать Telegram напрямую как к MTProto-прокси, без SOCKS5.

В меню:

  1. Advanced
  2. 19) Mode -> mtproto
  3. 20) Secret -> сгенерировать secret или вставить свой
  4. 15) Public IP -> указать IP для ссылки подключения

После этого прокси покажет tg://proxy?... ссылку. Ее можно открыть в Telegram или вывести QR-код через 16) Show QR code.

Через переменные окружения:

PROXY_MODE=mtproto MT_SECRET=dda1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 MT_LINK_IP=1.2.3.4 tgm start

Прямой запуск бинарника:

./tg-ws-proxy --mode mtproto --secret dda1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 --port 1080 --link-ip 1.2.3.4

--link-ip влияет только на ссылку подключения. На маршрутизацию он не влияет.

Upstream MTProto proxy

Если WebSocket до Telegram недоступен и нет своего Cloudflare-домена, можно указать внешний MTProto proxy как запасной маршрут.

./tg-ws-proxy --mode mtproto --secret dda1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 --port 1080 \
  --mtproto-proxy proxy1.example.com:443:ddf0e1d2c3b4a5968778695a4b3c2d1e0f \
  --mtproto-proxy proxy2.example.com:443:dda0b1c2d3e4f5061728394a5b6c7d8e9f

SECRET в --mtproto-proxy - это secret внешнего прокси, а не вашего сервера.

OpenWrt Builds

Целевые OpenWrt сборки:

GOOS=linux GOARCH=mipsle GOMIPS=softfloat
GOOS=linux GOARCH=mips GOMIPS=softfloat
GOOS=linux GOARCH=arm GOARM=7
GOOS=linux GOARCH=arm64
GOOS=linux GOARCH=amd64

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

Removal

tgm remove

Или через меню: Advanced -> Remove binary.

После удаления текущая menu-сессия закрывается, потому что manager script уже удален с диска.

Перед удалением меню просит подтверждение.

Команда останавливает прокси, отключает автозапуск и удаляет:

  • бинарник и файл версии из /tmp
  • постоянную копию для автозапуска
  • команду tgm
  • init.d сервис
  • скрипт управления
  • PID-файл и директорию состояния

License

MIT License


Данный репозиторий создан исключительно как пример и для ознакомительных целей. Автор не несет ответственности за использование проекта, его настройку, запуск и возможные последствия. Вся ответственность за такие действия лежит на пользователе.

About

Lightweight OpenWrt SOCKS5/MTProto proxy for Telegram (port of Flowseal/tg-ws-proxy)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors