multiple PPPoE connections on one machine (DSL load balancing)

Nikos Vassiliadis nvass9573 at gmx.com
Thu May 7 13:13:17 UTC 2009


Jeff Croft wrote:
> 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.

Did you try multilink PPP? they might not support, but it may work
anyway...

> 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?

Not elegantly, but you can change the remote peer address to something 
else. That is:
1) Bring up tun0, you get from IPCP 1.1.1.1 -> 2.2.2.2
	ifconfig tun0 1.1.1.1 3.3.3.3

2) Bring up tun1, you get 1.1.1.2 -> 2.2.2.2
	ifconfig tun1 1.1.1.2 4.4.4.4

3) Bring up tun2, you get 1.1.1.3 -> 2.2.2.2

The result will be:
tun0 1.1.1.1 3.3.3.3
tun1 1.1.1.2 4.4.4.4
tun2 1.1.1.3 2.2.2.2

You'll need to write a custom script, to modify
the addresses, I think both ppp and mpd can do that.

Are you going to use pf's route-to to forward packets
to all three interfaces? Since, the above hack doesn't
"solve" the next hop problem. You can only have one
next hop for each destination. On -CURRENT there is
support for ECMP, which may be a complete and correct
solution for this problem.

HTH, Nikos


More information about the freebsd-questions mailing list