1. 首页
  2. 教程
  3. Linux

MTProxy( mtg 2.0 )代理教程

9seconds 前几天将mtg版本更新到了2.0正式版。此版本mtg作者介绍是1.0版本完全推倒重写。介于没有详细的介绍,所以就只能亲自搭建好mtg2.0然后与之前版本对比一下,看看在墙内日常使用会不会有明显区别。

在搭建了几个公共TG代理后发现mtg2.0的抗封锁性可能确实稍微好一些,但也是几天就会被封锁。目前国内不推荐使用TG代理方式使用Telegram,还是老老实实使用V2ray或Trojan代理比较好。

如果翻墙需求仅仅是为了上Telegram,那么使用国内机子搭建隧道来中转socks5或许是更稳定的方式,但是安全性可能存疑。有此需求的同学可以试一下。

安装教程适用于 Ubuntu 、Debian。推荐使用 Ubuntu 系统 ,实测在谷歌云上Ubuntu 20 环境搭建速度最快。CentOS 将 apt 替换为 yum ,其他步骤相同。

首次使用谷歌云,需要提前设置好防火墙规则,否则无法通过外部网络连接。

使用谷歌云,还需要先获取root 权限:

sudo -i

其他具有root权限的VPS直接运行:

目录1 安装环境2 安装mtg

安装环境

更新apt

apt update && apt upgrade -y

Debian 10 在更新时可能会存在用时过长或者卡死的情况。

安装git、wget

apt install git wget vim -y

 

安装Golang

wget https://golang.org/dl/go1.16.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

安装mtg

从GitHub克隆mtg源代码,并编译安装。安装后切换到mtg目录下,并将mtg二进制文件复制到可执行路径。

git clone https://github.com/9seconds/mtg.git
cd mtg
go build
cp mtg /usr/local/bin

生成密钥

mtg generate-secret --hex auca.com

这将返回一个ee开头的密钥,ee表示支持Fake TLS:

ee4d9c81938450f549c68b9d4865eef2be617563612e636f6d

将生成的密钥保存好,一会儿需要填入toml配置文件中。

为mtg创建一个系统服务文件

vim /usr/lib/systemd/system/mtg.service

vim 命令,按 i 进入插入模式,此时可以将内容粘贴进去。如果是在其他VPS,鼠标右键粘贴时还需要按住shift键。然后按ESC键退出,按 :wq 保存。

[Unit]
Description=mtg
[Service]
ExecStart=/usr/local/bin/mtg run /etc/mtg.toml
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target

编辑mtg配置文件

vim /etc/mtg.toml

最简单:

只需要配置密钥和端口便可以成功运行mtg。

secret = "ee4d9c81938450f549c68b9d4865eef2be617563612e636f6d"
bind-to = "0.0.0.0:443"

更丰富:

具有更多可自定义的选项。

