如何让 WSL 2 中的 Ubuntu 与同一 Windows 主机上的 HTTP 服务器通信?

如何让 WSL 2 中的 Ubuntu 与同一 Windows 主机上的 HTTP 服务器通信?

我在 Windows 10 中运行一个控制台应用程序,它有一个自托管的 HTTPS 服务器,监听端口 44340。这是一个 ASP.NET Core 网站(Kestrel),可以在 Windows 端完美浏览。

我无法从运行 Ubuntu 18.04 的 Windows Subsystem for Linux 2 (WSL2) 控制台内访问此端口,并使用 进行测试curl

我尝试为该端口添加 Windows 防火墙规则,但似乎不起作用。

我已经尝试过localhost,以及我可以看到我的机器的两个 IP。一个是使用 DHCP 的真实 NIC,另一个是具有地址的 WSL 的 vEthernet 适配器172.31

答案1

这是我所做的。

  • 禁用 Windows 防火墙(然后一旦证明有效,重新启用并添加规则)。
  • 在 Windows 端为主机添加一个xyz指向我的物理 NIC IP 的 hosts 文件条目。
  • 为 创建了自签名证书xyz
  • 配置 Kestrel 监听物理网卡 IP 并加载证书xyz
  • 已检查 Windows 端是否与 Chrome 兼容。
  • 启动 WSL 并 ping xyz
  • 运行curl https://xyz:44340并发现验证我的自签名证书失败。

这证实了 TCP 正在工作,所以我要去睡觉了。基本上,阻碍因素是:

  • 防火墙。
  • Kestrel 没有监听正确的 IP。

答案2

请参阅此处的指南

https://docs.microsoft.com/en-us/windows/wsl/networking#accessing-windows-networking-apps-from-linux-host-ip

如果您想从 Linux 发行版(即 Ubuntu)访问在 Windows 上运行的网络应用程序(例如在 NodeJS 或 SQL 服务器上运行的应用程序),则需要使用主机的 IP 地址。虽然这不是常见的情况,但您可以按照以下步骤使其工作。

通过从 Linux 发行版运行以下命令来获取主机的 IP 地址:cat /etc/resolv.conf 复制术语“nameserver”后面的 IP 地址。使用复制的 IP 地址连接到任何 Windows 服务器。下图显示了通过 curl 连接到在 Windows 中运行的 Node.js 服务器的示例。

您还需要允许主机中该端口的入站连接。(通过防火墙规则)。

相关内容