메뉴 닫기

ip_conntrack: table full, dropping packet 해결방법(?)

202954 

아래와 같은 메세지를 보게 되면 아마 시스템이 느려지기 시작하거나 네트웍이 불안함

대개 서버 하드웨어 및 장비는 이상이 없는데 네트워크가 끊어지기 시작하면서 시스템 로그 (/var/log/messages)에 아래와 같은 로그가 찍혀 있다.

IDC 호스팅 업무를 보다보면 꽤나 트래픽이 나오거나 접속자들이 많은 서버들에게 공통적으로 나타날수 있는 부분이다.

Jul 31 18:41:00 www kernel: nf_conntrack: table full, dropping packet.

Jul 31 18:41:06 www kernel: nf_conntrack: table full, dropping packet. 

 

conntrack 모듈 때문일 가능성이 높다 

iptables 의 상태추적 모듈, NAT 테이블, FTP 등과 관련이 있는 모듈

서버를 통하거나 서버에 일어나는 통신에 대한 아이피들의 접속상태에 대해서 일정시간 기억하는 모듈

문제 발생하는것이 통신하는 패킷의 양의 많아지면 테이블의 기억공간에도 한계가 있는데 넘처나면서 커널의 에러가 발생하는 부분임

시스템이 처리 할 수 있는 패킷의 임계치가 초과되면서 패킷이 DROP 되는 현상 

 

리눅스에서 기본적으로 CONNTRACK_MAX가 65536이 세팅이 되고 HASHSIZE는 8192 됨

 

커널 2.6.X 에서는 nf_contrack인가 이걸로 바뀌어짐
 : 아래와 같은 로그가 남겨져 있다.

ip_conntrack: table full, dropping packet
nf_conntrack: table full, dropping packet

 cat /proc/sys/net/ipv4/ip_conntrack_max : 갯수 확인후 아래와 같이 조치

 echo “갯수” > /proc/sys/net/ipv4/ip_conntrack_max

echo “갯수” > /proc/sys/net/nf_conntrack_max

 

해쉬 사이즈 변경가능 (기본 8192)

echo $HASHSIZE > /sys/module/ip_conntrack/parameters/hashsize 

 

커널파라미터 conntrack 개수 설정

echo “32768” > /proc/sys/net/ipv4/ip_conntrack_max
echo “65535” > /proc/sys/net/ipv4/ip_conntrack_max : 기본적으로 이값을 많이 주며

cat “0” > /proc/sys/net/ipv4/ip_conntrack_max : 무한대라는데 시스템에 영향을 줄수 있으므로 적당선 조절해보자 

 

관련 커널변수값 커스터마이징

 vim /etc/sysctl.conf

sys.net.ipv4.ip_conntrack_max = 65535
kernel.panic=3
net.ipv4.netfilter.ip_conntrack_max=16384
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.ip_forward=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.tcp_ecn=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_timestamps=0
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=300
net.ipv4.netfilter.ip_conntrack_udp_timeout=60
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream=180

net.netfilter.nf_conntrack_max=131072 

sysctl -p (적용)

 

nf_conntrack 접속자 카운팅
watch -d cat /proc/sys/net/netfilter/nf_conntrack_count

conntrack 관련 모듈 (lsmod 로 검색) 

:rmmod 로 제거할수 있다

nf_conntrack_ipv4
nf_conntrack_ftp
nf_conntrack – nf_conntrack_ipv4,xt_state,nf_conntrack_ftp

nfnetlink – nf_conntrack_ipv4,nf_conntrack 

 

nf_conntrack 정보보기 (아이피 별로 상태와 세부 정보를 표시해준다)
cat /proc/net/nf_conntrack

tcp 6 119 TIME_WAIT src=115.x.14 dst=115.x.47 sport=53848 dport=3306 packets=15 bytes=1447 src=115.x.47 dst=115.x.14 sport=3306 dport=53848 packets=14 bytes=1910 [ASSURED] mark=0 secmark=0 use=1 

 

iptables 확인 (기본적으로 state 모듈이 올라가 있다)

: state 가 들어가는 구문을 삭제해주고 rmmod 로 conntract 관련 모듈 제거

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 

 → -A INPUT -m tcp -p tcp –dport 80 -j ACCEPT 

 

 호스팅 전문가가 본 근본적인 해결방법 (위의 방법으로 해결되지 않을시)

부하분산서비스 (L4) 를 이용하고 서버대수를 늘린다

 

 

참고블로그

http://kan2.net/zboard/view.php?id=kan2_study_linux&page=10&page_num=18&select_arrange=subject&desc=&sn=on&ss=off&sc=off&keyword=마을지기&category=&no=279

 

END

[polldaddy rating=”7739789″]  

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x