Choose Your Language

09 October 2012

Cara mengatasi masalah ip_conntrack: table full, dropping packet

Suatu kali saya pernah mengalami masalah web server (Centos) dimana terjadi banyak sekali RTO (request time out). Dugaan pertama masalah mungkin ada pada ISP, karena ISP di kantor ada 2 yaitu ISP kantor dan ISP khusus Colocation. Untuk mengecek internet mana (kantor atau colocation) yang bermasalah saya gunakan aplikasi gratis WinMTR. Ketika dicek dengan WinMTR ternyata packet loss banyak terjadi pada koneksi internet di colocation. Saya langsung menghubungi ISP di colocation tersebut. Setelah dilakukan pengecekan oleh ISP, diduga oleh ISP banyak request ke web server yang menyebabkan bandwidth full sehingga terjadi banyak RTO (padahal dilihat dari mrtg, bandwidth yang terpakai belum penuh). Saya usulkan untuk penambahan bandwidth menjadi 3 MB, oleh ISP ditambahkan menjadi 5 MB (lebih banyak dong hehehe). Sesudah ditambah ternyata masih terjadi RTO malah lebih parah. ISP-nya mengambil kesimpulan tidak ada masalah pada jaringan mereka, mungkin masalah ada pada koneksi di web server tersebut. Akhirnya kita berangkat ke gedung colocation. Sesampai disana ketika dinyalakan servernya muncul tulisan, nah ini dia:

ip_conntrack: table full, dropping packet. 
ip_conntrack: table full, dropping packet. 
ip_conntrack: table full, dropping packet. 

Ternyata masalah terjadi pada firewall iptables. Connection tracking (conntrack) database penuh/full ketika mencatat koneksi simultan. 

Untuk mengetahui limit koneksi conntrack kita dapat gunakan perintah:

1. sysctl net.ipv4.netfilter.ip_conntrack_max 
2. atau cat /proc/sys/net/ipv4/ip_conntrack_max


Akan muncul angka : 65536
Sudah cukup besar kan. Tapi kok iptablesnya masih error ya. 

Mari kita lihat konfigurasi conntrack kita di sysctl dengan perintah:

sysctl -a | grep conntrack

Misal muncul tulisan :
net.ipv4.ip_conntrack_max = 65496
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180
net.ipv4.netfilter.ip_conntrack_udp_timeout = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 259200
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.netfilter.ip_conntrack_max = 65496

Ayo kita coba rubah setting konfigurasi yang dicetak tebal (bold) dengan cara menambahkannya di  /etc/sysctl.conf:


net.ipv4.netfilter.ip_conntrack_max = 98000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 240
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 28800

Dengan cara ini kita menambah sedikit kapasitas tabel menjadi 98000, dan disaat yang sama mengurangi jumlah waktu koneksi yang terjadi dari 5 hari (432000 detik) menjadi 8 jam (28800 detik). Kita juga mengubah jumlah koneksi waktu akan disimpan di TIME_WAIT  untuk sesuatu yang lebih wajar.

Untuk memantau koneksi simultan yang terjadi secara real-time maka gunakan perintah:

wc -l /proc/net/ip_conntrack



Mudah-mudahan membantu :)

Sumber:

http://www.linuxquestions.org/questions/linux-server-73/ip_conntrack-table-full-581142/
http://www.cyberciti.biz/faq/ip_conntrack-table-ful-dropping-packet-error/
http://rackerhacker.com/2008/01/24/ip_conntrack-table-full-dropping-packet/



1 comment:

Mega said...

Blog yang sangat berrrmanfaat! Liat-liat blog saya juga yah! ;)

Software
Billigt Flyg London