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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sergey Arkhipov 18e46241f8
Merge pull request #25 from 9seconds/stats
hace 7 años
client Add intermediate secure wrapper hace 7 años
config Fix linting hace 7 años
mtproto Propagate random padding to proxy requests hace 7 años
ntp Add support of ntp time verification hace 7 años
obfuscated2 Remove frame pool for obfuscated2 frames hace 7 años
proxy Fix small lint problem hace 7 años
scripts Add Makefile hace 8 años
stats Simplify stats hace 7 años
telegram Fix lint errors hace 7 años
utils Fix lint errors hace 7 años
wrappers Small fix hace 7 años
.gitignore Correct list of supported platforms on cross compilation hace 7 años
.gometalinter.json Fix lint issues hace 8 años
.travis.yml Add travis yaml hace 8 años
Dockerfile Use upx for image build hace 7 años
Gopkg.lock Add support of ntp time verification hace 7 años
Gopkg.toml Add support of ntp time verification hace 7 años
LICENSE Initial commit hace 8 años
Makefile Correct list of supported platforms on cross compilation hace 7 años
README.md Update README hace 7 años
main.go Add support of ntp time verification hace 7 años
run-mtg.sh Update README hace 7 años

README.md

mtg

Bullshit-free MTPROTO proxy for Telegram

Build Status Docker Build Status

Rationale

There are several available proxies for Telegram MTPROTO available. Here are the most notable:

Almost all of them follow the way how official proxy was build. This includes support of multiple secrets, support of promoted channels etc.

mtg is an implementation in golang which is intended to be:

  • Lightweight It has to consume as less resources as possible but not by losing maintainability.
  • Easily deployable I strongly believe that Telegram proxies should follow the way of ShadowSocks: promoted channels is a strange way of doing business I suppose. I think the only viable way is to have a proxy with minimum configuration which should work everywhere.
  • Single secret I think that multiple secrets solves no problems and just complexify software. I also believe that in case of throwout proxies, this feature is useless luxury.
  • Minimum docker image size Official image is less than 2.5 megabytes. Literally.
  • No management WebUI This is an implementation of simple lightweight proxy. I won’t do that.

This proxy supports 2 modes of work: direct connection to Telegram and promoted channel mode. If you do not need promoted channels, I would recommend you to go with direct mode: this is way more robust.

To run proxy in direct mode, all you need to do is just provide a secret. If you do not provide ADTag as a second parameter, promoted channels mode won’t be activated.

To get promoted channel, please contact @MTProxybot and provide generated adtag as a second parameter.

How to build

$ make

If you want to build for another platform:

$ make crosscompile

If you want to build Docker image (called mtg):

$ make docker

Docker image

$ docker pull nineseconds/mtg

Configuration

Basically, to run this tool you need to configure as less as possible.

First, you need to generate a secret:

$ openssl rand -hex 16

or

$ head -c 512 /dev/urandom | md5sum | cut -f 1 -d ' '

Secure mode

If you want to support new secure mode, please prepend dd to the secret. For example, secret cf18fa8ea0267057e2c61a5f7322a8e7 should be ddcf18fa8ea0267057e2c61a5f7322a8e7. But pay attention that some old clients won’t support this mode. If this is not your case, I would suggest to go with this mode.

Oneliners to generate such secrets:

$ echo dd$(openssl rand -hex 16)

or

$ echo dd$(head -c 512 /dev/urandom | md5sum | cut -f 1 -d ' ')

How to run the tool

Now run the tool:

$ mtg <secret>

How to run the tool with ADTag:

$ mtg <secret> <adtag>

This tool will listen on port 3128 by default with the given secret.

One-line runner

$ docker run --name mtg --restart=unless-stopped -p 3128:3128 -p 3129:3129 -d nineseconds/mtg $(openssl rand -hex 16)

or in secret mode:

$ docker run --name mtg --restart=unless-stopped -p 3128:3128 -p 3129:3129 -d nineseconds/mtg dd$(openssl rand -hex 16)

You will have this tool up and running on port 3128. Now curl localhost:3129 to get tg:// links or do docker logs mtg. Also, port 3129 will show you some statistics if you are interested in.

Also, you can use run-mtg.sh script