积木别倒

  • 首页
  • 科学上网
  • 机场推荐
  • 网站搭建
  • 网站分享
  • 其他
记录、分享
小白折腾之路
  1. 首页
  2. 科学上网
  3. 正文

谷歌云 Ubuntu 、Debian系统部署带伪装页面的 MTProxy 代理

22 5 月, 2021 2640点热度 0人点赞 0条评论

即使是使用mtg2.0,依然很容易被GFW所封锁,在找Telegram 直连解决办法时看到了两种解决思路。

一是给 MTProxy 搭建伪装网页,这个是 freejohn123 为伊朗用户提供的方案,由于GFW针对MTProxy协议精准识别,可能不适用于中国大陆地区。(2021年6月1号更新,经过验证单独使用此方法无法有效抗 GFW 封锁,建议搭配白名单使用)。

二是使用国内中隧道中转,在墙外落地机上搭建socks5或mtg代理,墙内中转机转发流量,通过socks5代理方式来实现直连 Telegram。这里需要提到的是,由于MTProto协议特征明显,千万不要用墙内的中转机搭建MTProxy,轻则被主机商删机,重则进局子喝茶。(据说跨省MTP会被精准识别)

本文便是第一种方案的教程,参考链接放在了最后面,也可以去查看英文博客教程。

需要提前准备好用来解析的域名,推荐使用二级域名。

如果是使用谷歌云需要先获取root权限

sudo -i

更新apt源

apt update && apt upgrade -y

安装git vim wget

apt install git vim wget -y

 

安装伪装网页

安装nginx

apt install nginx -y

编辑nginx 默认配置

vim /etc/nginx/sites-available/default

修改 server_name 为已经解析好的域名

 server_name demo.jimubiedao.com;

重启 nginx

systemctl restart nginx

此时可以在浏览器中输入域名,检查nginx是否正常安装。

安装https证书

安装snapd 及更新核心

apt install snapd
snap install core
snap refresh core

安装certbot

snap install --classic certbot

指定目录

ln -s /snap/bin/certbot /usr/bin/certbot

配置证书

certbot --nginx

检查证书是否自动续签

certbot renew --dry-run

此时可以在浏览器中输入https地址检查证书是否正常安装。

安装Go

下载最新版Go程序压缩包,并解压到/usr/local 目录下

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

使用Git命令克隆最新mtg源码,编译安装后,将二进制文件复制到可执行路径中。

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

配置mtg

mtg目录下运行:

生成密钥:

mtg generate-secret --hex demo.jimubiedao.com

将会生成一串ee开头的密钥,需要保存好,后面的配置文件中要填写此密钥。

配置Nginx

vim /etc/nginx/sites-available/default

将443端口改为993或其他任意端口。

 listen [::]:993 ssl ipv6only=on; # managed by Certbot 
 listen 993 ssl; # managed by Certbot

此时不要重启nginx,可能导致mtg设置失效。

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

设置系统服务

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

此时会创建一个新文件,写入配置,保存即可。

[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.toml 文件并写入配置。

极简配置:

只需要设置三行配置mtg即可正常运行,但更推荐使用完整配置。

secret = "ee4d9c81938450f549c68b9d4865eef2be617563612e636f6d"
bind-to = "0.0.0.0:443"
domain-fronting-port = 993

完整配置:

想要理解完整配置参数建议查看mtg项目主页,下面的中文内容为机器翻译,准确性不佳。

# 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 = 993

# 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"
显示全部
显示较少

最后开启mtg

systemctl daemon-reload
systemctl enable mtg
systemctl start mtg

输出 MTProxy 代理链接:

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

mtg access /etc/mtg.toml

复制 qrcode 链接在浏览器打开即可使用手机扫描二维码。

此时扫描二维码发现无法使用mtp代理,这是由于nginx占用443端口导致的,重启nginx就好了。

systemctl restart nginx

然后还可以为伪装网页增加一些内容而不是使用默认的nginx欢迎页。

流量监控

iftop

如果要共享mtp代理,还可以安装流量监控工具来查看实时流量:

apt install iftop

iftop 用法运行 iftop -h

https://github.com/freejohn123/mtproto-tls-server

https://v2how.github.io/post/2021-02-18-camouflage-telegram-mtproto-proxy-ubuntu-20-04/

https://github.com/9seconds/mtg/releases

https://snapcraft.io/docs/installing-snap-on-debian

https://serverfault.com/questions/828130/how-to-run-nginx-ssl-on-non-standard-port

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: mtg mtproxy telegram
最后更新:1 6 月, 2021

Jimu

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Telegram
📢 频道:积木别倒
🏄 群组:翻墙交流群
便捷工具
🚀 Speedtest
💨 Ping 测速
🧱 IP 被墙检测
🧱 域名被墙检测
归档
  • 2025 年 1 月
  • 2024 年 9 月
  • 2024 年 4 月
  • 2023 年 3 月
  • 2022 年 8 月
  • 2022 年 7 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 10 月
  • 2021 年 7 月
  • 2021 年 6 月
  • 2021 年 5 月
  • 2021 年 4 月
  • 2021 年 3 月
  • 2021 年 1 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 8 月
  • 2020 年 7 月
  • 2020 年 6 月
  • 2020 年 5 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2019 年 9 月
  • 2019 年 8 月
  • 2019 年 4 月
  • 2019 年 3 月

COPYRIGHT © 2025 jimubiedao.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang