Tengo un servidor Ubuntu 16.04 que actúa como un enrutador con múltiples interfaces (VLAN). De forma predeterminada, rp_filter
(filtrado de ruta inversa) está habilitado para todas las interfaces. Quiero mantenerlo así, pero hacer una excepción para exactamente una interfaz. (Se debe permitir que los paquetes de esta interfaz tengan una dirección IP de origen que no se corresponda con ninguna dirección de destino de enrutamiento de esta interfaz).
Digamos que esta interfaz tiene el nombre ens20.4
, su vlan-raw-device es ens20
, y se nombra la interfaz de destino (para probar el flujo de paquetes) ens20.2
(aunque debería funcionar para cualquier interfaz de destino).
Traté de establecer la rp_filter
propiedad ens20.4
solo, sin éxito:
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
Entonces, para fines de prueba, también desactivé rp_filter
el dispositivo vlan-raw-device y la interfaz de destino de prueba:
echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter
Aún sin éxito, los paquetes con una dirección IP de origen "falsificada" todavía se descartan. Solo si desactivo rp_filter
para todas las interfaces, los paquetes pasan a través de:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
Sin embargo, todavía quiero mantener el filtro de ruta inversa para todas las demás interfaces, ¿qué me estoy perdiendo?
Respuestas:
Información allí: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090
Tenga en cuenta la última oración que explicaría sus intentos:
Entonces esto debería funcionar:
Ahora max (conf / {all, ens20.4} / rp_filter == 0: sin validación de fuente. Simplemente verifique que las otras interfaces todavía estén protegidas.
También puede verificar el rpf "suelto" con el valor 2. En caso de que el paquete normalmente sea enrutado por otra interfaz, sería mejor que ninguna validación.
fuente