Прокси не умеет работать с тестовой средой Telegram: все таблицы IP — продовые, а у тестовых DC нет вебсокет фронта (kws{dc}.web.telegram.org). Клиент в тестовом режиме уходил на продовый DC и не проходил авторизацию.
Решение
Два механизма:
Автоматический: Telegram Desktop помечает тестовые DC сдвигом +10000 (10001-10003). Прокси распознаёт такие DC и ведёт их сразу в fallback на IP тестовых DC (прямой TCP / свой Cloudflare worker), минуя вебсокет и релеи. Работает сценарий основной + тестовый аккаунт в одном клиенте: продовый трафик идёт обычным маршрутом, тестовый — на тестовые DC соответственно.
Принудительный: добавлена опция force_test_dc (CLI-флаг --force-test-dc). Некоторые клиенты на базе библиотек отправляют в хендшейк номер тестового DC как обычный 1-3, и на стороне прокси он неотличим от продового.
Например, Telethon: тестовая среда у него настраивается через session.set_dc(2, '149.154.167.40', 443), и в байты 60-61 заголовка уходит session.dc_id как есть, без сдвига (MTProxyIO.init_header). Для таких клиентов опция будет принудительно направлять весь трафик прокси сразу на тестовые DC. По умолчанию выключена.
* Продовые аккаунты через прокси с этой опцией работать не будут.
Изменения
proxy/utils.py — добавлена таблица DC_TEST_IPS
proxy/bridge.py, proxy/tg_ws_proxy.py — маршрутизация: автодетект dc >= 10000, выбор таблицы IP, отключение продовых CF релеев для тестового трафика
proxy/config.py, CLI-флаг --force-test-dc
чекбокс в настройках трея (Windows/Linux/macOS) + переводы
документация: docs/TestDc.md
Проверка
Telegram Desktop с продовым и тестовым аккаунтами одновременно через один прокси: тестовый аккаунт авторизуется (DC10001 test env -> direct fallback -> TCP fallback to 149.154.175.10:443), продовый работает как раньше
обычный продовый сценарий остался без изменений в поведении
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/1087
**Author:** [@itzme1on](https://github.com/itzme1on)
**Created:** 7/3/2026
**Status:** ✅ Merged
**Merged:** 7/7/2026
**Merged by:** [@Flowseal](https://github.com/Flowseal)
**Base:** `main` ← **Head:** `test-dc`
---
### 📝 Commits (9)
- [`422d29d`](https://github.com/Flowseal/tg-ws-proxy/commit/422d29d9d54fe189936982f0d0e8213833d15fa0) feat(proxy): route Telegram test environment traffic
- [`177c7c1`](https://github.com/Flowseal/tg-ws-proxy/commit/177c7c101130bab7d683e47c22a7f7454520597a) feat(proxy): route test DC traffic via WS front (`/apiws_test`)
- [`4891fb6`](https://github.com/Flowseal/tg-ws-proxy/commit/4891fb65d48fc6ad658d6319add59fa5dfb8f080) refactor(proxy): raw_dc naming, drop test DC from cfproxy
- [`503ee26`](https://github.com/Flowseal/tg-ws-proxy/commit/503ee2690502a2ca78e7b1d06e63a95fd7040f07) fix(ui): remove force_test_dc control from tray (CLI/config only)
- [`d6aef5d`](https://github.com/Flowseal/tg-ws-proxy/commit/d6aef5d04b6b72694846dc5386e4205de371510a) docs: trim TestDc.md
- [`b9549ed`](https://github.com/Flowseal/tg-ws-proxy/commit/b9549ed2fdba02f4f4fdaa247ce7677d32be641b) refactor(proxy): replace raw_dc with is_test_dc + in-place normalization
- [`b5fb239`](https://github.com/Flowseal/tg-ws-proxy/commit/b5fb2397613ece74080a13929c5422d51fba8486) fix(proxy): isolate test/prod in CF worker pool key
- [`b708ea4`](https://github.com/Flowseal/tg-ws-proxy/commit/b708ea4da8acf27f9800846e23e86d1408db748e) refactor(proxy): skip ws/worker pool for test DC
- [`ce6456d`](https://github.com/Flowseal/tg-ws-proxy/commit/ce6456d4656d979fff441ede8ed43730ad288ac6) Revert pool.py changes
### 📊 Changes
**13 files changed** (+73 additions, -17 deletions)
<details>
<summary>View changed files</summary>
📝 `docs/README.md` (+1 -0)
➕ `docs/TestDc.md` (+23 -0)
📝 `docs/TrayConfig.md` (+1 -0)
📝 `linux.py` (+2 -0)
📝 `macos.py` (+1 -0)
📝 `proxy/bridge.py` (+8 -7)
📝 `proxy/config.py` (+1 -0)
📝 `proxy/pool.py` (+1 -1)
📝 `proxy/tg_ws_proxy.py` (+22 -9)
📝 `proxy/utils.py` (+9 -0)
📝 `utils/default_config.py` (+1 -0)
📝 `utils/tray_common.py` (+1 -0)
📝 `windows.py` (+2 -0)
</details>
### 📄 Description
## Проблема
Прокси не умеет работать с тестовой средой Telegram: все таблицы IP — продовые, а у тестовых DC нет вебсокет фронта (`kws{dc}.web.telegram.org`). Клиент в тестовом режиме уходил на продовый DC и не проходил авторизацию.
## Решение
Два механизма:
- **Автоматический**: Telegram Desktop помечает тестовые DC сдвигом +10000 (10001-10003). Прокси распознаёт такие DC и ведёт их сразу в fallback на IP тестовых DC (прямой TCP / свой Cloudflare worker), минуя вебсокет и релеи. Работает сценарий `основной + тестовый аккаунт в одном клиенте`: продовый трафик идёт обычным маршрутом, тестовый — на тестовые DC соответственно.
- **Принудительный**: добавлена опция `force_test_dc` (CLI-флаг `--force-test-dc`). Некоторые клиенты на базе библиотек отправляют в хендшейк номер тестового DC как обычный 1-3, и на стороне прокси он неотличим от продового.
Например, Telethon: тестовая среда у него настраивается через `session.set_dc(2, '149.154.167.40', 443)`, и в байты 60-61 заголовка уходит `session.dc_id` как есть, без сдвига ([`MTProxyIO.init_header`](https://codeberg.org/Lonami/Telethon/src/commit/076beb43b95479a5a2aba0871ae430d95e991778/telethon/network/connection/tcpmtproxy.py#L71)). Для таких клиентов опция будет принудительно направлять весь трафик прокси сразу на тестовые DC. По умолчанию выключена.
\* _Продовые аккаунты через прокси с этой опцией работать не будут._
## Изменения
- `proxy/utils.py` — добавлена таблица `DC_TEST_IPS`
- `proxy/bridge.py`, `proxy/tg_ws_proxy.py` — маршрутизация: автодетект `dc >= 10000`, выбор таблицы IP, отключение продовых CF релеев для тестового трафика
- `proxy/config.py`, CLI-флаг `--force-test-dc`
- чекбокс в настройках трея (Windows/Linux/macOS) + переводы
- документация: `docs/TestDc.md`
## Проверка
- Telegram Desktop с продовым и тестовым аккаунтами одновременно через один прокси: тестовый аккаунт авторизуется (`DC10001 test env -> direct fallback -> TCP fallback to 149.154.175.10:443`), продовый работает как раньше
- обычный продовый сценарий остался без изменений в поведении
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot
changed title from [PR #1087] [MERGED] Поддержка тестового окружения Telegram (тестовые DC) to [PR #1087] Поддержка тестового окружения Telegram (тестовые DC)2026-07-20 04:11:44 +03:00
mirror-bot
changed title from [PR #1087] Поддержка тестового окружения Telegram (тестовые DC) to [PR #1087] [MERGED] Поддержка тестового окружения Telegram (тестовые DC)2026-07-20 23:15:10 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/1087
Author: @itzme1on
Created: 7/3/2026
Status: ✅ Merged
Merged: 7/7/2026
Merged by: @Flowseal
Base:
main← Head:test-dc📝 Commits (9)
422d29dfeat(proxy): route Telegram test environment traffic177c7c1feat(proxy): route test DC traffic via WS front (/apiws_test)4891fb6refactor(proxy): raw_dc naming, drop test DC from cfproxy503ee26fix(ui): remove force_test_dc control from tray (CLI/config only)d6aef5ddocs: trim TestDc.mdb9549edrefactor(proxy): replace raw_dc with is_test_dc + in-place normalizationb5fb239fix(proxy): isolate test/prod in CF worker pool keyb708ea4refactor(proxy): skip ws/worker pool for test DCce6456dRevert pool.py changes📊 Changes
13 files changed (+73 additions, -17 deletions)
View changed files
📝
docs/README.md(+1 -0)➕
docs/TestDc.md(+23 -0)📝
docs/TrayConfig.md(+1 -0)📝
linux.py(+2 -0)📝
macos.py(+1 -0)📝
proxy/bridge.py(+8 -7)📝
proxy/config.py(+1 -0)📝
proxy/pool.py(+1 -1)📝
proxy/tg_ws_proxy.py(+22 -9)📝
proxy/utils.py(+9 -0)📝
utils/default_config.py(+1 -0)📝
utils/tray_common.py(+1 -0)📝
windows.py(+2 -0)📄 Description
Проблема
Прокси не умеет работать с тестовой средой Telegram: все таблицы IP — продовые, а у тестовых DC нет вебсокет фронта (
kws{dc}.web.telegram.org). Клиент в тестовом режиме уходил на продовый DC и не проходил авторизацию.Решение
Два механизма:
Автоматический: Telegram Desktop помечает тестовые DC сдвигом +10000 (10001-10003). Прокси распознаёт такие DC и ведёт их сразу в fallback на IP тестовых DC (прямой TCP / свой Cloudflare worker), минуя вебсокет и релеи. Работает сценарий
основной + тестовый аккаунт в одном клиенте: продовый трафик идёт обычным маршрутом, тестовый — на тестовые DC соответственно.Принудительный: добавлена опция
force_test_dc(CLI-флаг--force-test-dc). Некоторые клиенты на базе библиотек отправляют в хендшейк номер тестового DC как обычный 1-3, и на стороне прокси он неотличим от продового.Например, Telethon: тестовая среда у него настраивается через
session.set_dc(2, '149.154.167.40', 443), и в байты 60-61 заголовка уходитsession.dc_idкак есть, без сдвига (MTProxyIO.init_header). Для таких клиентов опция будет принудительно направлять весь трафик прокси сразу на тестовые DC. По умолчанию выключена.* Продовые аккаунты через прокси с этой опцией работать не будут.
Изменения
proxy/utils.py— добавлена таблицаDC_TEST_IPSproxy/bridge.py,proxy/tg_ws_proxy.py— маршрутизация: автодетектdc >= 10000, выбор таблицы IP, отключение продовых CF релеев для тестового трафикаproxy/config.py, CLI-флаг--force-test-dcdocs/TestDc.mdПроверка
DC10001 test env -> direct fallback -> TCP fallback to 149.154.175.10:443), продовый работает как раньше🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #1087] [MERGED] Поддержка тестового окружения Telegram (тестовые DC)to [PR #1087] Поддержка тестового окружения Telegram (тестовые DC)[PR #1087] Поддержка тестового окружения Telegram (тестовые DC)to [PR #1087] [MERGED] Поддержка тестового окружения Telegram (тестовые DC)