酷!學園
技術討論區 => Linux 討論版 => 主題作者是: joe0120 於 2010-04-19 11:25
-
環境:
OS:RH9
kernel:2.4.20-8smp
硬體規格
IBM 345
Intel(R)Xeon(TM) CPU 2.40GHz*2
RAM 2GB
HD 36.4GB*4
May 13 08:13:03 www kernel: ip_conntrack: table full, dropping packet.
May 13 08:13:07 www kernel: ip_conntrack: table full, dropping packet.
May 13 08:13:10 www kernel: ip_conntrack: table full, dropping packet.
找過資料都說明加大
echo 32768 > /proc/sys/net/ipv4/ip_conntrack_max
目前狀況如下
# cat /proc/sys/net/ipv4/ip_conntrack_max
81920
# cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5
6114 192.168.1.2 //本機IP
40 61.25.65.xx
30 114.32.152.120
12 220.181.125.68
6 220.181.94.224
參考http://cha.homeip.net/blog/archives/2005/06/_linux_nat_ip_c.html 說明如下
解決方法 (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).
第2種方式只適用於 2.4以上核心使用
那請問
1、照jamyy's Weblog 發生原因為:
ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發生這種問題.
2、除非更新核心或加記憶體外,沒有辦法其他預防 ip_conntrack: table full, dropping packet 再發生
-
limit 限制連線數 ...
一個大家都知道 , 卻常忘記的問題 ..
nat 是將
10.10.1.1:1025 -> yahoo:80
變成
public:10250 -> yahoo:80
所以 public ip 的 port 是可能有用盡的時候的
(小弟沒遇過)