本文编写于 737 天前,最后修改于 734 天前,其中某些信息可能已经过时。

前言

本文的MTP'roxy均简写为MTP,小飞机均写为$$R。

MTP是Telegram官方提供的一种代理协议,可以方便地让你在部分地区畅聊TG。
近来因为有这个需求,便想自己整一个,方案很明确,国内一台机器连接$$R然后mtp的上流走socks5再连接使用。

  • 一来这样不用天天换端口/地址
  • 二来我可以灵活更换外网服务器
  • 最为重要的一点就是可以省钱(哭了
​‌‌‌​‌​​​​​‌‌​‌​‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​​‌‌​​​‌​​‌‌​‌​‍​‌‌‌‌‌‌​​​​‌​‌​‌‍‌​‌​‌​‌‌‍‌​​‌​‌‌​‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​‌‌‌‌​‌‍‌​​‌​​‌‌‍‌​​‌​​​​‍‌​​‌‌​​​‍​​‌‌​‌​​​​​‌​​‌‍​‌​‌‌‌​‌​‌‌​‌‌​‍​‌‌‌​​​​‌​​​‌​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍​​‌‌​‌‌‌‌​‌​​‌​‍​‌​​​​‌​​​​​‌​‌‍​‌‌​​​‌‌‌‌‌‌‌‌‌‍​‌‌​​​‌‌‌​‌​‌​‌‍​​‌‌​‌​‌‌​‌​​​​‍​​‌‌‌​​‌‌‌‌‌‌‌​‍​‌‌​​​‌‌‌​‌​​‌​‍​‌‌‌​​​​‌​​‌​​‌‌‍​​​‌​​‌​‌‌‌‌​‌‌‍‌​‌‌​​‌​‍‌​‌​‌​‌‌‍‌​‌​‌‌‌‌‍‌​​​​‌‌‌‍‌​​​​‌‌‌‍‌​​​​‌‌‌‍‌​​​​‌‌​‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​‌​​​​‍‌​​​‌​‌​‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​‌​‌‌​‍‌​​‌​​‌​‍‌​​‌‌​‌​‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​​‌‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌​‌‍‌‌​​‌​​‌‍​​‌‌‌​‌‌​‌‌‌‌‌‌‍​‌​‌‌‌​​‌‌​​‌‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​‌‍‌​​​‌‌‌​‍‌‌​‌​​​‌‍‌​​‌‌‌​​‍‌​​‌​​​‌‍‌​‌​​​‌‌‍‌​​‌‌​‌​‍‌​​​​‌‌‌‍‌​​​‌‌‌‌‍‌​‌​​​‌‌‍‌​​‌​​‌​‍‌​​‌‌‌‌​‍‌​​‌​‌​​‍‌​​‌‌​‌​‍‌​‌​​​​​‍‌​​‌​​‌​‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

一开始看了看流传最为广泛的MTG但是很明显作者不太想支持...
而后搜寻到一些其他办法,比如用Vxray转发和$$R本身转接使用;这些办法能用,但是它们都不支持混淆加密以及最新的TLS加密。不做任何措施的后果就是马上死翘翘,后可能带黑衣人上门套餐...

开始搭建

找到了这个项目,由Python所写,并且发现程序本身支持socks5!!
https://github.com/alexbers/mtprotoproxy/search?q=socks&unscoped_q=socks


并且本身支持混淆与TLS加密方式。
找一个目录执行
git clone -b stable https://github.com/alexbers/mtprotoproxy.git; cd mtprotoproxy
随后编辑config.py文件

PORT = 443 #MTP端口号

# name -> secret (32 hex chars)
# 生成32位hex的字符串作为加密密钥,程序本身支持多组密钥,暂时没想到用途
USERS = {
    "tg":  "00000000000000000000000000000001",
    # "tg2": "0123456789abcdef0123456789abcdef",
}

# 是否仅接受混淆加密的连接
# 有可能在老版本客户端上无法工作
SECURE_ONLY = False

# 是否仅支持TLS加密,可以伪装成正常的HTTPS请求
# 有可能在老版本客户端上无法工作
TLS_ONLY = False

# TLS伪装的域名
# 使用一个已存在且支持TLS的域名即可
TLS_DOMAIN = "github.com"

# MTP的TAG 具体 @MTProxybot
# AD_TAG = "3c09c680b76ee91a4c25ad51f742267d"
#两个缓冲区,大内存机器可以直接用,增加连接效率,小机建议删掉两个BUFSIZE
TO_CLT_BUFSIZE = 524288
TO_TG_BUFSIZE = 524288
#SOCKS5的端口和地址
SOCKS5_PORT = 1080
SOCKS5_HOST = "127.0.0.1"

然后安装几个模块,如果你之前没安装过的话:
pip install SocksiPy
pip install uvloop
然后就可以执行
python mtprotoproxy.py config.py
运行了,此时他会输出几个链接,根据你的配置情况会输出1-3个。
最长的一个便是TLS加密,dd前缀的是混淆,剩下一个便是无加密的。
TIPS 运行之前记得启动$$R,确保节点可用。如果无法执行建议更换Python3。
使用愉快~