MTProxy+FakeTLS|Telegram稳定代理配置教程

  • A+
所属分类:Linux

MTProxy+FakeTLS|Telegram稳定代理配置教程

FakeTLS,是将MTProto流被包装在标准HTTPS(第一条隧道协商消息)中,在该HTTPS中传输域(伪造)。在协商了MTProto协议-不使用Fake-TLS之后,流量便开始使用具有随机长度(dd-密钥)的常规MTProto协议。

之前配置过MTP的中转教程,数据通过KCP封装,经过UDP传输,会相对比本文的方式稳定可靠。

如需参考:通过KCP中转实现MTP代理(UDP) | Telegram实现稳定代理

本文是通过官方前不久更新出的fake tls功能实现的数据伪装,比原本的mtp协议更稳定。

事实上MTP官方程序原本就有两种代理方式一种是,无混淆;另外一种是增加随机字串,以防止数据包被ISP检测。

目前用到的就是第三种实现伪装tls传输数据,如果你还使用的旧版本的MTP代理,是没有这个功能的,建议重新编译后使用。

 

安装教程

On Debian/Ubuntu

[/crayon]

On CentOS/RHEL:

[/crayon]

Clone the repo:

[/crayon]

进行编译

执行make进行编译,生成的二进制文件在  objs/bin/mtproto-proxy

[/crayon]
如果你编译失败,可以执行make clean清理缓存,重新进行编译步骤。

 

运行使用

获取Telegram通信密匙

[/crayon]

获取当前Telegram代理配置(官方建议每天更新此文件)

[/crayon]

生成代理密匙

如果你没有安装head可以复制我以下所生成的,修改个别字符即可。

[/crayon]

启动MTP服务端

[/crayon]
启动成功后,客户连接配置:

端口:443,密匙:271082e5da56c2877f215c225eb93ffe

 

配置TLS

此时你根据上述命令默认运行的是不带有tls功能的。

在通过  ./mtproto-proxy --help 指令查看到指定tls传输的说明

[/crayon]
此时,修改启动命令:

[/crayon]
MTP的默认文档中没有说明客户端如何连接,我在issue中找到了客户端连接方式:

即其他参数不变,secret修改为如下字符串

ee+secret+domain的十六进制

可以通过python3生成

[/crayon]
注意:这个secret只是客户端这样拼接填写,服务端还是保持原始的密匙,即本文的:271082e5da56c2877f215c225eb93ffe

此时通过发现客户端还是无法连接通。

经过不断的反复尝试,发现Windows的TG可以连通,移动设备却不能使用。(如果你也有该现象,尝试更换代理域名、关闭本地代理工具)

尝试更改google域名为centos的,经过测试发现可以连通。猜测可能因为我本地google代理的问题,也可能是因为其他的的原因,目前没有测试,建议更改为无ban白名单的域名。

且最好是支持TLS1.3!也不是说不是tls1.3就不能用,只是因为mtp的协议伪装是按照tls1.3设计的,这样看起来会更友好一些。当然,我并没有在文档中找到相关的东西,代码也没有去研读,这些全是在issue里面所了解到的。

[/crayon]
客户端连接信息:

IP:xx.xx.xx.xx (有人建议通过域名解析到IP,客户端填写域名,能有效避免ISP审查,该方式也没有大量测试,无法得出具体结果...)

secret:ee271082e5da56c2877f215c225eb93ffe7777772e63656e746f732e6f7267

port:443

 

供参考:Telegram为MTProto代理使用3种类型的密钥:

  1. 常规密钥(由DPI轻松确定)
  2. 前两个字母-dd-随机消息长度(DPI只能通过连接协商的第一个数据包来确定协议-然后看起来像普通的https / TLS) 密匙: dd+secret
  3. 前两个字母-ee-伪TLS +随机消息长度(DPI无法确定协议,第一个消息以及所有后续消息看起来像HTTPS / TLS)

密匙填写:

第一种是无混淆的即客户端密匙原模原样填写,无需变化。

第二种是有随机填充的,客户端需要在原始的密匙开头加上,如: dd+secret

第三种就是fake tls混淆,客户端需要再原始的密匙开头加上ee,还需要在密匙后面拼接域名的十六进制形式,如: ee+secret+domain_in_hex

在线转换十六进制:https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html

 

 

 

 

写入常驻后台运行

[/crayon]
 

写入开机启动

编辑 /etc/rc.local 加入启动脚本

[/crayon]
开机启动无效,大多数原因是启动脚本没有执行权限,可赋值启动脚本权限进行修复。

[/crayon]
 

关于调试

在我调试时遇到很多问题,例如你设置的代理域名,执行时提示失败,也并不能代表你不能用。如:

[/crayon]
反倒是,在我刚开始测试时,得不出任何结论时,这个失败的域名反倒可以连通,浏览器访问也是成功的。

其实这只是MTP尝试获取该域名的证书相关信息时,为客户端交换信息做的准备工作。获取不到的就取预设的默认值,也是可以工作的。

这是正常能获取到的信息:

[/crayon]
另外你也可以通过浏览器访问  https://ip:port 进行测试查看证书是否正确,以及是否重定向成功。

 

关于安全性

如果采用了tls,对于网路运营商而言,他并不能看到具体传输的数据内容,只可以分析出你的数据包是HTTPS。能获取的信息只有服务器IP地址、以及域名证书

由于获取到的信息有限,你可以借此将你的服务器实现更深度的隐匿。

例如你使用谷歌云的服务器,代理域名设置为google.com。

使用亚马逊(aws)服务器,代理域名设置到aws.amazon.com。

使用DO的服务器,代理域名设置到digitalocean.com。

这样一来,你的IP地址、证书一致,对于其他人而言这就是一个正常的网站,无论是从正常访问还是探测的角度都很难识别出这是MTP代理服务器。

avatar

发表评论

您必须登录才能发表评论!