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.jsonport:必填,监听的 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 会同时连接多个数据中心用于配置、媒体和迁移等用途,连接列表中出现多条指向不同数据中心的连接属于正常现象。