포트 전달 대신 SSH 터널링을 사용하는 방법은 무엇입니까?

포트 전달 대신 SSH 터널링을 사용하는 방법은 무엇입니까?

ISP 라우터가 포트 전달을 허용하지 않기 때문에 외부에서 RDP 서버를 사용하기 위해 포트 전달 대신 SSH를 사용하고 싶습니다. 이것이 내 생각이다:

A - client connecting to the RDP server
B - server
C - device running the RDP server

A가 C에 연결하려고 합니다. C에 대한 직접 연결은 불가능하므로 모든 트래픽은 B를 통해 흘러야 합니다.

예:
A는 "Hello world!"가 포함된 패킷을 보냅니다. C는 "Test OK!"로 응답해야 합니다. A의 IP는 255.255.255.255 B의 IP는 1.2.3.4입니다. C의 IP는 4.5.6.7이다.
따라서 255.255.255.255는 1.2.3.4에 대한 소켓을 엽니다. A는 "Hello world!"를 보냅니다. B는 패키지를 C에게 전달합니다. C는 "테스트 성공!"이라고 답하고 B에게 다시 보냅니다. B는 이를 A에게 다시 보낸다.
RDP 서버를 사용하여 유사한 작업을 수행하고 싶습니다.

B는 Debian 8을 실행하고 C는 Windows 7을 실행합니다.

답변1

예제에서는 클라이언트 A가 실행 중인 운영 체제를 지정하지 않았습니다. 나는 일종의 명령줄 SSH 클라이언트를 사용할 수 있다고 가정합니다. 그런 다음 사용할 수 있습니다

 you@A $ ssh -L54321:serverC:3389 serverB -p 12322 -l yourloginnameonB

터널을 만듭니다.

이 명령줄에는 설명이 필요합니다. 이 부분을 섹션별로 해보자.

  • -L 스위치를 사용하면 SSH가 클라이언트 시스템 A(프롬프트 참고)의 포트 54321과 서버 C(RDP 서버가 실행 중이라고 가정)의 포트 3389에 터널을 생성합니다.
  • serverB는 이 ssh 명령으로 "찾는" 컴퓨터의 이름입니다. B를 통해 연결하게 되므로 여기에 전체 호스트 이름을 입력하세요.
  • SSH 서버 B가 비표준 SSH 포트(일반적으로 인터넷 연결 컴퓨터에 권장됨)를 사용하는 경우 해당 숫자를 여기에 -p 매개변수로 입력하세요. 내 예에서 B는 SSH에 포트 12322를 사용합니다.
  • 마지막으로 -l 매개변수를 사용하면 serverB에 로그인할 때 사용할 로그인 이름(즉, 계정)을 지정할 수 있습니다.

이 명령이 성공하면 A의 RDP 클라이언트를 localhost:54321로 지정하고 C:3389에 직접 연결된 것처럼 보이게 할 수 있습니다.

답변2

로컬 시스템("A")이 OpenSSH와 같은 기능을 갖춘 POSIX 시스템이라고 가정하면 다음 두 가지 방법 중 하나로 이 작업을 수행할 수 있습니다.

매개변수를 사용하여 SSH 클라이언트에 연결할 때마다 이 작업을 일시적으로 수행할 수 있습니다.

ssh -L13389:serverC:3389 username@serverB
rdesktop localhost:13389 # Or point any RDP client to localhost:3389

또는 보다 영구적인 설정을 위해 다음을 다음 항목에 추가할 수 있습니다 ~/.ssh/config.

host serverB
    LocalForward localhost:13389 serverB:3389

그런 다음 serverB에 SSH로 접속할 때마다 터널이 열립니다. 그러나 이것의 부작용은 serverB에 대한 동시 연결을 여러 개 열면 터널이 존재한다는 경고를 받게 된다는 것입니다.

관련 정보