두 컴퓨터에서 localhost와 localhost 간의 포트 전달을 수행하는 방법은 무엇입니까?

두 컴퓨터에서 localhost와 localhost 간의 포트 전달을 수행하는 방법은 무엇입니까?

로컬 머신 A가 있고 방화벽 뒤에 있는 머신 C에 액세스하고 싶습니다. 나는 C와 동일한 네트워크에 있는 컴퓨터 B에 액세스할 수 있으며 컴퓨터 B를 SSH 서버로 사용하여 A와 C 사이를 터널링하려고 합니다.

A와 C 사이에 두 개의 링크를 만들고 싶다고 가정해 보겠습니다. 이는 포트 전달을 통해 달성할 수 있습니다.

ssh -L IP_of_A:5000:IP_of_C:5000 -R IP_of_C:5001:IP_of_A:5001 IP_of_B

127.0.0.1그러나 위 명령에서 실제 IP 주소를 사용하는 동안 내 프로그램이 어떻게든 중단되기 때문에 위 명령에서 실제 IP 주소를 사용하는 대신 실제 IP 주소를 사용하는 것을 선호합니다 . 그래서 나는 그것이 다음과 같기를 원합니다

ssh -L IP_of_A:5000:127.0.0.1:5000 -R IP_of_C:5001:127.0.0.1:5001 IP_of_B

하지만 이것을 사용하면 터널 포트는 머신 A와 머신 C 사이가 아닌 머신 A와 머신 B 사이에 있는 것 같습니다.

그렇다면 A와 C 사이에 터널을 설정하고 127.0.0.1SSH 주소를 계속 사용할 수 있는 방법은 무엇일까요?

저는 ssh를 처음 접했기 때문에 질문이 명확하지 않은 경우 언제든지 지적해 주시면 알아내도록 노력하겠습니다.

답변1

에 지정된 주소는 -L원격 호스트(B)에서 사용됩니다. 따라서 실제로 A와 -L 5000:127.0.0.1:5000B 사이에 터널이 있다는 것은 놀라운 일이 아닙니다 . A의 TCP 포트 5000에 연결하면 연결이 127.0.0.1:5000B 로 전달됩니다.

반면에 -R 5001:127.0.0.1:5001주소는 localhost(A)에 의해 확인되고 대상은 A이기 때문에 괜찮습니다. B의 TCP 포트 5001에 연결하면 연결이 127.0.0.1:5001A 로 전달됩니다.

기본적으로 -L/ -R수신 포트는 모두 바인딩되어 있으므로 localhost각각 A와 B에서만 사용할 수 있습니다. 다른 호스트의 연결을 허용하려면 / bind_address섹션을 추가하세요. 선도를 추가하는 것만으로도 충분합니다.-L-R:

ssh -L :5000:IP_of_C:5000 -R :5001:127.0.0.1:5001 IP_of_B

이 설정을 사용하면 A는 에 연결되고 127.0.0.1:5000C는 에 연결됩니다 IP_of_B:5001.

A와 C를 사용하려면 127.0.0.1A와 C 사이에 (가상) 직접 SSH 연결을 설정해야 하며, 이는 SSH over SSH 터널을 통해 달성할 수 있습니다 ProxyCommand. 다음 내용을 넣으세요 ~/.ssh/config.

Host C
ProxyCommand ssh -q -W IP_of_C:22 IP_of_B

그런 다음 1홉을 통해 A에서 C로 연결합니다 ssh.

ssh -L 5000:127.0.0.1:5000 -R 5001:127.0.0.1:5001 C

이번에는 터널 연결이 양쪽 끝에서 사용되므로 bind_address섹션을 추가할 필요가 없습니다 .127.0.0.1

답변2

내가 이해한 바로는 StackExchange의 ServerFault 사이트에서 귀하가 찾고 있는 내용에 대한 답변을 얻은 것 같습니다.여기.

이것은 네트워킹 및 네트워크/서버 관리 도구에 관한 것이므로 앞으로 이와 같은 질문을 하는 것이 더 나은 사이트가 될 수 있습니다.

거기에서는 호스트 A에서 호스트 C로 SSH에 대한 터널을 설정하는 것에 대해 구체적으로 설명하지만 모든 TCP 연결에 대해 이 작업을 수행할 수 있습니다.

해당 예에서 $PROXYHOST호스트 B $REMOTEHOST는 호스트 C이고 $SSHPORT호스트 C는 연결을 보내려는 포트입니다.

관련 정보