web-dev-qa-db-fra.com

Désactiver rp_filter sur une interface

J'ai un serveur Ubuntu 16.04 qui agit comme un routeur avec plusieurs interfaces (VLAN). Par défaut, rp_filter (filtrage de chemin inverse) est activé pour toutes les interfaces. Je veux que cela reste ainsi, mais faites une exception pour exactement une interface. (Les paquets de cette interface doivent avoir une adresse IP source qui ne correspond à aucune adresse de destination de routage de cette interface.)

Supposons que cette interface porte le nom ens20.4, son vlan-raw-device est ens20, et l'interface de destination (pour tester le flux de paquets) est nommée ens20.2 (même si cela devrait fonctionner pour n'importe quelle interface de destination).

J'ai essayé de régler le rp_filter propriété pour ens20.4 uniquement, sans succès:

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

Donc, à des fins de test, j'ai également désactivé rp_filter pour le vlan-raw-device et l'interface de destination de test:

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

Toujours sans succès, les paquets avec une adresse IP source "usurpée" sont toujours abandonnés. Seulement si je désactive rp_filter pour toutes les interfaces, les paquets passent par:

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

Cependant, je veux toujours conserver le filtrage de chemin inverse pour toutes les autres interfaces - qu'est-ce qui me manque?

9
Cybran

Informations ici: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4 .9 # n109

Notez la dernière phrase qui expliquerait vos tentatives:

La valeur maximale de conf/{all, interface}/rp_filter est utilisée lors de la validation de la source sur {interface}.

Cela devrait donc fonctionner:

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

Maintenant max (conf/{all, ens20.4}/rp_filter == 0: pas de validation de la source. Vérifiez simplement que les autres interfaces sont toujours protégées.

Vous pouvez également vérifier le rpf "lâche" avec la valeur 2. Dans le cas où le paquet devrait normalement être routé par une autre interface, ce serait mieux que pas de validation.

12
A.B