Windows 11下如何从局域网设备访问WSL2中的Node.js应用?
解决Win11 WSL2下局域网设备无法访问应用的问题
核心原因
WSL2默认采用NAT网络架构,与Windows主机处于不同网段,导致局域网设备通过Windows本地IP发起的请求无法穿透到WSL2内部的服务——这就是你本地能正常访问、但其他设备连不上的关键原因。
解决方案
1. 先确保应用监听所有网卡(必做)
绝大多数开发服务器默认仅绑定localhost(127.0.0.1),仅允许本地访问。你需要修改应用的启动配置,让它监听0.0.0.0:
- Node.js/React/Vue项目:在启动命令后追加
--host 0.0.0.0,比如npm start -- --host 0.0.0.0,或在框架配置文件中设置host: '0.0.0.0' - 其他语言服务:调整服务绑定地址为
0.0.0.0,而非仅127.0.0.1
2. 配置Windows到WSL2的端口转发
打开管理员权限的PowerShell,执行以下操作:
- 获取WSL2的内部IP:
取输出的第一个IP(类似wsl hostname -I172.17.0.2) - 添加端口转发规则,将Windows的3000端口映射到WSL2的3000端口:
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=刚才获取的WSL2IP - 允许该端口通过防火墙:
netsh advfirewall firewall add rule name="WSL2 PWA测试端口" dir=in action=allow protocol=TCP localport=3000
3. 可选:切换到网桥模式(更稳定的长期方案)
Win11支持WSL2使用网桥网络,让WSL2直接获取局域网IP,无需端口转发:
- 新建或编辑
C:\Users\你的用户名\.wslconfig文件,添加以下内容:[wsl2] networkMode=bridged adapterName=你的网卡名称(比如"以太网"或"Wi-Fi",可在Windows设置-网络和Internet中查看) - 重启WSL生效:
wsl --shutdown - 重启后在WSL终端执行
ip addr,找到局域网IP(类似192.168.2.xxx),局域网设备直接访问这个IP:3000即可
验证
- 启动应用,确认服务已监听
0.0.0.0:3000 - 在手机/其他设备上访问对应IP和端口,测试连接
内容的提问来源于stack exchange,提问作者Patrick C
相关产品推荐
相关产品推荐

