找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6504|回复: 1

[linux] 解決Linux软路由 NAT ip_conntrack: table full 的方法

[复制链接]
发表于 2007-1-25 01:31:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
解決Linux软路由 内网syn

原本 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 軟體.
routeros
发表于 2007-1-25 12:55:58 | 显示全部楼层
修改 ip_conntrack_tcp_timeout_established 的值很有效,不过建议还是设置为 1000-1500 之间比较好。
我曾经想为coyote linux 做个利用  ip_conntrack 表统计连接数的占用情况的ADD-ON,不过感觉似乎没大用,就放弃了。如果有人觉得有用,我可以抽时间做一个。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-6-9 16:31 , Processed in 0.092932 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表