Mon problème : J'ai un processus qui crée plus de 10k connexions TCP vers la même destination IP&Port par seconde. Après un court laps de temps, aucune nouvelle connexion ne peut plus être créée, car il n'y a plus de ports sources disponibles.
J'ai déjà essayé d'atténuer ce problème en définissant net.ipv4.ip_local_port_range
y net.ipv4.tcp_fin_timeout
mais cela n'a pas résolu le problème.
J'ai alors pensé : Si je pouvais dire au noyau d'effectuer un round robin des adresses IP source, alors je pourrais facilement ajouter plus d'adresses IP à mon interface et donc avoir une limite plus élevée de connexions sortantes.
J'ai essayé d'ajouter plusieurs itinéraires vers la même destination via la même interface mais en spécifiant des IP source différentes :
ip route add default via 10.1.1.1 dev eth0 src 10.1.1.10
ip route add default via 10.1.1.1 dev eth0 src 10.1.1.11
Mais j'obtiens RTNETLINK answers: File exists
.
Suis-je sur la bonne voie ? L'ajout d'une autre source de propriété intellectuelle est-il la meilleure solution dans ces cas-là ?
Existe-t-il un moyen d'équilibrer l'utilisation des IP sources par le biais du noyau ?
J'espérais qu'au cas où je parviendrais à placer deux routes avec le même poids mais des adresses src différentes vers le même réseau, le noyau ferait un round robin.
(Contexte : Je fais tourner HAproxy sur cette machine et je dois équilibrer la charge de plus de 10k connexions vers un seul serveur backend).