Je me suis mis au Load Balancing avec l'excellent Packet Filter, le firewall d'OpenBSD. Bon, ça n'a pas été sans problèmes :-) Voyons voir ce qu'il faut faire :

web_servers = "{ 192.168.1.10, 192.168.1.11, 192.168.1.12 }"
rdr on $ext_if proto tcp from any to any port 80 -> $web_servers round-robin sticky-address

Ainsi, toute les connexions web arrivant sur la machine seront redirigées vers les machines 192.168.1.10, ou 192.168.1.11, ou 192.168.1.12, de manière collante avec le sticky-adress puisqu'une connexion donnée aura toujours le même serveur pour ne pas perdre les sessions et d'autres données, mais aussi de manière équilibré avec le round-robin pour que chaque serveur ait la même charge.

Seulement, ça ne marche pas aussi simplement : les paquets seront bien transmis à une de ses adresses, mais le retour des informations se fera légèrement moins bien (pas du tout, quoi), puisque l'adresse source transmise n'a pas changé... On va donc faire du NAT et rajouter la ligne suivante avant la règle rdr :

nat on $ext_if proto tcp from any to any port 80 -> $web_servers port 80

Ca va maintenant marcher beaucoup mieux ! Mais bon, c'est quand même plus propre de scinder le réseau en deux parties : une visible (contenant donc le firewall), et l'autre privée, contenant les serveurs.

Putain, c'est quand même vachement balaise Packet Filter. Qui a dit que ça renvoyait le IPTables de Linux à l'âge de pierre ? :-)