我在 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
请参阅此处的指南
如果您想从 Linux 发行版(即 Ubuntu)访问在 Windows 上运行的网络应用程序(例如在 NodeJS 或 SQL 服务器上运行的应用程序),则需要使用主机的 IP 地址。虽然这不是常见的情况,但您可以按照以下步骤使其工作。
通过从 Linux 发行版运行以下命令来获取主机的 IP 地址:
cat /etc/resolv.conf
复制术语“nameserver”后面的 IP 地址。使用复制的 IP 地址连接到任何 Windows 服务器。下图显示了通过 curl 连接到在 Windows 中运行的 Node.js 服务器的示例。
您还需要允许主机中该端口的入站连接。(通过防火墙规则)。