注意⚠️
现在 MTProxy 几乎是秒封,请勿搭建 MTProxy。
MTProxy 是什么
MTProxy 是在新版本 Telegram 中内置的代理程序,如果只是为了上 telegram 而挂个酸酸,可能会比较耗电
MTProxy的命名,大概和MTProto有关
Telegram 团队使用自己设计的加密协议 MTProto ,并以 30 万美金的高价奖赏漏洞的提交者。tg使用基于 MTProto 的通讯协议。
MTProxy开源地址:https://github.com/TelegramMessenger/MTProxy
部署第三方 MTProxy - alexbers/mtprotoproxy
https://github.com/alexbers/mtprotoproxy
安装 docker
1 | curl -sSL https://get.docker.com/ | sh |
安装 docker-compose
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
###
git clone -b stable https://github.com/alexbers/mtprotoproxy.git; cd mtprotoproxy
修改 config.py
docker-compose up -d
docker-compose logs
部署第三方 MTProxy - 9seconds/mtg
根据 TGCNPSA 频道的消息:
跨境 MTProxy 如何防封:
自行 编译安装 https://github.com/9seconds/mtg 最新版
控制分享范围,勿发布到公共列表.
项目地址: https://github.com/9seconds/mtg
使用 9seconds/mtg ,经过本喵的测试,的确可以有效防止被检测,但是因为第一次我使用的是默认的3128
端口,导致几天后被封,但是同一台机器上的ss还是存活的,所以端口也一定要注意改变。
使用 docker 部署
如果没有 docker,可以使用以下命令 安装 docker1
curl -sSL https://get.docker.com/ | sh
参考:https://github.com/9seconds/mtg#one-line-runner
但是进行一些修改:
- 3129 端口是数据统计端口,挂载到宿主机的 localhost:3129 即可。(因为某些主机商的vps并不像云服务器那样提供防火墙
- 3128 端口是 MTP 端口,注意避免用官方教程的端口号,
shuf -i 2000-65000 -n 1
会从 2000 到 65000 生成一个随机的端口号。(参考:Random number from a range in a Bash Script)
1 | docker run --name mtg --restart=unless-stopped -p $(shuf -i 2000-65000 -n 1):3128 -p 127.0.0.1:3129:3129 -d nineseconds/mtg:stable dd$(openssl rand -hex 16) |
完成后,运行以下命令(其实用jq
解析json
会非常方便,鉴于 jq
需要额外安装,我使用 awk
来完成字符串过滤1
curl -s localhost:3129 | grep -i tg_url | awk -F '"' '{print $4}'
就可以看到 tg://
开头的链接了。
但是,shuf -i 2000-65000 -n 1
可能会有个问题,就是随机到你正在使用的端口号,可以自行更换随机的范围,或者是随机好了后手动指定端口。
部署原版 MTProxy (Deprecated!!)
由于原版 MTProxy 是固定结构的数据包,可能已经被识别,以下搭建方式已经不推荐使用。
由于原版 MTProxy 是固定结构的数据包,可能已经被识别,以下搭建方式已经不推荐使用。
由于原版 MTProxy 是固定结构的数据包,可能已经被识别,以下搭建方式已经不推荐使用。
重要的事说三遍。
具体可阅读 t/547806
使用 docker 部署(推荐)
官方bot的推荐方法
- 使用一键脚本安装docker:
1 | curl -sSL https://get.docker.com/ | sh |
- 运行
1 | docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest |
- 查看密钥
1 | docker logs mtproto-proxy |
你会看到:1
2
3
4
5
6
7
8
9[+] Using the explicitly passed secret: '00baadf00d15abad1deaa515baadcafe'.
[+] Saving it to /data/secret.
[*] Final configuration:
[*] Secret 1: 00baadf00d15abad1deaa515baadcafe
[*] tg:// link for secret 1 auto configuration: : tg://proxy?server=3.14.15.92&port=443&secret=00baadf00d15abad1deaa515baadcafe
[*] t.me link for secret 1: tg://proxy?server=3.14.15.92&port=443&secret=00baadf00d15abad1deaa515baadcafe
[*] Tag: no tag
[*] External IP: 3.14.15.92
[*] Make sure to fix the links in case you run the proxy on a different port.
其中:1
tg://proxy?server=3.14.15.92&port=443&secret=00baadf00d15abad1deaa515baadcafe
便是MTProxy的地址设置了。
直接复制到telegram客户端里面,再点击,会弹出设置询问你要不要设置。
当然上面这条是官方实例的,是不能用的。
https://hub.docker.com/r/telegrammessenger/proxy/
直接部署
直接部署可能会比较麻烦
安装依赖
需要安装一些编译的必要工具,以及openssl
和zlib
的开发包。
ubuntu/debian:1
apt install git curl build-essential libssl-dev zlib1g-dev
centos/RHEL:1
2yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"
克隆仓库:1
2git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
编译,只需要运行make
,二进制文件会保存在objs/bin/mtproto-proxy
1
make && cd objs/bin
如果编译失败了,在下次编译之前要运行make clean
清理失败的文件。
运行
- 获取用于连接到telegram 服务器的密钥:
1 | curl -s https://core.telegram.org/getProxySecret -o proxy-secret |
- 获取现在telegram服务器的配置。配置有时候会变,所以我们建议你每天更新
1 | curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf |
- 生成一个密钥,以用于用户连接到你的代理:
1 | head -c 16 /dev/urandom | xxd -ps |
- 运行
mtproto-proxy
:
1 | ./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>
是步骤三中生成的密钥.你还可以设置多个密钥:-S <secret1> -S <secret2>
。proxy-secret
和proxy-multi.conf
是从步骤一和步骤二获取的。1
是工作的进程数.如果你有一个配置很好的服务器,你可以增加工作进程数。
你还可以用mtproto-proxy --help
来查看其他设置。
- 用指定格式生成链接:
tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET
,或者让bot帮你生成。 - 在telegram上用@MTProxybot注册你的代理
- 用
-P
参数设置接受tag:-P <proxy tag>
Systemd 配置示例
- 创建
systemd
服务文件 (这是大多数Linux发行版的标准路径,但您应该先查看它):
1 | nano /etc/systemd/system/MTProxy.service |
- 修改这个基础服务(尤其是路径和参数):
1 | [Unit] |
- 重新加载守护进程:
1 | systemctl daemon-reload |
- 测试MTProxy服务:
1 | systemctl restart MTProxy.service |
设置开机自启:
1 | systemctl enable MTProxy.service |
后续
可以在官方的 @MTProxybot 添加你的 MTProxy 代理 并设置一个频道链接作为 promotion(推广),如果有人使用了你的代理,他的客户端会在置顶你的 channel,显示proxy sponsor(代理提供者),点进去,在join channel 一栏上面写着:1
This channel is shown by your proxy server.To remove this channel from your chats list, disable the proxy in Telegram Settings.
当他加入 channel 后,这个置顶才会消失。