로컬 및 원격 IP 전달의 차이점은 무엇입니까?


10

둘 사이의 기능 차이는 무엇입니까? 나는 약간 혼란스러워합니다.

로컬 포워딩은 원격 포트를 로컬에서 사용할 수있게합니다.

원격 전달은 로컬 포트를 원격으로 사용할 수있게합니다.

그러나이 '이용 가능 여부'는 양방향으로 작동합니까? 아니면 작동합니까?

예 : 다음 (호스트 'home'에서 발행)

ssh -R 1234:localhost:2345 user@work

이것은 work :: 1234와 home :: 2345 사이에 안전한 터널을 형성 할 것입니다.

한쪽 끝에 무언가를 넣으면 다른 쪽 끝에 나옵니다.

그러나 호스트 'work'의 다음 호출을 통해 동일한 결과를 얻을 수 있습니다.

ssh -L 1234:localhost:2345 user@home

그래서 유일한 차이점은 내가 어디에서 전화했는지입니다. 맞습니까?


귀하의 예에서 기능에는 차이가 없습니다. 대상 호스트를 교환하여 반대 인수를 사용하는 경우 자체 보상을 수행합니다. 당신이 있었다면 하지 이런 짓을하고 1 단일 호스트 내에서 둘 다 사용 - 이미 완전히 반대의 동작을 트리거한다.
XXL

답변:


2

가장 큰 차이점은 두 대의 컴퓨터 A와 B를 연결하고 B가 제어 할 수없는 방화벽이나 NAT 라우터 뒤에 있고 들어오는 것을 차단한다는 것입니다. A에 앉아 있습니다. B는 발신을 차단하지 않습니다. 따라서 B는 A에 연결됩니다.

-설명 추가-

위의 질문자가 이해 한 것은 로컬 포워딩과 원격 포워딩의 실질적인 차이를 의미합니다. 각각 사용할 때 ssh -L 및 ssh -R. 그가 준 특정 예제 명령, -L 및 -R을 전환하는 위치 및 그가 연결하는 sshd 서버에 대해서는 언급하지 않았습니다. 그러나 이제 나는 그것에 대해 언급하려고 노력할 것입니다. 그가 준 ssh 명령을 사용하여 일반 클라이언트와 일반 서버의 관점에서 "아 이것은 ssh 클라이언트입니다. 이것은 ssh 서버입니다 .. "ssh를 알지 못하며 ssh의 클라이언트 / 서버 측면은 일반 클라이언트 및 일반 서버와 관련이 없으며 알 수 없습니다. 그들은 단지 누가 듣고 있는지에 관심이 있으며, 그들의 관점에서 보면 동일하게 보입니다. 업무용 컴퓨터가 1234를 듣고 있습니다. 어떤 경우에는 sshd.exe ssh 서버이고 다른 경우에는 ssh.exe, ssh 클라이언트입니다. 그런데 ssh 클라이언트가있는 곳은 로컬로 간주됩니다.


알았어, 고마워, 내 질문에 정확히 답 했어! :-)
nandaloo

@ nandaloo 나는 그것이 역 ssh 터널이라고 생각합니다. 만약 우리가 구성자 (initializer)와 리스너 (listener)를 사용한다면 (이러한 용어는 클라이언트와 서버보다 덜 모호하다). 아이디어는 일반 초 기자 및 리스너와 ssh 초 기자 및 리스너가 있다는 것입니다. 일반 개시 자와 리스너의 위치를 ​​선택할 수 없습니다. 예를 들어 HTTP 서버 (일반 리스너)는 B에 있습니다. B는 방화벽 뒤에 있습니다. A에는 HTTP 클라이언트 (정규 개시 자)가 있습니다. SSH 이니시에이터를 B에 배치하십시오. 역방향 터널을 사용하여 SSH 이니시에이터 및 리스너는 일반 이니시에이터 및 리스너와 반대 컴퓨터에 있습니다.
barlop

10

예, 올바르게 이해하면 a에서 b 로의 로컬 포트 ​​전달은 b에서 a 로의 원격 포트 전달과 동일해야하며 그 반대도 마찬가지입니다. a에서 b로 나가는 터널 (a에서 본)은 a에서 b로 들어오는 터널 (b에서 본)과 같아야합니다.

