Этап 6 tproxy: конкретные шаги (nft 8081 для bigbox 178.176.197.2 + job prometheus), опыт в EXPERIENCE, README

This commit is contained in:
kpa39l
2026-08-31 05:20:58 +00:00
parent 1aa2c5c4b1
commit 7437864b50
3 changed files with 92 additions and 14 deletions
+56 -1
View File
@@ -124,7 +124,62 @@ grafana.nixg.ru {
- В логах caddy много ошибок renew для старых доменов — они имеют
уже выпущенные сертификаты в caddy_data, работает всё.
## Проверка результата
## Опыт: tproxy-server (WEB Proxy для Telegram Desktop) на vps03
> Дата: 2026-08-31
> Ситуация: развернули telegramdesktop/tproxy-server на vps03 (77.67.89.154,
> Debian 13): Caddy → tproxy-server:8080 → MTProxy:2398.
> Домен vps03.nixg.ru (HTTPS), порты 80/443 открыты из интернета.
### A. Архитектура и порты
- Внешний вход: `https://vps03.nixg.ru:443` → Caddy → `127.0.0.1:8080` (tproxy-server)
→ `127.0.0.1:2398` (MTProxy).
- tproxy-server config: `/etc/tproxy-server/config.json` (600 root:tproxy).
- Профили/секреты: `/etc/tproxy-server/profiles.json` — массив профилей,
**можно несколько секретов** (max_profiles: 32 в config). systemd читает их
через `LoadCredential=profiles.json:/etc/tproxy-server/profiles.json`
(файл должен быть 600 root, иначе падает — тест
TestLoadAcceptsSystemdCredentialReadPermissions).
- Формат секрета: 16 байт = 32 hex (`openssl rand -hex 16`), либо 17 байт
с префиксом `dd` (fake-TLS-режим).
- Добавить секрет: дописать профиль в profiles.json, `chmod 600`, `chown root:tproxy`,
`systemctl restart tproxy-server` → в логе `profiles=N`, readyz 200.
- Отозвать секрет: убрать профиль из profiles.json + restart.
### B. Admin-эндпоинты (только loopback 127.0.0.1:8081)
| Эндпоинт | Ответ |
|---|---|
| /healthz | всегда `ok` 200 (процесс жив) |
| /readyz | 200 `ready` / 503 `backend unavailable` — TCP-проба ко ВСЕМ backend-профилям (у нас 127.0.0.1:2398) |
| /metrics | Prometheus-формат (text/plain version 0.0.4), 13 счётчиков |
Метрики (все с префиксом `tproxy_`): sessions_live, streams_live,
backend_dials_in_flight, pending_bytes, pending_items, sessions_created_total,
sessions_closed_total, streams_opened_total, streams_rejected_total,
backend_dial_failures_total, bytes_up_total, bytes_down_total, limit_hits_total.
Ключевые для алертов: `backend_dial_failures_total` (рост = бэкенд недоступен),
`limit_hits_total` (DDOS/перегруз), `sessions_live` (активность).
### C. Подключение к Prometheus (стек /opt/monitoring, bigbox)
- vps03 НЕ в WG (10.8.0.0/24 = vps01/bigbox/vps02), поэтому прямого доступа
к 8081 с bigbox нет. Prometheus в стеке — `network_mode: host` (видит внешние IP).
- План: nft-правило на vps03 (разрешить TCP 8081 с publIP bigbox 178.176.197.2),
job 'tproxy' в prometheus.yml, targets ['77.67.89.154:8081'].
- ВАЖНО: admin-эндпоинты слушают только loopback. Открывать наружу ТОЛЬКО
по источнику (ip saddr bigbox), не публиковать всем.
- readyz ходит ко ВСЕМ профилям: если добавить профиль с мёртвым бэкендом —
readyz станет 503 (фича, учтена при алертах).
### D. Грабли установки (уже в INSTALL_NOTES.md проекта tproxy-web)
- MTProxy-бинарь падал 203/EXEC: `chmod 755 /opt/MTProxy/objs/bin` + chown
root:mtproxy + chmod 750. (см. /opt/hermes/tproxy-web/INSTALL_NOTES.md)
- `go test ./...` флакал на TestLoadAcceptsSystemdCredentialReadPermissions
при запуске от root — обходится запуском тестов от не-root или пропуском.
```
# все три ноды отдают метрики: