Networking

從 WSL2 連接到主機

  • August 31, 2022

問題

由於防火牆規則,無法從 WSL2 連接到 Windows X Server (VcXsrv)(有時有效,但有時無效;這很奇怪)。無法更改防火牆規則。

但是從 Windows 到 WSL2 的任何連接都可以正常工作。

主意

是否可以將客戶端/伺服器對作為中間服務執行,以鏡像 WSL 上的任何服務並使其可以從 WSL 訪問?

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

但是從 Windows 到 WSL2 的任何連接都可以正常工作

作為背景,重要的是要了解 WSL2 網路是在虛擬 Hyper-V 交換機後面進行 NAT 的。它確實是一個獨立於 Windows 主機的第 2 層網路。

WindowsWSL2 的通信被視為來自 Windows 的出站流量,以及到 WSL2 的入站流量,因此不需要防火牆規則。預設情況下,Windows 允許大多數出站流量,而在 WSL2 下執行的 Linux 發行版接受大部分入站流量。

在這種情況下,我們可以利用它來發揮我們的優勢……

是否可以將客戶端/伺服器對作為中間服務執行,以鏡像 WSL 上的任何服務並使其可以從 WSL 訪問?

你有這個標記為socat,這是一個合理的想法。我socat以前以類似的方式成功使用過,但是 (a) 已經有一段時間了,(b) 我需要重現我使用的配方並將其調整到 X 伺服器,並且 (c)socat的選項很友好工作的痛苦。它功能強大,但不一定易於使用。

因此,讓我提出一個內置的、更簡單的替代方案——ssh從 Windows 到帶有 X 轉發的 WSL2。它真的被設計用來做這種類型的遍歷。

  • 啟用適用於 Windows的 OpenSSH客戶端(請參閱

$$ doc $$(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

注意:請參閱此 SU 答案,了解為什麼localhost在這種情況下很關鍵。

  • 您應該登錄到 WSL2 實例,並使用 X 轉發。 xterm等應該啟動到 VcXsrv。

引用自:https://unix.stackexchange.com/questions/715507