[unix] 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 연결을 설정할 수 있도록 로컬 소스 포트를 지정 하는 명령 매개 변수 또는 다른 방법이 있습니까?

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



답변

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

그러나 다음 nc과 같이 프록시로 사용할 수 있습니다 .

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

에서 내가 어떻게 unbuntu 서버에서 SSH에 대한 소스 포트를 설정할 수 있습니까? (ServerFault에서) .


답변

일회성 또는 어쨌든 상황에 따라 ProxyCommand 접근 방식은 매우 편리한 방법입니다.

반면에 여러 개의 동시 연결이 필요하거나 일상적인 작업에이 명령을 자주 사용해야하는 경우 서버에서 NAT (Network-Address-Translation) 규칙을 설정하는 것이 좋습니다.

이를 위해서는 root먼저 단일 NAT 규칙 하나를 적용하기 위해 서버에서 수퍼 유저 (일반적으로 ) 액세스가 필요합니다. 이주의 수도 귀하의 “서버가”실제로 (A 도커 같은) 컨테이너 경우, 수퍼 유저 권한이 경우에도 NAT 규칙을 적용 전혀 허용 (또는 효과)하지 않고 기계.

iptables제품군 이 포함 된 일반적인 Linux 시스템에 대해 샘플 사례에 대해 서버 1에 적용 할 NAT 규칙은 다음과 같습니다.

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

이 명령은 Linux 커널에게 server2-ip-address 의 포트 server2-port 로 연결 하여 해당 시점에 사용 가능한 33101-33109 범위에서 선택한 소스 포트를 사용하여 나가도록 지시합니다.

해당 규칙이 설정되면 평소와 같이 서버 2에 연결합니다.

ssh username@server2 -p remote_port

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

그러나 netstat서버에서 실행 되는 (또는 동등한 명령) 서버 에 전달 된 실제 트래픽이 수정 된 소스 포트 번호를 가지고 있더라도 연결의 로컬 주소가 수정되지 않고 임의로 선택된 소스 포트 번호 인 것으로보고합니다.

NAT 규칙을 실행 취소하려면 명령 -D대신 옵션을 제외하고 명령이 동일 합니다 -I.

부팅시 NAT 규칙을 자동으로 적용하려면 서버에있는 Linux 배포판과 방화벽 구성이 이미 있는지 여부에 따라 다릅니다.

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


답변