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?
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.