windows 使用实际IP从WSL2到主机的连接

ws51t4hk  于 2023-03-31  发布在  Windows
关注(0)|答案(2)|浏览(395)

是否有人使用WSL 2并使用其实际IP而不是通过WSL 2网络适配器IP连接到主机?
我的情况是这样的:我的ip是192.168.1.2
我在我的实际机器上启动了一个web服务器,它绑定到127.0.0.1,并且192.168.1.2我想从WSL 2下的docker容器中连接到web服务器。如果我ping/telnet/curl到192.168.1.2,调用就会因为超时而失败,这在我的docker容器中以及直接从WSL 2下的ubuntu中都会发生。
我已经验证了我可以从我的docker容器中ping我的路由器192.168.1.1。我不能从我192.168.1.2docker外部的WSL 2 shell中访问www.example.com。我不能使用127.0.0.1作为替代,因为最终目标是在WSL 2中运行docker的设置,调用我机器上的web服务器(即我想通过docker启动4个服务和一个数据库,然后在我的实际机器上积极开发和调试一个5服务)。
我试过完全关闭防火墙,但没有用。
有人知道它可能是什么吗?或者我甚至应该能够192.168.1.2从WSL 2中访问www.example.com。

5lhxktic

5lhxktic1#

有几种不同的方法(以及你可能必须做的事情)来实现这一点。你可能已经有了一些:

  • 首先,正如在注解中提到的,当访问运行Windows的服务时,从WSL 2使用的最佳名称(在大多数情况下)是mDNS格式$(hostname).local(或您使用的任何语言的等效形式)。这可以简单地硬编码为Windows“计算机名称”+(与).local
  • 接下来,请记住,当您第一次尝试访问某个端口上的网络服务时,Windows Defender防火墙会要求您提供创建规则的权限,默认情况下,此规则仅适用于 Private 网络配置文件,因此在任何 Public 网络配置文件上为端口创建相应的 Block 规则。老实说,我只是在尝试这个时发现了这一点。我不知道。我不认为我知道GUI对话框生成了相应 Block

由于WSL的网络(奇怪地)被认为是 Public,因此如果存在 Block 规则,则需要将其删除。

  • 然后,您还需要为来自WSL的端口打开一个 Allow 规则。类似于:
New-NetFirewallRule -DisplayName "WSL Testing" -InterfaceAlias "vEthernet (WSL)" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow

这将打开公共和专用网络上的端口,但仅在WSL虚拟接口上。它仍然会被网络上的其他机器阻止(假设这是你想要的)。

  • 现在,对于绑定地址,您有几个选项:
  • 如果你真的想绑定 only 到WSL虚拟网络,那么你需要获得(或以某种方式解析)正确的地址,因为它会在每次重新启动(或wsl --shutdown)后。你可以在PowerShell中使用ipconfig查看正确的地址,并查找:
Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   ...
   IPv4 Address. . . . . . . . . . . : 172.25.208.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   ...

在这种情况下,绑定地址将是172.25.208.1

  • 或者,我不认为有太多的理由不只是绑定到0.0.0.0(所有接口),因为防火墙将阻止来自其他网络的连接(假设您指定了-InterfaceAlias "vEthernet (WSL)")。
  • 然而,从评论中,你也提到:

192.168.1.2 是我的WiFi连接的IP。我知道该IP不是系统范围的,但Web服务器绑定到该IP,因此我需要能够访问它
如果你真的不能将绑定地址更改为其他地址,那么你将无法从WSL 2 * 直接 * 访问它。但是,如果是这种情况,仍然可以使用端口转发将数据包发送到正确的接口。
最简单的方法是安装/启用Windows OpenSSH server,然后使用以下命令:

ssh -L 80:localhost:80 $(hostname).local

这将使WSL 2中的localhost:80连接到端口80上的Windows服务。
如果您需要服务器名称与某个虚拟主机名(SNI)匹配,那么您可以将主机名添加到Windows主机文件(默认情况下Map到WSL 2)中,作为指向localhost的指针。

qeeaahzv

qeeaahzv2#

在我的情况下,当Windows主机连接到VPN时,从WSL2中连接到主机的唯一机会是使用外部VPN IP。从WSL2中,我通过以下方式获得:

ipconfig.exe | grep -m 1 IPv4 | cut -d ':' -f2

(in在我的情况下,ipconfig总是首先输出VPN地址)

相关问题