Bonjour,
Je suis en train de mettre au point une solution de load balancing pour le boulot.
Une solution qui permettra de répartir les connexions sortantes entre deux lignes ADSL
Pour ca, je me sert de iptables, qui va marquer les paquets concernant les nouvelles connexions d'un 1 ou d'un 2
Ensuite, avec une regle dans iproute2, les paquets marqués 1 passeront par la ligne ADSL1, et les 2 par la ligne ADSL2
Comme je suis en phase "experimentale", je simule mes deux lignes ADSL a l'aide de deux machines virtuelles NAT, situés dans un réseau virtuel 172.16.0.0/16
Meme chose pour la machine de test, dans un réseau virtuel 10.10.10.0/24
Un petit schema du réseau ne ferait pas de tort :
http://www.black-templars.net/loadbalancing.JPG
R1 - IPTABLES : la machine qui va faire le load balancing :D
NAT : les deux machines qui "émulent" mes deux lignes ADSL ...
Le reste ca devrait aller :p
Alors, la liste de commandes effectuées (les machines sont des slackware) :
Sur la machine R1 IPTABLES
Ajout de tables ADSL1 et ADSL2 dans /etc/iproute2/rt_tables
ip route add default via 172.16.1.2 table ADSL1
ip route add default via 172.16.1.3 table ADSL2
ip rule add fwmark 1 table ADSL1
ip rule add fwmark 2 table ADSL2
=> désormais le routeur utiliseras la table ADSL1 (passerelle 172.16.1.2) pour router les paquets marqués 1, et la table ADSL2 (passerelle 172.16.1.3) pour les paquets marqués 2
iptables -t mangle -A PREROUTING -m state --state new -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m state --state new -m statistic --mode random --probability 0.5 -j MARK --set-mark 2
=> les paquets arrivant sur la machine pour etre routés, et dont l'etat est NEW ( nouvelle connexion ) seront marqués 1, et 50% de chances qu'ils soient marqués 2
Sur les machines NAT :
on configure le nat, simplement :
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 172.16.1.2
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
et on ajoute une route statique pour 10.10.10.0/24, et une passerelle par défaut
ip route add 10.10.10.0/24 via 172.16.1.1
ip route add default via 192.168.1.1
Voila, en théorie ca devrait marcher du tonnerre, mais c'est pas le cas ...
En jettant un coup d'oeil avec wireshark, qui analyse tout ce qui ressort de ma machine physisque ( et donc situé sur Real LAN, juste avant le routeur adsl réel ) :
En tapant une adresse dans le browser de la machine 10.10.10.5 :
- Les requetes DNS passent bien dans les deux sens( parce que c'est de l'UDP ? )
- Le paquet TCP SYN sur le port 80 du site web que je cherche a atteindre passe aussi
- Le paquet TCP SYN ACK arrive sur ma machine physique, mais il n'ira pas plus loin, car le site web m'en renvoi plusieurs avec le meme numéro...
image ici : http://www.black-templars.net/winpcap.JPG
Les pings passent bien aussi !
Ce que j'en conclus : [u]pas moyen d'etablir de connexion TCP, car les ACK n'arrivent pas a remonter a la machine demandeuse..
Avez vous une idée ? :DConfiguration: Slackware 12.0

