VPS部署MTProto服务

VPS部署MTProto服务

shunhang 1,039 2021-05-24

什么是MTProto

MTProxy 是一个专门为 Telegram 开发的轻量级代理协议,该协议根据 Telegram 自己开发的MTProto协议而设计,使用 C 语言编写。相比 ss 来说,它使用更加方便(Telegram 客户端内置该代理协议),占用系统资源也比较少,但是只能用于 Telegram 。

官方GitHub库:https://github.com/TelegramMessenger/MTProxy

开始部署

  1. 安装依赖,你需要从源代码构建一套通用的工具,以及用于开发包opensslzlib

    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"
  1. 克隆仓库
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
  1. 编译
make && cd objs/bin
  1. 获取用于连接电报服务器的密钥
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
  1. 获取当前电报配置
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
  1. 生成用户连接的代理密钥
head -c 16 /dev/urandom | xxd -ps
  1. 复制下生成的密钥

  2. 运行

./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-secretproxy-multi.conf在第1步和第2步获得。
  • 1是核心的数量。如果您拥有强大的服务器,则可以增加核心的数量。
  1. 放通443端口[CentOS]
firewall-cmd --zone=trusted --add-port=443/tcp --permanent
  1. 重启防火墙
firewall-cmd --reload
  1. 查看443端口号是否开启
firewall-cmd --query-port=xxx/tcp

也可以使用查看其他选项mtproto-proxy --help

  1. 生成具有以下架构的链接:(tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET或让官方bot为您生成链接)。
  2. 在Telegram上通过@MTProxybot注册您的代理。
  3. 使用参数设置接收到的标签: -P <proxy tag>
  4. 使用

但启动Telegram客户端使用 MTProxy 代理时输入IP、host和secret后,始终在connecting状态,在VPS上可以看到对应端口的连接都有,但就是连接不上。

  1. 网上一种说法是:因为GCP时间与运行Telegram客户端机器时间不同步,可在GCP上安装个NTP服务同步时间解决。

  2. 还有一种是使用阿里云服务器或者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 断开后则停止运行,以系统服务的方式启动可以持续运行而且可以开机启动

  1. 创建 System service 文件
vim /etc/systemd/system/MTProxy.service
  1. 添加脚本
    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

这里一定要注意路径问题,WorkingDirectoryExecStart 的路径一定要是 mtproto-proxy 文件所在目录。

  1. 重载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...

如果启动失败的话请检查文件路径和运行命令是否正确。

  1. 设置开机启动
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

该脚本会自动设置仅限中国地区访问。

<完>