主机名内核 nf_conntrack 表已满,丢弃数据包 错误

问题

默认情况下,Cumulus Linux 不使用连接跟踪。但是,可以运行一些命令,这些命令会将内核模块加载到运行的内核中并激活连接跟踪(例如:iptables -t nat -L)。您可以跟踪的连接数有一个可配置的限制。达到此限制后,可能会导致数据包丢失,并且以下日志消息会出现在 /var/log/syslog

2019-02-25T03:45:03.778502+00:00 hostname kernel: [20763743.334180] nf_conntrack: table full, dropping packet
2019-02-25T03:45:03.785333+00:00 hostname kernel: [20763743.340564] nf_conntrack: table full, dropping packet
2019-02-25T03:45:03.787758+00:00 hostname kernel: [20763743.343469] nf_conntrack: table full, dropping packet

环境

  • Cumulus Linux 3.y.z

原因

此问题是由于内核中连接跟踪模块的激活而发生的,这会启动对内核可见的所有连接的跟踪。要跟踪的连接数是使用 net.netfilter.nf_conntrack_max sysctl 的可配置限制。

要检查内核模块是否在运行的内核中处于活动状态

cumulus@switch:~$ cat proc/modules | grep conn
nf_conntrack_ipv4 20480 1 - Live 0xffffffffa0474000
nf_defrag_ipv4 16384 1 nf_conntrack_ipv4, Live 0xffffffffa048d000
nf_conntrack 94208 3 nf_conntrack_ipv4,nf_nat_ipv4,nf_nat, Live 0xffffffffa045c000

解决方案

如果您正在耗尽限制,调整连接跟踪器限制可能会有所帮助。但是,可以通过创建一个模块文件来防止内核模块加载,如下所示

cumulus@switch:~$ sudo nano /etc/modprobe.d/conntrack.conf
install nf_conntrack /bin/true
install nf_conntrack_ipv4 /bin/true
install nf_nat /bin/true
install iptable_nat /bin/true

这会阻止任何连接跟踪功能工作,并可能导致来自期望模块存在的实用程序的错误消息。