Skip to Content
功能介绍MTProto 代理服务器

MTProto 代理服务器

BetaiOS/tvOS3.7+macOS4.4+

Stash 可以作为 Telegram 的 MTProto 代理服务器:Telegram 客户端连接到 Stash 监听的端口,Stash 按客户端请求的数据中心(DC)选择当前可用的地址,再把这条连接交给分流规则,像普通 TCP 连接一样选择出站。

相比让 Telegram 使用 SOCKS5 代理,MTProto 方式由 Stash 决定每个 DC 实际连接的地址,可以避开客户端自行选址带来的连接挂起,网络切换后也更不容易卡在「正在更新」。

MTProto 代理只转发 Telegram 的传输层数据,不持有账号的授权密钥,无法解密消息内容。

配置

在配置文件中加入 mtproto 段:

mtproto: port: 5753 secret: 0123456789abcdef0123456789abcdef ipv6: false # dc-config-url: https://example.com/mtproto-dc-config.json
  • port:必填,监听的 TCP 端口。
  • secret:必填,32 位十六进制的代理密钥,也可以带 dd 前缀表示使用 Telegram 的随机填充传输。密钥是客户端连接的唯一凭证,请勿公开。可用 openssl rand -hex 16 生成。
  • ipv6:可选,默认为 false。设为 true 时只连接数据中心的 IPv6 地址,否则只连接 IPv4 地址。该项不影响监听地址。
  • dc-config-url:可选,覆盖数据中心地址表的更新来源,需要是 HTTP 或 HTTPS 地址。省略时使用 Stash 内置的地址表。

Stash 同时监听本机回环地址和局域网地址;局域网内的设备是否可以连接,由「允许局域网连接」开关决定。

配置文件中的 mtproto 段优先于 App 设置中的 MTProto 开关。重新加载配置时,端口不变只更新参数,端口变化则重新监听,删除该段则关闭监听。

在 Telegram 中使用

在 Telegram 的代理设置中选择 MTProto,填写 Stash 所在设备的地址、port 和 secret。带 dd 前缀的密钥在 Telegram 中也要连同前缀一起填写。

也可以生成代理链接一键导入:

tg://proxy?server=192.168.1.10&port=5753&secret=0123456789abcdef0123456789abcdef

分流

经 MTProto 接入的连接会以数据中心的 IP 地址作为目标进入规则匹配。使用 PROTOCOL,MTPROTO 规则可以匹配全部 Telegram 连接:

rules: - PROTOCOL,MTPROTO,Proxy - MATCH,DIRECT

由于目标是 IP 而不是域名,基于 IP 的规则(IP-CIDR、IP-ASN、GEOIP)同样适用。

数据中心地址

每个数据中心有多个可用地址。Stash 内置一份由 Telegram 官方配置生成的地址表,首次连接不依赖网络更新;当某个地址连接失败时,下一条同一数据中心的连接会换用下一个地址,网络切换后会重新尝试全部地址。

通过 dc-config-url 可以指定自己维护的地址表,格式需要与内置表一致。更新在后台进行,下载失败时继续使用当前地址表。

Telegram 会同时连接多个数据中心用于配置、媒体和迁移等用途,连接列表中出现多条指向不同数据中心的连接属于正常现象。

Last updated on