MTProxy是Telegram(以下简称TG)官方开源的一个TG代理工具,用户可以用来自建代理方便自己使用TG,C语言写一个很轻便的代理软件。废话不多说,贴出github地址

传送门

安装

github页面已经有详细的安装教程,这里简单说一下。

  1. 安装依赖

CentOS/RHEL:

yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"
  1. 克隆源码编译安装

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
make && cd objs/bin

编译完会在 objs/bid*目录生成可执行文件mtproto-proxy 把这个可执行文件转移到你喜欢的目录

mv mtproto-proxy /usr/bin
cd /usr/bin
  1. 生成配置文件

获取secret,用于连接TG服务器的

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

获取proxy-multi.conf,TG官方的host,里面存放的是TG官方服务器的地址和端口,你需要代理访问的地址都在这里面,官方建议经常更新一下这个文件

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

生成一个密钥,这个密钥是要给客户端用的

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

以上命令会生成一个32位的字符串,copy下来,后面要用到。

完成之后,/usr/bin文件夹下面会有三个文件mtproto-proxyproxy-multi.confproxy-secret。配置文件获取完毕

  1. 创建Systemd service

创建一个system service可以很方便的管理你的mtproxy的启动、重启和查看状态等。

vi /etc/systemd/system/MTProxy.service

编辑MTProxy.service

[Unit]
Description=MTProxy
After=network.target

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

[Install]
WantedBy=multi-user.target

其中secret是在第3步里面生成的客户端密钥,替换为你自己生成的字符串。 8888是内部查看服务状态的端口 8080是客户端连接用的端口,这里你可以自定义为你想开放的接口

千万别忘记还有防火墙要设置

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-prot

保存MTProxy.service之后重载一下systemctl,并启动该服务

systemctl daemon-reload
systemctl restart MTProxy.service
//查看一下服务状态
systemctl status MTProxy.service

不出意外的话你会在控制台输出看到最后两行大概是长这样的

config_filename = 'proxy-multi.conf'
creating 1 workers
Started as [*.*.*.*:*:*:*]//这里是ip:端口:端口
configuration file proxy-multi.conf re-read successfully (797 bytes parsed), new configuration a main loop
Started as [*.*.*.*:*:*:*]//这里是ip:端口:端口
configuration file proxy-multi.conf re-read successfully (797 bytes parsed), new configuration a main loop

说明服务器已经正常跑起来了。你的MTProxy已经可以使用了。

阿里云的部分用户这里可能有一个注意事项,阿里云有的机器MTProxy获取不到外网IP的,绑定的是内部局域网IP,这样会导致即使你的服务没有任何问题的跑起来了,但是填到客户端里面客户端无法连接上代理。如何检测你的机器是不是能获取到外网地址,ifconfig一下,能看到你服务器的外网ip就可以,看不到的话就说明获取不到外网地址。如果看不到你的外网地址的话,在第四步的MTProxy.service文件里面使用--nat-info指定一下你的内网地址和外网地址。

WorkingDirectory=/usr/bin
ExecStart=/usr/bin/mtproto-proxy -u nobody -p 8888 -H 8080 -S <secret> --nat-info <内网地址>:<外网地址> --aes-pwd proxy-secret proxy-multi.conf -M 1

代理注册

如果你想分享你的代理给亲朋友好友使用的话,你可以到TG里面注册你的代理,TG会生成分享连接