# mtg的配置文件示例
#
# 配置文件应该只包含那些你将会
# 使用的选项。你不需要列举所有的选项。换句话说,每个
# 选项都有一个默认值。如果你对一个键值对进行注释,它
# 应该不会产生任何影响。
# 统计数字是唯一的例外。
# Debug 在调试模式下启动应用程序。它开始相当粗略地
# 在输出方面。实际上,我们的想法是,只有当你遇到任何问题时,才以调试模式运行它。
#debug = true
# 此处是密钥。请记住,mtg只支持 FakeTLS 模式(ee开头),简单模式
# 和安全模式(dd开头)都是是禁止的。密钥应该是base64编码的或者
# 以ee开头。
secret = "ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d"
# 主机本机地址和端口
bind-to = "0.0.0.0:443"
# 定义了允许多少个并发连接到这个代理。
# 所有其他传入的连接都将被丢弃。
concurrency = 8192
# 一个供TCP使用的用户空间缓冲区的大小。因为我们有两个连接。
# 那么我们每个连接都有tcp-buffer * (4 + 2):每个连接的读/写
# 每个连接+2个拷贝缓冲区,以便在套接字之间抽取数据。
tcp-buffer = "4kb"
# 有时你想强制要求mtg使用某些类型的IP连接到Telegram。mtg有4种模式:
# - prefer-ipv6:
# 同时使用ipv4和ipv6,但ipv6有优先权
# - prefer-ipv4:
# 同时使用ipv4和ipv6,但ipv4有优先权
# - only-ipv6:
# 只使用ipv6连接
# - only-ipv4:
# 只使用ipv4连接
prefer-ip = "prefer-ipv4"
# FakeTLS使用域名前置保护。需要设置一个端口。
domain-fronting-port = 443
# FakeTLS可以比较时间戳以防止探测。每个消息都有加密的时间戳。
# 所以,MTG可以比较这个时间戳并决定是否需要继续进行连接。
#
# 有时时间会有偏差,所以我们接受所有在这个参数的在一定时间内。
tolerate-time-skewness = "5s"
# netfwork定义了不同的网络相关设置
[network]
#请注意,MTG需要做一些外部请求。如果你没有传递公共ip,它将从一些外部服务中请求你的公共ip地址。
#
# 至于2.0,如果你自己设置了一个公共ip,mtg就不会发出任何网络请求,除了Telegram需要的那些。
#
# 所以,为了执行这些请求,它需要进行DNS查询。mtg 默认使用DoH进行解析,而不是主机本身的DNS解析。
# 默认情况下,mtg使用9.9.9.9。
doh-ip = "9.9.9.9"
# mtg可以通过代理工作(目前,只支持socks5)。代理服务器
# 配置是通过列表完成的。所以,你可以指定许多代理。
#
# 实际上,如果你提供一个空的列表,那么就不会有任何代理被
# 使用。如果你提供一个单一的代理,那么MTG将只使用它。
# 如果你提供了>=2个,那么mtg将在它们之间进行负载平衡。
#
# 如果你在这里添加一个空字符串,这相当于 "普通网络"。
#
# 代理配置是通过普通URI模式完成的。
#
#       socks5://user:[email protected]:port?open_threshold=5&half_open_timeout=1m&reset_failures_timeout=10s
#
# 使用socks5代理,user/password是可选的。正如你可以
# 看到,你可以在GET查询中指定一些参数。这些参数配置断路器。
#
# open_threshold指的是应该发生的错误数量,所以我们要停止
# 使用一个代理。
# half_open_timeout指的是一个时间段(用Golang持续时间表示)
# 之后,我们可以用这个代理重试
#
# reset_failures_timeout指的是当断路器处于关闭状态时,我们将冲掉错误的时间段。
# 当断路器处于关闭状态时。
#
# 关于断路器的细节。请参阅 https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
proxies = [
# "socks5://user:[email protected]:port?open_threshold=5&half_open_timeout=1m&reset_failures_timeout=10s"
]
# network.timeout定义不同的超时设置。
# tcp超时定义一个建立网络连接的全局超时。
# idle意味着当没有任何事情发生时,在socks组之间传输数据。
#
# 请注意, 握手没有故意的超时。详细内容:
# https://www.ndss-symposium.org/wp-content/uploads/2020/02/23087-paper.pdf
#
[network.timeout]
tcp = "5s"
http = "10s"
idle = "1m"
# 一些国家对Telegram连接进行主动探测。这项技术可以防止这种行为。
#
# mtg有一个关于连接指纹的缓存。实际上,是每个连接的第一个字节
# 。所以,它把它们存储在内存中的LRU+TTL缓存中。
# 你可以在这里配置这个缓存。
[defense.anti-replay]
# You can enable/disable this feature.
enabled = true
# 最大缓存。请注意,这个数字是近似值,mtg程序努力将数据存储得很密集,但也有可能
# 在某些情况下,也可以超过这个极限10-20%。
max-size = "1mib"
# 我们使用稳定的Bloom过滤器进行防重播缓存。这有助于
# 保持一个理想的错误率。
error-rate = 0.001
# 你可以通过使用不同的阻止列表来保护代理。如果客户端有
# ip在给定的范围内,我们不会尝试进行适当的握手。我们
# 实际上是将其路由到前台域。所以,这个客户永远不会
# 有机会使用mtg来访问Telegram。
#
# 请记住,屏蔽列表是以异步方式初始化的。所以。
# 当你启动一个代理时,屏蔽列表是空的,它们在后台被填充和处理。
# 在后台进行处理。任何URL中的错误都会被忽略。
#
[defense.blocklist]
# You can enable/disable this feature.
enabled = true
# 这是一个并发性的限制器。为了保护网站
# 超载,我们以这个数量的线程下载文件。
download-concurrency = 2
# 一个FireHOL格式的URL列表(https://iplists.firehol.org/)
# 你可以在这里提供链接(以 https:// 或 http:// 开始)或
# 本地文件的路径,但在这种情况下,它应该是绝对路径。
urls = [
# "https://iplists.firehol.org/files/firehol_level1.netset",
# "/local.file"
]
#屏蔽列表更新时间
#
update-each = "24h"
# statsd 统计集成
[stats.statsd]
# enabled/disabled
enabled = false
# host:port 为statsd的UDP端点
address = "127.0.0.1:8888"
# 统计数据的前缀
metric-prefix = "mtg"
# 要使用的标签格式
# 支持的值是 "datadog"、"influxdb "和 "graphite"。
# 默认格式是 graphite.
tag-format = "datadog"
# prometheus 监控集成
[stats.prometheus]
# enabled/disabled
enabled = true
# host:port where to start http server for endpoint
bind-to = "127.0.0.1:3129"
# prefix of http path
http-path = "/"
# prefix for metrics for prometheus
metric-prefix = "mtg"

 

systemctl daemon-reload
systemctl enable mtg
systemctl start mtg

输出 MTProxy 代理链接:

支持tg、t.me格式链接还有二维码。

mtg access /etc/mtg.toml

mtg2.0手动搭建成功-1024x367-1

运行以下命令查看mtg运行状态:

systemctl status mtg

查看-mtg-运行状态

 

查看systemd单元的mtg消息,命令如下:

journalctl -u mtg

项目地址:https://github.com/9seconds/mtg

原创文章,作者:admin,如若转载,请注明出处:https://www.huiyingwu.com/4252/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注