我正在通过 WSL2(Linux 版本 5.10.16.3-microsoft-standard-WSL2)运行 Ubuntu 20.04。我在 WSL 安装上运行 react-js 应用程序,我可以通过访问分配给我的 WSL 框的 IP 通过 Web 浏览器从 Windows 查看网页。(注意:访问 localhost 时,我无法从 Windows 查看网页)。但是,如果我尝试从本地网络上的任何其他设备访问该网页,该网页将无法加载。
如果我尝试从网络上的另一台设备 ping 我的 WSL IP 地址,我会收到 100% 的数据包丢失。
我已尝试按照Microsoft 网站上的建议通过 Powershell 添加代理规则:
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=MY.WSL.IP.ADR
这没有任何区别。我还尝试指定我的 React 应用程序应该绑定到 0.0.0.0,但这也没有什么区别。
react-scripts start --host 0.0.0.0
你可能有两种不同的事情发生。
首先,让我提一下,有几种更简单的方法可以从网络上的其他设备进行转发。我在这个答案中详细介绍了它们,但是:
WSL1 可能会很好地运行您的 React 应用程序,并且它与 Windows 共享网络,因此它不会遇到这些类型的转发问题。
当我无法使用 WSL1 时,使用 SSH 设置从 Windows 到 WSL2 实例的反向转发是我的首选方法。但是,要使其正常工作,您仍然需要解决 localhost-forwarding 问题。
至于你手头的问题:
考虑到 localhost-forwarding 不起作用,因为您无法通过 Windows 主机本身访问该站点
localhost
,这听起来可能是旧的“休眠时 localhost 转发中断”错误。退出 WSL 并尝试(从 PowerShell)a:然后重新启动 WSL 并再次从 Windows 主机浏览器尝试。如果它有效,它可能会停止工作,因为:
但是,鉴于您要转发到 WSL IP 地址(因此不使用 localhost),我认为这部分可能是由于防火墙规则造成的。确保添加相应的防火墙规则以允许该端口上的所有流量。