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

Comments