3개의 전용 서버 간 포트 포워딩

3개의 전용 서버 간 포트 포워딩

모든 포트가 열려 있는 전용 서버에 마스터 노드가 있습니다. 서버 간 통신에 사용했던 포트 중 일부가 ISP 공급자에 의해 폐쇄된 추가 전용 서버를 사용해야 했습니다. 따라서 메인 서버의 인터넷 IP 주소를 사용하여 연결을 설정할 수 없습니다.

노드는 SSH 포트 전달을 통해 통신합니다.

다음 명령을 사용하여 닫힌 포트가 있는 전용 서버 중 하나에서 SSH 포트 전달을 만들었습니다.

ssh -fNT -L 84xx:localhost:84xx user@main_server_IP

하나의 포트만 전달하면 작동하지만, 2개 이상의 포트가 닫힌 서버에서는 어떻게 구현합니까? 또한 연결 전달을 위해 여러 서버가 있는 경우 localhost가 올바르게 사용되지 않는 것 같습니다. 각 서버가 갖고 있는 고정 IP 주소가 아닌 인트라넷 주소는 어떻게 생성하나요? 아니면 localhost 대신 고정 IP 주소를 사용할 수 있나요? 84xx 포트를 통해 설정된 노드에 대한 트래픽만 전달하면 되며, 다른 모든 연결은 터널링 없이 일반적인 방식으로 진행되어야 합니다.

답변1

올바르게 언급했듯이 localhost를 사용하면 안 됩니다. 주로 잘못된 터널 유형(-R 대신 -L)을 사용하고 있기 때문입니다. 외부 클라이언트가 사용할 수 있도록 마스터 서버에서 새 포트를 열려고 합니다. 이는 이러한 포트가 공용 IP 주소에 바인딩되어야 함을 의미합니다. localhost에 바인딩하면 외부의 누구도 접근할 수 없습니다.

문제(ssh 터널)를 해결하려는 방법을 고려할 때 간단한 해결책은 main_server에서 두 개의 서로 다른 포트를 사용하는 것입니다. 기본 서버가 "main_ip"이고 다른 두 서버가 "sec1_ip" 및 "sec2_ip"인 경우 다음 명령을 실행해야 합니다.

sec1_ip에서:

ssh -fNT -R 8447:localhost:8447 user@main_ip

sec2_ip에서:

ssh -fNT -R 8448:localhost:8447 user@main_ip

이후에는 main_ip:8447에 ​​연결하는 모든 사람이 sec1_ip로 역터널을 수행하고, main_ip:8448에 연결하는 모든 사람이 sec2_ip로 역터널을 수행합니다.

다음 사항에 유의하세요.

  1. 역터널링의 첫 번째 옵션으로 다른 포트를 사용해야 합니다. 하나의 프로세스만 특정 IP 주소에서 특정 포트를 열 수 있습니다.
  2. -L 대신 localhost와 -R(역방향 터널)을 사용합니다. 이는 localhost 부분이 sec*_ip 서버에 있음을 의미합니다.
  3. 두 "숨겨진" 서버 모두에 동일한 포트를 사용하려면 main_ip 서버에서 추가 공용 IP 주소를 요청해야 합니다. 이 경우 위 명령을 다음과 같이 변경할 수 있습니다.

sec1_ip에서:

ssh -fNT -R main_ip:8447:localhost:8447 user@main_ip

sec2_ip에서:

ssh -fNT -R main_ipB:8447:localhost:8447 user@main_ip

관련 정보