Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
Alexey Dolotov a853edcfda fix: move [secrets] after global keys in config examples 1ヶ月前
.github/workflows Run release build 1ヶ月前
antireplay Update to the latest golangci-lint 2ヶ月前
benchmarks Fix CI: benchmark lint exclusions and data race in doppel test 1ヶ月前
essentials Add validation of telegram connectivity 1ヶ月前
events fix: prevent index out of range panic on 32-bit platforms 1ヶ月前
internal Add multi-secret support and per-user stats API 1ヶ月前
ipblocklist Rewrite to WaitGroup.Go 2ヶ月前
logger More idioms related to go 1.26 2ヶ月前
mtglib Merge remote-tracking branch 'upstream/master' 1ヶ月前
network fix: ensure network.Dial and MakeHTTPClient use socks5 proxy 1ヶ月前
stats More idioms related to go 1.26 2ヶ月前
.codecov.yml Add prefix for codecov 5年前
.dockerignore Update ignores 5年前
.gitattributes Add PGO 1ヶ月前
.gitignore Update fork build config and add upstream sync 1ヶ月前
.golangci.toml Fix golangci config: use v2 linters.exclusions.rules syntax 1ヶ月前
.goreleaser.yml Update fork build config and add upstream sync 1ヶ月前
.mise.toml Fix build with profiling 1ヶ月前
BEST_PRACTICES.md Update docs 1ヶ月前
Dockerfile Allow using directory bind mounts for a docker container 1ヶ月前
LICENSE Initial commit 8年前
README.md fix: move [secrets] after global keys in config examples 1ヶ月前
SECURITY.md Create SECURITY.md 5年前
buildinfo.go Update dependencies 3年前
escapecheck Merge remote-tracking branch 'upstream/master' 1ヶ月前
example.config.toml fix: move [secrets] after global keys in config examples 1ヶ月前
go.mod Update depndencies 1ヶ月前
go.sum Update depndencies 1ヶ月前
main.go Add PGO 1ヶ月前
mise.lock Update linter 1ヶ月前
run_profile.go Refactoring 1ヶ月前
run_profile_tag_prof.go Fix build with profiling 1ヶ月前

README.md

mtg-multi

Fork of 9seconds/mtg with multi-secret support and per-user stats.

English | Русский


What’s different

Multiple secrets. Upstream mtg allows only one secret per instance. mtg-multi lets you define named secrets in the config — one per user. All secrets must share the same hostname.

[secrets]
alice = "ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d"
bob   = "ee0123456789abcdef0123456789abcd9573746f726167652e676f6f676c65617069732e636f6d"

Stats API. A lightweight HTTP endpoint that shows live per-user traffic.

api-bind-to = "127.0.0.1:9090"
GET /stats
{
  "started_at": "2026-03-29T10:30:00Z",
  "uptime_seconds": 3600,
  "total_connections": 15,
  "users": {
    "alice": {
      "connections": 8,
      "bytes_in": 1048576,
      "bytes_out": 2097152,
      "last_seen": "2026-03-29T11:25:30Z"
    }
  }
}

Public IP override. Useful when auto-detection via ifconfig.co is unavailable.

public-ipv4 = "1.2.3.4"
public-ipv6 = "2001:db8::1"

Everything else — domain fronting, doppelganger, proxy chaining, blocklists, metrics — works exactly as in upstream. See the upstream README for details.

Quick start

Download a binary from Releases or build from source:

git clone https://github.com/dolonet/mtg-multi.git
cd mtg-multi
mise install && mise tasks run build

Generate secrets:

mtg-multi generate-secret --hex storage.googleapis.com

Minimal config:

bind-to = "0.0.0.0:443"
api-bind-to = "127.0.0.1:9090"

# [secrets] must be the last section in the global scope —
# in TOML, all keys after a [section] become part of that table.
[secrets]
alice = "ee..."
bob   = "ee..."

Run:

mtg-multi run /etc/mtg/config.toml

See example.config.toml for all available options.


Чем отличается

Несколько секретов. В оригинальном mtg — один секрет на инстанс. mtg-multi позволяет задать именованные секреты в конфиге, по одному на пользователя. Все секреты должны использовать один и тот же hostname.

[secrets]
alice = "ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d"
bob   = "ee0123456789abcdef0123456789abcd9573746f726167652e676f6f676c65617069732e636f6d"

Stats API. HTTP-эндпоинт с live-статистикой трафика по пользователям.

api-bind-to = "127.0.0.1:9090"
GET /stats
{
  "started_at": "2026-03-29T10:30:00Z",
  "uptime_seconds": 3600,
  "total_connections": 15,
  "users": {
    "alice": {
      "connections": 8,
      "bytes_in": 1048576,
      "bytes_out": 2097152,
      "last_seen": "2026-03-29T11:25:30Z"
    }
  }
}

Ручное указание публичного IP. Для случаев, когда ifconfig.co недоступен с сервера.

public-ipv4 = "1.2.3.4"
public-ipv6 = "2001:db8::1"

Всё остальное — domain fronting, doppelganger, цепочки прокси, блоклисты, метрики — работает как в оригинале. Подробности в README upstream.

Быстрый старт

Скачайте бинарник из Releases или соберите из исходников:

git clone https://github.com/dolonet/mtg-multi.git
cd mtg-multi
mise install && mise tasks run build

Генерация секрета:

mtg-multi generate-secret --hex storage.googleapis.com

Минимальный конфиг:

bind-to = "0.0.0.0:443"
api-bind-to = "127.0.0.1:9090"

# [secrets] должен быть последней секцией в глобальном scope —
# в TOML все ключи после [section] становятся частью этой таблицы.
[secrets]
alice = "ee..."
bob   = "ee..."

Запуск:

mtg-multi run /etc/mtg/config.toml

Все доступные опции — в example.config.toml.