"커널: nf_conntrack: 테이블이 꽉 찼고 패킷이 삭제되었습니다" 오류를 완화하는 방법

"커널: nf_conntrack: 테이블이 꽉 찼고 패킷이 삭제되었습니다" 오류를 완화하는 방법

최근 우리 서버 중 하나(Debian Squeeze)가 부하가 높은 기간 동안 응답하지 않는 문제가 발생했습니다. 커널 로그를 보면 그 이유는 다음과 같습니다.

kernel: nf_conntrack: table full, dropping packet

내가 이해한 바에 따르면 이것은 연결 상태 추적을 수행하고 연결 세부 정보를 저장하는 데 사용되는 테이블이 가득 찼음을 보고하는 conntrack 모듈입니다.

제가 수행한 연구에 따르면 이를 완화하는 두 가지 방법이 있는 것 같습니다.

  1. 테이블의 크기를 늘립니다.

  2. 시스템에서 모듈을 완전히 제거합니다.

그러나 이 시스템에는 존재하지도 /proc/sys/net/ipv4/ip_conntrack_max않고 존재하지도 않습니다 /proc/sys/net/ipv4/netfilter/ip_conntrack_max( 아래에 ipv4디렉토리 가 없음 net).

이렇게 하면 lsmod아무런 결과도 얻지 못합니다.

그래서 저는 약간 혼란스럽습니다. 누군가 상황을 명확히 하는 데 도움을 줄 수 있을까요?

  • conntrack이 설치되어 있나요? 그렇다면 설정은 어디에 있습니까? 왜 lsmod에 표시되지 않습니까?
  • conntrack이 설치되지 않은 경우 테이블이 꽉 찼다는 메시지는 어떻게 발행됩니까?

감사해요

답변1

Ubuntu 18.04를 실행하는 서버에서도 동일한 문제가 발생했습니다. 시작 시 모듈이 로드되지 않더라도 nf_conntrack나중에 트래픽이 급증하는 동안 메시지가 삭제됩니다( nf_conntrack: table full, dropping packet).

해당 기능을 비활성화하는 방법은 모르지만 테이블 크기를 재정의할 수 있도록 모듈을 명시적으로 로드했습니다.

먼저 nf_conntrack다음 항목에 포함하여 지금 로드 해야 합니다 /etc/modules.

nf_conntrack

그런 다음 서버의 메모리 크기에 따라 달라지는 다음의 기본값을 재정의하여 테이블 크기를 늘립니다 /etc/sysctl.conf.

net.netfilter.nf_conntrack_max=262144
net.nf_conntrack_max=262144

확인하다:

$ cat /proc/sys/net/netfilter/nf_conntrack_max 
262144

언급했듯이 Ubuntu 18.04에서 테스트되었지만 Debian에서도 작동하고 싶습니다.

nf_conntrack시작 후 존재하지 않는 경우에도 나중에 로드될 수 있는 이유에 대한 추가 배경 정보를 보려면이 관련 답변iptables호출 시 모듈이 자동으로 로드되는 예가 있습니다. 이를 추가하면 /etc/modules이러한 복잡성이 제거됩니다.

관련 정보