You can do this with linux. I haven't tried it but I've always wanted to. Start here:
http://lartc.org/howto/lartc.loadshare.html. You'll have a lot of reading to do to grok all the concepts there if you haven't been primed on linux routing, but the lartc howto is pretty good.
db