Comme vous le savez probablement tous, le cache de route ipv4 a été supprimé dans la série de noyaux Linux 3.6, ce qui a eu un impact sérieux sur le routage par trajets multiples. Le code de routage IPv4 (contrairement à IPv6) sélectionne le prochain saut de manière circulaire, de sorte que les paquets d'une IP source donnée à une IP de destination donnée ne passent pas toujours par le même saut suivant. Avant 3.6, le cache de routage corrigeait cette situation, car le saut suivant, une fois sélectionné, restait dans le cache, et tous les autres paquets de la même source vers la même destination passaient par ce saut suivant. Maintenant, le prochain saut est re-sélectionné pour chaque paquet, ce qui conduit à des choses étranges: avec 2 routes par défaut à coût égal dans la table de routage, chacune pointant vers un fournisseur Internet, je ne peux même pas établir de connexion TCP, car SYN initial et ACK final passer par différents itinéraires,
Existe-t-il un moyen relativement simple de restaurer le comportement normal du routage par trajets multiples, de sorte que le saut suivant soit sélectionné par flux plutôt que par paquet? Existe-t-il des correctifs pour que la sélection du prochain saut IPv4 soit basée sur le hachage, comme pour IPv6? Ou comment gérez-vous tous cela?
ip ro add 8.8.8.8/32 nexthop via 1.2.3.4 nexthop via 1.2.3.5
cette hypothèse correcte?Réponses:
Si possible, passez à Linux Kernel> = 4.4 ....
Le routage par trajets multiples basé sur le hachage a été introduit, ce qui est à bien des égards meilleur que le comportement antérieur à 3.6. Il est basé sur le flux, prenant un hachage des IP source et de destination (les ports sont ignorés) pour garder le chemin stable pour les connexions individuelles. Un inconvénient est que je crois qu'il y avait différents algorithmes / modes de configuration disponibles avant la 3.6, mais maintenant vous obtenez ce que vous avez! Vous pouvez cependant utiliser le choix du chemin
weight
.Si vous êtes dans ma situation, vous voulez vraiment le
3.6 >= behaviour < 4.4
mais il n'est plus pris en charge.Si vous effectuez une mise à niveau vers> = 4.4, cela devrait faire l'affaire, sans toutes les autres commandes:
Alternativement par appareil:
la source
"Relativement facile" est un terme difficile, mais vous pourriez
Il y a eu une discussion à la liste de diffusion netfilter sur ce sujet où je vole les listes de:
1. Règles de routage (RPDB et FIB)
2. Règles de pare-feu (en utilisant ipset pour forcer un mode LB "flow")
Vous voudrez peut-être suivre la discussion de la liste de diffusion netfilter pour quelques variantes de ce qui précède.
la source
u32
obtenir des paramètres importants hachés et ensuite "label" attribué pourip rule
'sipset
- il s'agit simplement de créer des ensembles qui sont remplis à l'aide--add-set
et comparés à l'utilisation--match-set
- mais cela concerne principalement les connexions à l'état NOUVEAU. Pour les connexions d'état ESTABLISHED, la marque est estampillée sur les paquets en utilisant le--restore-mark
paramètre de laCONNMARK
cible - cette directive copie la marque de la connexion dans le paquet. La marque de la connexion est précédemment définie en utilisant--save-mark
dans laPOSTROUTING
chaîne (où les paquets appartenant aux NOUVELLES connexions passeraient). Le script me semble trop alambiqué, mais il véhicule l'idée.