Direct Routing ?
Direct routing is a good solution for load-balancing. The load-balancer process only incoming packet. This is very interesting for protocol that are asymetric, like http. Performances are very good even with software load-balancer. You need only a cpu and a network card.
What is needed ?
The load-balancer must own the IP address on which you want load-balance requests. Example: 10.0.0.1. The ‘real’ servers, who will process the request and send back data must be on the same network link. The ‘real’ servers must have the IP address 10.0.0.1 configured on one of there interface that MUST NOT respond to ARP request. Example: you set the IP 10.0.0.1 on the loopback interface and disable ARP response (On *BSD this is: ifconfig lo0 inet 10.0.0.1 netmask 255.255.255.255 -arp). The daemon must be listenning on this IP address.
Incoming data will pass through the load-balancer. Output data will not pass through it (you can configure your LB as a gateway but it will process all in and out traffic and you will loose the performance benefit of the Direct Routing). The real-servers will answer directly to the clients.