解決 Linux NAT ip_conntrack: table full 的方法
原本 Linux NAT 用得好好的, 沒(méi)想到幾天前卻出現了無(wú)法上網(wǎng)的情況, 而系統記錄也出現了這樣的訊息:
ip_conntrack: table full, dropping packet.
後來(lái)才知道, Linux NAT 的 ip_conntrack 模組會(huì )記錄 tcp 通訊協(xié)定的 established connection 記錄, 而且預設 timeout 時(shí)間長(cháng)達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發(fā)生這種問(wèn)題.
解決方法 (1): 加大 ip_conntrack_max 值
查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max
寫(xiě)入理想的數值 (每一個(gè) ip_conntrack buffer 會(huì )佔用 292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個(gè)效果是暫時(shí)的, 如果要每次開(kāi)機都使用新的數值, 需將上述指令寫(xiě)入 /etc/rc.d/rc.local
或是在 /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值
解決方法 (2): 降低 ip_conntrack timeout 時(shí)間
重設 ip_conntrack_tcp_timeout_established (原值: 432000, 單位: 秒)
指令: echo "數值" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
例如: echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
開(kāi)機自動(dòng)設置的作法同方法(1).
其他相關(guān)指令:
查看目前 ip_conntrack buffer 使用狀況
指令: grep conn /proc/slabinfo
結果實(shí)例: ip_conntrack 3024 4090 384 409 409 1 (各值說(shuō)明如下)
ip_conntrack the cache name
3024 the number of currently active objects
4090 the total number of available objects
384 the size of each object in bytes
409 the number of pages with at least one active object
409 the total number of allocated pages
1 the number of pages per slab are given
man slabinfo 可查詢(xún)詳細說(shuō)明.
查出目前 ip_conntrack 記錄最多的前五名 IP
指令: cat /proc/net/ip_conntrack | cut -d ‘ ‘ -f 10 | cut -d ‘=‘ -f 2 | sort | uniq -c | sort -nr | head -n 5
結果實(shí)例:
2816 192.168.1.100
14 163.30.85.129
6 220.132.142.175
6 127.0.0.1
4 218.187.5.223
由此可知, 192.168.1.100 佔用了絕大多數的 buffer, 推斷這個(gè) IP 的 User 可能使用了 P2P 軟體.
參考資料:
Ray 的知識基地: Kernel Log 出現:「ip_conntrack: table full, dropping packet.」訊息Ray 的知識基地: ip_conntrack timeout 時(shí)間過(guò)長(cháng)問(wèn)題Netfilter conntrack performance tweaking, v0.6相關(guān)網(wǎng)頁(yè):
Jamyy‘s Weblog: Building Linux NAT with MRTG network monitoringJamyy‘s Weblog: iptables / route command notesPosted by Jamyy at 2005年06月16日 12:53
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/93
Listed below are links to weblogs that reference
解決 Linux NAT ip_conntrack: table full 的方法:
»
ip_conntrack buffer overflow from 我的生活 我的懶洋洋
剛剛家裡網(wǎng)路掛點(diǎn),本來(lái)想直接把NAT reset了事,手癢接上kvm看了一下,出現 ip_conntrack table full的錯誤,沒(méi)看過(guò)這是什麼東西的我,很直覺(jué)的進(jìn) /proc/sys/net找,果然有個(gè)ip_conntrack_max的屬性。原始大
[Read More]Tracked on 2006年03月25日 21:36
Comments
ip_conntrack_tcp_timeout_established
高版本內核才有,好像是 2.4.27 以上
RH7.3 的內核是 2.4.18
AS3 的內核是 2.4.21
我用的內核是 2.4.31
我的是RH9.0和As3.0 的也米有那個(gè)文件,不過(guò)借問(wèn)下,用語(yǔ)句
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600 &> /dev/null
可以實(shí)現不??
Posted by:
天涯小筑 at 2006年11月10日 17:27
另查了幾個(gè)參數給參考:
1.盡量用/dev/shm來(lái)放數據;
2.開(kāi)啟了arp代理 (這個(gè)我是從某個(gè)國外站看的,說(shuō)的是看了后效率更好????)
3.#可以改變滑動(dòng)窗口的大小
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
4.修改內核共享內存限制為256M,默認是32M
echo 268435456 >/proc/sys/kernel/shmall
echo 268435456 >/proc/sys/kernel/shmmax
5。#可使用的代理端口
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range
6。#刷新flush參數
echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush
7.#禁止廣播和ping入
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
8。/proc/sys/net/ipv4/netfilter/ip_conntrack_max 改大
Posted by:
天涯小筑 at 2006年11月10日 17:30
謝謝您提供這些寶貴的資訊~
關(guān)於 ip_conntrack_tcp_timeout_established 的問(wèn)題
這個(gè)項目是 kernel 2.4.23 以後才有的
執行 modprobe ip_nat_ftp 之後就能在 /proc/sys/net/ipv4/netfilter 裡面找到這個(gè)檔案
kernel.org 的 http://www.kernel.org/pub/linux/kernel/v2.4/ChangeLog-2.4.23 有提到:
Jozsef Kadlecsik:
o [NETFILTER]: Make conntrack timeouts become sysctls
4.2.23 以前的 sysctl 無(wú)法使用這個(gè)鍵值 (會(huì )出現 unknown key 的錯誤)
Posted by: Jamyy at 2006年11月20日 16:44
from:
http://cha.homeip.net/blog/archives/2005/06/_linux_nat_ip_c.html#more