Telegram MTProxy 三世代目教程
Telegram MTProxy
MTProxy 三世代目
FakeTLS,是将MTProto流被包装在标准HTTPS(第一条隧道协商消息)中,在该HTTPS中传输域(伪造)。在协商了MTProto协议-不使用Fake-TLS之后,流量便开始使用具有随机长度(dd-密钥)的常规MTProto协议。
现状和建议
到目前为止(2020 年 12月),因为防火墙的探测封锁,MTProto 协议已经迭代了三代,搭建MTProxy并配置使用最新的第三代 FakeTLS 模式:
- 9seconds / mtg (opens new window)(GO 语言实现)
- seriyps / mtproto_proxy (opens new window)(Erlang 实现)
- alexbers / mtprotoproxy (opens new window)(Python 实现)
- TelegramMessenger / MTProxy (opens new window)(Telegram 官方)
Telegram官方MTProxy搭建教程
SSH to your VPS;
On Debian/Ubuntu
apt install git curl build-essential libssl-dev zlib1g-dev
On CentOS/RHEL:
yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"
Clone the repo:
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
进行编译
执行make进行编译,生成的二进制文件在 objs/bin/mtproto-proxy
make && cd objs/bin
如果编译失败,可以执行make clean清理缓存,在目录下Makefile文件中的CFLAGS行最后添加 -fcommon ,重新进行编译步骤。
获取Telegram通信密匙
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
获取当前Telegram代理配置(官方建议每天更新此文件)
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
生成代理密匙
如果你没有安装head可以复制我以下所生成的,修改个别字符即可。
head -c 16 /dev/urandom | xxd -ps
head -c 16 /dev/urandom | xxd -ps
启动MTP服务端
./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
...其中:
nobody
是用户名。mtproto-proxy
呼吁setuid()
取消特权。443
是端口,客户端用于连接到代理。8888
是本地端口,可以使用它从中获取统计信息mtproto-proxy
。像wget localhost:8888/stats
。您只能通过环回获取此统计信息。<secret>
是在步骤3中生成的密钥-S <secret1> -S <secret2>
。您还可以设置多个密钥。proxy-secret
并proxy-multi.conf
在步骤1和2中获得。1
是工人的数量。如果拥有强大的服务器,则可以增加工作人员的数量。
也可以使用查看其他选项mtproto-proxy --help
。
生成具有以下架构的链接:(tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET
或让官方bot为您生成链接)。
使用Telegram上的@MTProxybot注册代理。
使用参数设置接收到的标签: -P <proxy tag>
配置TLS
此时你根据上述命令默认运行的是不带有tls功能的。
此时,修改启动命令:
./mtproto-proxy -u nobody -p 8888 -H 443 -S 127895d2ea56c3877f125c775be91fee --aes-pwd proxy-secret proxy-multi.conf -M 1 -D "www.centos.org"
其他参数不变,<secret>
修改为如下字符串
ee
+<secret>
+<domain>
的十六进制
可以通过Python生成
>>> print ("ee"+"127895d2ea56c3877f125c775be91fee"+"www.centos.org".encode().hex())
ee127895d2ea56c3877f125c775be91fee7777772e63656e746f732e6f7267
注意:这个<secret>只是客户端ee127895d2ea56c3877f125c775be91fee7777772e63656e746f732e6f7267拼接填写,服务端还是保持原始的密匙,即本文的:127895d2ea56c3877f125c775be91fee
写入常驻后台运行
cat > /home/MTProxy/objs/bin/run.sh <<EOF
#!/bin/bash
cd "$(dirname "$0")"
./mtproto-proxy -u nobody -p 8888 -H 443 -S 127895d2ea56c3877f125c775be91fee --aes-pwd proxy-secret proxy-multi.conf -M 1 -D "www.centos.org">/dev/null 2>&1 &
EOF
chmod +x /home/MTProxy/objs/bin/run.sh
写入开机启动
编辑 /etc/rc.local 加入启动脚本
/home/MTProxy/objs/bin/run.sh
开机启动无效,大多数原因是启动脚本没有执行权限,可赋值启动脚本权限进行修复。
chmod +x /etc/rc.local
chmod +x /etc/rc.d/rc.local
关于安全性
如果采用了tls,对于网路运营商而言,他并不能看到具体传输的数据内容,只可以分析出你的数据包是HTTPS。能获取的信息只有服务器IP地址、以及域名证书。
由于获取到的信息有限,你可以借此将你的服务器实现更深度的隐匿。
例如你使用谷歌云的服务器,代理域名设置为google.com。
使用亚马逊(aws)服务器,代理域名设置到aws.amazon.com。
使用DO的服务器,代理域名设置到digitalocean.com。
这样一来,你的IP地址、证书一致,对于其他人而言这就是一个正常的网站,无论是从正常访问还是探测的角度都很难识别出这是MTP代理服务器。