前言

Telegram是一款类似于QQ和微信的即时通讯软件,中文名叫电报。Telegram最大的特点,也是主打的招牌就是加密与安全:除了服务器本身加密外,还可以额外用户对用户加密,还支持设置阅后即焚,保证通信隐私安全。目前最新版本的客户端支持发送所有类型的文件和进行语音通话。

不过正是由于Telegram的加密特性,导致不少地区都对Telegram进行封杀,必须使用特殊手段才能使用Telegram,基于此类问题,电报官方开发了一款专门用于Telegram的代理工具——MTProxy。

MTProxy特别适合主要通过手机使用Telegram的用户,电脑一般一直开启科学上网工具,但手机不同,所以使用MTProxy可以让手机更方便地使用Telegram。

手动安装

准备

在安装之前,需要确认你的服务器上拥有一些基本工具:opensslzlibgcc等。

Build

  1. 拉取源码
1
git clone https://github.com/TelegramMessenger/MTProxy
  1. 编译,生成的二进制文件是objs/bin/mtproto-proxy
1
2
cd MTProxy
make && cd objs/bin

Config

  1. 连接Telegram服务器,并获取配置文件
1
2
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
  1. 生成密钥,一定要记得记录下来
1
head -c 16 /dev/urandom | xxd -ps
  1. 创建systemd服务文件,并且填充内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nano /etc/systemd/system/MTProxy.service

[Unit]
Description=MTProxy
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/MTProxy
ExecStart=/opt/MTProxy/mtproto-proxy -u $username -p $localport -H $connectport -S $secret --aes-pwd proxy-secret proxy-multi.conf -M $num
Restart=on-failure

[Install]
WantedBy=multi-user.target
变量名含义备注
username用户名
localport统计端口wget localhost:8888/stats
connectport连接端口
secret密钥
num进程数目默认为1即可

Run

  1. 重新加载进程守护(daemons)
1
2
3
4
5
6
7
systemctl daemon-reload

systemctl start MTProxy.service # 启动MTProxy
systemctl stop MTProxy.service # 停止MTProxy
systemctl restart MTProxy.service # 重启MTProxy
systemctl status MTProxy.service # 查看状态
systemctl enable MTProxy.service # 允许开机自启
  1. 获取链接:tg://proxy?server=SERVER_IP/SERVER_DOMAIN&port=PORT&secret=SECRET,将其发送至任一tg聊天窗口,点击添加链接即可

MTProxy Admin Bot

MTProxy Admin Bot是Telegram官方帮助使用代理的工具,搜索添加后,通过/newproxy命令生成代理链接:

脚本安装+TLS伪装

上面的安装过程略显繁琐,容易出错,而且更重要的问题是这样安装的代理使用的流量特征十分明显,特别容易被GFW识别,导致服务器端口甚至IP被封,最好使用其他方法进行伪装,所以可以使用一键安装脚本,例如MTProxy TLS或者mtproxy,安装过程与上面类似,使用方法在Github主页中有描述:

1
2
3
4
bash mtproxy.sh start
bash mtproxy.sh debug
bash mtproxy.sh stop
bash mtproxy.sh restart

Q&A

  1. 脚本安装之后无法启动

可以使用bash mtproxy.sh debug命令查看问题,一般问题都是类似这样:

这是因为脚本下载的mtproto-proxy版本太老了,可以看到是用gcc-8编译的去年的老版本,可能和你的电脑不匹配,我的解决方案是:
  ①. 下载原版:git clone https://github.com/TelegramMessenger/MTProxy
  ②. 使用服务器上的gcc进行编译,将编译产生的mtproto-proxy二进制文件复制到一键管理脚本所在目录下,再次启动
  ③. 有可能出现无法运行的情况,可以将原版代码中common/pid.c中的这一行注释掉,重新编译,重复上面的步骤:

1
assert (!(p & 0xffff0000));

参考资料

  1. MTProxy
  2. MTProxy TLS 绿色版一键安装脚本
  3. mtproxy
  4. MTProxy+FakeTLS|Telegram稳定代理配置教程
  5. Systemd 入门教程:命令篇