SSH 연결을 설정할 때 로컬 포트를 어떻게 지정합니까?

SSH 연결을 설정할 때 로컬 포트를 어떻게 지정합니까?

IDC에서 호스팅되는 두 개의 서버가 있습니다. 포트 20/21/22/23/3389/33101-33109를 사용하여 두 서버 간의 연결만 설정할 수 있습니다. IDC 네트워크 장치는 소스 또는 대상 포트가 20/21/22/23/80/3389/33101-33109 목록/범위에 없는 다른 모든 패킷을 차단합니다. 그러나 SSH의 소스 포트는 무작위입니다.

이 명령을 사용하면 원격 포트를 쉽게 지정할 수 있습니다.ssh username@server -p remote_port

ssh그렇다면 포트 33101 등을 사용하여 SSH 연결을 설정할 수 있도록 로컬 소스 포트를 지정하는 명령 매개변수나 다른 방법이 있습니까 ?

내 네트워크 토폴로지는 다음과 같습니다.
네트워크 토폴로지

답변1

SSH 클라이언트의 소스 포트는 지정할 수 없습니다.

nc하지만 다음과 같이 프록시 로 사용할 수 있습니다 .

ssh -p 33101 -o 'ProxyCommand nc -p 33101 %h %p' $SERVER_2

~에서unbuntu 서버에서 SSH의 소스 포트를 설정하는 방법은 무엇입니까?(서버 장애 관련).

답변2

일회성 또는 가끔 발생하는 상황의 경우 ProxyCommand 메서드는 의심할 여지 없이 매우 편리한 방법입니다.

반면, 여러 개의 동시 연결이 필요하거나 일상 업무에서 이 명령을 자주 사용해야 하는 경우 서버에 NAT(Network Address Translation) 규칙을 설정하는 것도 고려할 수 있습니다.

root단일 NAT 규칙을 먼저 적용하려면 서버에 대한 수퍼유저(일반적으로) 액세스가 필요합니다 . 참고하시기 바랍니다가능한"서버"가 실제로 머신이 아닌 컨테이너(예: Docker 컨테이너)인 경우, 슈퍼유저 액세스 권한이 있더라도 NAT 규칙은 전혀(또는 효과적으로) 적용되지 않습니다.

이 제품군이 포함된 일반적인 Linux 시스템 에 대해 말하면 iptables, 예제 사례에서 server1에 적용된 NAT 규칙은 다음과 같습니다.

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

이 명령은 Linux 커널에 포트에 대한 연결을 설정하도록 지시합니다.서버 2 포트~의server2-ip-주소해당 시점에 사용 가능한 33101-33109 범위에서 선택한 소스 포트를 사용하십시오.

규칙이 적용되면 정상적으로 server2에 연결할 수 있습니다.

ssh username@server2 -p remote_port

sshNAT 규칙에 지정된 범위 내에 사용 가능한 포트가 있는 한 동일한 명령을 필요한 만큼 동시에 사용할 수 있습니다.

그러나 netstat서버에서 실행되는 (또는 동등한 명령)은 연결의 로컬 주소를 다음과 같이 보고합니다.수정되지 않은, 무작위로 선택된 소스 포트 번호입니다. 비록 귀하의 server2로 전송된 실제 트래픽이수정됨소스 포트 번호.

NAT 규칙을 실행 취소하려면 명령이 동일하며 -D옵션으로 대체됩니다 -I.

시작 시 NAT 규칙의 자동 적용은 서버의 Linux 배포판과 특정 방화벽 구성이 있는지 여부에 따라 달라집니다.

나는 BSD와 유사한 시스템에 대한 경험이 없지만 동등한 시스템이 있다고 믿습니다.

관련 정보