我有一个 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
因此,出于测试目的,我还禁用rp_filter
了 vlan-raw-device 和测试目标接口:
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
但是,我仍然想为所有其他接口保留反向路径过滤 - 我错过了什么?
那里的信息:https ://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090
请注意可以解释您的尝试的最后一句话:
所以这应该工作:
现在 max(conf/{all,ens20.4}/rp_filter == 0 :没有源验证。只需仔细检查其他接口是否仍然受到保护。
您还可以检查值为 2 的“松散”rpf。如果数据包通常应该由其他接口路由,那总比没有验证要好。