由于某种原因,我的服务器上没有这样的文件。
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
需要具备的相关配置连接跟踪可用/proc
CONFIG_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/config
Alas上面的包内容告诉:
# 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
。