作者 主題: 關於ip_conntrack: table full, dropping packet?  (閱讀 2279 次)

0 會員 與 1 訪客 正在閱讀本文。

joe0120

  • 活潑的大學生
  • ***
  • 文章數: 241
    • 檢視個人資料
環境:
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 再發生





dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: 關於ip_conntrack: table full, dropping packet?
« 回覆 #1 於: 2010-04-19 12:19 »
limit 限制連線數 ...

一個大家都知道 , 卻常忘記的問題 ..
nat 是將
10.10.1.1:1025 -> yahoo:80
變成
public:10250 -> yahoo:80

所以 public ip 的 port 是可能有用盡的時候的
(小弟沒遇過)