在一个接口上禁用rp_filter

Modified on: Sun, 01 Sep 2019 22:20:02 +0800

我有一个Ubuntu 16.04服务器,它充当具有多个(VLAN)接口的路由器。默认情况下,为所有接口启用rp_filter(反向路径过滤)。我想保持这种方式,但只为一个接口做一个例外。 (应允许来自此接口的数据包具有与此接口的任何路由目标地址不对应的源IP地址。)

假设此接口的名称为ens20.4,其vlan-raw-device为ens20,并且目标接口(用于测试数据包流)被命名ens20.2(虽然它适用于任何目标接口)。

我尝试仅为rp_filter设置ens20.4属性,但没有成功:

echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

因此,出于测试目的,我还为vlan-raw-device和测试目标接口禁用了rp_filter

echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter

仍然没有成功,具有“欺骗”源IP地址的数据包仍然被丢弃。只有当我为所有接口禁用rp_filter时,数据包才会通过:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

但是,我仍然希望为所有其他接口保留反向路径过滤 - 我缺少什么?

作者:DevCybran

最佳答案

信息:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ IP-sysctl.txt中ΔH= V4.9#n1090

请注意可以解释您尝试的最后一句:

  

在{interface}上进行源验证时,使用conf / {all,interface} / rp_filter的最大值。

所以这应该有效:

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

现在max(conf / {all,ens20.4} / rp_filter == 0:没有源验证。只需仔细检查其他接口是否仍然受到保护。

您还可以使用值2检查“松散”的rpf。如果数据包通常应该由其他接口路由,那么这比没有验证要好。

作者:,A.B

相关问答

添加新评论