搭建一个专为 Telegram 使用的代理并推广自己的频道

教程

(Wordless Echo) #1

为了安利别人使用 Telegram,但是因网络问题而困难重重?
没有保持挂梯子的习惯,不希望只因为 Telegram 频繁开关梯子?
Telegram 内置的 MTProto 代理协议有着近似于 Shadowsocks 的可靠性而又易于分享、使用简单而又专一

你需要:

  • 一台可以自由访问 Telegram 服务器的主机
  • Linux 命令行基础操作知识
  • Telegram 账号和频道(如果要推广频道的话)

Telegram @zh_CN 的几位管理都认为官方的 MTProto 实现得比较糟糕,所以我们接下来会使用 alexbers/mtprotoproxy 来假设服务端。

Arch 用户

虽然我不觉得会有人用 Archlinux 作为服务器系统,但是 AUR 着实很方便:
用 AUR helper 安装 AUR (en) - mtprotoproxy
配置文件位于 /etc/mtprotoproxy.conf
然后用 systemd 启动 mtprotoproxy 就可以了
其它发行版的用户请看下文

下载

首先从 GitHub 上把项目 clone 下来:

# Recommend to download the stable branch
git clone -b stable https://github.com/alexbers/mtprotoproxy.git

配置(推广频道篇,可选)

  1. 打开 Telegram 上的 @MTProxybot 机器人
  2. 按下 /newproxy 指令,接着机器人会询问你的服务器地址和端口
  3. <服务器地址>:<端口号> 的形式发送给机器人
  4. 机器人会向你询问代理的密钥(与下文 USER 里的保持一致),你可以用如下两种取其一(看个人喜好,以及你有没有 OpenSSL)的方式生成一个:
# Method 1:
openssl rand -hex 16
# Method 2:
head -c 16 /dev/urandom | xxd -ps
  1. 机器人会向你发送一串看起来和你发出的密钥一样诡异的字符(也就是下文要用到的 AD_TAG,把它复制下来)、一个 t.me 开头的链接和一个 tg:// 开头的链接,通过这个链接即可使用代理
  2. 发送 /myproxies 指令,选择我们刚刚注册的那个代理
  3. 再点击 set promotion,发送你的频道用户名

这样,注册推广频道的步骤就算是完成了

配置(服务器架设篇)

用编辑器打开刚刚 clone 的目录下的 config.py 文件,你会看到类似于此的内容:

PORT = 3256

# name -> secret (32 hex chars)
USERS = {
    "tg":  "00000000000000000000000000000000",
    "tg2": "0123456789abcdef0123456789abcdef"
}

# Tag for advertising, obtainable from @MTProxybot
# AD_TAG = "3c09c680b76ee91a4c25ad51f742267d"

# Uncommenting this do make a proxy harder to detect
# But it can be incompatible with old clients
# SECURE_ONLY = True
  • PORT:即端口号,随便用一个没有被占用的端口就行了
  • USER:格式为 "<名字>": "<密钥>",可以只有一行,配置里示范了多个密钥区分用户的情况,密钥即是刚刚用 openssl rand -hex 16 或者 head -c 16 /dev/urandom | xxd -ps 生成的那段字符
  • AD_TAG:可选,用于推广频道,可从上述机器人中获得
  • SECURE_ONLY:如注释中所说,可以让 MTProto proxy 更难被检测到,有可能与旧客户端不兼容,打开之后你需要在客户端上的密钥前面加上 dd,即 0123456789abcdef0123456789abcdef => dd0123456789abcdef0123456789abcdef

运行

# On Debian or Ubuntu
python3 mtprotoproxy.py

启动后会打出日志,此时你就可以试着连接了

进程守护(卖底裤)

如果要作为服务器长期挂着,必须要有进程守护才行

从 AUR 上得到用于进程守护的 systemd script:

curl -L -o mtprotoproxy.service https://aur.archlinux.org/cgit/aur.git/plain/mtprotoproxy.service?h=mtprotoproxy

接下来的操作里,你需要 root 权限来执行:

cp mtprotoproxy.py /usr/bin/mtprotoproxy
cp config.py /etc/mtprotoproxy.conf
cp mtprotoproxy.service /etc/systemd/system/

最后执行 systemctl start mtprotoproxy 就可以运行了,enable 可以开机启动

使用与分享

在配置篇里提到过,@MTProxybot 里给你的两个链接中,t.me 的链接在对方未安装 Telegram 的情况下也是可以打开的,而 tg:// 开头的要求对方有 Telegram 客户端,二者链接选其一即可
如果你没有通过机器人注册代理,一样也可用用以下格式分享给别人:

https://t.me/proxy?server=<服务器地址>&port=<端口号>&secret=<密钥>

为了代理不被发现,请打开 SECERT_ONLY 并在链接里的密钥前手动加入 dd,例如:

https://t.me/proxy?server=example.com&port=23333&secret=0123456789abcdef0123456789abcdef
变为 https://t.me/proxy?server=example.com&port=23333&secret=dd0123456789abcdef0123456789abcdef

当然,不打开选项,这个链接也是能用的

如果你真的很闲(Debian)

把文档复制进去

mkdir /usr/share/doc/mtprotoproxy
gzip < README.md > README.md.gz
cp README.md.gz

再新建一个包含以下内容,名为 copyright 的文件:

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: mtprotoproxy
Upstream-Contact: Alexander Bersenev <bay@hackerdom.ru>
Source: https://github.com/alexbers/mtprotoproxy

Files: *
Copyright: 2018, Alexander Bersenev <bay@hackerdom.ru>
License: MIT
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

复制到 /usr/share/doc/mtprotoproxy 里就可以了


(Wordless Echo) #2

题外话: hitorino 可以搭建一个这样的公共代理给大家用啊,毕竟国内的聊天软件着实不适合 hitorino 呢