4G 핫스팟에서는 SSH 연결이 정지되지만 Wi-Fi에서는 정지되지 않습니다.

4G 핫스팟에서는 SSH 연결이 정지되지만 Wi-Fi에서는 정지되지 않습니다.

간단한 설명

나는 수년간 SSH 연결에서 이상한 동작을 보아왔지만 오늘까지 질문을 제기할 생각은 한 번도 해본 적이 없습니다. 이것에 대해 많이 검색해 보았지만 어떤 이유도 찾을 수 없었습니다.

환경

  1. 기본적으로 다양한 AWS EC2 인스턴스가 다양한 지역(아일랜드, 뭄바이 등)에서 실행되고 있습니다.
  2. 나에겐 맥이 있다.
  3. 그리고 저는 인도에 있습니다(어떤 이유에서든 누군가에게 피해를 입힐 경우를 대비해).

문제 설명 1

Mac이 4G 네트워크를 통해 개인 핫스팟(삼성 장치 또는 iPhone)에 연결되어 있을 때 SSH 세션에서 작업하지 않으면(기본적으로 3분 이내) SSH 연결이 정지됩니다. SSH 연결이 이상적이었습니다). 그래서 계속 화살표 키를 눌러야 살아있습니다.

문제 진술 2(문제가 되지 않음)

하지만 Mac이 Wi-Fi 광대역 연결에 연결되어 있으면 이 문제가 발생하지 않습니다. Mac을 잠자기 상태에서 깨운 후에도(뚜껑 열기) SSH 연결은 몇 시간 동안 연결 상태를 유지합니다.

오늘 다시 인터넷 검색을 통해 다음과 같은 옵션을 사용하는 솔루션을 제공하는 다양한 기사를 찾았 TCPKeepAlive습니다 ServerAliveInterval.

  1. sshd_config의 `ServerAliveInterval` 및 `ClientAliveInterval` 옵션은 정확히 어떤 옵션을 수행합니까?
  2. SSH에서 tcp-keepalive는 어떻게 작동하나요?
  3. https://raspberrypi.stackexchange.com/questions/8311/ssh-connection-timeout-when-connecting
  4. https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/

그러나 이 문제를 설명하는 게시물을 찾을 수 없습니다. 이 행동에 대해 아는 사람이 있습니까? 4G 핫스팟 연결에 대한 자세한 내용을 기꺼이 알려드리겠습니다.

답변1

나는 상태에 따라 연결을 추적하고 잊어버리는 시스템이 이 문제의 원인이라고 추측합니다. NAT가 사용 중일 때(IPv6를 사용하지 않는 경우가 매우 자주 발생함) 일반적으로 NAT를 수행하는 시스템에는 응답을 다시 보낼 위치를 기억하기 위한 메모리가 필요합니다. Wi-Fi 광대역의 경우 NAT를 수행하는 시스템은 활성 연결을 기억하기 위해 더 긴 메모리를 가질 수 있습니다(예: Linux넷필터'에스콘트랙기본적으로 TCP 연결은 5일 동안 기억하고 UDP 흐름은 2~3분 동안 기억합니다. 4G 경로에서 NAT를 수행하는 동등한 시스템의 메모리는 아마도 3mn보다 약간 더 짧을 것입니다.

이 문제를 해결하려면 질문에서 찾아서 연결한 대로 특정 SSH 매개변수를 설정할 수 있습니다.ServerAliveInterval 다음과 유사한 방식으로 활동이 없을 때 주기적으로 빈 데이터(SSH 프로토콜로)를 보냅니다.TCP KeepAlive. 이렇게 하면 NAT를 수행하는 시스템에 대해 연결이 항상 활성 상태로 표시되며 이를 잊지 않습니다. 따라서 ~/.ssh/config파일에 다음을 추가할 수 있습니다.

ServerAliveInterval 115

115에서는 보수적인 상태를 유지하기 위해 2mn보다 약간 작은 값을 선택했습니다. 이 값은 경로에 있는 보이지 않는 NAT 장치에서 활성 연결의 예상 추적 기간보다 낮지만 너무 낮지는 않습니다(나중에 참조). 따라서 더 나쁜 경우 추적 상태가 삭제되기 전 5초가 되면 예상 수명인 120초로 돌아갑니다.

단점은 (어쨌든 Wi-Fi 광대역 액세스에서) 한동안 연결이 끊겼다가 복구되면 클라이언트가 원격 서버가 다운되었다고 생각하여 연결이 종료될 수 있다는 것입니다. 당신은 또한 조정할 수 있습니다ServerAliveCountMax그러나 어쨌든 기본값이 3이면 이 문제가 발생하기 전에 3*115=345초의 연결 손실, 즉 500만 개가 넘는 시간이 필요합니다.

서버 측에는 동등한 것이 있습니다ClientAliveIntervalsshd_config대신 동일한 목적으로 해당 파일에 설정할 수 있습니다 . 이는 클라이언트 측 연결이 끊어졌을 때 일정 시간 동안 여전히 연결되어 있는 것으로 보이는 고스트 SSH 클라이언트 연결을 유지하지 않는다는 추가 이점이 있습니다.

관련 정보