在windows上实现wsl服务的端口转发

By | 2026-08-21

在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即可查看。

  • 在局域网内检测

    1. ping宿主机的ip(注意不是wsl)
    2. 测试端口是否开放(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