Solus 中的内核缺少 nf_tables_inet 模块

Solus 中的内核缺少 nf_tables_inet 模块

标题说明了一切。Solus Linux 内核缺少大量成功运行 nftables 所必需的内核模块!如果他们不使用以下方式编译内核,为什么它甚至在 eopkg 存储库中是一个 pkg:

  • nf_tables_inet
  • nf_tables_ipv6
  • nf_tables_ipv4

这 3 个模块决定了您的链属于哪个系列。没有它们,您甚至无法进入链!如果这样做,您会得到可怕且同样模糊的结果“错误:无法处理规则:不支持操作”。啊!真令人沮丧!到目前为止,在其他方面都是如此出色的发行版,甚至在许多方面都很出色,但只是为了这个而编译内核?不,谢谢,iptables 的劣势比编译内核的痛苦要小。呃,我说!

有人知道我是否只是未能安装某些 pkg,或者是否有任何方法可以在不从源代码编译内核的情况下解决这个问题?是的,我在网上搜索了数周却无果,这也让我震惊,因为我怎么会是第一个撞上这个墙的人?(没有双关语的意思!)Solus 和 nftables 已经存在好几年了,所以我担心和希望(讽刺的是两者兼而有之)我愚蠢地忽略了一些基本的、简单的解决方案。

答案1

我之前对 Solus 一无所知。甚至找到 Solus 的存储库也不是那么简单。

我下载了一个Linux 当前版本(5.6.13)内核包那里,并将其提取出来(数据部分基本上是.tar.xz里面的.zip)。里面的配置usr/lib/kernel/config-5.6.13-153.current以及其他内容:

$ grep -E 'CONFIG_(NF_TABLES|NFT_)' usr/lib/kernel/config-5.6.13-153.current
CONFIG_NF_TABLES=m
# CONFIG_NF_TABLES_SET is not set
# CONFIG_NF_TABLES_INET is not set
# CONFIG_NF_TABLES_NETDEV is not set
# CONFIG_NFT_NUMGEN is not set
CONFIG_NFT_CT=m
# CONFIG_NFT_FLOW_OFFLOAD is not set
CONFIG_NFT_COUNTER=m
CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_TUNNEL=m
# CONFIG_NFT_OBJREF is not set
CONFIG_NFT_QUEUE=m
# CONFIG_NFT_QUOTA is not set
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
# CONFIG_NFT_XFRM is not set
CONFIG_NFT_SOCKET=m
# CONFIG_NFT_OSF is not set
# CONFIG_NFT_TPROXY is not set
# CONFIG_NFT_SYNPROXY is not set
# CONFIG_NF_TABLES_IPV4 is not set
# CONFIG_NF_TABLES_ARP is not set
# CONFIG_NF_TABLES_IPV6 is not set
# CONFIG_NF_TABLES_BRIDGE is not set

必备的东西(例如:CONFIG_NF_TABLES_IPV4CONFIG_NF_TABLES_SET)不在这里,而一些可选的东西(例如:CONFIG_MASQCONFIG_REJECT)存在,但如果没有更高协议的对应部分(有时甚至由单独的模块提供)(例如:CONFIG_NFT_REJECT_IPV4根本没有出现),则毫无用处。 同样地,CONFIG_NFT_COMPAT它被定义,但仍然会留下nftables API变体iptables如果没有缺少 nftables 选项,用户空间工具就毫无用处。

我唯一能想到的就是对nftables来自 Solus 并未包含此项。

我发现的有关额外内核包的唯一参考资料是https://getsol.us/articles/troubleshooting/boot-management/en/但它涉及的是外部模块,而不是单独打包的树内模块。不稳定的 Solus 存储库似乎提供了完全相同的 Linux 内核包。

现在,用linux-ltsLinux LTS 4.9 的软件包获得了更好的结果(我将其保持较小):

$ grep -E 'CONFIG_(NF_TABLES|NFT_COMPAT)' usr/lib/kernel/config-4.9.223-158.lts
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=m
CONFIG_NF_TABLES_NETDEV=m
CONFIG_NFT_COMPAT=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NF_TABLES_ARP=m
CONFIG_NF_TABLES_IPV6=m
CONFIG_NF_TABLES_BRIDGE=m

因此您有以下几种选择:

  • 保留较旧的 LTS Linux 4.9 内核,功能足够,但有点过时nftables支持(某些功能将不可用,例如 notrack、fib lookup、tcp mss、桥接系列的连接跟踪、IPSec 支持等),

  • 使用当前的 Linux 内核,但没有足够的nftables支持:继续使用旧版本iptables

  • 重新编译当前内核

    没有必要尝试重新编译所有缺失的模块(以及由于缺少其他各种网络选项而未出现的其他模块),重新编译所有内容可能更简单。看起来我选择的软件包的相应来源位于https://dev.getsol.us/(并且包含很少的补丁):但我不知道 Solus 的构建系统如何获得压缩包而不是直接从源代码安装。当前nftables配置是那里

  • 提交带有错误报告的请愿书,以添加缺失的选项,并至少与 LTS 版本保持一致。

相关内容