![图片[1]-Winows 11 WSL2 Ubuntu 端口对外映射:netsh portproxy 一键实现局域网访问-龙之小站资源屋](https://www.688918.com/wp-content/uploads/2026/05/d2b5ca33bd20260521182633-1024x449.png)
在 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 与端口
二、准备工作
- 以管理员身份打开 Windows 命令提示符(CMD)或 PowerShell
- 查看 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=8080 | Windows 主机监听端口(对外暴露端口) |
listenaddress=0.0.0.0 | 允许所有 IP 访问(局域网 / 本机均可) |
connectport=8000 | WSL2 Ubuntu 内服务端口 |
connectaddress=172.21.239.1 | WSL2 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):
- 打开「Windows 防火墙 → 高级设置 → 入站规则 → 新建规则」
- 规则类型选择「端口」,协议 TCP,特定本地端口填
8080 - 允许连接,配置文件全选,命名为「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

















暂无评论内容