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. 우분투에서는 이미 이렇게 되어 있습니다.
    • 저장 및 종료.
    • 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로 부팅해야 합니다.

관련 정보