有几件事让你感到困惑,
首先,重新加载配置文件是sysctl --system 而不是sysctl -system;但这可能只是问题中的一个错字。
其次,当您使用sysctl -w 更改任何设置时,-w 意味着写入 “写入而不是读出” - 意义,而不是 “写入文件"——感觉。它只会影响当前活动的配置,并且不会保存在任何地方。
因此,当您运行sysctl --system 重新加载系统配置文件时,您将撤消之前的sysctl -w 操作。
第三,您可能正试图更改系统上的有效rp_filter 值,但net.ipv4.conf.default.rp_filter 键的default 部分意味着它会影响任何已创建的未命名网络设备的默认值在这一点之后。
大概,你的网络设备已经存在,这意味着它已经有自己的个人rp_filter 设置,它不再关心default。如果您的网络设备称为eth0,那么net.ipv4.conf.eth0.rp_filter 可能是您实际想要更改的值(使用sysctl -w 或,将其写入/etc/sysctl.d/*.conf 样式配置之一文件,然后重新启动或重新加载--system)。
除了default 和eth0(或任何你的名字),
还有一个all 版本;这就像一个影响所有现有变体的通配符(例如:eth0、eth1 和eth2)。在启动期间加载 sysctl 配置时,在解析 sysctl 配置时网络设备可能存在也可能不存在,因此如果 eth0 当时存在或不存在,它可能很容易发生变化。
如果它确实已经存在,那么eth0 和all 变体将产生所需的影响,而default 变体不会。但是,如果该设备尚不存在,那么实际上情况正好相反,default 是可以按预期工作的设备。
可以肯定的是,只需将它们全部/两者都更改;在您的 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf 文件中。
更新。
好的,既然您使用的是稍后创建的虚拟网络设备tun0,那么使用default 键实际上并没有错。
主要的事情仍然存在,你确实不想同时使用 sysctl -w 和 sysctl --system,因为后者会撤消前者所做的事情。
听起来你要么想要这样的东西:
sysctl -w net.ipv4.conf.default.rp_filter=0 ;
sysctl -w net.ipv4.conf.tun0.rp_filter=0 ;
或
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter ;
echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter ;
或者,使用.conf 文件;那么你可以使用--system重新加载它们。