Skip to content

[Bug] AnyTls在安卓上设置min-idle-session导致断流 #1891

@KorenKrita

Description

@KorenKrita

验证步骤

  • 我已经阅读了 文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
  • 我仔细看过 文档 并未解决问题
  • 我已在 Issue Tracker 中寻找过我要提出的问题,并且没有找到
  • 我是中文用户,而非其他语言用户
  • 我已经使用最新的 Alpha 分支版本测试过,问题依旧存在
  • 我提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
  • 我提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器或者堆砌大量对于复现无用的配置等。
  • 我提供了完整的日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
  • 我直接使用 Mihomo 命令行程序重现了错误,而不是使用其他工具或脚本。

操作系统

Android

系统版本

Android15

Mihomo 版本

v1.19.3

配置文件

proxies:
  - { name: '[AnyTls]', type: anytls, server: xx.xx.xx, port: 443, password: password, udp: true, idle-session-check-interval: 30, idle-session-timeout: 30, min-idle-session: 4, skip-cert-verify: false, apln: [h2, http/1.1], client-fingerprint: chrome }

描述

disable-keep-alive在安卓默认为true,anytls的min-idle-session确定了保留的session数但并未考虑其底层tcp连接状态。在手机锁屏后一段时间后,服务端持续未收到keepalive包断开tcp连接,而在tcp上的旧session并未检测连接状态只是按min-idle-session数进行了保留。下次手机解锁后会依然尝试用这些旧session直到经过

for i := 0; i < 3; i++ {
		session, err = c.findSession(ctx)
		if session == nil {
			return nil, fmt.Errorf("failed to create session: %w", err)
		}
		stream, err = session.OpenStream()
		if err != nil {
			_ = session.Close()
			continue
		}
		break
	}

这里的逻辑完全关闭完现存的旧连接。以我min-idle-session: 4的配置来说需要逐一关闭两轮,第一轮抛出一个too many closed session 然后需要下一次尝试建立连接才会再走一次逐一关闭,关闭掉剩下的一个session,创建新的session。而这其实会造成开屏后较长时间的断流不可用。

重现方式

环境安卓 配置anytls协议min-idle-session大于0 最好大于3
待息屏一段时间服务端/运营商断开tcp连接后 开启屏幕会触发一段时间的断流
其他配置了keepalive的系统平台无问题,安卓配置min-idle-session=0无问题

日志