로컬 포트 ​​포워딩나가는 터널을 만들어 공용 인터넷 컴퓨터를 로컬 컴퓨터로 가져 오는 데 사용할 수 있습니다. 로컬 (클라이언트) 호스트의 지정된 포트가 원격 호스트의 지정된 호스트 및 포트로 전달되므로 로컬 사용자는 로컬 호스트의 원격 호스트 : 포트 조합에 액세스 할 수 있습니다.

ssh -L local_port:remote_host:remote_port user@hostname

원격 포트 전달 은 로컬 컴퓨터를 공용 인터넷으로 가져 오는 데 사용할 수 있는 들어오는 터널을 만듭니다 . 인터넷 사용자는 원격 호스트의 특정 로컬 호스트 : 포트 조합에 액세스 할 수 있습니다. 원격 (서버) 호스트의 지정된 포트가 로컬의 지정된 호스트 및 포트로 전달됩니다.

ssh -R local_port:remote_host:remote_port user@hostname

1
구문 외에 다른 차이점은 사용자가 연결하는 프로세스를 듣는 것입니다. ssh.exe -L은 ssh.exe에 들어 오도록합니다 (이미 나가는 연결 외에). ssh.exe -R은 sshd.exe가 듣도록 지시합니다 (이미 수행중인 청취 외에).
barlop

@ 0x4a6f4672, 무슨 0x4a6f4672뜻인가요?
Pacerier

@Pacerier 16 진수 표기법으로 내 이니셜“JoFr”:-)
0x4a6f4672

3

로컬 포트 ​​전달을 사용하면 (클라이언트) 컴퓨터에서 수신 소켓을 열고 응용 프로그램 수준 프로토콜 클라이언트를이 소켓에 연결합니다. 이제 연결이 SSH를 통해 서버로 전달됩니다. 서버는 원격 호스트에 연결하고 프로토콜 클라이언트에서 최종 대상으로 데이터를 터널링합니다.

원격 포트 전달로 서버는 서버 호스트에서 청취 소켓을 엽니 다. 일부 원격 응용 프로그램은이 호스트에 연결하여 클라이언트 컴퓨터로 전송되는 정보를 보냅니다. 여기서 최종 대상 (컴퓨터 또는 네트워크에서 실행중인 일부 응용 프로그램 수준 프로토콜 서버)에 연결되고 원격 응용 프로그램에서 최종 대상으로 데이터가 전송됩니다.


덕분에 포트 포워딩 작동 방식이 더 명확 해졌습니다. 그리고 덕분에 질문을 이동 - 그냥도 :-)이 수퍼 유저 사이트에 대해 알고하지 않았다
nandaloo

1

이것은 작은 예제로 가장 잘 이해됩니다. 이 예제에서 연결은 다음과 같이 구성됩니다.

로컬 서버-(LAN)-터미널 ----- (일반적으로 인터넷을 통한 SSH) ----- 터널 엔드 포인트-(LAN)-원격 시스템

ssh 액세스 권한이있는 터널 엔드 포인트가 도달 할 수있는 특정 원격 시스템 / 포트로 터널링하려는 경우 로컬 포트 ​​전달을 사용합니다. 따라서 해당 원격 컴퓨터의 포트는 자신의 터미널에서 로컬로 액세스 할 수도 있습니다 (예 : http : // localhost : terminal_port /).

다음 구문을 사용하여 수행됩니다.

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

터널 엔드 포인트의 청취 포트에 도달하여 로컬 LAN의 IP / 포트에 원격으로 액세스 할 수있는 ANYONE (!) 원격 을 활성화하려는 경우 원격 포트 전달 을 사용할 수 있습니다. 로컬 서버에서는 원격 시스템과의 연결이 터미널에서 시작된 것처럼 보입니다.

구문은 다음과 같습니다.

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

0

socat에 대한 맨 페이지에서이를 명확하게 설명합니다. 예, ssh와 socat이 완전히 다른 두 가지라는 것을 알고 있지만 socat의 설명서는 매우 좋습니다.

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