win10 局域网其他电脑/手机无法访问我的web项目

博客讲述允许电脑被局域网其他电脑发现时遇到问题,最终查明是网络不好,通过重启路由器解决了问题。

允许电脑被局域网其他电脑发现

 

最后发现是自己的网络不好,重启了路由器就好了

在 **Windows 10** 上,由于不支持 WSL2 的 `networkingMode=mirrored` 模式(该功能仅限 Windows 11 22H2 及以上),你无法让 WSL 直接获得局域网 IP 地址并被其他设备直接访问。 但你可以通过 **端口转发 + 防火墙配置** 的方式,实现 **局域网设备访问 WSL 中运行的服务**(如 Web 服务器、SSH、Node.js 应用等)。 --- ## ✅ 解决方案:使用 `netsh portproxy` 实现局域网访问 ### 🎯 目标: 让局域网中的手机、平板或其他电脑能访问你 WSL 里运行的 `http://localhost:3000` 这类服务。 --- ### 🔧 步骤一:获取 WSL 的当前 IP 地址 在 WSL 终端中执行: ```bash hostname -I ``` 输出示例: ``` 172.19.123.45 ``` 记下这个 IP,它是 WSL 在 NAT 网络中的地址。 --- ### 🔧 步骤二:以管理员身份运行 PowerShell 打开 **PowerShell(管理员)** #### 获取 WSL IP(Windows 视角): ```powershell $WSL_IP = (wsl hostname -I).Trim() Write-Host "WSL IP: $WSL_IP" ``` #### 设置端口转发(例如将主机的 3000 端口映射到 WSL 的 3000) ```powershell netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$WSL_IP ``` ✅ 成功后,任何访问 `你的主机IP:3000` 的请求都会转发到 WSL。 > 示例:局域网设备访问 `http://192.168.110.204:3000` --- ### 🔧 步骤三:开放 Windows 防火墙 允许外部设备连接到本机的 3000 端口: ```powershell New-NetFirewallRule -DisplayName "WSL Port 3000" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3000 ``` --- ### 🔧 步骤四:测试从局域网访问 在另一台设备上(如手机或笔记本)浏览器输入: ``` http://192.168.110.204:3000 ``` 其中 `192.168.110.204` 是你的 **Windows 主机局域网 IP**(可用 `ipconfig` 查看)。 如果能看到 WSL 中运行的服务页面 → 成功! --- ### 📌 示例完整脚本(一键配置) 保存为 `wsl-portforward.ps1` 并以管理员运行: ```powershell # 配置要转发的端口 $PORT = 3000 # 获取 WSL IP $WSL_IP = (wsl hostname -I).Trim() if (-not $WSL_IP) { Write-Error "无法获取 WSL IP,请确保 WSL 已启动。" exit 1 } Write-Host "WSL IP: $WSL_IP" -ForegroundColor Green # 添加端口转发规则 netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=$WSL_IP # 开放防火墙 Remove-NetFirewallRule -DisplayName "WSL Port $PORT" -ErrorAction SilentlyContinue New-NetFirewallRule -DisplayName "WSL Port $PORT" -Direction Inbound -Action Allow -Protocol TCP -LocalPort $PORT Write-Host "✅ 已完成端口转发和防火墙设置" -ForegroundColor Green Write-Host "请在局域网设备上访问: http://<你的主机IP>:$PORT" Write-Host "例如: http://192.168.110.204:$PORT" ``` --- ### 🚫 注意事项 | 项目 | 说明 | |------|------| | ❌ 不支持 ICMP(ping) | 局域网不能 `ping` 通 WSL IP | | ✅ 支持 TCP 服务 | HTTP、HTTPS、SSH、WebSocket 等均可转发 | | 🔁 每次重启 WSL 后 IP 可能变化 | 建议写个脚本自动更新转发规则 | | 💡 建议固定 WSL IP(可选) | 见下方“进阶技巧” | --- ### 🛠️ 进阶技巧:为 WSL 设置静态 IP(避免每次变化) 编辑 WSL 的 `/etc/wsl.conf` 文件: ```bash sudo nano /etc/wsl.conf ``` 添加内容: ```ini [network] generateResolvConf = false ``` 然后退出 WSL,在 Windows PowerShell 中关闭 WSL: ```powershell wsl --shutdown ``` 再次启动 WSL,手动设置静态 IP(临时): ```bash sudo ip addr del $(ip route get 1.1.1.1 | grep -oP 'src \K\S+') dev eth0 sudo ip addr add 172.19.123.100/24 dev eth0 sudo ip link set eth0 up sudo ip route add default via $(ip route | grep default | awk '{print $3}') ``` 然后你在 `portproxy` 中就可以固定使用 `172.19.123.100`。 --- ### 🔄 自动化:每次开机自动配置转发 将以下脚本加入 Windows “任务计划程序”,在用户登录时运行: ```powershell # auto-wsl-forward.ps1 wsl --shutdown Start-Sleep 3 wsl echo "WSL restarted" $PORT = 3000 $WSL_IP = (wsl hostname -I).Trim() netsh interface portproxy delete v4tov4 listenport=$PORT listenaddress=0.0.0.0 netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=$WSL_IP # 防火墙 Remove-NetFirewallRule -DisplayName "WSL Port $PORT" -ErrorAction SilentlyContinue New-NetFirewallRule -DisplayName "WSL Port $PORT" -Direction Inbound -Action Allow -Protocol TCP -LocalPort $PORT ``` --- ## ✅ 总结:Win10 上实现 WSL 局域网访问的关键点 | 方法 | 是否可行 | 说明 | |------|----------|------| | `mirrored` 模式 | ❌ 不支持 | 仅 Win11 可用 | | `netsh portproxy` 转发 | ✅ 推荐 | 最稳定方案 | | 第三方工具(如 acrylic DNS) | ⚠️ 复杂 | 不推荐新手 | | 使用桥接虚拟机替代 WSL | ✅ 替代方案 | 如 VMware + Ubuntu | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值