日志中未发现有用信息
10:56:25开屏 持续断流至10:57:28恢复 持续1分钟
10:56:25.276   Debug: [Rule] use default rules
10:56:25.279   Debug: [PKG] 172.19.0.1:55326 --> 91.108.56.163:5222 by 10373[org.telegram.messenger]
10:56:25.279    Info: [TCP] 172.19.0.1:55326(org.telegram.messenger) --> 91.108.56.163:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:26.571   Debug: Auth success from 127.0.0.1:48212 ->
10:56:26.572   Debug: [Rule] use default rules
10:56:29.206   Debug: [PKG] 172.19.0.1:42966 --> 91.108.56.137:443 by 10373[org.telegram.messenger]
10:56:29.206   Debug: [PKG] 172.19.0.1:57620 --> 91.108.56.148:443 by 10373[org.telegram.messenger]
10:56:29.206    Info: [TCP] 172.19.0.1:42966(org.telegram.messenger) --> 91.108.56.137:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:29.206    Info: [TCP] 172.19.0.1:57620(org.telegram.messenger) --> 91.108.56.148:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:29.514   Debug: [Rule] use default rules
10:56:29.516   Debug: [PKG] 172.19.0.1:55336 --> 91.108.56.163:5222 by 10373[org.telegram.messenger]
10:56:29.517    Info: [TCP] 172.19.0.1:55336(org.telegram.messenger) --> 91.108.56.163:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:33.530   Debug: [PKG] 172.19.0.1:34306 --> 91.108.56.163:443 by 10373[org.telegram.messenger]
10:56:33.531    Info: [TCP] 172.19.0.1:34306(org.telegram.messenger) --> 91.108.56.163:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:41.546   Debug: [PKG] 172.19.0.1:43094 --> 91.108.56.163:443 by 10373[org.telegram.messenger]
10:56:41.546    Info: [TCP] 172.19.0.1:43094(org.telegram.messenger) --> 91.108.56.163:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:49.583   Debug: [PKG] 172.19.0.1:48648 --> 91.108.56.163:5222 by 10373[org.telegram.messenger]
10:56:49.583    Info: [TCP] 172.19.0.1:48648(org.telegram.messenger) --> 91.108.56.163:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:51.226   Debug: [PKG] 172.19.0.1:56196 --> 95.161.76.101:443 by 10373[org.telegram.messenger]
10:56:51.227    Info: [TCP] 172.19.0.1:56196(org.telegram.messenger) --> 95.161.76.101:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:54.380   Debug: use specified fingerprint:Chrome
10:56:54.498    Info: [TCP] [fdfe:dcba:9876::1]:57266(org.telegram.messenger) --> [2001:b28:f23f:f005::a]:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:58.246   Debug: [PKG] 172.19.0.1:57678 --> 91.108.56.163:443 by 10373[org.telegram.messenger]
10:56:58.247    Info: [TCP] 172.19.0.1:57678(org.telegram.messenger) --> 91.108.56.163:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:56:59.248   Debug: [Rule] use default rules
10:56:59.252   Debug: [PKG] 172.19.0.1:56212 --> 95.161.76.101:443 by 10373[org.telegram.messenger]
10:56:59.253    Info: [TCP] 172.19.0.1:56212(org.telegram.messenger) --> 95.161.76.101:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:03.242   Debug: [Rule] use default rules
10:57:03.243   Debug: [Rule] use default rules
10:57:03.245   Debug: [PKG] 172.19.0.1:53300 --> 91.108.56.148:5222 by 10373[org.telegram.messenger]
10:57:03.246   Debug: [PKG] 172.19.0.1:50148 --> 91.108.56.137:443 by 10373[org.telegram.messenger]
10:57:03.246    Info: [TCP] 172.19.0.1:50148(org.telegram.messenger) --> 91.108.56.137:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:03.246    Info: [TCP] 172.19.0.1:53300(org.telegram.messenger) --> 91.108.56.148:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:06.262   Debug: [Rule] use default rules
10:57:06.264   Debug: [PKG] [fdfe:dcba:9876::1]:46364 --> [2001:b28:f23f:f005::a]:443 by 10373[org.telegram.messenger]
10:57:06.267    Info: [TCP] [fdfe:dcba:9876::1]:46364(org.telegram.messenger) --> [2001:b28:f23f:f005::a]:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:07.271   Debug: [Rule] use default rules
10:57:07.274   Debug: [PKG] 172.19.0.1:51784 --> 95.161.76.101:443 by 10373[org.telegram.messenger]
10:57:07.275    Info: [TCP] 172.19.0.1:51784(org.telegram.messenger) --> 95.161.76.101:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:14.294   Debug: [PKG] 172.19.0.1:42256 --> 91.108.56.163:5222 by 10373[org.telegram.messenger]
10:57:14.298    Info: [TCP] 172.19.0.1:42256(org.telegram.messenger) --> 91.108.56.163:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:14.468   Debug: [Rule] use default rules
10:57:14.471   Debug: [PKG] [fdfe:dcba:9876::1]:40316 --> [2001:b28:f23f:f005::a]:5222 by 10373[org.telegram.messenger]
10:57:14.471    Info: [TCP] [fdfe:dcba:9876::1]:40316(org.telegram.messenger) --> [2001:b28:f23f:f005::a]:5222 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:27.603   Debug: [Rule] use default rules
10:57:27.605   Debug: [PKG] 172.19.0.1:45884 --> 91.108.56.163:443 by 10373[org.telegram.messenger]
10:57:27.608    Info: [TCP] 172.19.0.1:45884(org.telegram.messenger) --> 91.108.56.163:443 match GeoIP(telegram) using Telegram[[AnyTls]]
10:57:28.645   Debug: [Rule] use default rules
10:57:28.650   Debug: [PKG] 172.19.0.1:39690 --> 95.161.76.101:443 by 10373[org.telegram.messenger]
10:57:28.651    Info: [TCP] 172.19.0.1:39690(org.telegram.messenger) --> 95.161.76.101:443 match GeoIP(telegram) using Telegram[[AnyTls]]

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions