유휴 세션을 종료하는 TCP Keepalive 및 방화벽


10

고객 사이트에서 네트워크 팀은 클라이언트와 서버 사이에 방화벽을 추가했습니다. 이로 인해 약 40 분의 유휴 시간이 지나면 유휴 연결이 끊어집니다. 네트워크 사람들은 방화벽에 유휴 연결 시간 초과가 없다고 말하지만 사실 유휴 연결이 끊어졌습니다.

이 문제를 해결하기 위해 먼저 tcp_keepalive_time = 300, tcp_keepalive_intvl = 300 및 tcp_keepalive_probes = 30000으로 TCP keepalives가 설정된 서버 (Linux 시스템)를 구성했습니다. 이것은 작동하며 연결은 며칠 이상 지속 가능합니다. 그러나 서버가 죽은 클라이언트를 감지하고 연결을 끊기를 원하기 때문에 설정이 time = 300, intvl = 180, probe = 10으로 변경되었습니다. 클라이언트가 실제로 살아 있다면 서버는 300 대마다 검색 할 것이라고 생각했습니다. (5 분) 클라이언트가 ACK로 응답하면 방화벽이이를 유휴 연결로보고 종료하지 못하게합니다. 클라이언트가 작동 중지 된 경우 10 번의 프로브 후 서버는 연결을 중단합니다. 놀랍게도 유휴 상태이지만 활성 상태 인 연결은 이전과 같이 약 40 분 후에 종료됩니다.

클라이언트 측에서 실행중인 Wireshark는 서버에서 Keepalives가 활성화 된 경우에도 서버와 클라이언트 사이에 Keepalives가 전혀 표시되지 않습니다.

여기서 무슨 일이 일어날 수 있습니까?

서버의 keepalive 설정이 time = 300, intvl = 180, probes = 10 인 경우 클라이언트가 활성 상태이지만 유휴 상태 인 경우 서버는 300 초마다 keepalive 프로브를 보내고 연결을 그대로 둡니다. 클라이언트가 죽었을 때, 300 초 후에 하나를 보내고 연결을 끊기 전에 180 초마다 9 개의 프로브를 더 보냅니다. 내가 맞아?

한 가지 가능성은 방화벽이 서버에서 keepalive 프로브를 가로 채서 클라이언트에 전달하지 못하는 것입니다. 그리고 프로브가 있다는 사실로 인해 연결이 활성화되었다고 생각할 수 있습니다. 방화벽의 일반적인 동작입니까? 우리는 어떤 종류의 방화벽이 관련되어 있는지 모릅니다.

서버는 Teradata 노드이고 Teradata 클라이언트 유틸리티에서 서버 측 포트 1025 인 데이터베이스 서버로의 연결이지만 SSH 연결에서도 동일한 문제가 발생하여 모든 TCP 연결에 영향을 준다고 생각합니다.


2
클라이언트가 서버에 연결하는 데 사용하는 포트 또는 프로토콜에 대한 설명이 없습니다. SSH입니까?
ewwhite

방화벽을 식별하는 것도 도움이 될 수 있습니다.
Skaperen

3
netstat --timers -tn을 실행하여 소켓에서 keepalive가 활성화되어 있는지 확인하고 키워드 "keepalive"를 확인하십시오 (소켓의 소프트웨어에서 활성화해야하므로). 자세한 내용은 다음을 참조하십시오. tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html 타이머 값도 확인 하십시오. 첫 번째 값은 다음 keepalive 패킷까지 몇 초이고, 세 번째 값은 대기중인 뛰어난 keepalive 패킷 수입니다. (내가 정확히 기억 경우) 응답
빅터 Jerlin에게


2
네트워크 사람들이 잘못되었을 수 있습니다. 이들이 상태 저장 방화벽을 사용하는 경우, 각 연결마다 항목이 필요합니다 (거의 확실합니다). 유휴 시간 초과가 없으면 방화벽의 메모리가 누출되고 방화벽이 결국 종료되어 충돌합니다. 그들은 어딘가에 유휴 시간 제한이 있습니다 ...
James Shewey

답변:


1

Statefull 방화벽은 패킷을 확인하고 연결이 활성 상태인지 확인합니다. 방화벽은 컴퓨터와 동일한 방식으로 설정을 조정해야한다고 생각합니다. 기본적으로 많은 방화벽은 유휴 연결을 60 분 동안 만 열어 두지 만 이번에는 공급 업체에 따라 변경 될 수 있습니다.

일부 공급 업체에는 TCP 인터셉트, TCP 상태 바이 패스 및 데드 커넥션 감지와 같은 기능이있어 사용자와 같은 특수한 상황을 처리 할 수 ​​있습니다.

다른 옵션은 서버에서와 동일한 매개 변수로 방화벽 자체를 구성하여 모든 것이 일관되게하는 것입니다.

시스코 방화벽에는 다음과 같은 명령으로 구성 할 수 있습니다.

호스트 이름 (config) # timeout feature time

timeout conn hh : mm : ss— 연결이 닫힌 후 유휴 시간이 0 : 5 : 0에서 1193 : 0 : 0 사이입니다. 기본값은 1 시간입니다 (1 : 0 : 0).

필요에 따라 여러 매개 변수가 있습니다.

방화벽을 관리하는 팀과 이야기하고 필요에 따라 타이밍을 조정하거나 기능을 확인하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.