“로컬 포트 ​​포워딩”과“동적 포트 포워딩”의 차이점은 무엇입니까?


14

"로컬 포트 ​​전달"과 "동적 포트 전달"의 차이점을 이해하려고합니다.

"로컬 포트 ​​전달"에 대한 ssh 명령에서 항상 대상 호스트를 지정해야합니까?

"동적 포트 전달"의 "동적"은 "동적 포트 전달"에 대한 ssh 명령에서 대상 호스트를 지정할 필요가 없음을 의미합니까? 그렇다면, 목적지는 언제 지정됩니까?


답변:


15

예, 로컬 전달을 사용할 때 대상 IP 및 포트를 지정해야합니다. 보낸 사람 man ssh:

 -L [bind_address:]port:host:hostport
         Specifies that the given port on the local (client) host is to be
         forwarded to the given host and port on the remote side.

바인드 주소 만 선택 사항입니다.

아니요, 동적 전달을 사용할 때는 대상 호스트 또는 포트를 지정할 수 없습니다. 동적 전달에서 SSH는 SOCKS 프록시 역할을합니다. 맨 페이지 (강조 광산)에서 다시 :


 -D [bind_address:]port
         Specifies a local “dynamic” application-level port forwarding.
         This works by allocating a socket to listen to port on the local
         side, optionally bound to the specified bind_address.  Whenever a
         connection is made to this port, the connection is forwarded over
         the secure channel, and the application protocol is then used to
         determine where to connect to from the remote machine.  Currently
         the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
         as a SOCKS server.

을 사용 -L하면 SSH는 트래픽을 이해하려고 시도하지 않습니다. 로컬 포트에서 수신 한 모든 내용을 대상 포트로 전송하기 만하면 연결시 대상 포트를 결정합니다. 을 사용 -D하면 SSH는 프록시 서버 역할을하므로 여러 포트의 연결을 처리 할 수 ​​있습니다 (예 : SOCKS 프록시로 사용하도록 구성된 브라우저는 동일한 연결을 통해 HTTP, HTTPS, FTP 등에 액세스 할 수 있음). 다른 프록시 서버와 마찬가지로 트래픽을 사용하여 대상을 결정합니다.


1
고마워, muru! 동적 전달이 프록시라고 불리는 이유가 궁금하지만 로컬 전달은 그렇지 않습니다. 정의상, ssh 서버, ssh 클라이언트 또는 둘 다 로컬에서 프록시 (서버)를 전달합니까? unix.stackexchange.com/a/234184/674
Tim

1
@Tim 프록시 서버는 프록시하는 프로토콜을 이해합니다. 포트 포워딩, SSH 프로토콜이 길을오고 이해하려는 시도를하지 않습니다,하지만로 -D는, 에 순서대로 위치를 데이터를 전송하는 방법 이해하기.
muru

감사. 컴퓨터 네트워크 (예 : Tanenbaum)의 교과서에서 프록시 (서버)에 대한 정의를 검색했지만 만족하지 못했습니다. 학습 개념에 권장 할 책이 ​​있습니까?
Tim

동적 포트 전달에서 프록시 서버, ssh 클라이언트, ssh 서버 또는 둘다는 무엇입니까?
Tim

@Tim Tanenbaum 's는 내가 공부 한 유일한 책이었습니다. 나머지는 물건을 사용하는 것에서옵니다.
muru

0

이 개념을 배우는 또 다른 방법은 클라이언트가 Amazon의 EMR (Elastic Map Reduce) 클러스터에 연결하는 방법을 살펴 보는 것입니다. EMR에는 다양한 로컬 앱이 있으며 일반적으로 SSH 터널을 통해 액세스됩니다.

클라이언트에는 두 가지 옵션이 있습니다. A) 로컬 포트 ​​전달 SSH 명령 : ssh -i key.pem -L 8157 : abcd : 8088 hadoop @ abcd

여기서 클라이언트는 로컬 호스트에서 ABCD로 전달됩니다 8157 것으로, 예를 들어 말한다 : 8088 클라이언트는 로컬 호스트에 요청하게한다 : HTTP를 : // localhost를 : 8157 기타 응용 프로그램은 8089,8090 등의 포트에서 수신하고, 수 클라이언트는 이들 각각에 대해 ssh 연결을 작성해야합니다.

B) 동적 포트 전달 여기서는 단일 SSH 명령이 사용됩니다. ssh -i key.pem -D 8157 hadoop @ abcd

포트 8157로 들어오는 모든 트래픽은 ssh 터널을 통해 라우팅됩니다. 트래픽의 대상은 URL의 대상이됩니다. 예를 들어, 웹 서버에서 프록시 클라이언트를 사용하고 프록시를 사용하도록 일부 http URI를 리디렉션 할 수 있습니다. 단일 명령을 통해 8089,8090의 모든 응용 프로그램에 액세스 할 수 있습니다.

자세한 내용은 다음 문서를 참조하십시오 : https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.