解決 Linux NAT ip_conntrack: table full 的方法
2008-11-08 16:49
477 查看
原贴:http://cha.homeip.net/blog/archives/2005/06/_linux_nat_ip_c.html
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 (各值說明如下)
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
結果實例:
由此可知, 192.168.1.100 佔用了絕大多數的 buffer, 推斷這個 IP 的 User 可能使用了 P2P 軟體.
參考資料:
Ray 的知識基地: Kernel Log 出現:「ip_conntrack: table full, dropping packet.」訊息
Ray 的知識基地: ip_conntrack timeout 時間過長問題
Netfilter conntrack performance tweaking, v0.6
相關網頁:
Jamyy's Weblog: Building Linux NAT with MRTG network monitoring
Jamyy's Weblog: iptables / route command notes
Posted by Jamyy at 2005年06月16日 12:53
» ip_conntrack buffer overflow from 我的生活 我的懶洋洋
剛剛家裡網路掛點,本來想直接把NAT reset了事,手癢接上kvm看了一下,出現 ip_conntrack table full的錯誤,沒看過這是什麼東西的我,很直覺的進 /proc/sys/net找,果然有個ip_conntrack_max的屬性。原始大 [Read More]
Tracked on 2006年03月25日 21:36
高版本内核才有,好像是 2.4.27 以上
RH7.3 的内核是 2.4.18
AS3 的内核是 2.4.21
我用的内核是 2.4.31
我的是RH9.0和As3.0 的也米有那个文件,不过借问下,用语句
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600 &> /dev/null
可以实现不??
Posted by: 天涯小筑 at 2006年11月10日 17:27
另查了几个参数给参考:
1.尽量用/dev/shm来放数据;
2.开启了arp代理 (这个我是从某个国外站看的,说的是看了后效率更好!??)
3.#可以改变滑动窗口的大小
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
謝謝您提供這些寶貴的資訊~
關於 ip_conntrack_tcp_timeout_established 的問題
這個項目是 kernel 2.4.23 以後才有的
執行 modprobe ip_nat_ftp 之後就能在 /proc/sys/net/ipv4/netfilter 裡面找到這個檔案
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 無法使用這個鍵值 (會出現 unknown key 的錯誤)
Jamyy's Weblog
« 2005/06, 113 期 PChome 雜誌讀後筆記 | 首頁 | 網路安裝 Linux »
2005年06月16日
解決 Linux NAT ip_conntrack: table full 的方法
原本 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 |
查出目前 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 |
參考資料:
Ray 的知識基地: Kernel Log 出現:「ip_conntrack: table full, dropping packet.」訊息
Ray 的知識基地: ip_conntrack timeout 時間過長問題
Netfilter conntrack performance tweaking, v0.6
相關網頁:
Jamyy's Weblog: Building Linux NAT with MRTG network monitoring
Jamyy's Weblog: iptables / route command notes
Posted 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 我的生活 我的懶洋洋
剛剛家裡網路掛點,本來想直接把NAT reset了事,手癢接上kvm看了一下,出現 ip_conntrack table full的錯誤,沒看過這是什麼東西的我,很直覺的進 /proc/sys/net找,果然有個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 的也米有那个文件,不过借问下,用语句
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600 &> /dev/null
可以实现不??
Posted by: 天涯小筑 at 2006年11月10日 17:27
另查了几个参数给参考:
1.尽量用/dev/shm来放数据;
2.开启了arp代理 (这个我是从某个国外站看的,说的是看了后效率更好!??)
3.#可以改变滑动窗口的大小
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
謝謝您提供這些寶貴的資訊~
關於 ip_conntrack_tcp_timeout_established 的問題
這個項目是 kernel 2.4.23 以後才有的
執行 modprobe ip_nat_ftp 之後就能在 /proc/sys/net/ipv4/netfilter 裡面找到這個檔案
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 無法使用這個鍵值 (會出現 unknown key 的錯誤)
相关文章推荐
- [ZT]解決 Linux NAT ip_conntrack: table full 的方法
- 解決 Linux NAT ip_conntrack: table full 的方法
- 解决 Linux NAT ip_conntrack: table full 的方法
- Redhat 出现丢包解决方法(ip_conntrack: table full)-已验证
- ip_conntrack table full dropping packet错误的解决方法
- ip_conntrack: table full, dropping packet 解决方法
- CentOS ip_conntrack: table full, dropping packet 的解决方法
- 解决(kernel: ip_conntrack: table full, dropping packet)的方法
- 解决(kernel: ip_conntrack: table full, dropping packet)的方法
- CentOS ip_conntrack: table full, dropping packet 的解决方法
- Resolving "ip_conntrack: table full, dropping packet" errors
- 关于linux做nat出现“table full”的终极解决办法。
- 关于ip_conntrack: table full, dropping packet的问题
- 服务器出现 server kernel: ip_conntrack: table full, dropping packet. 问题
- 系统报错:ip_conntrack: table full, dropping packet
- ip_conntrack: table full, dropping packet的问题
- ip_conntrack: table full, dropping packet
- 服务器出现 server kernel: ip_conntrack: table full, dropping packet. 问题
- [精彩] 在做NAT的机器上处理ip_conntrack满的方法
- ip_conntrack: table full, dropping packet(from rackerhacker)