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直接运行:
安装环境
更新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:password@host: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:password@host: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
运行以下命令查看mtg运行状态:
systemctl status mtg
查看systemd单元的mtg
消息,命令如下:
journalctl -u mtg
项目地址:https://github.com/9seconds/mtg
文章评论
“显示全部”点击无效,内容显示不出来,还好发现里面有更多的内容,爬网页代码里看了。
差点错过作者那么多好的内容。
大佬,这个脚本可以自定义faketls使用的域名吗?
@旺旺碎冰冰 找到了