【问题标题】:I need to disbale reverse path filtering in linux to set net.ipv4.conf.default.rp_filter to 0(net.ipv4.conf.default.rp_filter = 2)我需要在 linux 中禁用反向路径过滤以将 net.ipv4.conf.default.rp_filter 设置为 0(net.ipv4.conf.default.rp_filter = 2)
【发布时间】:2022-01-02 14:12:20
【问题描述】:

我需要在 Linux 中禁用反向路径过滤。我试过这样

 root@user:/home/user# sysctl -w net.ipv4.conf.default.rp_filter=0

现在我想知道如何使上述设置处于活动状态,因此反向路径过滤被禁用我需要重新启动 sysctl 或其他什么吗,谁能告诉这个

我像上面一样尝试过,但是当我运行 sysctl -system

我明白了

net.ipv4.conf.default.rp_filter = 2
sysctl: setting key "net.ipv4.conf.all.rp_filter": Invalid argument

为什么这个无效的参数消息,我尝试将其更改为net.ipv4.conf.default.rp_filter = 0,但它仍将sysctl -system 打印为

net.ipv4.conf.default.rp_filter = 2
along with message

【问题讨论】:

  • 我的内核版本是5.13.0-22-generic

标签: linux sysctl


【解决方案1】:

有几件事让你感到困惑,

首先,重新加载配置文件是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)。

除了defaulteth0(或任何你的名字), 还有一个all 版本;这就像一个影响所有现有变体的通配符(例如:eth0eth1eth2)。在启动期间加载 sysctl 配置时,在解析 sysctl 配置时网络设备可能存在也可能不存在,因此如果 eth0 当时存在或不存在,它可能很容易发生变化。 如果它确实已经存在,那么eth0all 变体将产生所需的影响,而default 变体不会。但是,如果该设备尚不存在,那么实际上情况正好相反,default 是可以按预期工作的设备。

可以肯定的是,只需将它们全部/两者都更改;在您的 /etc/sysctl.conf/etc/sysctl.d/*.conf 文件中。


更新。

好的,既然您使用的是稍后创建的虚拟网络设备tun0,那么使用default 键实际上并没有错。

主要的事情仍然存在,你确实想同时使用 sysctl -wsysctl --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重新加载它们。

【讨论】:

  • 我喜欢应用这个更改sysctl -w net.ipv4.conf.tun0.rp_filter=0,在我的一个程序开始运行后创建的 tun0 接口。所以假设我运行了程序并且我的tun0 接口现在被创建,如果我输入sysctl -w net.ipv4.conf.default.rp_filter=0 然后我运行 sysctl --system 命令它不起作用。我仍然得到反向路径过滤行为,所以我喜欢 2 知道在运行命令 sysctl -w net.ipv4.conf.default.rp_filter=0sysctl --system 命令以确保反向我的 tun0 接口禁用了路径过滤
  • 我在上面的答案中添加了响应/更新。
  • 运行命令echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter;后是否需要运行sysctl --system
  • 不,这可能会再次撤消,具体取决于您的系统配置。
猜你喜欢
  • 2020-05-24
  • 2015-11-23
  • 2015-09-27
  • 2015-08-19
  • 1970-01-01
  • 2022-07-18
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多