自建MTProxy代理,推广你的Telegram频道
2019-01-12
我从去年开始使用 Telegram 这个即时通讯软件,现在已经是我使用最频繁的聊天软件了,相比 qq 和微信来说 Telegram 更加符合我对聊天软件的胃口,简洁、专注、消息永久云存储全平台免费同步、端到端的强加密通讯等功能正好满足我的需求。最近开一个 Telegram 频道,想找一些推广渠道,正好看到 Telegram 的专用代理 MTProxy 可以添加频道推广,所以决定用vps搭建一个 MTProxy 代理用来推广自己的频道,我尝试根据 MTProxy 的官方搭建教程来搭建,其中遇到了一些坑,但是最后还是成功搭好了。
什么是 MTProxy ?
MTProxy 是一个专门为 Telegram 开发的轻量级代理协议,该协议根据 Telegram 自己开发的MTProto协议而设计,使用 C 语言编写。相比 ss 来说,它使用更加方便(Telegram 客户端内置该代理协议),占用系统资源也比较少,但是只能用于 Telegram 。 开源地址:https://github.com/TelegramMessenger/MTProxy
搭建教程
本教程适用于 Centos7 系统,其它 Linux 发行版可以参考 GitHub 的教程(其实只是依赖环境的安装方法不一样,毕竟不同发行版的包管理器不同)
安装构建及运行所需依赖环境
搭建MTProxy代理需要先安装源码构建工具和openssl
和zlib
的开发包:
yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"
下载源码并构建
从 GitHub 下 Clone 源码:
cd /opt
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
编译源码,生成的可执行二进制文件 mtproto-proxy 存放在objs/bin
目录中:
make && cd objs/bin
编译成功的话在objs/bin
目录下就能找到 mtproto-proxy 文件。
如果编译失败的话就执行make clean
后再重新编译。
运行 MTProxy
1.获取连接 Telegram 服务器的密钥:
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
生成的密钥文件 proxy-secret 会存放在当前目录。 2.获取 telegram 配置文件,配置文件会经常更新,所以官方推荐一天更新一次:
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
同样,生成的配置文件 proxy-multi.conf 会放在当前目录。 3.自动生成用户使用的密码:
head -c 16 /dev/urandom | xxd -ps
执行这个命令后终端会随机生成一个32位的随机字符串,把它保存下来用作密码。 4.运行 mtproto-proxy:
./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
- nobody 为用户名,不用修改
- 8888 为本地端口号,可以使用它获得代理运行的统计信息
- 443 为外部端口号。用于客户端与服务器连接
为用户连接代理用的密码,替换为第3步中生成的32位随机字符串 - proxy-secret 和 proxy-multi.conf 即为第1、2步获取的文件
- 1 为进程数,如果你的服务器配置够高的话,可以增加进程数 注意:如果你的 vps 是 NAT 服务器(比如谷歌云),则要加上内网 IP 和外网 IP 地址,运行命令如下:
./mtproto-proxy -u nobody -p 8888 -H 443 --nat-info <local-addr>:<global-addr> -S 571e4835590b3fc2661ecf7841848872 --aes-pwd proxy-secret proxy-multi.conf -M 1
把
[8425][2019-01-12 15:25:58.354107 local] Invoking engine mtproxy-0.01 compiled at Jan 12 2019 06:51:46 by gcc 4.8.5 20150623 (Red Ht 4.8.5-36) 64-bit after commit b9950a18f8f289837545a5152c2fd423717c0b48
[8425][2019-01-12 15:25:58.354925 local] config_filename = 'proxy-multi.conf'
[8425][2019-01-12 15:25:58.355165 local] creating 1 workers
[8425][2019-01-12 15:25:58.361546 local] Started as [10.146.0.2:8888:8425:1547277958]
[8425][2019-01-12 15:25:58.361806 local] configuration file proxy-multi.conf re-read successfully (809 bytes parsed), new configuraion active
[8426][2019-01-12 15:25:58.363800 local] Started as [10.146.0.2:8888:8426:1547277958]
[8426][2019-01-12 15:25:58.364002 local] configuration file proxy-multi.conf re-read successfully (809 bytes parsed), new configuraion active
[8426][2019-01-12 15:25:58.364850 local] main loop
[8425][2019-01-12 15:25:58.371705 local] main loop
5.客户端连接 MTProxy 测试: 打开 Telegram 客户端,settings->Data and Storage->Proxy Settings->Add Proxy: Server 填写你的 vps 外网 IP 地址,port 填写 443,Secret 填写之前生成的32位随机字符串即可。 如果连接失败的话,先检查防火墙有没有开启对应的端口号,还是不行的话尝试把 vps 的时区改成北京时区,然后同步时间后重新开启代理。
以Systemd service的方式运行MTProxy
上述的运行方式当 ssh 断开后则停止运行,以系统服务的方式启动可以持续运行而且可以开机启动 1.创建 System service 文件:
vim /etc/systemd/system/MTProxy.service
2.添加以下脚本: 非 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 文件所在目录。 3.重载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...
如果启动失败的话请检查文件路径和运行命令是否正确。 4.设置开机启动:
systemctl enable MTProxy.service
注册MTProxy并添加频道推广
Telegram 官方有一个管理MTProxy的 bot @MTProxybot,在这个 bot 中注册自己的 MTProxy,可以添加频道推广,也可以看到 MTProxy 的连接数量及连接用户IP地址归属地。
注册MTProxy
- 关注 @MTProxybot 机器人。
- 发送
/newproxy
指令,bot返回添加方式。 - 发送 host:port,host即你的 vps 外网 ip 地址,port 就是端口号。
- 发送连接密码,即之前生成的 32 位随机字符串。
- 接下来 bot 会返回生成的分享链接和代理tag:
Success!
Your proxy has been successfully registered. You can now pass this proxy tag to the software you are using: 43abc80fc213xxxxxxxxxxxxxxxxxxx.
Here is a link to your proxy server: https://t.me/proxy?server=xx.xx.xx.xx&port=443&secret=xxxxxxxxxxxxxxxx661ecf7841848872
And here is a direct link for those who have the Telegram app installed: tg://proxy?server=xx.xx.xx.xx&port=443&secret=xxxxxxxxxxxxxfc2661ecxxxxxxxxxx
把链接分享出去,别人点击链接 Telegram 客户端就会自动添加代理。如果你不需要使用代理来推广频道,则不用理会 bot 生成的tag。
利用MTProxy推广自己的频道
- 注册MTProxy后发送
/myproxies
,bot 会返回你的代理 tag。 - 点击 tag,点击 Set promotion,发送自己的频道id或者链接,bot会提示添加成功需要一段时间来让设置生效,可能需要1个小时以上。
- 在 System service 文件中加入 bot 返回的tag:
[Unit]
Description=MTProxy
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/MTProxy/objs/bin
# 在-P后面添加tag
ExecStart=/opt/MTProxy/objs/bin/mtproto-proxy -u nobody -p 8888 -H 443 --nat-info 10.146.0.2:xx.xx.xx.xx -P 43abc80fxxxxxxxxxxxxxxx68b128557 -S 571xxxxxxxxxxxxxx1848872 --aes-pwd proxy-secret proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
重载 daemons 并重启 MTProxy 服务:
systemctl daemon-reload
systemctl restart MTProxy.service
systemctl status MTProxy.service
待设置生效后,别人使用你的 MTProxy 时就会在消息列表顶端看到你推广的频道,关注频道后则取消置顶,就像下图一样,右上角会显示 Proxy sponsor 表示这是代理推广频道,第一次点开频道也会有官方提示消息:
添加中国 IP 白名单
代理通过公共分享频道分享出去的话,会出现很多伊朗人使用的情况,这样会很快耗光vps资源,所以最好使用 ipset + iptables 添加中国 IP 白名单,只允许中国 IP 访问,设置方法请看这篇博文,在此不再赘述。
分享 MTProxy
最后通过各种渠道把你的 MTProxy 分享出去,使用代理的人都会看到你的推广频道了。(vps流量不多的慎重考虑,我分享出去5天烧掉三百多 GB 流量)
顺便推广一波自己的频道:博文精选
使用 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
该脚本会自动设置仅限中国地区访问。
参考文章
https://github.com/TelegramMessenger/MTProxy/blob/master/README.md