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

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

짧은 소개

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

환경

  1. 기본적으로 아일랜드, 뭄바이 등과 같은 다양한 지역에서 다양한 AWS EC2 인스턴스를 실행하고 있습니다.
  2. 나에겐 맥이 있다.
  3. 저는 인도에 있습니다(누군가 어떤 이유로 충격을 받았을 경우를 대비해).

문제 설명 1

내 Mac이 4G 네트워크를 통해 개인 핫스팟(Samsung 장치 또는 iPhone)에 연결되어 있고 SSH 세션이 없으면 기본적으로 SSH 연결이 이상적입니다. 그래서 계속해서 화살표 키를 눌러야 살아있습니다.

문제 진술 2 (이것은 질문이 아닙니다)

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

오늘 다시 Google 검색을 기반으로 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를 수행하는 동등한 시스템의 메모리는 300만 개보다 약간 적을 수 있습니다.

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

ServerAliveInterval 115

115라는 값은 보수적인 상태를 유지하기 위해 2mn보다 약간 작은 값으로 선택되었습니다. 이는 경로에 있는 보이지 않는 NAT 장치에서 활성 연결의 예상 추적 기간보다 낮지만 너무 낮지는 않습니다(아래 참조). 따라서 설상가상으로 추적 상태가 삭제되기 5초 남았을 때 가정된 수명인 120초로 돌아갑니다.

단점은 (어쨌든 Wi-Fi 광대역 액세스에서) 잠시 연결이 끊어졌다가 다시 시작하면 클라이언트가 원격 서버가 다운되었다고 생각하여 연결이 닫힐 수 있다는 것입니다. 조정할 수도 있습니다.ServerAliveCountMax그러나 어쨌든 기본값이 3이라면 이 문제가 발생할 가능성이 있는 데는 3*115=345초, 즉 500만 개가 넘는 연결 손실이 소요됩니다.

서버 측에는 이에 상응하는 것이 있습니다ClientAliveIntervalsshd_config동일한 목적으로 해당 파일에 설정할 수 있습니다. 이것의 또 다른 이점은 어쨌든 클라이언트의 연결이 끊어지면 Ghost SSH 클라이언트 연결이 일정 기간 동안 유지되지 않고 여전히 연결된 것처럼 처리된다는 것입니다.

관련 정보