下载

官方仓库:「9seconds/mtg

下载的是 amd64 位的,执行文件直接放到了 /usr/local/bin/ 目录下

1
2
3
4
# 这里自行修改最新的下载地址
url="https://github.com/9seconds/mtg/releases/download/v2.1.7/mtg-2.1.7-linux-amd64.tar.gz"

curl -L $url -o mtg.tar.gz && mkdir mtg && tar -xzvf mtg.tar.gz -C mtg --strip-components 1 && mv mtg/mtg /usr/local/bin/mtg && rm -rf mtg.tar.gz mtg

配置

生成密钥

用的谁家的 VPS,后面就填谁的相关域名,比如我填写的 oracle.com(就是填写和 ip 地址相关的域名)

1
/usr/local/bin/mtg generate-secret --hex oracle.com

创建配置文件

1
vim /etc/mtg.toml

内容如下

1
2
3
4
5
# 上一步生成的密钥
secret = "ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d"

# 使用的端口2333
bind-to = "0.0.0.0:2333"

创建一个 systemd

1
vim /etc/systemd/system/mtg.service

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=mtg - MTProto proxy server
Documentation=https://github.com/9seconds/mtg
After=network.target

[Service]
ExecStart=/usr/local/bin/mtg run /etc/mtg.toml
Restart=always
RestartSec=3
DynamicUser=true
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

设置开机启动

1
systemctl daemon-reload && systemctl enable mtg && sudo systemctl start mtg

使用

1
mtg access /etc/mtg.toml

复制里面的 tg_url 地址在 Telegram 里打开这个链接即可

后续

如果需要使用到 443 端口,实现 443 端口的复用,可以参考以下配置

Nginx 支持基于 SNI 的 4 层转发。简单说就是:识别 SNI 信息,然后直接转发 TCP/UDP 数据流。该功能由 ngx_stream_ssl_preread_module 模块提供,需要注意的是该模块属于 stream

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
stream {
map $ssl_preread_server_name $name {
# 这里就是 SNI 识别,将域名映射成一个配置名
oracle.com MT;
# 域名都不匹配情况下的默认值
default web;
}
# 这里是mtproxy监听端口
upstream MT {
server 127.0.0.1:2333;
}
#
# 域名都不匹配情况下的默认值:web,转发到你的其它服务上去
upstream web {
server 127.0.0.1:4433;
}
server {
listen 443 reuseport; # 对外的443端口
listen [::]:443 reuseport;
proxy_pass $name;
ssl_preread on; # 预读SNI主机名
}
}