启动 Xubuntu 19.04 时,在 boot.log 中获取以下内容:
[[0;1;31mFAILED[0m] Failed to start [0;1;39mLoad Kernel Modules[0m.
See 'systemctl status systemd-modules-load.service' for details.
我运行 systemctl status systemd-modules-load.service 会产生:
Failed to find module 'nf_nat_proto_gre'
我sudo modprobe nf_nat_proto_gre
得到:
modprobe: FATAL: Module nf_nat_proto_gre not found in directory /lib/modules/5.0.0-16-generic
问题是什么?我应该如何解决?
答案1
首先:明显的问题应该是:需要这个模块吗?这是为了支持在 NAT 后面使用(可能是多个而不是一个)GRE 隧道。如果不使用 GRE 隧道,这个问题就没有意义了。
现在发生了什么? Ubuntu 19.04 似乎正在使用内核 5.0,并且从该内核开始进行了一些 netfilter 重新设计,以将一些单独的 netfilter 模块分解回核心(即:不作为模块),以整体增加大小或帮助进一步实现 netfilter 功能。作为此次返工的一部分,该模块被“砍掉”。
path: root/net/ipv4/netfilter/nf_nat_proto_gre.c Age Commit message (Expand) Author Files Lines 2018-12-17 netfilter: nat: remove nf_nat_l4proto struct Florian Westphal 1 -61/+0 2018-12-17 netfilter: nat: remove l4proto->manip_pkt Florian Westphal 1 -41/+0 2018-12-17 netfilter: nat: remove l4proto->nlattr_to_range Florian Westphal 1 -3/+0 2018-12-17 netfilter: nat: remove l4proto->in_range Florian Westphal 1 -1/+0 2018-12-17 netfilter: nat: remove l4proto->unique_tuple
当然功能还是有的。最后提交评论,强调我的:
netfilter: nat: 删除 nf_nat_l4proto 结构
这将删除(现在为空)nf_nat_l4proto 结构、其所有实例
以及所有不再需要的运行时(取消)注册功能。nf_nat_need_gre() 也可以被砍掉:调用它的模块(以
加载不再存在的 nat_gre 模块)还会调用其他 nat 核心
函数。如果使用 GRE nat 构建内核,GRE nat 现在始终可用。[...]
因此,如果 Ubuntu 有一些要加载的硬编码的帮助程序模块列表,则该列表不会更新以在同一情况下删除此模块和其他一些模块。您应该安全地忽略该错误,或报告小错误。