即使在 /etc/sysctl.conf 中设置,net.ipv4.ip_forward 也会恢复为 0

即使在 /etc/sysctl.conf 中设置,net.ipv4.ip_forward 也会恢复为 0

我设置net.ipv4.ip_forward = 1/etc/sysctl.conf运行,这导致它在 的输出中sysctl -p设置为预期的值,但在昨晚和现在之间的某个时间,某些东西将其设置回。有什么想法可以做到这一点吗?我搜索了又搜索,但没有看到任何东西。1sysctl -a0/var/log/cronforwardsysctl

答案1

某些 CentOS 版本会在网络服务重新启动时再次设置(net.ipv4.ip_forward例如)。0service restart networking

更准确地说,它被设置为零停止脚本部分/etc/init.d/network

stop)
      [ "$EUID" != "0" ] && exit 4
      # Don't shut the network down if root is on NFS or a network
      # block device.

      # [...]

      action $"Shutting down loopback interface: " ./ifdown ifcfg-lo

      sysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1

您可以编辑该脚本并删除或更改该行。

红帽 Bugzilla 错误 552653了解更多信息。

答案2

有一个错误会导致sysctl在网络正确初始化之前加载值。这会导致网络设置/etc/sysctl.conf被忽略。解决这个问题的办法可能是procps重新启动到/etc/local.rc,这样就会重复初始化。

有问题的错误:https://bugs.launchpad.net/ubuntu/+source/procps/+bug/50093

答案3

我设置了日志记录以每分钟记录此设置的值,以便我可以检查/var/log/cron并查看可能的原因。看起来恢复对应于 APF(高级策略防火墙)运行的 cron 作业。

这是我的迷你日志记录脚本,以防对任何人有帮助:

echo `date`" - "`sysctl -a | grep net.ipv4.ip_forward` >> /var/log/ip_forward_setting.log

相关内容