Телеграм научился притворяться обычным сайтом. Для этого он использует HTTPS как внешний транспорт, а внутри relay передаёт Telegram-трафик в обычный MTProxy.
Давайте настроим :)
1. Регистрируем домен и связываем с сервером: https://proxy.example.com
2. Получаем исходный код:
cd /opt
git clone https://github.com/telegramdesktop/tproxy-server.git
cd /opt/tproxy-server
3. Создаём обычный публичный сайт
Создаём:
mkdir -p /opt/tproxy-site
nano /opt/tproxy-site/index.html
Содержимое:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>
Проверяем:
ls -la /opt/tproxy-site
Обязателен читаемый index.html. Официальный installer сам скопирует сайт в /srv/tproxy-site и выставит владельца root:root.
4. Определяем параметры установки:
HOSTNAME="proxy.example.com"
EMAIL="admin@example.com"
BASE_PATH="krztwamxs6qzpmjs" (если не зафиксировать то старые клиентские ссылки непригодными для нового адреса)
5. Генерируем MTProxy secret
Для новой установки сгенерировать новый секрет:
openssl rand -hex 16
Получим строку вида:
0123456789abcdef0123456789abcdef
6. Исправляем проблему install.sh с umask
На текущем у меня возникла проблема с upstream install.sh где используется:
umask 077
Из-за этого тест конфигурации может некорректно создать файл с правами 0400 вместо ожидаемых 0444, и установка завершается на:
TestLoadAcceptsSystemdCredentialReadPermissions
Такая проблема всё ещё присутствует в текущем upstream issue/PR.
Перед установкой создаём резервную копию:
cp deploy/install.sh deploy/install.sh.backup
cp deploy/install-mtproxy.sh deploy/install-mtproxy.sh.backup
cp internal/config/config_test.go internal/config/config_test.go.backup
Исправляем тест:
python3 - <<'PY'
from pathlib import Path
p = Path("internal/config/config_test.go")
s = p.read_text()
needle = 'if err := os.WriteFile(profiles, []byte(content), 0444); err != nil {'
pos = s.find(needle)
if pos == -1:
raise SystemExit("Не найден os.WriteFile(..., 0444)")
end = s.find("\n\t}", pos)
if end == -1:
raise SystemExit("Не найден конец блока os.WriteFile")
insert_pos = end + len("\n\t}")
insert = '''
\tif err := os.Chmod(profiles, 0444); err != nil {
\t\tt.Fatal(err)
\t}'''
if "os.Chmod(profiles, 0444)" in s:
print("Chmod уже присутствует — ничего менять не нужно")
else:
s = s[:insert_pos] + insert + s[insert_pos:]
p.write_text(s)
print("config_test.go исправлен")
PY
Форматируем:
gofmt -w internal/config/config_test.go
Проверяем:
grep -n -A8 -B3 "os.Chmod(profiles, 0444)" \
internal/config/config_test.go
7. Запускаем официальный installer
Секрет установщик запросит интерактивно:
sudo ./deploy/install.sh \
--hostname "$HOSTNAME" \
--email "$EMAIL" \
--base-path "$BASE_PATH" \
--site-dir /opt/tproxy-site
После запуска появится:
WEB proxy secret (32 hex, optionally prefixed with dd):
Вставляем ранее сгенерированный:
<MTProxy_SECRET>
#network #proxy #telegram
