我搜索了整个互联网、ChatGPT、Perplexity...但我仍然没有设法让我的 WSL2 托管服务器可以通过 Windows 主机 IP 进行访问。
问题:
WSL 2 : Ubuntu 24.04
Windows host IP : 192.168.X.X
WSL IP : 192.168.X.X (with network mirror)
Server PORT : 8080
http://localhost:8080 OK
http://192.168.X.X ERROR (but accessible within WSL)
# without network mirror, so WSL IP 172....., server also not accessible with 192.168.X.X, but ok with 172 IP on Windows
我已经做了什么:
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=192.168.X.X
奇怪的是这个工作只做了一次!我设法通过手机(同一网络)访问我的服务器,然后我决定重新启动服务器,然后什么也没有了。
还在我的旧笔记本电脑上,我的服务器在 WSL 2 Ubuntu 20 中工作,但是当我复制 WSL 以将其移动到另一个驱动器时,服务器再次无法访问,即使我尝试 netsh 等...
我真的很挣扎,如果有人可以帮助的话!或者也许我应该使用代理或类似的东西?但这支持开发服务器通信吗?
好吧,我找到答案了! 没有人说要在所有视频、论坛或 ChatGPT 上这样做……这太疯狂了,但只需阅读此处的文档 https://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking
我在
networkMode=mirrored
中找到了配置Hyper-v防火墙的命令
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
完整注释:
使用管理员权限在 PowerShell 窗口中运行以下命令 配置 Hyper-V 防火墙设置以允许入站连接: 设置 NetFirewallHyperVVMSetting -名称 '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'-DefaultInboundAction 允许 或 New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web 服务器”-方向入站-VMCreatorId “{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}”-协议 TCP-本地端口 80。
现在,Windows 上的任何接口都可以使用
localhost:PORT
或 127.0.0.1:PORT
访问服务器,并且 LAN/本地网络中的任何外部设备都可以使用 Windows IP 访问 wsl 服务器!