无法从 Windows 或外部设备访问 WSL 服务器

问题描述 投票:0回答:1

我搜索了整个互联网、ChatGPT、Perplexity...但我仍然没有设法让我的 WSL2 托管服务器可以通过 Windows 主机 IP 进行访问。

问题:

  • 无法使用 Windows 主机 IP 访问 WSL 服务器(无论是在 Windows 内还是同一本地网络上的外部设备),例如:
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

我已经做了什么:

  • 启用甚至禁用我的整个 Windows 防火墙
  • 使用此命令进行端口转发 Windows :
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=192.168.X.X
  • telnet 到 IP 和端口

奇怪的是这个工作只做了一次!我设法通过手机(同一网络)访问我的服务器,然后我决定重新启动服务器,然后什么也没有了。

还在我的旧笔记本电脑上,我的服务器在 WSL 2 Ubuntu 20 中工作,但是当我复制 WSL 以将其移动到另一个驱动器时,服务器再次无法访问,即使我尝试 netsh 等...

我真的很挣扎,如果有人可以帮助的话!或者也许我应该使用代理或类似的东西?但这支持开发服务器通信吗?

windows network-programming windows-subsystem-for-linux
1个回答
0
投票

好吧,我找到答案了! 没有人说要在所有视频、论坛或 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 服务器!

© www.soinside.com 2019 - 2024. All rights reserved.