注意⚠️

现在 MTProxy 几乎是秒封,请勿搭建 MTProxy。

MTProxy 是什么

MTProxy 是在新版本 Telegram 中内置的代理程序,如果只是为了上 telegram 而挂个酸酸,可能会比较耗电

MTProxy的命名,大概和MTProto有关
Telegram 团队使用自己设计的加密协议 MTProto ,并以 30 万美金的高价奖赏漏洞的提交者。tg使用基于 MTProto 的通讯协议。

MTProxy开源地址:https://github.com/TelegramMessenger/MTProxy

部署第三方 MTProxy

根据 TGCNPSA 频道的消息:

跨境 MTProxy 如何防封:
自行 编译安装 https://github.com/9seconds/mtg 最新版
控制分享范围,勿发布到公共列表.

项目地址: https://github.com/9seconds/mtg

使用 9seconds/mtg ,经过本喵的测试,的确可以有效防止被检测,但是因为第一次我使用的是默认的3128端口,导致几天后被封,但是同一台机器上的ss还是存活的,所以端口也一定要注意改变。

使用 docker 部署

如果没有 docker,可以使用以下命令 安装 docker

1
curl -sSL https://get.docker.com/ | sh

参考:https://github.com/9seconds/mtg#one-line-runner
但是进行一些修改:

  1. 3129 端口是数据统计端口,挂载到宿主机的 localhost:3129 即可。(因为某些主机商的vps并不像云服务器那样提供防火墙
  2. 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的推荐方法

  1. 使用一键脚本安装docker:
1
curl -sSL https://get.docker.com/ | sh
  1. 运行
1
docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
  1. 查看密钥
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/

直接部署

直接部署可能会比较麻烦

安装依赖

需要安装一些编译的必要工具,以及opensslzlib的开发包。
ubuntu/debian:

1
apt install git curl build-essential libssl-dev zlib1g-dev

centos/RHEL:

1
2
yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"

克隆仓库:

1
2
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy

编译,只需要运行make,二进制文件会保存在objs/bin/mtproto-proxy

1
make && cd objs/bin

如果编译失败了,在下次编译之前要运行make clean清理失败的文件。

运行

  1. 获取用于连接到telegram 服务器的密钥:
1
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
  1. 获取现在telegram服务器的配置。配置有时候会变,所以我们建议你每天更新
1
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
  1. 生成一个密钥,以用于用户连接到你的代理:
1
head -c 16 /dev/urandom | xxd -ps
  1. 运行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-secretproxy-multi.conf是从步骤一和步骤二获取的。
  • 1是工作的进程数.如果你有一个配置很好的服务器,你可以增加工作进程数。

你还可以用mtproto-proxy --help来查看其他设置。

  1. 用指定格式生成链接:tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET,或者让bot帮你生成。
  2. 在telegram上用@MTProxybot注册你的代理
  3. -P参数设置接受tag:-P <proxy tag>

Systemd 配置示例

  1. 创建systemd服务文件 (这是大多数Linux发行版的标准路径,但您应该先查看它):
1
nano /etc/systemd/system/MTProxy.service
  1. 修改这个基础服务(尤其是路径和参数):
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=MTProxy
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/MTProxy
ExecStart=/opt/MTProxy/mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> -P <proxy tag> <other params>
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 重新加载守护进程:
1
systemctl daemon-reload
  1. 测试MTProxy服务:
1
2
3
systemctl restart MTProxy.service
# Check status, it should be active
systemctl status 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 后,这个置顶才会消失。