Total Pageviews

Thursday, 16 June 2022

各款mtproxy程序

 MTProxyTLS一键安装绿色脚本。

mtproxy

交流群组

Telegram群组:https://t.me/EllerHK

安装方式

执行如下代码进行安装

mkdir /home/mtproxy && cd /home/mtproxy
curl -s -o mtproxy.sh https://raw.githubusercontent.com/ellermister/mtproxy/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh

 

使用方式

运行服务

bash mtproxy.sh start

调试运行

bash mtproxy.sh debug

停止服务

bash mtproxy.sh stop

重启服务

bash mtproxy.sh restart

卸载安装

因为是绿色版卸载极其简单,直接删除所在目录即可。

rm -rf /home/mtproxy

开机启动

开机启动脚本,如果你的rc.local文件不存在请检查开机自启服务。

通过编辑文件/etc/rc.local将如下代码加入到开机自启脚本中:

cd /home/mtproxy && bash mtproxy.sh start > /dev/null 2>&1 &
from https://github.com/ellermister/mtproxy
(MTProxy TLS 一键安装绿色极简脚本|Telegram 稳定安全代理


这个脚本相对于之前其他人发的,额外集成了 mtproxy 的新特性,根据指定的域名自动进行伪装。能够有效减少被运营商检测的风险,更优于普通的代理或者随机字串数据包的形式。

需要注意的是,这里的 TLS 是假的(Fake TLS)这会让你的 IP 访问起来更像是一个正常的网站,在被主动探测时可以返回伪装的网站内容。

所以,在这里推荐你使用默认端口:443,如果端口被占用或者 NAT 内网主机,可以设置其他端口。

除过 443 以外,还推荐你使用如下端口,都是常见的 https 端口,也可以进行一定程度的伪装:

如:443、2053、2083、2087、2096、8443
安装方式

执行如下代码进行安装,非常简单:

mkdir /home/mtproxy && cd /home/mtproxy
curl -s -o mtproxy.sh https://raw.githubusercontent.com/ellermister/mtproxy/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh

使用方式

运行服务

bash mtproxy.sh start

调试运行

bash mtproxy.sh debug

停止服务

bash mtproxy.sh stop

重启服务

bash mtproxy.sh restart

卸载安装

因为是绿色版卸载极其简单,直接删除所在目录即可。

rm -rf /home/mtproxy

性能优化

如果你所配置的代理需要公开分享或者给大量人使用,那么你可能会遇到 VPS 最大文件描述符的错误提示。

编辑文件 vi /etc/security/limits.conf 在文件尾或者对应段加入内容,对用户级进行配置

* soft nofile 655350
* hard nofile 655350

表示对任何用户的软硬限制提升到 655350 个

接下来对系统级进行配置,vi /etc/sysctl.conf 加入配置

fs.file-max = 655350

用户打开的最大文件描述符总数不会超过系统级的总数。

将内核参数生效

sysctl -p

(注意,你需要新开一个 ssh,在新 session 中启动 mtproxy,来保证上述参数生效)
gost 中转

鉴于伊朗用户的 MTProxy 使用率比较高,封锁程度也越来越强。半实现 tls 的 mtp 也难以长时间支撑大量用户的连接。

在这里经过自测被封锁的现象,给予两点原因参考:

同一 IP 被大量用户长时间访问会被运营商检测到。

半 tls 未能完全骗过运营商。

目前测试中,经由 gost 提供的 tls 完整协议来封装 mtproxy 流量到 MTP 服务器会相对稳定。

即:client --> iran server --> mtproxy server

这个方法解决了同一 IP 被大量用户同时访问连接的问题,在 firewall 看来,只有一台服务器对外提供服务。

而对于在伊朗境内的流量被封锁的规则和程度都很小,这种方式也是目前比较稳定的做法。

下载 gost:

wget https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz
gzip -d gost-linux-amd64-2.11.1.gz
mv gost-linux-amd64-2.11.1 gost
chmod +x gost

iran server (45.93.168.1):

./gost -L=tcp://:443 -L=udp://:443 -F=forward+mtls://1.1.1.1:8443?mbind=true>/dev/null 2>&1 &

监听 443 端口的 TCP 和 UDP 数据,并将其转发给 1.1.1.1 服务器的 8443 端口。

mtproxy server (1.1.1.1):

./gost -L=mtls://:8443/127.0.0.1:443>/dev/null 2>&1 &

监听 8443 端口数据,并将其转发给 443 端口 (mtproxy)

用户只需要在 Telegram 中配置伊朗的服务器 IP 和端口就可以实现连接到 mtproxy 代理服务器。
写在最后

关于封锁的问题,如果你通过上文方式部署 mtproxy 还会被检测,那么建议使用冷门 IP 段的数据中心会降低封锁的可能。也可以通过 gost 转发中转机到你的 mtproxy 服务器之间的流量,这一段是实现真正的 tls 传输,以此骗过防火墙并放行流量 (上文已补充)。

如果你根据以上教程已经成功配置代理,可以加入我的群组进行讨论:

https://t.me/EllerHK

有任何疑问也可以在群组中帮你解决。

这个脚本的 Github 地址:https://github.com/ellermister/mtproxy )
-------------------------------------------------------------------------------

编译安装最新版 mtproxy-go 一键脚本

因为go版mtproxy代码更新了抗重放攻击等功能后,原作者没有直接放出编译好的程序,所以根据逗比原版一键脚本魔改,直接拉取最新代码进行编译,最新版已经支持 TLS 伪装

下载安装:

wget -N --no-check-certificate https://github.com/whunt1/onekeymakemtg/raw/master/mtproxy_go.sh && chmod +x mtproxy_go.sh && bash mtproxy_go.sh

配置文件在 /usr/local/mtproxy-go/mtproxy.conf ,可以手动修改,配置项详细介绍参见 mtg 文档

go 安装目录在 /tmp/go ,可以手动删除

编译安装最新go版mtproxy教程

有空的话我会更新编译好的文件到 builds

使用如下命令下载安装(以 linux-amd64 为例)

# Ubuntu/Debian
apt-get install -y psmisc
wget -O mtg --no-check-certificate https://raw.githubusercontent.com/whunt1/onekeymakemtg/master/builds/mtg-linux-amd64
mv mtg /usr/local/bin/mtg
chmod +x /usr/local/bin/mtg
# CentOS
yum install -y psmisc
wget -O mtg --no-check-certificate https://raw.githubusercontent.com/whunt1/onekeymakemtg/master/builds/mtg-linux-amd64
mv mtg /usr/local/bin/mtg
chmod +x /usr/local/bin/mtg

下载完成后直接参考使用方法,以下为详细手动安装步骤

安装基础环境

选择对应系统执行以下命令

# Ubuntu/Debian
apt-get install -y git gcc automake autoconf libtool make psmisc
# CentOS
yum install -y git gcc automake autoconf libtool make psmisc

安装 go

下载安装go语言编译环境

wget -N --no-check-certificate https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz 
tar -xvf go1.13.4.linux-amd64.tar.gz && rm -rf go1.13.4.linux-amd64.tar.gz
mv go /usr/local
export GOROOT=/usr/local/go
export GOPATH=$HOME/mtg/tmp
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
cd $HOME

编译安装

拉取 mtproxy-go 源码并编译安装,编译完成过后,输出在当前目录,文件名为 mtp

git clone -b master https://github.com/9seconds/mtg.git $HOME/mtg
cd $HOME/mtg
go mod download
go build
mv $HOME/mtg/mtg /usr/local/bin/mtg
chmod +x /usr/local/bin/mtg

运行

直接输入 mtg 即可调用

查看帮助:mtg -h

查看生成密钥帮助:mtg help generate-secret

查看运行帮助:mtg help run

生成普通密钥:mtg generate-secret simple

生成普通安全密钥:generate-secret secured

生成TLS伪装密钥(以 itunes.apple.com 为例):mtg generate-secret -c itunes.apple.com tls

运行示例:

mtg run -b 0.0.0.0:443 --cloak-port=443 ee055a9b283c6ef2fbea89a374df31e7966974756e65732e6170706c652e636f6d

后台运行:

nohup mtg run -b 0.0.0.0:443 --cloak-port=443 ee055a9b283c6ef2fbea89a374df31e7966974756e65732e6170706c652e636f6d >> /tmp/mtg.log 2>&1 &

查看日志:cat /tmp/mtg.log

结束进程:killall mtg

更多运行参数参见 mtg 文档

[Merged]一键编译安装最新的 MTProxy-Go(修复版)

修复记录

  • 2021/06/22: 修复 MTProxy-Go 升级至 v2 版本后,仓库分支名变更
  • 2020/12/05: 修复 Golang 下载地址错误

如何使用

wget -N --no-check-certificate https://github.com/if1y/MTProxy-GO_OnekeyMake/raw/master/mtproxy_go.sh && chmod +x mtproxy_go.sh && bash mtproxy_go.sh

其它信息

from https://github.com/whunt1/onekeymakemtg 

-----------------------------------------------------------------

 在Oracle ARM 架构的免费 VPS上, 搭建 MTProto Proxy(Mtproxy) 


很多人白嫖了 Oracle ARM 架构的服务器不知道放点啥,用来搭建 MTP 代理,却很容易失败,遇到各种错误阻碍,今天简单整理下在 ARM 架构下搭建 MTProxy 的方法教程。

MTProto Proxy(也叫 MTProxy) 是 Telegram 官方开源的代理协议用于 Telegram 通信连接,项目原本是基于 C 语言开发的,因为只适配了 x86 架构的, 所以你直接去编译是编译不通过的,也有很多人给官方提交了要求适配的 issue,也没有得到回应。

官方仓库至今已经停更 3 年了协议本身也不是不能用,在大多数服务器提供商售卖的都是 x86 架构的市场下,大多数人已经足以使用,并且在协议本身支持了 FakeTLS 得情况下,也没有太大更新的必要。

为了解决这部分少数人的需求,我们选择第三方开发的 MTProxy 服务端,由于它是用 Golang 开发的,可以很轻松编译发布到不同的平台,也包括我们用到的 ARM 架构。

仓库地址:https://github.com/9seconds/mtg
版本区别

它分为两个版本 v1 和 v2,会有些细微差别,在使用上感官区别不大。最重要的是, v1 支持 adtag 频道分享,而 v2 不支持这项功能。

因为作者认为 MTP 代理本身就是在比较私密的朋友,小众圈子中进行使用,才会安全保密,不会被检测到。若用到大范围的公开分享推广,并通过广告取益,就很容易被运营商检测到,这两者是相悖的,即在最新版本中移除了 adtag,但同时也会在一些重大问题上维护 v1 版本。
一键脚本

项目地址:https://github.com/ellermister/mtproxy

最新的一键脚本已经支持 ARM 服务器,mtproxy 一键安装脚本当在 ARM 架构服务器中会自动给你编译安装 9seconds/mtg .

mkdir /home/mtproxy && cd /home/mtproxy
curl -s -o mtproxy.sh https://raw.githubusercontent.com/ellermister/mtproxy/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh

Docker 版本

如果你没有安装 Docker,可以通过下面的脚本安装:

sh get-docker.sh

通过 docker 建立 mtproxy 代理容器:

docker run --name nginx-mtproxy -d  \
-p 80:80 -p 443:443 \
-e ip_white_list="OFF" \
ellermister/nginx-mtproxy:latest

该镜像还有更多用法,支持白名单等功能,详见 https://hub.docker.com/r/ellermister/nginx-mtproxy
编译安装

如果你想要自己编译安装,可以参考以下步骤。这里使用的是 v1 版本的 mtg,v2 同理,只是运行方式不同。
获取源码

mkdir ~/work && cd ~/work
git clone https://github.com/9seconds/mtg.git -b v1 --depth=1

安装 golang

根据你的系统架构选择 golang 安装包:https://go.dev/dl/ 这里是 arm64。

wget https://go.dev/dl/go1.18.4.linux-arm64.tar.gz
tar -xzf go1.18.4.linux-arm64.tar.gz -C /usr/local/
export PATH=$PATH:/usr/local/go/bin
rm -f go1.18.4.linux-arm64.tar.gz

编译 mtg

默认作者提供的 Makefile 脚本中是对当前系统进行编译可用的静态文件,如果你是在 ARM 架构下的系统上编译,什么都不用改变,如果是想跨平台编译,参考 CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build进行编译.

cd ~/work/mtg
make static

编译成功,你会在当前目录下得到一个 mtg 静态文件,你可以赋予权限,并将其复制到其他地方使用。

chmod +x mtg
cp mtg /usr/local/bin

运行 mtg

mtg run <secret> <adtag>

参数解释

    secret 为你的 MTProxy 密钥,包含一段 32 位随机字符和你的 fakeTLS 使用的域名

    adtag 为推广频道使用的密钥,可以通过机器人 @MTProxybot 获取

生成带 tls 伪装的 secret

mtg generate-secret -c aws.amazon.com tls
ee5244d2387a0b6945bf96d0433ea3009b6177732e616d617a6f6e2e636f6d

运行完整示例

mtg run ee5244d2387a0b6945bf96d0433ea3009b6177732e616d617a6f6e2e636f6d 7cfeefce74c922a85e2c6c3c8efb50e3 -b 0.0.0.0:443 >/dev/null 2>&1 &

如果你需要开启启动时运行,可以将以上命令加入到 /etc/rc.local 中。

-----------------------------------------------------------------------------------------------

Oneline distbute and install script for mtg.

mtg-dist

Oneline distbute and install script for mtg ( https://github.com/9seconds/mtg ).

Note

mtg 2.0+ supports FakeTLS mode only. Re-run this script to upgrade.

Install

bash <(wget -qO- https://git.io/mtg.sh)

Offline Install

For machines have difficulties visiting github, download the following files:

then run:

sh mtg-dist.bin mtg-2.0.1-linux-amd64.tar.gz

Uninstall

systemctl disable mtg 
systemctl stop mtg 
rm -f /usr/local/bin/mtg /etc/systemd/system/mtg.service /etc/mtg.toml   

for version 0.0.6 and prior

systemctl disable mtg 
systemctl stop mtg 
rm -f /usr/local/bin/mtg /lib/systemd/system/mtg.service /etc/mtg.conf    

Customize

The configure file is at /etc/mtg.toml, refer to the offcial document for whatever you want to custom.

After edited just restart the mtg service:

systemctl restart mtg 

Compile

This project uses makeself to generate a .bin file.

./makebin.sh 
from https://github.com/cutelua/mtg-dist 
----

MTProxy

Simple MT-Proto proxy

Building

Install dependencies, you would need common set of tools for building from source, and development packages for openssl and zlib.

On Debian/Ubuntu:

apt install git curl build-essential libssl-dev zlib1g-dev

On CentOS/RHEL:

yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"

Clone the repo:

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy

To build, simply run make, the binary will be in objs/bin/mtproto-proxy:

make && cd objs/bin

If the build has failed, you should run make clean before building it again.

Running

  1. Obtain a secret, used to connect to telegram servers.
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
  1. Obtain current telegram configuration. It can change (occasionally), so we encourage you to update it once per day.
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
  1. Generate a secret to be used by users to connect to your proxy.
head -c 16 /dev/urandom | xxd -ps
  1. Run mtproto-proxy:
./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1

... where:

  • nobody is the username. mtproto-proxy calls setuid() to drop privilegies.
  • 443 is the port, used by clients to connect to the proxy.
  • 8888 is the local port. You can use it to get statistics from mtproto-proxy. Like wget localhost:8888/stats. You can only get this stat via loopback.
  • <secret> is the secret generated at step 3. Also you can set multiple secrets: -S <secret1> -S <secret2>.
  • proxy-secret and proxy-multi.conf are obtained at steps 1 and 2.
  • 1 is the number of workers. You can increase the number of workers, if you have a powerful server.

Also feel free to check out other options using mtproto-proxy --help.

  1. Generate the link with following schema: tg://proxy?server=SERVER_NAME&port=PORT&secret=SECRET (or let the official bot generate it for you).
  2. Register your proxy with @MTProxybot on Telegram.
  3. Set received tag with arguments: -P <proxy tag>
  4. Enjoy.

Random padding

Due to some ISPs detecting MTProxy by packet sizes, random padding is added to packets if such mode is enabled.

It's only enabled for clients which request it.

Add dd prefix to secret (cafe...babe => ddcafe...babe) to enable this mode on client side.

Systemd example configuration

  1. Create systemd service file (it's standard path for the most Linux distros, but you should check it before):
nano /etc/systemd/system/MTProxy.service
  1. Edit this basic service (especially paths and params):
[Unit]
Description=MTProxy
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/MTProxy
ExecStart=/opt/MTProxy/mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> -P <proxy tag> <other params>
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. Reload daemons:
systemctl daemon-reload
  1. Test fresh MTProxy service:
systemctl restart MTProxy.service
# Check status, it should be active
systemctl status MTProxy.service
  1. Enable it, to autostart service after reboot:
systemctl enable MTProxy.service
from https://github.com/TelegramMessenger/MTProxy 
-----
MTProxy+FakeTLS|Telegram 稳定代理配置教程


FakeTLS,是将 MTProto 流被包装在标准 HTTPS(第一条隧道协商消息)中,在该 HTTPS 中传输域(伪造)。在协商了 MTProto 协议-不使用 Fake-TLS 之后,流量便开始使用具有随机长度(dd-密钥)的常规 MTProto 协议。

之前配置过 MTP 的中转教程,数据通过 KCP 封装,经过 UDP 传输,会相对比本文的方式稳定可靠。

如需参考:通过 KCP 中转实现 MTP 代理(UDP) | Telegram 实现稳定代理

本文是通过官方前不久更新出的 fake tls 功能实现的数据伪装,比原本的 mtp 协议更稳定。

事实上 MTP 官方程序原本就有两种代理方式一种是,无混淆;另外一种是增加随机字串,以防止数据包被 ISP 检测。

目前用到的就是第三种实现伪装 tls 传输数据,如果你还使用的旧版本的 MTP 代理,是没有这个功能的,建议重新编译后使用。

安装教程
On Debian/Ubuntu

apt install git curl build-essential libssl-dev zlib1g-dev

On CentOS/RHEL:

yum install openssl-devel zlib-devel
yum groupinstall "Development Tools"

Clone the repo:

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy

进行编译

执行 make 进行编译,生成的二进制文件在 objs/bin/mtproto-proxy

make && cd objs/bin

如果你编译失败,可以执行 make clean 清理缓存,重新进行编译步骤。
运行使用
获取 Telegram 通信密匙

curl -s https://core.telegram.org/getProxySecret -o proxy-secret

获取当前 Telegram 代理配置(官方建议每天更新此文件)

curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

生成代理密匙

如果你没有安装 head 可以复制我以下所生成的,修改个别字符即可。

[root@eller MTProxy]# head -c 16 /dev/urandom | xxd -ps
271082e5da56c2877f215c225eb93ffe

启动 MTP 服务端

./mtproto-proxy -u nobody -p 8888 -H 443 -S 271082e5da56c2877f215c225eb93ffe --aes-pwd proxy-secret proxy-multi.conf -M 1

启动成功后,客户连接配置:

端口:443,密匙:271082e5da56c2877f215c225eb93ffe
配置 TLS

此时你根据上述命令默认运行的是不带有 tls 功能的。

在通过 ./mtproto-proxy --help 指令查看到指定 tls 传输的说明

--domain/-D <arg> adds allowed domain for TLS-transport mode, disables other transports; can be specified more than once(
為 TLS 傳輸模式添加允許的域,禁用其他傳輸;可以多次指定)

此时,修改启动命令:

./mtproto-proxy -u nobody -p 8888 -H 443-S 271082e5da56c2877f215c225eb93ffe --aes-pwd proxy-secret proxy-multi.conf -M 1 -D "www.google.com"

MTP 的默认文档中没有说明客户端如何连接,我在 issue 中找到了客户端连接方式:

即其他参数不变,secret 修改为如下字符串

ee+secret+domain 的十六进制

可以通过 python3 生成

>>> print ("ee"+"271082e5da56c2877f215c225eb93ffe"+"www.google.com".encode().hex())
ee271082e5da56c2877f215c225eb93ffe7777772e676f6f676c652e636f6d

注意:这个 secret 只是客户端这样拼接填写,服务端还是保持原始的密匙,即本文的:271082e5da56c2877f215c225eb93ffe

此时通过发现客户端还是无法连接通。

经过不断的反复尝试,发现 Windows 的 TG 可以连通,移动设备却不能使用。(如果你也有该现象,尝试更换代理域名、关闭本地代理工具)

尝试更改 google 域名为 centos 的,经过测试发现可以连通。猜测可能因为我本地 google 代理的问题,也可能是因为其他的的原因,目前没有测试,建议更改为无 ban 白名单的域名。

且最好是支持 TLS1.3!也不是说不是 tls1.3 就不能用,只是因为 mtp 的协议伪装是按照 tls1.3 设计的,这样看起来会更友好一些。当然,我并没有在文档中找到相关的东西,代码也没有去研读,这些全是在 issue 里面所了解到的。

./mtproto-proxy -u nobody -p 8888 -H 443-S 271082e5da56c2877f215c225eb93ffe --aes-pwd proxy-secret proxy-multi.conf -M 1 --domain www.centos.org

客户端连接信息:

IP:xx.xx.xx.xx (有人建议通过域名解析到 IP,客户端填写域名,能有效避免 ISP 审查,该方式也没有大量测试,无法得出具体结果...)

secret:ee271082e5da56c2877f215c225eb93ffe7777772e63656e746f732e6f7267

port:443
供参考:Telegram 为 MTProto 代理使用 3 种类型的密钥:

常规密钥(由 DPI 轻松确定)

前两个字母-dd-随机消息长度(DPI 只能通过连接协商的第一个数据包来确定协议-然后看起来像普通的 https / TLS) 密匙:dd+secret

前两个字母-ee-伪 TLS +随机消息长度(DPI 无法确定协议,第一个消息以及所有后续消息看起来像 HTTPS / TLS)

密匙填写:

第一种是无混淆的即客户端密匙原模原样填写,无需变化。

第二种是有随机填充的,客户端需要在原始的密匙开头加上,如:dd+secret

第三种就是 fake tls 混淆,客户端需要再原始的密匙开头加上 ee,还需要在密匙后面拼接域名的十六进制形式,如:ee+secret+domain_in_hex

在线转换十六进制:https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html
写入常驻后台运行

cat > /home/MTProxy/objs/bin/run.sh <<EOF
#!/bin/bash
cd "$(dirname "$0")"
./mtproto-proxy -u nobody -p 8888 -H 2083 -S 271082e5da56c2877f215c225eb93ffe --aes-pwd proxy-secret proxy-multi.conf -M 1-6 --domain www.centos.org >/dev/null 2>&1 &
EOF
chmod +x /home/MTProxy/objs/bin/run.sh

写入开机启动

编辑 /etc/rc.local 加入启动脚本

/home/MTProxy/objs/bin/run.sh

开机启动无效,大多数原因是启动脚本没有执行权限,可赋值启动脚本权限进行修复。

chmod +x /etc/rc.local
chmod +x /etc/rc.d/rc.local

关于调试

在我调试时遇到很多问题,例如你设置的代理域名,执行时提示失败,也并不能代表你不能用。如:

[18121][2020-01-06 18:44:53.583586 local] Not found TLS 1.3 support on domain www.centos.org
[18121][2020-01-06 18:44:53.584159 local] Failed to update response data about www.centos.org, so default response settings wiil be used
[18121][2020-01-06 18:44:53.584188 local] It is recommended to not use workers with TLS-transport[18121][2020-01-06 18:44:53.584269 local] creating 1 workers

反倒是,在我刚开始测试时,得不出任何结论时,这个失败的域名反倒可以连通,浏览器访问也是成功的。

其实这只是 MTP 尝试获取该域名的证书相关信息时,为客户端交换信息做的准备工作。获取不到的就取预设的默认值,也是可以工作的。

这是正常能获取到的信息:

[17763][2020-01-06 18:35:57.923782 local] Successfully checked domain eller.top in 0.112 seconds: is_reversed_extension_order = 0, server_hello_encrypted_size = 1864, use_random_encrypted_size = 1
[17763][2020-01-06 18:35:57.923839 local] It is recommended to not use workers with TLS-transport[17763][2020-01-06 18:35:57.923934 local] creating 1 workers

另外你也可以通过浏览器访问 https://ip:port 进行测试查看证书是否正确,以及是否重定向成功。
关于安全性

如果采用了 tls,对于网路运营商而言,他并不能看到具体传输的数据内容,只可以分析出你的数据包是 HTTPS。能获取的信息只有服务器 IP 地址、以及域名证书。

由于获取到的信息有限,你可以借此将你的服务器实现更深度的隐匿。

例如你使用谷歌云的服务器,代理域名设置为 google.com。

使用亚马逊(aws)服务器,代理域名设置到 aws.amazon.com。

使用 DO 的服务器,代理域名设置到 digitalocean.com。

这样一来,你的 IP 地址、证书一致,对于其他人而言这就是一个正常的网站,无论是从正常访问还是探测的角度都很难识别出这是 MTP 代理服务器。
--------------------------------------------------------------------------------------

MTProxy无法连接等问题汇总解析

 

很多小白使用脚本搭建的代理总是无法运行或者无法连接,有一些过于小白的情况,比如脚本运行中断也不会看错误。除此之外还有一些情况用着用着无法连接,以及近期 telegram 客户端更新导致一些 fakeTLS 代理无法连接的问题统一在这里说明下。

安装 MTProxy +TLS 代理程序脚本地址:https://github.com/ellermister/mtproxy

无论你是否用我的这个脚本创建的代理或者别的方法建立的代理都可以参考以下内容。

安装完成后,显示未运行

出现这种情况,很大概率是脚本运行出错了,有可能是网络问题没有正确获取到公网 IP 或者系统某些包版本特殊导致语法错误被迫中断了,小白用户要仔细检查上文输出了什么。

请最好使用 Debian/Ubuntu 的系统,版本也不要太旧。

如果不是以上情况,可以使用我的脚本 debug 功能进行观察目标程序是否运行成功,以及是否有错误,进而去解决错误。

bash mtproxy.sh debug

无法连接或过段时间就无法连接了

出现这个问题,说明你的配置基本没什么问题。但会经常是以下两种情况。

系统时间不准确

很多服务器系统的时钟是存在问题的,缺分少秒的,运行久了自然会导致时间落后于标准时间。

脚本往往会输出时间不准确的错误或者反复重启无法连接。

在这种情况下,你只需要同步你的时间到标准时间就行:

ntpdate -u time.google.com

为频繁避免这种情况,建议通过计划任务每小时甚至每分钟进行同步。

0 * * * * ntpdate -u time.google.com

官方 C 程序 pid 问题

官方的 C 代理程序年久失修,经常会在首次启动或者运行一段时间后挂掉。

原因之一是这个程序创建新进程时所获取的 pid 过大遇到断言被终止。

程序创建的 worker 记录的 pid 数据类型 u short 是 16 位的,它的最大范围是 65535,而现代的操作系统中无论是默认还是通过内核修改都已经可以实现 pid 达到 4194304,你可以通过下列命令查看你的系统最大 pid.

# cat /proc/sys/kernel/pid_max
4194304

因为创建的 worker 进程的 PID 数据值远超于预设的数据类型,就会被程序中的断言中断报错。由于它这个程序相较复杂,没法修改数据类型,印象过多,我的脚本源中已经尽可能修复了 pid 的问题,来通过截断的形式让其正常运行,只要程序进程的低位数不相同就不会报错,虽然不是最优解,但也可以暂时解决问题。

修改参数

void init_common_PID (void) {
  if (!PID.pid) {
    int p = getpid ();
    // 将 PID 截断到 16 位以兼容旧的数据结构设计
    // 现代 Linux 系统的 PID 可能超过 65535,但协议中 pid 字段只有 16 位
    PID.pid = p & 0xffff;
  }
  if (!PID.utime) {
    PID.utime = time (0);
  }
}

ulimit 限制过低

还有一种比较少见的情况,系统打开的句柄数过低,代理创建的连接数过多,如果你的服务器有运行其他程序更会加重这种情况的发生。

# ulimit -n
1024

可以按如下命令修改,执行后需要重新打开终端才生效,并重启软件使其生效。

echo "root soft nofile 655350"  >> /etc/security/limits.conf
echo "root hard nofile 655350"  >> /etc/security/limits.conf

增加了 adtag 就无法连接

telegram 的代理程序提供两种连接方式,一种是直连 telegram 服务器的 443 端口,一种是连接 telegram 提供的中间服务器的 8888 端口。而你想要使用 adtag 就必须连接到这个服务器,这个服务器有一部分是无法 ping 通的,你需要及时更新服务器配置,如官方文档所示:

# IPV4
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
# IPV6
curl -s https://core.telegram.org/getProxyConfigV6 -o proxy-multi-v6.conf

这个 URL 返回的 IP 地址是随机的,不管出于什么原因,其中有一部分 IP 确实无法访问,及时更新它就好。

除此之外,在 2025 年 11 月这个时间节点上,如果你使用的 mtg 或者是其他程序,当你的程序连接到 telegram IPV6 服务器时,也会遇到 EOF 的错误,具体还未能够解决。

尽量连接到 telegram IPV4 的服务器,通过增加首选参数 --prefer-ip=ipv4 来避免此问题:

./mtg run ee10c5ae5abae86949b39cf16fd6a898127777772e6769746875622e636f6d  341dff62da42e62a8bd6fee265a76318  -b 0.0.0.0:3256 --prefer-ip=ipv4

如果你没有使用 adtag 的需求,就不要乱填写这个参数,忽略留空就好了,这样代理会直连 telegram,此种方式性能最高。

无法创建 adtag

这个问题在群里或者官方 issue 仓库中反馈太多了,官方并没有直接的解释,根据用户反馈的经验。这是你的 telegram 账号创建的时间太短了,可能需要 3 年甚至 4 年以上才能够创建。

否则你就会遇到 Sorry, an error has occurred during your request. Please try again later.

你可以去购买 3、4 年以上的账号,如果可以,可以让对方在销售前测试是否可以进行与 @MTProxybot 交互创建标签。

tg desktop6.3 版本无法连接代理

这是最近发生的事情,开发也没有调查清楚事情的原因。

https://github.com/telegramdesktop/tdesktop/issues/30004#issuecomment-3541855592

状况就是,非 TLS 的代理一切正常,使用 TLS 的代理就会无法连接,或在 IOS、Android 客户端无法连接等。

python 版本作者在第一时间进行修复了,具体参见 commit.

从更新日志来看,可能是因为客户端更新后进行 tls 握手时的 ClientHello 数据变大了,不再是固定的。所以需要动态读取长度以及读取握手包体。

作为用户使用最新版本的代理即可,我的脚本也都已经更新,并在三端中测试通过。

adtag 推广标签不生效

很多人配置了推广标签不生效,前提是你的程序支持配置 adtag,那么除此之外的原因有以下几种:

服务器 IP 地址混用

通过 @MTProxybot 机器人交互创建 tag 时,给定的服务器 IP 已经要准确,端口本质上无所谓, IPV4 和 IPV6 本质上不能混用,你配置了 IPV4,那么使用 IPV6 连接时也不会给你显示推广。

同理,服务器多 IP 的情况下,只能使用配置的 IP 进行连接和用于连接到 TG 服务器,不能存在后置代理。

如果你的 IPV6 代理不显示推广,你可以通过域名解析到这个 IP,通过域名连接会生效哦。

已经加入的频道不显示

如果你设立的推广频道是自己已经加入的,那肯定不显示,换一个没有加入该频道的号就会显示了。

延迟

一般刚配置好没有那么快生效,最慢 20-30 分钟就会显示。大部分时候都会秒显示或者 1-2 分钟就会生效。如果还没有,就要检查你的配置是否正确了。

问题总结

  • 时间不同步,如果你使用 adtag,走中间代理服务器意味着你时间必须无限接近于世界标准时间。

  • 系统打开文件数过低,进程无法创建,请优化你的系统内核参数。

  • 使用 IPV6 连接到了 TG 服务器,不是客户端不能使用 IPV6 客户端,是服务器不能使用 IPV6 连接 TG.

  • 代理程序过旧,需要更新。

  • 官方 C 程序问题过多,重启可解决大部分问题。

  • 系统、脚本问题,小白请多搜索,多学习,多问 AI。

  • 能不设置 adtag 就不要设置。

如果你还有其他问题,欢迎进群交流:

https://t.me/ellerhk


No comments:

Post a Comment