我正在运行 AlmaLinux 9,启动时我看到警告
Warning: Deprecated Driver is detected: nft_compat will not be maintained in a future major release and may be disabled
但是加载该驱动程序的是什么?我禁用了firewalld服务。我想(正确地)消除这个警告。
附加信息:
[root@server ~]# lsmod | grep nft_compat
nft_compat 20480 14
nf_tables 278528 98 nft_compat,nft_counter,nft_chain_nat
nfnetlink 20480 2 nft_compat,nf_tables
[root@server ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
NETAVARK_FORWARD all -- 0.0.0.0/0 0.0.0.0/0 /* netavark firewall plugin rules */
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain NETAVARK_FORWARD (1 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 10.88.0.0/16 ctstate RELATED,ESTABLISHED
ACCEPT all -- 10.88.0.0/16 0.0.0.0/0
Chain NETAVARK_ISOLATION_2 (1 references)
target prot opt source destination
Chain NETAVARK_ISOLATION_3 (0 references)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
NETAVARK_ISOLATION_2 all -- 0.0.0.0/0 0.0.0.0/0
答案1
关于消息本身:它不是上游内核消息,而是 AlmaLinux 9 中添加的特定消息(可能继承自 RHEL 9)。
该nft_compat
模块是允许运行的兼容层iptables超过nftables并且仍然使用非 nftables 模块。
CONFIG_NFT_COMPAT
: Netfilter x_tables 通过 nf_tables 模块[...]
- 内置模块:
nft_compat
帮助文本
如果您打算在 nf_tables 框架上使用任何现有的 x_tables 匹配/目标扩展,则这是必需的。
任何使用的 xtables 模块iptables-nft
而不是iptables-nft
翻译iptables规则为仅限本机nftables规则需要nft_compat
发挥作用。
从一个干净的虚拟机开始,不运行任何与网络相关的内容,因此没有nft_compat
加载,几乎任何不为空的东西都会加载它。
这不会:
iptables-nft -A -j ACCEPT
因为它纯粹翻译成nftables代码:
# uname -r
6.1.0-0.deb11.5-amd64
# iptables -V
iptables v1.8.7 (nf_tables)
# iptables -A -j ACCEPT
# nft --debug=netlink list ruleset
ip filter INPUT 2
[ counter pkts 0 bytes 0 ]
[ immediate reg 0 accept ]
table ip filter {
chain INPUT {
type filter hook input priority filter; policy accept;
counter packets 0 bytes 0 accept
}
}
# lsmod | grep nft_compat
#
几乎任何其他东西都会(直到用户空间和内核版本允许将其转换为本机nftables,所以这可能取决于iptables版本和给定规则的内核版本)。
# iptables -A INPUT -j REJECT
# lsmod | grep nft_compat
nft_compat 20480 1
nf_tables 286720 4 nft_compat
x_tables 61440 2 nft_compat,ipt_REJECT
nfnetlink 20480 2 nft_compat,nf_tables
# nft --debug=netlink list ruleset
ip filter INPUT 2
[ counter pkts 8 bytes 608 ]
[ immediate reg 0 accept ]
ip filter INPUT 3 2
[ counter pkts 0 bytes 0 ]
[ target name REJECT rev 0 ]
table ip filter {
chain INPUT {
type filter hook input priority filter; policy accept;
counter packets 8 bytes 608 accept
counter packets 0 bytes 0 reject
}
}
#
显示的任何条目nft --debug=netlink ...
都包含其中之一target name
(对于iptables-nft .. -j
目标)或match name
(对于iptables-nft ... -m
模块x_tables
) 表示它通过兼容模块使用相应的内核模块nft_compat
。
要摆脱它,请完全不要使用iptables-nft
或使用其库的工具(libip4tc2,...)。当然,恢复到iptables-legacy
(如果甚至提供了?)会更糟糕:这个层打算在上游被弃用,并且兼容性层打算保留很长时间以取代它。
这可能意味着:不要使用 Docker,不要使用 podman,不要使用......
结论:我不知道如何摆脱这个消息。