You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL中iPerf3可作客户端却无法作为服务器的解决问询

解决WSL Ubuntu与手机iPerf3双向测试的方案

一、核心问题分析

  • WSL2采用NAT网络模式,同一局域网内的设备(如手机)无法直接访问WSL子系统的内部IP,导致手机作为客户端连接WSL服务器时出现Connection refused。
  • WSL1虽网络模式更贴近桥接,但不支持部分TCP拥塞控制算法(如cubic);Windows版iPerf3版本过低,同样缺失拥塞控制功能,不符合测试需求。

二、基于WSL2的双向测试实现步骤

1. 正确启动WSL2的iPerf3服务器

在WSL Ubuntu中启动服务器时,明确绑定所有网络接口,避免仅绑定localhost:

iperf3 -s -p 5201 -B 0.0.0.0

2. 配置Windows端口转发

WSL2的IP为动态分配,需将Windows的端口转发到WSL子系统的对应端口:

  • 获取WSL2内部IP:在WSL中执行hostname -I,得到类似172.18.xxx.xxx的地址。
  • 打开管理员权限的PowerShell,执行转发命令(替换你的WSL2内部IP为实际地址):
netsh interface portproxy add v4tov4 listenport=5201 listenaddress=0.0.0.0 connectport=5201 connectaddress=你的WSL2内部IP
  • 验证转发规则:
netsh interface portproxy show all

3. 开放Windows防火墙端口

确保Windows防火墙允许私有网络设备访问5201端口:

New-NetFirewallRule -DisplayName "Allow iPerf3 Server" -Direction Inbound -Protocol TCP -LocalPort 5201 -Action Allow -Profile Private

4. 手机端连接测试

手机作为客户端,连接Windows主机的局域网IP(而非WSL内部IP):

iperf3 -c Windows主机局域网IP -p 5201

5. 处理WSL2 IP动态变化问题

WSL2重启后IP会变更,可通过批处理脚本自动更新转发规则:
创建update_wsl_portproxy.bat文件,内容如下:

@echo off
for /f "tokens=*" %%i in ('wsl hostname -I') do set WSL_IP=%%i
netsh interface portproxy reset
netsh interface portproxy add v4tov4 listenport=5201 listenaddress=0.0.0.0 connectport=5201 connectaddress=%WSL_IP%
echo Port proxy updated to WSL IP: %WSL_IP%

每次重启WSL后,以管理员身份运行该批处理即可。

三、验证TCP拥塞控制功能

在WSL2中执行以下命令,确认cubic等算法生效:

iperf3 -c 手机IP -p 5201 -C cubic

内容的提问来源于stack exchange,提问作者mimm_mm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:35:19