본문으로 건너뛰기

ip_conntrack table full로 인한 packet drop 현상 발생 시 조치 방법은 무엇인가요?

💡 요약 정리

  • iptables를 사용하는 서버에서 /var/log/messages에 packet drop 메시지가 반복된다면 ip_conntrack table 포화 현상일 수 있습니다.
  • 이를 해결하려면 커널 파라미터 net.ipv4.ip_conntrack_max 값을 늘려야 합니다.
  • 설정은 일시적으로 변경하거나, /etc/sysctl.conf를 수정해 영구 적용할 수 있습니다.
  • iptables 버그로 설정값이 초기화되는 문제를 방지하기 위해 버전 업데이트 및 설정 파일 수정도 필요합니다.

1. packet drop 현상 발생 로그 확인

/var/log/messages 파일에 아래와 같은 메시지가 반복적으로 출력되면 ip_conntrack 테이블 포화로 인한 packet drop 현상이 발생 중입니다.

Mar 12 13:40:34 localhost kernel: printk: 5990 messages suppressed.
Mar 12 13:40:34 localhost kernel: ip_conntrack: table full, dropping packet.
iptables를 사용하지 않는 경우는 해당 사항이 없습니다.

2. 커널 파라미터 값 확인 및 수정

2.1 현재 설정값 확인

[root@localhost ~]# sysctl -a | grep net.ipv4.ip_conntrack_max
net.ipv4.ip_conntrack_max = 65536
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_conntrack_max
65536

2.2 커널 파라미터 변경 적용

sysctl 또는 echo 명령어로 값을 즉시 적용할 수도 있지만, 재부팅 후에도 설정이 유지되도록 /etc/sysctl.conf에 설정을 추가한 뒤 sysctl -p 명령어로 적용하는 방식을 권장합니다.

net.ipv4.ip_conntrack_max = 1048576
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.netfilter.ip_conntrack_max = 1048576
[root@localhost ~]# sysctl -a | grep ip_conntrack_max
net.ipv4.ip_conntrack_max = 1048576
net.ipv4.netfilter.ip_conntrack_max = 1048576

3. iptables 설정값 초기화 오류 해결 방법

iptables를 restart 하면 설정값이 기본값으로 초기화되는 문제가 발생할 수 있습니다. 이는 iptables 버그로, 다음과 같은 조치가 필요합니다.


3.1 iptables 버전 업데이트

[root@localhost ~]# yum update iptables
[root@localhost ~]# rpm -qa | grep iptables
iptables-1.3.5-9.1.el5

3.2 /etc/sysconfig/iptables-config 파일 설정 추가

설정파일에 다음 내용을 추가합니다.

IPTABLES_SYSCTL_LOAD_LIST=".ip_conntrack .bridge-nf"

3.3 설정 적용 및 재시작 테스트

[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.netfilter.ip_conntrack_max = 1048576
[root@localhost ~]# /etc/init.d/iptables restart
Flushing firewall rules:                                  [  OK  ]
Setting chains to policy ACCEPT: filter                   [  OK  ]
Unloading iptables modules:                               [  OK  ]
Applying iptables firewall rules:                         [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n [  OK  ]
[root@localhost ~]# sysctl -a | grep ip_conntrack_max
net.ipv4.ip_conntrack_max = 1048576
net.ipv4.netfilter.ip_conntrack_max = 1048576
설정값이 정상적으로 유지되는지 확인하세요.