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 =…