Telegram 和 MTProto 是什么
Telegram,中文名称为“电报”,或简称“tg”,是一款跨平台即时通讯软件,客户端完全开源。我觉得重要的有如下 Features:
- 私密性高。不再使用的账号最长保留年限为 1 年,随时销毁聊天记录和一切账号资料。
- 安全性。端对端加密,不受审查。
- 完全免费。不限制上传文件(视频会有压缩),甚至可以拿来当备用网盘使用。不过已经确认会在将来布局群组广告,“钞能力”还是抵不过越来越多涌入的各国用户。
当然,在被屏蔽的地域需要翻墙使用。
MTProto 是一种协议,旨在帮助移动设备上的应用程序访问服务器的 Api 接口。
我们要做什么
我们想要搭建一个 Proxy,提供给移动端使用,可以快捷地访问到 tg 服务器。
移动端与电脑端不同的是,电脑端通常代理软件常开,随时可以通过 web 访问到 tg 服务器,而移动端则为了省电需要,仅在使用时才手动启用代理,稍显麻烦。
实际上电脑端的 tg 客户端也需要手动设置代理全局才能访问,那么有一个 Proxy 可以省很多事儿。
嗨,这里是一键脚本
在 Github 上有为实现以上功能编写的基于 Python 的 Proxy: mtprotoproxy。号称:
The proxy performance should be enough to comfortably serve about 4000 simultaneous users on the VDS instance with 1 CPU core and 1024MB RAM.
代理服务器的性能应该足以在使用 1 个 CPU 核心和 1024 MB 内存的 VDS 实例上同时为大约 4000 个用户提供舒适的服务。
当然也有用其它语言写的 Proxy,不过最妙的还属一键安装配置脚本:MTProtoProxyInstaller。不用脑子!
那么,按照作者给出的指引走就可以了。
购买一台自由访问 tg 的服务器
阿里云和腾讯云提供的轻量级应用服务器就很不错!选择香港地区即可,每月有 1 TB 的流量。
需要注意的是,此一键脚本仅支持如下 Linux 系统:
- Centos 7/8
- Ubuntu 16 或更新版本
- Debian 8/9
选择代理版本
首先明确自己要使用哪个版本的代理,官方的,基于 Python 语言的,亦或是基于 Go 语言的。
作者建议在如下情况使用基于 Python 语言的代理:
- 服务器 CPU 只有一个内核,或者只想在一个内核上运行代理。
- 服务器比较低端。
- 为一小群人提供服务,比如家庭或小公司。
- 想要限制用户的连接。
- 还将在服务器上运行其它应用程序或服务,例如 OpenVPN,Shadowsocks,Nginx 等。
否则使用官方代理。
这里我选择使用基于 Python 语言的代理,故下文将基于此版本阐述,若想使用其它版本可以自行查阅作者的教程文档。
部署一键脚本
执行如下命令进行安装:
1 | curl -o MTProtoProxyInstall.sh -L https://git.io/fjo34 && bash MTProtoProxyInstall.sh |
根据提示进行配置,觉得不妥还可以重新执行上述命令重装代理服务。
假如只添加了一个代理服务器,在安装完成后会出现如下文本:
1 | Ok it must be done. I created a service to run or stop the proxy. |
其中 ${username} 为之前输入的用户名(并不重要,只是标识),${ip} 是服务器的公网 IP 或域名,${port} 是设置的访问代理的端口,${secret} 是设置或自动生成的密钥。
这里作者提示可以用 systemctl start mtprotoproxy
来启动代理服务了,作为补充,systemctl
是 Systemd
进程管理命令,而 Systemd
是一种 Linux 的系统工具,用来启动守护进程(即一直在后台运行的进程,daemon)。这说明当前 mtprotoproxy
已经是可以启动的服务了,在后续的过程中只需要对此服务进行管理就可以了。
那么接下来就执行该命令来启动服务:
1 | systemctl start mtprotoproxy # 启动代理服务 |
复制之前的链接 tg://proxy?server=${ip}&port=${port}&secret=${secret}
到剪切板,在手机端的 Telegram 上通过 设置 - 数据和存储 - 代理设置 - 添加代理 - 从剪贴板导入
即可完成设置。建议把这个链接记下来并保存。
Ops,一点小麻烦
呃,似乎连接了半天也 ping 不通,这可如何是好,哪一步做错了吗?
可以先查阅一下日志信息,执行如下命令:
1 | systemctl status mtprotoproxy -l # 查看代理服务日志信息 |
查询到如下结果:
1 | ● mtprotoproxy.service - MTProto Proxy Service |
幸运的是,在该仓库下的 Issues 里我找到了遇见相同问题的人(#34)。
原来在最新版本的 Python 代理软件中,默认使用 IPv6,进而导致 MTProto 无法正常连接。作者提出可以在设置文件中手动设置禁用优先 IPv6 连接。操作如下:
1 | cd /opt/mtprotoproxy # 默认安装目录 |
在文件中添加一行配置信息 PREFER_IPV6 = False
即可。
由于服务没有热重载机制,因此在最后需要重启服务:
1 | systemctl restart mtprotoproxy # 重启代理服务 |
一切搞定
现在已经可以正常访问 tg 客户端啦!假如愿意,可以将刚刚得到的链接分享给好友,enjoy tg world!
或许你会愿意再次打印一下日志信息,结果如下所示:
1 | ● mtprotoproxy.service - MTProto Proxy Service |
除了前文已出现过的命令,别忘了此代理服务还可以暂停,依旧是作为服务进行管理就可以了:
1 | systemctl stop mtprotoproxy # 暂停代理服务 |