VPS部署MTProto服务
本文最后更新于 2023-05-14,文章内容可能已经过时。
什么是MTProto
MTProxy 是一个专门为 Telegram 开发的轻量级代理协议,该协议根据 Telegram 自己开发的MTProto协议而设计,使用 C 语言编写。相比 ss 来说,它使用更加方便(Telegram 客户端内置该代理协议),占用系统资源也比较少,但是只能用于 Telegram 。
官方GitHub库:https://github.com/TelegramMessenger/MTProxy
开始部署
-
安装依赖,你需要从源代码构建一套通用的工具,以及用于开发包
openssl和zlib。1.1. 在Debian / Ubuntu上
apt install git curl build-essential libssl-dev zlib1g-dev
1.2. 在CentOS/RHEL上
yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"
- 克隆仓库
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
- 编译
make && cd objs/bin
- 获取用于连接电报服务器的密钥
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
- 获取当前电报配置
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
- 生成用户连接的代理密钥
head -c 16 /dev/urandom | xxd -ps
-
复制下生成的密钥
-
运行
./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>是在第6步中生成的密钥-S <secret1> -S <secret2>。您还可以设置多个密钥。proxy-secret并proxy-multi.conf在第1步和第2步获得。1是核心的数量。如果您拥有强大的服务器,则可以增加核心的数量。
- 放通443端口[CentOS]
firewall-cmd --zone=trusted --add-port=443/tcp --permanent
- 重启防火墙
firewall-cmd --reload
- 查看443端口号是否开启
firewall-cmd --query-port=xxx/tcp
也可以使用查看其他选项mtproto-proxy --help。
- 生成具有以下架构的链接:(
tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET或让官方bot为您生成链接)。 - 在Telegram上通过@MTProxybot注册您的代理。
- 使用参数设置接收到的标签:
-P <proxy tag> - 使用
但启动Telegram客户端使用 MTProxy 代理时输入IP、host和secret后,始终在connecting状态,在VPS上可以看到对应端口的连接都有,但就是连接不上。
-
网上一种说法是:因为GCP时间与运行Telegram客户端机器时间不同步,可在GCP上安装个NTP服务同步时间解决。
-
还有一种是使用阿里云服务器或者AWS服务器或GCP搭建Telegram MTProxy时,发现这个MTProxy绑定的是内网IP,解决方案也很简单,使用NAT模式就行,指定内网IP和外网IP, 启动命令行里需要加入 –nat-info
: 即可。
./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> –nat-info <intranet ip内网ip>:<public ip外网ip> –aes-pwd proxy-secret proxy-multi.conf -M 1
以Systemd service的方式运行MTProxy
上述的运行方式当 ssh 断开后则停止运行,以系统服务的方式启动可以持续运行而且可以开机启动
- 创建
System service文件
vim /etc/systemd/system/MTProxy.service
- 添加脚本
非NAT主机
[Unit]
Description=MTProxy
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/MTProxy/objs/bin
ExecStart=/opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
NAT 主机
[Unit]
Description=MTProxy
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/MTProxy/objs/bin
ExecStart=/opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 --nat-info <local-addr>:<global-addr> -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
这里一定要注意路径问题,WorkingDirectory 和 ExecStart 的路径一定要是 mtproto-proxy 文件所在目录。
- 重载daemons并启动 MTProxy 服务:
systemctl daemon-reload
systemctl restart MTProxy.service
systemctl status MTProxy.service
终端出现以下提示则 MTProxy 启动成功
● MTProxy.service - MTProxy
Loaded: loaded (/etc/systemd/system/MTProxy.service; enabled; vendor preset: disabled)
# 此处为 active(running)则服务正在运行中
Active: active (running) since Sun 2019-01-13 00:02:41 CST; 1 day 21h ago
Main PID: 16083 (mtproto-proxy)
CGroup: /system.slice/MTProxy.service
├─16083 /opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 --nat-info 10.146.0.2 xx.xx.xx.xx -P 43abc8...
└─16085 /opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 --nat-info 10.146.0.2 xx.xx.xx.xx -P 43abc8...
如果启动失败的话请检查文件路径和运行命令是否正确。
- 设置开机启动
systemctl enable MTProxy.service
使用 docker 或者 一键脚本搭建 MTProxy
使用docker请看这里:https://hub.docker.com/r/telegrammessenger/proxy/
一键脚本
wget --no-check-certificate https://raw.githubusercontent.com/lrinQVQ/script/master/other/china_only && chmod +x china_only && ./china_only
该脚本会自动设置仅限中国地区访问。
<完>
- 感谢你赐予我前进的力量

