두 컴퓨터 사이에 신뢰할 수없는 네트워크 연결이 있습니다. 때때로 제어 할 수없는 이유로 활성 TCP 연결이 끊어집니다. 두 컴퓨터 사이에 안정적인 TCP 연결 을 설정하고 싶습니다 .
네트워크가 안정적이라면 ssh -L 1234:localhost:1234 remotehost
서버는 포트 1234를 수신 대기 remotehost
하고 클라이언트를 가리켜 실행합니다 localhost:1234
. 그러나 ssh 연결이 종료되면 전달 연결도 마찬가지입니다. 클라이언트와 서버 간의 연결을 자동으로 복원하려면 어떻게해야합니까?
비 솔루션 :
- 대화 형 응용 프로그램 용이 아니므로 화면 이 적용되지 않습니다.
- 이것은 단지, 자동으로 라 SSH를 터널을 다시 연결에 대한 아니다 autossh를 . 동일한 터널링 된 TCP 연결을 계속 사용하고 싶습니다. 새 연결은 시작하지 않습니다.
- 원칙적으로 VPN이 트릭을 수행합니다. 그러나 TCP 연결을 하나만 원하면 과도하게 보일 수 있으며 양쪽에 루트 권한이 없어도 작동하는 솔루션을 원합니다.
나는 그 일을하는 프로그램의 희미한 기억 rocks
을 가지고 있지만 웹의 얼굴에서 떨어진 것 같습니다. 나는 주로 양측의 리눅스에 관심이 있지만 (이 레벨의 프로그램은 다른 유니스에 이식 가능할 것으로 기대하지만) QNX와 VMS 사이에서 작동하는 프로그램을 알고 있다면 더 좋습니다.
답변
오래된 당신이 찾고 있는 유지되지 않는 신뢰할 수있는 소켓 ( 락 )입니까?
답변
이 기능을 알고있는 유일한 표준 프로토콜은 MPTCP 입니다. 응용 프로그램 계층에 투명하므로 MPTCP 위에 SSH가 작동해야합니다. IP가 다른 여러 경로에서 기본 TCP 연결을 실행할 수 있으므로 원칙적으로 VPN 연결 여부에 따라 SSH 연결을 VPN 연결 안팎으로 마이그레이션하는 데 사용할 수 있습니다.
MPTCP 구현의 성숙도에 대해서는 잘 모르지만 프로토콜 디자인은 상당히 견고합니다.
네트워크 연결이 불안정하여 SSH 연결이 끊어지지 않도록 보호해야합니다. SSH 연결을 끊고 싶은 mitm으로부터 당신을 보호하지는 않습니다. mitm은 여전히 손상된 데이터를 주입 할 수 있으며 SSH는 연결을 감지하고 끊습니다.
SSH 프로토콜에 다시 연결하는 방법과 같은 MPTCP는 가능한 한 가장 오랫동안 연결을 유지하는 방법입니다. 그러나 그런 기능이 SSH 프로토콜을 위해 설계된 것은 아니라고 생각합니다.
답변
daemontools
ssh 포트를 앞으로 유지하는 데 사용할 수 있습니다 . ssh의 연결이 끊어지면 로컬 포트가 연결을 거부하기 시작하는 것처럼 연결이 끊어진 동안 연결에 따라 프로그램을 유지하지 않아도되지만 시작입니다.
iptables
ssh forward가 사라지면 포트를 DROP 패킷으로 보내는 것과 같은 트릭 이 있다고 생각 하므로 연결 프로그램은 패킷이 거부되고 거부되지 않는다는 것을 알 수 있습니다. 나는 단지 daemontools
(다시) 나 자신을 배우고 있기 때문에 서비스가 죽을 때 사용자 정의 스크립트를 실행할 수 있는지 확실하지 않지만 할 수 있다고 생각합니다.
답변
TCP가이를 자동으로 수행합니다. 원격 TCP 연결을 종료하는 데 사용되는 일반적인 실제 정리 해킹을 비활성화하거나 약화시키기 만하면됩니다. 연결에 대해 TCP keepalive를 비활성화하고 과도한 재전송에 대한 제한을 크게 늘리십시오. 예를 들어 Linux에서는에 큰 숫자를 씁니다 /proc/sys/net/ipv4/tcp_retries2
.
그러나 최신 네트워크에서 상태 저장 패킷 검사 방화벽은 정기적으로 패킷을 교환하지 못하는 TCP 연결을 잊어 버릴 수 있으므로 퍼레이드에 비가 올 수 있습니다.