Winows 11 WSL2 Ubuntu 端口对外映射:netsh portproxy 一键实现局域网访问

图片[1]-Winows 11 WSL2 Ubuntu 端口对外映射:netsh portproxy 一键实现局域网访问-龙之小站资源屋

在 Windows 上使用 WSL2 运行 Ubuntu 进行开发时,经常会遇到WSL2 内服务只能本地访问、局域网其他设备无法连接的问题。这是因为 WSL2 采用 NAT 网络模式,默认不对外暴露端口。

本文以 netsh interface portproxy 端口转发命令为核心,手把手教你把 WSL2 Ubuntu 的端口映射到 Windows 主机,实现局域网 / 外网设备直接访问

一、核心问题:WSL2 端口为什么无法对外访问?

WSL2 是基于 Hyper-V 的虚拟化环境,拥有独立的虚拟网卡与动态内网 IP(如 172.21.xxx.xxx),与 Windows 主机不在同一网络平面。

  • 直接访问 Windows 主机 IP + WSL2 端口:无法连通
  • 必须通过 Windows 端口转发,将流量转发到 WSL2 的虚拟 IP 与端口

二、准备工作

  1. 管理员身份打开 Windows 命令提示符(CMD)或 PowerShell
  2. 查看 WSL2 Ubuntu 的虚拟 IP(在 WSL2 终端执行)

bash

运行

# 查看 WSL2 内网IP
hostname -I
# 或
ip addr
# 或
ipconfig
# 或
ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1

记录输出的 IP(本文示例:172.21.239.1

3. 确认 WSL2 内服务端口(本文示例:8000

4. 确定 Windows 监听端口(本文示例:8080

三、核心命令:添加 WSL2 端口转发规则

基于你提供的命令模板,适配 WSL2 场景的完整命令:

cmd

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8000 connectaddress=172.21.239.1

命令逐段解释

表格

参数含义
netsh interface portproxy add v4tov4添加 IPv4 端口转发规则
listenport=8080Windows 主机监听端口(对外暴露端口)
listenaddress=0.0.0.0允许所有 IP 访问(局域网 / 本机均可)
connectport=8000WSL2 Ubuntu 内服务端口
connectaddress=172.21.239.1WSL2 Ubuntu 虚拟内网 IP

转发效果

  • 访问 Windows主机IP:8080 → 自动转发到 WSL2:172.21.239.1:8000
  • 局域网内手机、其他电脑均可直接访问

四、端口转发管理命令

1. 查看所有转发规则

cmd

netsh interface portproxy show all

2. 删除单条转发规则

cmd

netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0

3. 清空所有端口转发

cmd

netsh interface portproxy reset

五、关键配置:防火墙放行端口

若转发后仍无法访问,需在 Windows 防火墙放行监听端口(8080):

  1. 打开「Windows 防火墙 → 高级设置 → 入站规则 → 新建规则」
  2. 规则类型选择「端口」,协议 TCP,特定本地端口填 8080
  3. 允许连接,配置文件全选,命名为「WSL2 端口转发 8080」

六、常见问题与解决方案

1. WSL2 重启后 IP 变化,转发失效

WSL2 为动态 IP,重启后会变更,解决方案:

  • 每次重启 WSL2 后,重新执行转发命令(替换新 IP)
  • 或编写 PowerShell 脚本自动获取 WSL2 IP 并添加转发

2. 命令执行报错

  • 报错「权限不足」:必须管理员身份运行 CMD/PowerShell
  • 报错「端口被占用」:更换 listenport 端口

3. 局域网仍无法访问

  • 检查 Windows 防火墙是否放行端口
  • 确认 WSL2 内服务监听 0.0.0.0(而非仅 127.0.0.1
  • 确认 Windows 主机与局域网设备在同一网段

七、总结

通过 netsh interface portproxy 端口转发,无需修改 WSL2 网络配置,即可快速将 WSL2 Ubuntu 内的服务端口对外暴露,完美解决本地开发、局域网测试的访问问题。

核心命令一键复用:

cmd

# 通用模板:替换为你的端口与WSL2 IP
netsh interface portproxy add v4tov4 listenport=对外端口 listenaddress=0.0.0.0 connectport=WSL2端口 connectaddress=WSL2 IP
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容