Subject: Re: Bandwidth Aggregation
To: Miles Nordin <carton@Ivy.NET>
From: Anthony de Almeida Lopes <guerrilla_thought@gmx.de>
List: tech-net
Date: 04/04/2005 00:44:10
That's interesting, the tunneling.. I have a very large block of IPv6
tunnels that come out at my ISP, so I don't think I would need colo
routers. I think that just might work.
Someone might find this interesting: So, I implemented a bit of what I
was babbeling about earlier. I have the two interfaces rtk0 and bce0
where rtk0 is directly connected to a DSL modem and bce0 is goes through
the lan 192.168.0.* to a NAT box. I brought up bridge0 and added the two
interfaces to it (it'll become apparent why). Then I brought up agr0 and
added the two interfaces. Then I set the IP of agr0 to the external IP
for that DSL modem and then also added a LAN addres via aliasing. I
don't beleive adding that aliasing is possible without the bridge0, but
I may be wrong; although, my testing does seem to indicate that it's
necessary. Anyhow, with this setup I can switch to set either of the NAT
box or the Internet gateway as my default. The only problem now is
balancing network traffic over the two routes. I've done this in OpenBSD
like I said, but I'll have to look at ipf.
So here's my big question: can ALTQ decide on which route to take? Can I
say, send packets to this route 50% of the time and this other route
another 50% of the time?
Hmm, another question about that other guys tunneling. Did all of his
tunnels come out on the other end as the same IP? I see why that would
allow for a TCP stream to be spread over the two interfaces now. That
makes sense. And I see now why my way would still only allow for a TCP
connection to be on one interface/route or the other but not spread out
across. I do think that with some crafty packet magling it's still
theoretically possible. This tunneling seems more promising though, I'll
try that later.
For those interested (maybe nobody is, but i find it quite neat):
% ifconfig -a
rtk0:
flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
address: 00:40:05:8c:75:4c
media: Ethernet autoselect (100baseTX full-duplex)
status: active
bce0:
flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
address: 00:40:05:8c:75:4c
media: Ethernet autoselect (100baseTX)
status: active
lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 33192
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
agr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
agrport: rtk0, flags=0x3<COLLECTING,DISTRIBUTING>
agrport: bce0, flags=0x3<COLLECTING,DISTRIBUTING>
address: 00:40:05:8c:75:4c
inet 192.168.0.12 netmask 0xffffff00 broadcast 192.168.0.255
inet alias 64.142.7x.x netmask 0xff000000 broadcast 64.255.255.255
inet6 fe80::dakjldkjla5fdadad:754c%agr0 prefixlen 64 scopeid 0x9
bridge0: flags=41<UP,RUNNING> mtu 1500
% brconfig -a
bridge0: flags=41<UP,RUNNING>
Configuration:
priority 32768 hellotime 2 fwddelay 15 maxage 20
ipfilter disabled flags 0x0
Interfaces:
rtk0 flags=3<LEARNING,DISCOVER>
port 1 priority 128
bce0 flags=3<LEARNING,DISCOVER>
port 2 priority 128
Address cache (max cache: 100, timeout: 1200):
00:40:05:43:a4:a3 bce0 1169 flags=0<>
00:10:67:00:7a:b0 rtk0 1155 flags=0<>
00:e0:4c:77:6c:01 bce0 1153 flags=0<>
00:04:a8:37:20:b6 rtk0 1139 flags=0<>
% route add default 64.142.7x.1
% route show
Routing tables
Internet:
Destination Gateway Flags
default 64.142.7x.1 UG
.... .... ...
PING sonic.net (209.204.190.64): 56 data bytes
64 bytes from 209.204.190.64: icmp_seq=0 ttl=250 time=12.430 ms
% route flush
....
% route add default 192.168.0.1
% route show
Routing tables
Internet:
Destination Gateway Flags
default 192.168.0.1 UG
.... .... ...
% ping sonic.net
% ping sonic.net
PING sonic.net (209.204.190.64): 56 data bytes
64 bytes from 209.204.190.64: icmp_seq=0 ttl=250 time=12.430 ms
% traceroute sonic.net
traceroute to sonic.net (209.204.190.64), 64 hops max, 40 byte packets
1 192.168.0.1 (192.168.0.1) 0.415 ms 0.183 ms 0.147 ms
2 *****.dsl.static.sonic.net (6x.12.13x.x) 9.838 ms 9.176 ms 9.530 ms
% traceroute sonic.net
traceroute to sonic.net (209.204.190.64), 64 hops max, 40 byte packets
1 *****sl.static.sonic.net (64.142.71.1) 14.153 ms 13.815 ms 14.423 ms
2 1.fe-1-1-0.gw4.200p-sf.sonic.net (64.142.32.8) 15.142 ms 14.343
ms 15.461 ms
Miles Nordin wrote:
>>>>>>"adal" == Anthony de Almeida Lopes <guerrilla_thought@gmx.de> writes:
>>>>>>
>>>>>>
>
> adal> Both connections have their own gateways and their IP
> adal> addresses are on different subnets.
>
>I think that means you have to use round-robin NAT. None of the other
>multipath stuff will work for you.
>
>The neatest ISP aggregation I've heard of is some guy that colocates a
>proprietary router like Cisco and another proprietary router at the
>site with two ISP connections, then makes two gre tunnels, one over
>each ISP, and uses equal-cost multipath routing to spread packets over
>the two gre tunnels. That way, a single TCP flow can be spread over
>the two last-mile connections. I don't think that level of balancing
>is possible without using tunnels and also having a colocated router
>at which to terminate the tunnels, and also I don't think there is any
>equal-cost multipath in free unix. There is some multipath, but it is
>radix multipath based on a hash of the destination (KAME) or multipath
>that caches routes so a single destination always takes just one
>interface (Linux iproute2).
>
>