Linux内核中conntrack
模块使用哈希表来存储连接跟踪条目,当哈希表条目达到上限时,系统会将新分配conntrack
条目的数据包DROP
掉,从而导致网络受到影响。此时,日志中会记录:
1 | nf_conntrack: table full, dropping packet |
哈希表条目上限由参数net.netfilter.nf_conntrack_max
设置。
网上文章对这个问题的解决方法往往是调大该参数。但在涉及多个network namespace
的场景下,不能简单的这样做,还是要根据自身场景分析清楚具体原因。
根据CentOS7 3.10.0-957
版本内核源码,实际上每个network namespace
的conntrack
哈希表是独立的。在表示network namespace
的结构体net
中的成员ct
表示conntrack
相关信息:
1 | struct net { |
netns_ct
结构中保存有独立的哈希表相关信息:
1 | struct netns_ct { |