Раздельная маршрутизация медиа- и обычного трафика по DC. Синтаксис --dc-ip расширен: суффикс m у номера DC задаёт IP только для медиа, например --dc-ip 2m:149.154.167.220.
parse_dc_ip_list теперь возвращает кортеж (dc_redirects, media_redirects); добавлена функция resolve_dc_ip(...), централизующая выбор адреса с учётом is_media.
resolve_dc_ip используется в трёх местах: клиентский путь, прогрев WS-пула (pool.warmup) и стартовая диагностика. Добавлено поле media_redirects в ProxyConfig и проброс в трее (tray_common.apply_proxy_config).
Зачем
Выбор IP раньше шёл только по номеру DC (dc_redirects[dc]), флаг is_media на адрес не влиял. Медиа- и обычный трафик одного DC принудительно шли на один адрес — именно поэтому в документации CfWorker приходится «сливать» всё через единственную запись 4:149.154.167.220, чтобы заработала загрузка медиа.
Теперь для медиа можно задать отдельный адрес, а при отсутствии медиа-записи происходит фолбэк на обычный IP этого DC — обратная совместимость полная.
Запустить прокси, подключить Telegram Desktop: в логе медиа-сессии идут отдельной веткой (DC2 media -> wss://kws2-1.web.telegram.org/apiws), обычные — своей (DC2 -> wss://kws2...).
Пример раздельной маршрутизации: --dc-ip 2:IP_A --dc-ip 2m:IP_B → обычный трафик DC2 идёт на IP_A, медиа — на IP_B.
Локально проверено юнит-тестами: разбор обычных и медиа-записей, медиа-переопределение, фолбэк на обычный IP, неизвестный DC.
Примечание: этот PR и PR с поддержкой IPv6 в --dc-ip оба правят parse_dc_ip_list. Какой будет смержен вторым — потребует тривиального ребейза одной строки (валидация IP). Готов поправить.
🔄 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/923
**Author:** [@f4rceful](https://github.com/f4rceful)
**Created:** 5/31/2026
**Status:** ❌ Closed
**Base:** `main` ← **Head:** `fix/media-aware-dc-ip`
---
### 📝 Commits (1)
- [`b7b917b`](https://github.com/Flowseal/tg-ws-proxy/commit/b7b917b938d50891ca9d41d7648ee8077524b58b) fix: media-aware DC IP resolution
### 📊 Changes
**4 files changed** (+50 additions, -16 deletions)
<details>
<summary>View changed files</summary>
📝 `proxy/config.py` (+23 -4)
📝 `proxy/pool.py` (+9 -5)
📝 `proxy/tg_ws_proxy.py` (+16 -6)
📝 `utils/tray_common.py` (+2 -1)
</details>
### 📄 Description
## Что сделано
- Раздельная маршрутизация медиа- и обычного трафика по DC. Синтаксис `--dc-ip` расширен: суффикс `m` у номера DC задаёт IP только для медиа, например `--dc-ip 2m:149.154.167.220`.
- `parse_dc_ip_list` теперь возвращает кортеж `(dc_redirects, media_redirects)`; добавлена функция `resolve_dc_ip(...)`, централизующая выбор адреса с учётом `is_media`.
- `resolve_dc_ip` используется в трёх местах: клиентский путь, прогрев WS-пула (`pool.warmup`) и стартовая диагностика. Добавлено поле `media_redirects` в `ProxyConfig` и проброс в трее (`tray_common.apply_proxy_config`).
## Зачем
Выбор IP раньше шёл только по номеру DC (`dc_redirects[dc]`), флаг `is_media` на адрес не влиял. Медиа- и обычный трафик одного DC принудительно шли на один адрес — именно поэтому в документации CfWorker приходится «сливать» всё через единственную запись `4:149.154.167.220`, чтобы заработала загрузка медиа.
Теперь для медиа можно задать отдельный адрес, а при отсутствии медиа-записи происходит фолбэк на обычный IP этого DC — обратная совместимость полная.
## Как проверить
- `python -m ruff check proxy/config.py proxy/pool.py proxy/tg_ws_proxy.py utils/tray_common.py` — без замечаний.
- Запустить прокси, подключить Telegram Desktop: в логе медиа-сессии идут отдельной веткой (`DC2 media -> wss://kws2-1.web.telegram.org/apiws`), обычные — своей (`DC2 -> wss://kws2...`).
- Пример раздельной маршрутизации: `--dc-ip 2:IP_A --dc-ip 2m:IP_B` → обычный трафик DC2 идёт на IP_A, медиа — на IP_B.
- Локально проверено юнит-тестами: разбор обычных и медиа-записей, медиа-переопределение, фолбэк на обычный IP, неизвестный DC.
---
> Примечание: этот PR и PR с поддержкой IPv6 в --dc-ip оба правят parse_dc_ip_list. Какой будет смержен вторым — потребует тривиального ребейза одной строки (валидация IP). Готов поправить.
---
<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 #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика to [PR #923] fix: выбор IP датацентра с учётом медиа-трафика2026-07-20 04:11:04 +03:00
mirror-bot
changed title from [PR #923] fix: выбор IP датацентра с учётом медиа-трафика to [PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика2026-07-20 23:14:56 +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/923
Author: @f4rceful
Created: 5/31/2026
Status: ❌ Closed
Base:
main← Head:fix/media-aware-dc-ip📝 Commits (1)
b7b917bfix: media-aware DC IP resolution📊 Changes
4 files changed (+50 additions, -16 deletions)
View changed files
📝
proxy/config.py(+23 -4)📝
proxy/pool.py(+9 -5)📝
proxy/tg_ws_proxy.py(+16 -6)📝
utils/tray_common.py(+2 -1)📄 Description
## Что сделано
--dc-ipрасширен: суффиксmу номера DC задаёт IP только для медиа, например--dc-ip 2m:149.154.167.220.parse_dc_ip_listтеперь возвращает кортеж(dc_redirects, media_redirects); добавлена функцияresolve_dc_ip(...), централизующая выбор адреса с учётомis_media.resolve_dc_ipиспользуется в трёх местах: клиентский путь, прогрев WS-пула (pool.warmup) и стартовая диагностика. Добавлено полеmedia_redirectsвProxyConfigи проброс в трее (tray_common.apply_proxy_config).Зачем
Выбор IP раньше шёл только по номеру DC (
dc_redirects[dc]), флагis_mediaна адрес не влиял. Медиа- и обычный трафик одного DC принудительно шли на один адрес — именно поэтому в документации CfWorker приходится «сливать» всё через единственную запись4:149.154.167.220, чтобы заработала загрузка медиа.Теперь для медиа можно задать отдельный адрес, а при отсутствии медиа-записи происходит фолбэк на обычный IP этого DC — обратная совместимость полная.
Как проверить
python -m ruff check proxy/config.py proxy/pool.py proxy/tg_ws_proxy.py utils/tray_common.py— без замечаний.DC2 media -> wss://kws2-1.web.telegram.org/apiws), обычные — своей (DC2 -> wss://kws2...).--dc-ip 2:IP_A --dc-ip 2m:IP_B→ обычный трафик DC2 идёт на IP_A, медиа — на IP_B.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафикаto [PR #923] fix: выбор IP датацентра с учётом медиа-трафика[PR #923] fix: выбор IP датацентра с учётом медиа-трафикаto [PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика