Linux 服务器上缺少统计信息 /proc/net/stat/nf_conntrack

Linux 服务器上缺少统计信息 /proc/net/stat/nf_conntrack

由于某种原因,我的服务器上没有这样的文件。

root@serv:~# uname -a
Linux serv 5.4.0-87-generic #98~18.04.1-Ubuntu SMP Wed Sep 22 10:45:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
root@serv:~# cat /proc/net/stat/nf_conntrack
cat: /proc/net/stat/nf_conntrack: No such file or directory

但我的 conntrack 肯定是启用的:

root@serv:~# lsmod | grep conntr
xt_conntrack           16384  1
nf_conntrack_netlink    45056  0
nf_conntrack          139264  2 xt_conntrack,nf_conntrack_netlink
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  1 nf_conntrack
nfnetlink              16384  1 nf_conntrack_netlink
x_tables               45056  3 xt_conntrack,iptable_filter,ip_tables

并且conntrack -L运行正常。
lnstat -f ip_conntrack也显示空输出。
原因是什么?我是否应该插入一些内核模块以使此文件出现在 procfs 中?

答案1

需要具备的相关配置连接跟踪可用/procCONFIG_NF_CONNTRACK_PROCFS

CONFIG_NF_CONNTRACK_PROCFS:在 procfs 中提供 CT 列表(已过时)

[...]

帮助文本

此选项允许在 procfs 的 net/netfilter/nf_conntrack 下显示已知 conntrack 条目列表。这已过时,取而代之的是使用 Netlink 的 conntrack(8) 工具。

OP 的内核似乎是用这个包中描述的特性构建的:linux-buildinfo-5.4.0-87-generic

/usr/lib/linux/5.4.0-87-generic/configAlas上面的包内容告诉:

# CONFIG_NF_CONNTRACK_PROCFS is not set

因此这两个/proc/条目通常由...提供连接跟踪/proc/net/nf_conntrack/proc/net/stat/nf_conntrack将不存在。

根据文档所述,该conntrack功能已被使用网络链接(7)内核 API。

的大部分内容/proc/net/stat/nf_conntrack可以替换为:

conntrack --count

给出条目数(这是 中存在的第一列数据/proc/net/stat/nf_conntrack)和:

conntrack --stats
conntrack --stats expect

它给出了 中可用的大多数其他列的内容/proc/net/stat/nf_conntrack,有时是(主)conntrack表,有时是表expect,每个 CPU 也有一个。一些统计数据似乎无法通过这种方式获得(或者可能隐藏在其他地方,或者可能已被淘汰……)。

如果您确实需要,/proc/net/stat/nf_conntrack则必须切换到具有此功能的其他内核或使用不同的选项重建内核。Ubuntu 似乎不再选择此内核选项,包括在较新的内核版本中。


作为参考,这里有一个来自不同内核的示例,该内核具有此选项并且使用 4 个 CPU 运行:

# cat /proc/net/stat/nf_conntrack | column -t
entries   clashres  found     new       invalid   ignore    delete    delete_list  insert    insert_failed  drop      early_drop  icmp_error  expect_new  expect_create  expect_delete  search_restart
0000000a  00000092  00000000  00000000  00000276  00000000  00000000  00000000     00000000  00000000       00000000  00000000    00000000    00000016    0000000a       00000016       00002463
0000000a  00000000  00000000  00000000  00000009  00000000  00000000  00000000     00000000  00000001       00000001  00000000    00000000    00000000    00000004       00000000       000000eb
0000000a  00000000  00000000  00000000  00000008  00000000  00000000  00000000     00000000  00000007       00000007  00000000    00000000    00000000    00000004       00000000       00000100
0000000a  00000000  00000000  00000000  00000048  00000000  00000000  00000000     00000000  00000000       00000000  00000000    00000000    00000000    00000004       00000000       00000325
# conntrack -C
10
# conntrack -S
cpu=0       found=0 invalid=630 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=9315 
cpu=1       found=0 invalid=9 insert=0 insert_failed=1 drop=1 early_drop=0 error=0 search_restart=235 
cpu=2       found=0 invalid=8 insert=0 insert_failed=7 drop=7 early_drop=0 error=0 search_restart=256 
cpu=3       found=0 invalid=72 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=805 
# conntrack -S expect
cpu=0       expect_new=22 expect_create=10 expect_delete=22 
cpu=1       expect_new=0 expect_create=4 expect_delete=0 
cpu=2       expect_new=0 expect_create=4 expect_delete=0 
cpu=3       expect_new=0 expect_create=4 expect_delete=0 
# 

答案2

对我来说,该命令modprobe nf_conntrack允许使用/proc/net/stat/nf_conntrack

相关内容