Telegram 专用代理 MTProxy 搭建

这几天功夫网使劲折腾,搞得 Telegram 都差点上不去,虽然自己一直 24 小时挂着梯子,但有的人只需要用 Telegram,便想起来 Tg 内置的 MTProxy 代理,但是 GitHub 项目下的安装教程有些麻烦还不完整。便把自己的安装过程记录下来。

一键脚本

感觉这些步骤太麻烦了,就学了一点 shell 根据别人的脚本尝试性写了一个一键脚本出来,肯定有很多不足之处,再说吧。下面放出来,肯定是能用的。

wget --no-check-certificate -O mtproxy.sh https://raw.githubusercontent.com/MoonBegonia/shell/master/MTproxy/mtproxy.sh
chmod +x mtproxy.sh
./mtproxy.sh

使用教程

编译

安装开发工具包以及编译所需要的opensslzlib依赖包。

  • Debian/Ubuntu:
apt install git curl build-essential libssl-dev zlib1g-dev
  • CentOS/RHEL:
yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"

克隆项目源代码并进入项目目录

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy

构建时只需运行 make 命令,二进制文件将位于objs/bin/mtproto-proxy中:

make && cd objs/bin

如果编译失败,则应在再次编译之前运行make clean命令。

运行

获取一个密钥,用于连接到 Tg 服务器

curl -s https://core.telegram.org/getProxySecret -o proxy-secret

获取当前的 Tg 配置。它偶尔会改变,Tg(官方鼓励明天更新一次)

curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

生成一个密钥供用户连接到您的代理使用

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

注:妥善保管这个密匙,请勿轻易告诉他人或公开。

运行mtproto-proxy

./mtproto-proxy -u nobody -p 8888 -H 443 -S 密钥 --aes-pwd proxy-secret proxy-multi.conf -M 1

注:

  • 443是客户端用来连接代理的端口。
  • 8888是本地端口。您可以使用它从mtproto-proxy获取统计信息。像 wget localhost:8888/stats
  • <密钥>是在步骤 3 生成的。还可以设置多个密钥:-S <密钥 1> -S <密钥 2>
  • proxy-secretproxy-multi.conf在第 1 步和第 2 步获得。

运行成功后按Ctrl+C退出运行,接下来创建一个系统服务方便以后管理

创建系统服务

新建系统服务文件

nano /etc/systemd/system/MTProxy.service

编辑此文件,写入

[Unit]
Description=MTProxy
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/MTProxy
ExecStart=/root/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 2333 -S <密钥> --aes-pwd /root/MTProxy/objs/bin/proxy-secret /root/MTProxy/objs/bin/proxy-multi.conf -M 1
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • 确保WorkingDirectory以及ExecStart内正确写明mtproto-proxy可执行文件的绝对路径。以及指定proxy-secretproxy-multi.conf的路径也是绝对路径,前面跟我一样的可以忽略此步骤

  • 更多参数可以运行./mtproto-proxy --help命令查看

  • 记得修改密钥为前面获得的密钥

重加载使服务生效,每次修改服务文件后都应重复此操作

systemctl daemon-reload

重启服务

systemctl restart MTProxy.service

查看状态,Activeactive(running)则表示运行正常

systemctl status MTProxy.service

客户端设置

随机填充

由于某些 ISP 通过数据包大小检测 MTProxy,因此如果启用此模式,则会向数据包随机填充。
仅对启用它的客户端使用!!!
启用方式:在客户端代理的密钥最前面加上 dd 即可(xxxxxx => ddxxxxxx)

手动设置

不同的客户端有不同的位置这里就简单的说一下

找到设置中的代理/proxy 选项 》 添加代理/Add proxy 》 MTPROTO proxy 》 server 填写服务器地址,密钥就是前面步骤中获得的密钥。

服务器注册及分享

  • 添加官方机器人:@MTProxyBot
  • 发送 /newproxy
  • 根据提示发送代理服务器地址及端口号,例如:10.10.10.10:80
  • 再根据提示发送此前生成的密钥:de735d1e955150d023ae4057956fdfb3a3
  • 注册完成
  • 赞助频道设置:发送/myproxies 》 选择要设置的服务器 》 根据提示发送频道链接或用户名。

注册服务器时生成的两个链接可以直接用来添加代理,第一个为公网链接,第二个为 app 内链接。

链接

GitHub 项目地址

更新日志2018-06-28:升级一键一键脚本为二合一

2018-06-27:添加一键脚本

2018-08-19:添加随机填充