Linux

Linux 伺服器上缺少統計資訊 /proc/net/stat/nf_conntrack

  • October 10, 2021

出於某種原因,我的伺服器上沒有這樣的文件..

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 中嗎?

使conntrack可用所需的相關配置/procCONFIG_NF_CONNTRACK_PROCFS

CONFIG_NF_CONNTRACK_PROCFS: 在 procfs 中提供 CT 列表 (OBSOLETE)

$$ … $$ 幫助文本

此選項允許在 net/netfilter/nf_conntrack 下的 procfs 中顯示已知 conntrack 條目的列表。這被認為是過時的,有利於使用使用 Netlink 的 conntrack(8) 工具。

OP 的核心似乎已使用此包中描述的功能建構:linux-buildinfo-5.4.0-87-generic.

唉,/usr/lib/linux/5.4.0-87-generic/config上面的包內容告訴我們:

# CONFIG_NF_CONNTRACK_PROCFS is not set

所以這兩個/proc/條目通常conntrack :提供/proc/net/nf_conntrack並且/proc/net/stat/nf_conntrack不會存在。

正如文件所述,這已被conntrack使用netlink(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 
# 

引用自:https://serverfault.com/questions/1080112