歡迎您光臨本站 註冊首頁

解?QLinux NAT ip_conntrack: table full的方法

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

原本Linux NAT用得好好的,沒想到幾天前卻出現了無法上網的情況,而系統記錄也出現了這樣的訊息:

ip_conntrack: table full, dropping packet.

後來才知道, Linux NAT的ip_conntrack模組會記錄tcp通訊協定的established connection記錄,而且預設timeout時間長達五天(432,000秒),因此只要LAN中有人使用P2P軟體(如: eDonkey、BT...)就容易發生這種問題.

解決方法(1):加大ip_conntrack_max值

查出原本的ip_conntrack_max值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max

寫入理想的數值(每一個ip_conntrack buffer會佔用292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個效果是暫時的,如果要每次開機都使用新的數值,需將上述指令寫入/etc/rc.d/rc.local
或是在/etc/sysctl.conf加入: net.ipv4.ip_conntrack_max =數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值

解決方法(2):降低ip_conntrack timeout時間

重設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

開機自動設置的作法同方法(1).

其他相關指令:

查看目前ip_conntrack buffer使用狀況
指令: grep conn /proc/slabinfo

結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)

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可查詢詳細說明.

查出目前ip_conntrack記錄最多的前五名IP
指令: cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5

結果實例:

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,推斷這個IP的User可能使用了P2P軟體.

[火星人 ] 解?QLinux NAT ip_conntrack: table full的方法已經有438次圍觀

http://coctec.com/docs/linux/show-post-202615.html