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