Gan*_*A.S 13 windows portforwarding aem windows-subsystem-for-linux wsl-2
我在我的Windows 机器上运行本地AEM 服务器。服务器在localhost:4502上运行。我正在使用在 WSL2 中运行的 Ubuntu 发行版进行开发。我想在我的WSL2 Ubuntu 中访问在 Windows 机器上运行的 localhost:4502 。
有什么办法可以做到这一点还是不可能?
Not*_*1ds 110
mDNS 成为 WSL2 的一项功能已经有一段时间了。将 WSL2 hostname(或编程/语言环境中的等效命令/函数)连接起来".local"应该可以让您访问。
例如,从 Bash 尝试:
ping "$(hostname).local"
Run Code Online (Sandbox Code Playgroud)
例如,如果您的hostname计算机是“MyComputer”,则 mDNS 应该是MyComputer.local.
如果 ICMP 被阻止(似乎在新安装的 Windows 11 上),或者如果您想测试与实际端口的连接,请使用 netcat。默认情况下,它在 WSL Ubuntu 安装中可用,但可能需要安装在 openSUSE 等其他发行版中:
nc -zv "$(hostname).local" <portnumber>
Run Code Online (Sandbox Code Playgroud)
WSL2 与 Windows 虚拟机平台(Hyper-V 的子集)创建的虚拟网络 (vNIC) 一起运行。 WSL2内部localhost是 vNIC 的地址。
WSL2 还在 Windows 主机上设置了一个虚拟路由器,以允许连接到外部世界以及 Windows 主机。您可以通过以下方式查看:
ip route
Run Code Online (Sandbox Code Playgroud)
这是您需要用于 Windows 主机的地址。
当然,您可以从路由中解析它(或者,如之前的答案,从/etc/resolv.conf),但 WSL 使用 Windows“计算机名称”设置一个方便的 mDNS(.local域),该名称也用作WSL 实例。
因此,连接$(hostname)(或者在您的编程/语言环境中等效)".local"应该可以让您访问。
mDNS 依赖于 Windows 主机来解析名称。如果您更改了/etc/resolv.confWSL,那么这可能不起作用。
请记住打开任何必要的防火墙端口。WSL2 被视为与 Windows 主机网络不同的网络。Windows 会将 WSL2 的网络连接视为来自外部源。 (感谢@RamilGilfanov的评论指出了这一点)
第一次从 WSL2 到特定端口建立连接时,Windows Defender(如果这是您的防火墙)通常会显示一个对话框,询问您是否要授予访问权限。然而,根据我的经验,由于鼠标点击、键盘等的计时,这个对话框经常被隐藏在主窗口下面,所以很容易错过。
请记住让您的 Windows 服务接受来自远程主机的连接。
许多服务器默认配置为绑定到localhost/ 127.0.0.1。由于 WSL2 在 Windows 中显示为远程网络,因此您通常需要更新配置以绑定到0.0.0.0特定地址。
请注意,由于 WSL2 的地址在每次重新启动后都会发生变化,因此每次更新配置可能会很困难。如果可能的话,0.0.0.0除非存在安全问题,否则请使用。由于 WSL 是为开发而不是生产而设计的,因此这不应该成为问题。
Tar*_*mar 13
我也在寻找一些解决方案来执行此操作,但目前没有任何此类选项可用。查看这个 GitHub 问题:
\n[WSL 2] WSL 2 无法通过 localhost:port #4619 访问 Windows 服务
\n一种解决方案可以是这样的:
\n如果您有 Windows(主机)的 IP 地址,那么它就可以完成这项工作,但唯一的问题是 IP 地址每次都会改变。但是,WSL\xc2\xa02 将您的 Windows(主机)IP 地址存储在/etc/resolv.conf文件中。所以我们可以修改etc/hosts文件来映射winhost映射到IP地址。
\n在~/.bashrc文件的末尾添加以下行。当您启动 WSL 时,这将 grep IP 地址并修改etc/hosts文件。
\nexport winhost=$(cat /etc/resolv.conf | grep nameserver | awk \'{ print $2 }\')\nif [ ! -n "$(grep -P "[[:space:]]winhost" /etc/hosts)" ]; then\n printf "%s\\t%s\\n" "$winhost" "winhost" | sudo tee -a "/etc/hosts"\nfi\nRun Code Online (Sandbox Code Playgroud)\n然后运行以下命令来重新加载更改。
\nsource ~/.bashrc\nRun Code Online (Sandbox Code Playgroud)\n现在您可以使用winhost而不是WSL\xc2\xa02(客户端)中的localhost来访问运行 Windows 的服务器(主机)。在您的情况下,它将是winhost:4502,但这也适用于任何其他用例,例如访问PostgreSQL或MySQL服务器等。
\n笔记:请务必记住在 Windows 上配置防火墙以允许这些端口,以便 WSL\xc2\xa02 可以访问它。否则,您的连接可能会被防火墙阻止。
\n这很简单;你只需要做两件事。在主机文件中将IP 地址设置为localhost,并允许Windows 防火墙允许传入连接。
\n以下是分步说明:
\n获取IP地址。打开cmd.exe并输入ipconfig /all. 记下 IP 地址 172.22.16.1
以管理员身份打开记事本,菜单File \xe2\x86\x92 open,浏览到C:\\Windows\\System32\\drivers\\etc\\hosts,添加行172.22.16.1 localhost,保存并关闭。
最后一个选项是允许防火墙规则接受公共连接。为此,请打开控制面板* \xe2\x86\x92系统和安全\xe2\x86\x92 Windows Defender 防火墙\xe2\x86\x92高级设置\xe2\x86\x92入站规则\xe2\x86\x92新规则
\n规则类型:选择端口并单击Next
\n协议和端口:输入特定本地端口: 4502,然后单击Next
\n操作:允许连接并单击Next
\n个人资料:选中“公开”并单击Next
\n名称:输入AEM 服务器并单击Finish
\n关闭其他窗口,然后再次打开cmd。wsl --shutdown键入用于关闭 Ubuntu 子系统的命令。
再次打开Ubuntu。
\n测试连接:curl localhost:4502在命令提示符下键入。如果它返回一些东西,就意味着你可以开始了。
sel*_*bie -5
我怀疑你能做到这一点。
步骤 1. 在实际 IP 地址(或所有地址)上运行 AEM 服务器,而不是仅绑定到本地主机。
步骤 2.您的 Ubuntu WSL 客户端实例不会与主机共享 localhost,但它将共享您的计算机实际拥有的本地 IP 地址(例如 10.0.0.2)。只需让您的客户端连接到该 IP 地址而不是本地主机。
我对 AEM 一无所知,但如果您将其暴露于更大的网络,您可能需要保护它。阻止上游防火墙上的端口 4502 或使用 Windows 防火墙规则仅允许来自您自己的 IP 地址的端口 4502 传入。这显然是可能的。
| 归档时间: |
|
| 查看次数: |
14703 次 |
| 最近记录: |