mihomo icon indicating copy to clipboard operation
mihomo copied to clipboard

[Bug] Direct出站指定ipv4-prefer时建立tcp连接但不发送数据

Open qwerr0 opened this issue 9 months ago • 2 comments

验证步骤

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

操作系统

Linux

系统版本

Debian12

Mihomo 版本

Mihomo Meta alpha-7c8fba33 linux amd64 with go1.24.0 2025年 03月 04日 星期二 06:35:57 UTC Use tags: with_gvisor

配置文件

mode: rule
ipv6: true
dns:
  enable: true
  ipv6: true
  use-system-hosts: true
  use-hosts: true
  enhanced-mode: fakeip
  nameserver:
  - system
  - dhcp://system
proxies:
-  { name: preferv4direct, type: direct, ip-version: ipv4-prefer }
rules:
- MATCH,preferv4direct

描述

ip-version 的值为 ipv4, ipv6, ipv6-prefer 时均正常, 仅在 ipv4-prefer 且传输 tcp 流量时有问题

重现方式

代理服务器按照上述配置运行 要连接的目标地址使用 iperf3 / nc 监听均可复现: iperf3 -s -p 5201 nc -l -p 1111 -6 # -6 监听 *:1111, 而不指定 -6 或指定 -4 则会监听 0.0.0.0:1111 连接方法: iperf3 -c 域名(域名解析包括一个IPv4和一个IPv6, 这样才能测试是否IPv4优先) -p 5201 -R nc 域名 1111 现象: web-ui 里能看到连接, 连接建立后不传输数据, 过很久以后连接自动断开 通过在目标地址输入命令 ss -ltp | grep iperf3, 发现 LISTEN 0 4096 *:5201 *:* users:(("iperf3",pid=255019,fd=3)) # 如果目标服务器的软件监听*:*, 这样会出现BUG, 只建立连接不传输数据 LISTEN 0 4096 0.0.0.0:5201 0.0.0.0:* users:(("iperf3",pid=259193,fd=3)) # 如果软件监听0.0.0.0则是正常的, 连接建立后能正常传输数据

日志

3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.245177141+08:00" level=debug msg="[DNS] cache hit 目标域名 --> [目标域名解析的IPv6] AAAA, expire at 2025-03-04 14:55:05"
3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.245206908+08:00" level=debug msg="[DNS] cache hit 目标域名 --> [目标域名解析的IPv4] A, expire at 2025-03-04 14:55:05"
3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.245226394+08:00" level=debug msg="[DNS] 目标域名 --> 目标域名解析的IPv4"
3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.245298992+08:00" level=debug msg="[DNS] cache hit 目标域名 --> [目标域名解析的IPv6] AAAA, expire at 2025-03-04 14:55:05"
3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.245325255+08:00" level=debug msg="[DNS] cache hit 目标域名 --> [目标域名解析的IPv4] A, expire at 2025-03-04 14:55:05"
3月 04 14:52:22 cl mihomo[259803]: time="2025-03-04T14:52:22.248349130+08:00" level=info msg="[TCP] 来源IP:56710 --> 目标域名:5201 match Match using preferv4direct"

qwerr0 avatar Mar 04 '25 06:03 qwerr0

这似乎不是bug 是特性

zll9912 avatar Mar 26 '25 19:03 zll9912

ipv4 perfer 是并发连接ipv4和ipv6, 然后iperf3只允许一条tcp连接测速就会测不了

zll9912 avatar Mar 27 '25 07:03 zll9912