从 WSL2 连接到主机

从 WSL2 连接到主机

问题

由于防火墙规则,无法从 WSL2 连接到 Windows X Server (VcXsrv)(有时可以工作,但有时不行;这很奇怪)。无法更改防火墙规则。

但从 Windows 到 WSL2 的任何连接都可以正常工作。

主意

是否可以将客户端/服务器对作为中间服务运行,以镜像 WSL 上的任何服务并使其可从 WSL 进行访问?

------------Windows Host------------
| [Windows X Server] <--- [Client] |
-----------------------------↑------
                             |
----------------WSL----------v---------
| [XGui Client] ---> [Mirror service] |
---------------------------------------

答案1

但从 Windows 到 WSL2 的任何连接都可以正常工作

作为背景,了解 WSL2 网络在虚拟 Hyper-V 交换机后面进行 NAT 非常重要。这确实是一个分离来自 Windows 主机的第 2 层网络。

沟通视窗考虑 WSL2出境来自 Windows 的流量以及入站到 WSL2 的流量,因此不需要防火墙规则。默认情况下,Windows 允许大多数出站流量,而在 WSL2 下运行的 Linux 发行版则接受大多数入站流量。

在这种情况下我们可以利用这一点......

是否可以将客户端/服务器对作为中间服务运行,以镜像 WSL 上的任何服务并使其可从 WSL 进行访问?

您已标记此内容这是一个合理的想法。我socat以前曾以类似的方式成功使用过,但是(a)已经有一段时间了,(b)我需要重现我使用的配方并将其调整到X服务器,并且(c)socat的选项很不错需要克服的痛苦。它很强大,但不一定易于使用。

因此,让我提出一个内置的、更简单的替代方案——ssh从 Windows 到带有 X 转发的 WSL2。它实际上就是为了进行这种类型的遍历而设计的。

  • 启用 OpenSSH客户对于 Windows(请参阅[文档](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui#install-openssh-for-windows)。在这种情况下不需要服务器,因为您必须为此打开防火墙规则(您已经说过不能)。它已经已安装对于 Windows,您只需启用该功能即可。

  • 在 WSL2 下的 Linux 发行版中启用 SSH 服务器。您没有提及您正在运行哪个发行版,但是在 Ubuntu(默认发行版)下,您需要(如果我没记错的话):

    • 编辑 sshd 配置: sudo -e /etc/ssh/sshd_config并选择不同的端口——假设是 2222。
    • PasswordAuthentication如果您不使用密钥,则可以选择启用。
    • 确保X11Forwarding=yes,这在 Ubuntu 中已经应该如此。
    • 保存并退出。
    • sudo service ssh start
    • 如果您收到有关主机密钥丢失的消息,请尝试sudo dpkg-reconfigure openssh-server然后重新启动服务。
  • 在 Windows 中,XLaunch使用默认选项启动 (VcXsrv) +“禁用访问控制”

  • 来自 PowerShell:

    $env:DISPLAY="localhost:0"
    ssh -Y -p 2222 wslusername@localhost
    

    注:参见这个苏答案为什么localhost在这种情况下至关重要。

  • 您应该登录到 WSL2 实例,并使用 X 转发。 xterm等应该启动到 VcXsrv。

相关内容