在windows上实现wsl服务的端口转发
确认服务已开启
- 获取wsl的ipv4,在win上ping通
- 在wsl上确认服务已开启,并在win上访问端口确认已开启
基于wsl的端口转发
使用端口转发脚本,文件后缀为.ps1
# wsl_mysql_port_forward.ps1 # 获取管理员权限 #Requires -RunAsAdministrator Write-Host "正在设置 WSL2 MySQL 端口转发..." -ForegroundColor Green # 获取 WSL2 IP 地址(去掉可能的多余空格和换行) $wsl_ip_raw = wsl -e hostname -I $wsl_ip = $wsl_ip_raw.Trim() Write-Host "WSL IP 地址: $wsl_ip" -ForegroundColor Yellow # 只删除旧的 MySQL 3306 端口规则(不影响 Flask) # netsh interface portproxy delete v4tov4 listenport=3306 listenaddress=0.0.0.0 2>$null # 删除旧的 MySQL 防火墙规则 # Remove-NetFireWallRule -DisplayName "WSL MySQL*" -ErrorAction SilentlyContinue # 设置 3306 端口的转发 $port = 3306 netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wsl_ip New-NetFireWallRule -DisplayName "WSL MySQL Port $port" -Direction Inbound -LocalPort $port -Protocol TCP -Action Allow -ErrorAction SilentlyContinue Write-Host "端口 $port 已配置转发" -ForegroundColor Cyan # 显示配置结果 Write-Host "`n当前所有端口转发配置:" -ForegroundColor Green netsh interface portproxy show v4tov4 Write-Host "`nMySQL 连接信息:" -ForegroundColor Yellow Write-Host "本机连接: mysql -h 127.0.0.1 -P 3306 -u root -p" -ForegroundColor White $local_ip = (Test-Connection -ComputerName (hostname) -Count 1).IPv4Address.IPAddressToString Write-Host "局域网连接: mysql -h $local_ip -P 3306 -u root -p" -ForegroundColor White Write-Host "WSL内部: mysql -h $wsl_ip -P 3306 -u root -p" -ForegroundColor White Write-Host "`n提示: Flask 端口转发不受影响,两个服务可以同时运行" -ForegroundColor Cyan Write-Host "配置完成!按任意键退出..." -ForegroundColor Green $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")立刻启用
将C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe新建快捷方式到桌面,右键属性→快捷方式 栏目→目标→C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:\Users\PC\wsl_mysql_port_forward.ps1"
双击即可启用开机自启
将wsl_mysql_port_forward.ps1复制到C:\Users\PC\下
端口转发检测
在wsl上检测
# 查看 MySQL 监听地址(改为你的服务端口) sudo netstat -tlnp | grep 3306 # 应该显示 0.0.0.0:3306 或 :::3306,而不是 127.0.0.1:3306在宿主机上检测
在wsl的宿主机上打开 win powershell,输入netsh interface portproxy show v4tov4即可查看。在局域网内检测
- ping宿主机的ip(注意不是wsl)
- 测试端口是否开放(linux用)
timeout 3 bash -c "echo > /dev/tcp/192.168.1.87/3306" && echo "端口开放" || echo "端口关闭"
在windows上使用快捷方式打开wsl服务
演示案例为使用python打开flask网页服务
将以下脚本编辑在wsl_flask_start.bat双击运行即可@echo off echo =================================== echo WSL Flask 服务一键启动工具 echo =================================== echo. REM 1. 设置端口转发 echo [1/3] 设置端口转发... powershell -Command "Start-Process PowerShell -Verb RunAs -ArgumentList '-ExecutionPolicy Bypass -File \"C:\Users\PC\wsl_port_forward.ps1\"'" REM 2. 启动 WSL 并运行 Flask echo [2/3] 启动 WSL Flask 服务... wsl -d Ubuntu -- bash -c "cd /home/fate0361/welfare_phishing && python3 app.py" echo [3/3] 完成! echo. echo 访问地址: echo 本机: http://localhost:5000 echo 局域网: http://%COMPUTERNAME%:5000 echo =================================== pause