我可以更改 grub 中的默认 sysctl 值吗?

我可以更改 grub 中的默认 sysctl 值吗?

使用 5.1 之前的内核时,如果用户创建网络命名空间,它将以默认的 sysctl 值启动。即使根命名空间使用 sysctl 更改了这些值,新的网络命名空间仍将使用默认值。例如,proc/sys/net/ipv6/conf/all/forwarding始终为 0,因为这是默认值。

如果我理解正确的话,这些是内核设置的默认值,我想知道是否可以通过 GRUB_CMDLINE_LINUX 或任何其他方式更改这些值。请注意,我不想访问网络命名空间并通过 sysctl(或 echo /proc/sys/net....)更改参数,我想更改默认值

答案1

您正在寻找的功能仅在内核 5.8 以上版本中可用,如本 UL SE Q/A 中所述:如何使用内核命令行参数设置 sysctl?

sysctl.*= [KNL]

      Set a sysctl parameter, right before loading the init
      process, as if the value was written to the respective
      /proc/sys/... file. Both '.' and '/' are recognized as
      separators. Unrecognized parameters and invalid values
      are reported in the kernel log. Sysctls registered
      later by a loaded module cannot be set this way.
      Example: sysctl.vm.swappiness=40

因此结合devconf_inherit_init_net被 OP 发现在之前的问答中从内核 5.8 开始,但在 5.1 之前没有,因此在 5.1 之前也没有,通过 GRUB 添加这两个内核参数:

sysctl.net.core.devconf_inherit_init_net=1 sysctl.net.ipv6.conf.all.forwarding=1

将达到预期目标。

相关内容