许多新手用户在使用脚本搭建 Telegram 代理(尤其是 MTProxy + TLS)时,会遇到各种问题。从脚本运行失败到连接不稳定,再到客户端更新导致的兼容性问题,这些问题常常让人感到困惑。本文旨在汇总这些常见故障,并提供详细的排查和解决方法。无论您是使用 https://github.com/ellermister/mtproxy 、https://github.com/whunt1/onekeymakemtg脚本还是其他方式部署的代理,均可参考以下内容。
现象: 脚本执行完毕后,代理服务未能正常启动。
根本原因及解决方案:
脚本执行出错:
bash mtproxy.sh debug 命令,观察代理程序的具体启动过程及错误信息,从而进行针对性修复。依赖缺失或系统环境问题:
make、gcc 等编译工具。对于较新的系统,可能还需要处理PID限制等特定问题,后文会详细说明。现象: 代理刚开始能正常使用,但运行几小时或几天后突然失效,重启后又恢复正常。
根本原因及解决方案:
adtag 功能时,该问题尤为致命。sudo apt update && sudo apt install -y chrony && sudo systemctl enable --now chrony.service && sleep 2 && chronyc sources -v && systemctl status chrony.service# 立即同步时间
ntpdate -u time.google.com
# 为防止偏差累积,建议通过计划任务定期同步 (例如每小时同步一次)
# 编辑 crontab: crontab -e
# 添加以下内容:
0 * * * * ntpdate -u time.google.com
unsigned short(16位),最大只能存储 65535。而现代Linux系统的默认最大PID(通过 /proc/sys/kernel/pid_max 查看)远大于此值,例如 4194304。当分配的PID超过65535时,程序内部的断言会触发并终止进程。ellermister/mtproxy 脚本通过将PID截断(p & 0xffff)到16位范围内,巧妙地绕过了此限制:
void init_common_PID (void) {
if (!PID.pid) {
int p = getpid ();
// 将PID截断到16位以兼容旧的数据结构设计
PID.pid = p & 0xffff;
}
// ...
}
ulimit -n)限制过低(例如默认的1024),当连接数超过此限制时,新连接将无法建立,导致服务异常。# 查看当前限制
ulimit -n
# 修改系统限制 (需要root权限,修改后需重新登录终端并重启服务)
echo "root soft nofile 655350" >> /etc/security/limits.conf
echo "root hard nofile 655350" >> /etc/security/limits.conf
adtag 推广标签后无法连接现象: 在不使用 adtag 时代理正常,一旦配置了 adtag,客户端就无法连接。
原因与解决:
中间服务器配置过时: 使用 adtag 功能时,代理需要连接到 Telegram 官方的中间服务器(端口8888)。这些服务器的IP地址列表是动态变化的,且部分IP可能因各种原因无法访问。
# 更新 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
服务器通过IPv6连接到Telegram导致EOF错误:
mtg)在连接到Telegram服务器时,如果使用了IPv6,可能会出现 EOF 错误,导致连接失败。这是一个已知但尚未完全解决的问题。# 在启动命令中添加 --prefer-ip=ipv4 参数
./mtg run <your-secret> -b 0.0.0.0:3256 --prefer-ip=ipv4
最佳实践: 如果没有使用 adtag 推广的需求,建议不要配置 adtag 参数,让代理直接连接 Telegram 服务器。这种方式性能最高,也最为稳定[用户反馈]。
adtag 推广标签本身的问题adtagadtag 的账号有“年龄”限制。通常,账号注册时间短于3-4年的账号,在与 @MTProxyBot 交互创建tag时,会收到错误提示。Sorry, an error has occurred during your request. Please try again later.@MTProxyBot 正常交互。adtag 但不生效@MTProxyBot 创建 adtag 时绑定的服务器IP地址,必须与代理实际监听的地址完全一致(包括IPv4/IPv6类型)。如果服务器有多个IP,只能使用绑定的那个IP进行连接。端口无关紧要。现象: 在 Telegram Desktop 6.3 及以上版本中,会发现非TLS代理可以正常使用,但所有TLS代理都无法连接。此问题同样可能出现在 iOS 和 Android 客户端上。
根本原因: 客户端更新后,在TLS握手时发送的 ClientHello 数据包体积变大了,不再是固定的长度。旧的代理程序因无法动态读取握手数据包的长度和内容,导致握手失败。
解决方案:
ClientHello 数据包[用户反馈]。ellermister/mtproxy 脚本也已同步更新,经测试在三大平台(Windows, iOS, Android)均可正常使用。ulimit -n),避免连接数过多导致服务挂起。--prefer-ip=ipv4 参数强制使用IPv4,以避免潜在的兼容性和连接问题。adtag: 推广标签功能会引入额外的复杂性和不稳定因素。如果没有推广需求,直连模式是最佳选择。