ip_conntrack table full로 인한 packet drop현상

/var/log/messages 파일에 아래와 같은 형식으로 packet drop 현상이 지속적으로 발생할 경우

(iptables를 사용하지 않는 경우는 해당 사항 없음)
Mar 12 13:40:34 localhost kernel: printk: 5990 messages suppressed.

Mar 12 13:40:34 localhost kernel: ip_conntrack: table full, dropping packet.

 

커널 파라미터 값중 net.ipv4.ip_conntrack_max 값을 늘려 준다.

 

 

 

 

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. 커널 파라미터 변경 적용

 

sysctl -w 나 echo 명령으로 /proc/sys/net/ipv4/ip_conntrack_max 에 바로 적용할 수 도 있지만,

리부팅할 경우에도 적용되도록 하기 위해서 /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
– iptables를 리스타트 하는 경우, 설정값이 default로 되돌아 가는 현상이 발생한다.

이는 iptables 의 버그로 iptables 를 최신 버전인 iptables-1.3.5-9.1.el5 이상의 버전으로 업데이트 하고,

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

 

[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 = 65536

net.ipv4.netfilter.ip_conntrack_max = 65536

3. iptables 버전 update

 

[root@localhost ~]# yum update iptables

 

[root@localhost ~]# rpm -qa | grep iptables

iptables-1.3.5-9.1.el5

 

 

 

 

4. /etc/sysconfig/iptables-config 파일에 추가
IPTABLES_SYSCTL_LOAD_LIST=”.ip_conntrack .bridge-nf”

5. sysctl -p로 sysctl.conf 파일 재 적용 및 iptables restart 후 테스트

 

[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

 

[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