multiple PPPoE connections on one machine (DSL load balancing)

Jeff Croft jeff at visionarytechnical.com
Thu Apr 23 02:07:22 UTC 2009


Hello --

I'm configuring FreeBSD 7.1 as a router/load-balancer and I just got  
stuck. I know this sounds like a newbie question, but hear me out.

I have three DSL line (AT&T in SF Bay Area, business class) connected  
via ethernet to the box, and one more ethernet connected to an  
internal network. The idea is to do some clever kind of load-balancing  
and/or logging of DSL connections using pf.

All three DSL lines are configured to use PPPoE. I can successfully  
bring any one of them up individually, but when I try to bring more  
than one up, using either ppp or mpd5, I get an error that looks like  
this (example from ppp):

ppp : tun0: Warning: iface add: ioctl(SIOCAIFADDR, X.X.X.X  ->  
D.D.D.D ): File exists

and then the 2nd link goes down. mpd5 says the same thing, but the  
error is slightly different. For all three point-to-point links the  
remote side of the point to point (D.D.D.D) is always the same IP  
address, so naturally it doesn't want to add multiple routing table  
entries which point to the same destination.

The vendor claims to be unable to change the value of D.D.D.D because  
"everyone in your region has the same remote address." They also don't  
support mlppp, so multilink is out.

Also, I would like easy, real-time, programmatic access to the IP  
address of each individual DSL line.

So far, I've thought of the following workarounds:

1. Use cheap linksys boxen to hang off each DSL line so the FreeBSD  
network stack doesn't have to do the PPPoE. I'm concerned that they'll  
be able to handle the volume of individual connections I'm planning  
on, even with the firmware replaced with something decent. Plus it's  
three extra devices on my network!
2. Use network virtualization such as this. I don't have any  
experience with it, but I'm guessing it would do everything I want.
http://imunes.tel.fer.hr/virtnet/

Does anyone have any ideas how to solve this problem more elegantly?

Thanks much,
     Jeff Croft
Linux admin who is thrilled to have some FreeBSD time



More information about the freebsd-questions mailing list