MTProxy 的 Docker 部署方式

Telegram logo

本文访问密码为 tg 的小写全称

介绍

由于众所周知的原因,体验极佳的加密 IM 软件 Telegram 在国内是无法正常使用的。解决方式之一自然是打开 SS 或 V2Ray 等代理软件。在电脑上通过 http 代理能很容易地实现按需跨墙,但在移动端就不太方便了,即使设置了 PAC 或 app 白名单,代理应用的后台耗电仍是一个重要的负面问题。这在一定程度上影响了 TG 作为 IM 的及时性体验。1

Telegram 为了对抗网络封锁,开发了 MTProxy 专用代理。这种代理方式使用了 TG 团队自己设计的加密协议 MTProto,并且已在全平台的 TG 客户端中内置。这就意味着我们只需要相应的代理地址和密钥,就可以不借助其他外部工具直接使用 TG。

当然,首先需要一台境外的服务器,然后在其上部署 MTProxy 服务端。

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 built. This includes support of multiple secrets, support of promoted channels, etc.

以上是 9seconds/mtg 仓库对多种不同版本的 MTProxy 代理服务端软件的解释。

部署的最便捷方式是直接使用 Docker 镜像。Telegram 官方提供的 Docker 镜像 telegrammessenger/proxy 似乎已经 outdated 了2(用官方镜像搭建可以参考这里),因此这里我们采用 9seconds/mtg 用 golang 实现的版本,据 README 描述,其优势如下:

  • Lightweight It has to consume as few 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.
  • A single secret I think that multiple secrets solve no problems and just complexify software. I also believe that in the case of throwout proxies, this feature is a useless luxury.
  • Minimum docker image size Official image is less than 3.5 megabytes. Literally.
  • No management WebUI This is an implementation of a simple lightweight proxy. I won’t do that.

部署过程

首先使用 /dev/urandom 工具生成一个随机的 32 位 secret:

1
head -c 16 /dev/urandom | xxd -ps

然后使用这个 secret 运行镜像即可:

1
docker run --name mtgbase --restart=unless-stopped -p 31233:3128 -d nineseconds/mtg:latest dd014ceb97a911040735632b1c12ab80ef

上面的命令中,31233 可以替换成自己想使用的实际端口;最后的密钥应当替换成自己生成的。

为了进一步提高安全性(防止被定向检测进而被封),MTProxy 还有一个所谓的 Random padding 的安全混淆模式功能:

Due to some ISPs detecting MTProxy by packet sizes, random padding is added to packets if such mode is enabled.

It’s only enabled for clients which request it.

Add dd prefix to secret (cafe...babe => ddcafe...babe) to enable this mode on client side.

也就是说,在 run docker 镜像的时候在密钥前加 dd 即可开启此功能(上面的命令就启用了这个功能)。

服务端部署完毕后,直接在 TG 客户端添加 MTPROTO 代理,填写服务器地址(带端口号)和密钥就能连接代理了。

接下来你还可以在 TG 上关注 @MTProxybot 官方 bot,按照提示注册自己的代理,获得格式为 tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET 的代理直连链接。在 TG 客户端中直接点击这个连接即可方便地连上你的代理服务器,便于分享给他人。

此外,注册后还能为自己的代理添加推广,形式是一连上代理就会自动置顶一个自己指定的广告频道。使用 9seconds/mtg 的镜像实现此功能需要在运行镜像时额外指定 adtag 参数。

公益代理分享

经实际测试,在亚马逊 Lightsail 服务器部署后,密钥不加 dd 几小时就会被检测到;加了 dd 挺的时间比较长个鬼,短则一日,长则一周,必被检测到。检测到后,一般不会直接墙 ip,只会墙掉代理所用的端口。然而三天两头换端口也过于麻烦和浪费了。与其使用更复杂的加密手段和墙玩猫捉老鼠,不如直接使用一些免费的公益的 MTGProxy 代理。虽然它们存活的时间尚未可知,但好在数量多,失效了换一个就是了。

下面这些 TG 频道常年更新分享 MTGProxy 代理链接,实测有很多可用的,速度还不错:


参考链接

-------------本文结束    感谢您的阅读-------------
0%