使用 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?:
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
将达到预期目标。